diff --git a/src/plugins/debugger/debuggerdialogs.cpp b/src/plugins/debugger/debuggerdialogs.cpp
index 3f07315ef8792876495d434931d770c9b14e41cf..f4677bbcb58e6be25f1115e57dd36df8816a3236 100644
--- a/src/plugins/debugger/debuggerdialogs.cpp
+++ b/src/plugins/debugger/debuggerdialogs.cpp
@@ -516,6 +516,8 @@ StartExternalDialog::StartExternalDialog(QWidget *parent)
     m_ui->execFile->setExpectedKind(Utils::PathChooser::File);
     m_ui->execFile->setPromptDialogTitle(tr("Select Executable"));
     m_ui->buttonBox->button(QDialogButtonBox::Ok)->setDefault(true);
+    m_ui->workingDirectory->setExpectedKind(Utils::PathChooser::Directory);
+    m_ui->workingDirectory->setPromptDialogTitle(tr("Select Working Directory"));
 
     //execLabel->setHidden(false);
     //execEdit->setHidden(false);
@@ -543,6 +545,16 @@ QString StartExternalDialog::executableFile() const
     return m_ui->execFile->path();
 }
 
+void StartExternalDialog::setWorkingDirectory(const QString &str)
+{
+    m_ui->workingDirectory->setPath(str);
+}
+
+QString StartExternalDialog::workingDirectory() const
+{
+    return m_ui->workingDirectory->path();
+}
+
 void StartExternalDialog::setExecutableArguments(const QString &str)
 {
     m_ui->argsEdit->setText(str);
diff --git a/src/plugins/debugger/debuggerdialogs.h b/src/plugins/debugger/debuggerdialogs.h
index 13ad67358f8236aa188471d32523048453458e9c..1cc868af4fe37f0ff6f7204a1c713e2a38cd1ff6 100644
--- a/src/plugins/debugger/debuggerdialogs.h
+++ b/src/plugins/debugger/debuggerdialogs.h
@@ -116,15 +116,17 @@ public:
     explicit AttachTcfDialog(QWidget *parent);
     ~AttachTcfDialog();
 
+    QString remoteChannel() const;
     void setRemoteChannel(const QString &host);
+
+    QString remoteArchitecture() const;
     void setRemoteArchitecture(const QString &arch);
     void setRemoteArchitectures(const QStringList &arches);
-    QString remoteChannel() const;
-    QString remoteArchitecture() const;
-    void setServerStartScript(const QString &scriptName);
+
     QString serverStartScript() const;
-    void setUseServerStartScript(bool on);
     bool useServerStartScript() const;
+    void setUseServerStartScript(bool on);
+    void setServerStartScript(const QString &scriptName);
 
 private slots:
     void updateState();
@@ -141,11 +143,15 @@ public:
     explicit StartExternalDialog(QWidget *parent);
     ~StartExternalDialog();
 
+    QString executableFile() const;
     void setExecutableFile(const QString &executable);
-    void setExecutableArguments(const QString &args);
 
-    QString executableFile() const;
     QString executableArguments() const;
+    void setExecutableArguments(const QString &args);
+
+    QString workingDirectory() const;
+    void setWorkingDirectory(const QString &str);
+
     bool breakAtMain() const;
 
 private:
@@ -160,21 +166,26 @@ public:
     explicit StartRemoteDialog(QWidget *parent);
     ~StartRemoteDialog();
 
-    void setRemoteChannel(const QString &host);
-    void setRemoteArchitecture(const QString &arch);
-    void setRemoteArchitectures(const QStringList &arches);
-    void setLocalExecutable(const QString &executable);
-    void setDebugger(const QString &debugger);
     QString localExecutable() const;
+    void setLocalExecutable(const QString &executable);
+
     QString remoteChannel() const;
+    void setRemoteChannel(const QString &host);
+
     QString remoteArchitecture() const;
-    void setServerStartScript(const QString &scriptName);
-    QString serverStartScript() const;
-    void setUseServerStartScript(bool on);
+    void setRemoteArchitecture(const QString &arch);
+    void setRemoteArchitectures(const QStringList &arches);
+
     bool useServerStartScript() const;
-    void setSysRoot(const QString &sysRoot);
+    void setUseServerStartScript(bool on);
+    QString serverStartScript() const;
+    void setServerStartScript(const QString &scriptName);
+
     QString sysRoot() const;
+    void setSysRoot(const QString &sysRoot);
+
     QString debugger() const;
+    void setDebugger(const QString &debugger);
 
 private slots:
     void updateState();
diff --git a/src/plugins/debugger/debuggermanager.cpp b/src/plugins/debugger/debuggermanager.cpp
index 064430b12c526b968f4f7c1b5f1336f28deb4540..39d3d30855ec551dc3f5d771f19697ff72d97ebd 100644
--- a/src/plugins/debugger/debuggermanager.cpp
+++ b/src/plugins/debugger/debuggermanager.cpp
@@ -181,7 +181,7 @@ DEBUGGER_EXPORT QDebug operator<<(QDebug str, const DebuggerStartParameters &p)
     nospace << "executable=" << p.executable << " coreFile=" << p.coreFile
             << " processArgs=" << p.processArgs.join(sep)
             << " environment=<" << p.environment.size() << " variables>"
-            << " workingDir=" << p.workingDir << " buildDir=" << p.buildDir
+            << " workingDir=" << p.workingDirectory << " buildDir=" << p.buildDirectory
             << " attachPID=" << p.attachPID << " useTerminal=" << p.useTerminal
             << " remoteChannel=" << p.remoteChannel
             << " remoteArchitecture=" << p.remoteArchitecture
@@ -2068,7 +2068,7 @@ void DebuggerManager::runTest(const QString &fileName)
 {
     d->m_startParameters->executable = fileName;
     d->m_startParameters->processArgs = QStringList() << "--run-debuggee";
-    d->m_startParameters->workingDir.clear();
+    d->m_startParameters->workingDirectory.clear();
     //startNewDebugger(StartInternal);
 }
 
diff --git a/src/plugins/debugger/debuggermanager.h b/src/plugins/debugger/debuggermanager.h
index 8b15b6487f4454c958c2341e09c897efece4ade9..5d3f03fe390c023805357139c679a4a8a284ce1a 100644
--- a/src/plugins/debugger/debuggermanager.h
+++ b/src/plugins/debugger/debuggermanager.h
@@ -111,8 +111,8 @@ public:
     QString coreFile;
     QStringList processArgs;
     QStringList environment;
-    QString workingDir;
-    QString buildDir;
+    QString workingDirectory;
+    QString buildDirectory;
     qint64 attachPID;
     bool useTerminal;
     QString crashParameter; // for AttachCrashedExternal
diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp
index 0418a1830e1993686fe36520cf4897f2e78f473f..1dc865804a03700ed705bd4d76b1beb7d39c854d 100644
--- a/src/plugins/debugger/debuggerplugin.cpp
+++ b/src/plugins/debugger/debuggerplugin.cpp
@@ -1401,6 +1401,8 @@ void DebuggerPlugin::startExternalApplication()
             configValue(_("LastExternalExecutableFile")).toString());
     dlg.setExecutableArguments(
             configValue(_("LastExternalExecutableArguments")).toString());
+    dlg.setWorkingDirectory(
+            configValue(_("LastExternalWorkingDirectory")).toString());
     if (dlg.exec() != QDialog::Accepted)
         return;
 
@@ -1408,8 +1410,11 @@ void DebuggerPlugin::startExternalApplication()
                    dlg.executableFile());
     setConfigValue(_("LastExternalExecutableArguments"),
                    dlg.executableArguments());
+    setConfigValue(_("LastExternalWorkingDirectory"),
+                   dlg.workingDirectory());
     sp->executable = dlg.executableFile();
     sp->startMode = StartExternal;
+    sp->workingDirectory = dlg.workingDirectory();
     if (!dlg.executableArguments().isEmpty())
         sp->processArgs = dlg.executableArguments().split(QLatin1Char(' '));
 
diff --git a/src/plugins/debugger/debuggerrunner.cpp b/src/plugins/debugger/debuggerrunner.cpp
index d5739c46b6f36d3ea5a6eb691af012e7bd0da607..450c6ce649250bb53b97a85aca4c79df00fd5fb0 100644
--- a/src/plugins/debugger/debuggerrunner.cpp
+++ b/src/plugins/debugger/debuggerrunner.cpp
@@ -118,7 +118,7 @@ DebuggerRunControl::DebuggerRunControl(DebuggerManager *manager,
     m_startParameters->startMode = StartInternal;
     m_startParameters->executable = runConfiguration->executable();
     m_startParameters->environment = runConfiguration->environment().toStringList();
-    m_startParameters->workingDir = runConfiguration->workingDirectory();
+    m_startParameters->workingDirectory = runConfiguration->workingDirectory();
     m_startParameters->processArgs = runConfiguration->commandLineArguments();
 
     switch (m_startParameters->toolChainType) {
@@ -130,7 +130,7 @@ DebuggerRunControl::DebuggerRunControl(DebuggerManager *manager,
         break;
     }
     if (runConfiguration->target()->project()) {
-        m_startParameters->buildDir =
+        m_startParameters->buildDirectory =
             runConfiguration->target()->activeBuildConfiguration()->buildDirectory();
     }
     m_startParameters->useTerminal =
diff --git a/src/plugins/debugger/gdb/localplaingdbadapter.cpp b/src/plugins/debugger/gdb/localplaingdbadapter.cpp
index 7c370cb9467e0cfd3986b12ae49d20db414d890b..a5f168f081a1c76588af74fbd81f16b943b6d9ab 100644
--- a/src/plugins/debugger/gdb/localplaingdbadapter.cpp
+++ b/src/plugins/debugger/gdb/localplaingdbadapter.cpp
@@ -79,8 +79,8 @@ void LocalPlainGdbAdapter::startAdapter()
     }
     gdbArgs.append(_("--tty=") + m_outputCollector.serverName());
 
-    if (!startParameters().workingDir.isEmpty())
-        m_gdbProc.setWorkingDirectory(startParameters().workingDir);
+    if (!startParameters().workingDirectory.isEmpty())
+        m_gdbProc.setWorkingDirectory(startParameters().workingDirectory);
     if (!startParameters().environment.isEmpty())
         m_gdbProc.setEnvironment(startParameters().environment);
 
diff --git a/src/plugins/debugger/gdb/remoteplaingdbadapter.cpp b/src/plugins/debugger/gdb/remoteplaingdbadapter.cpp
index 4bddbbe5786d6de779dd8253eb19289c18d57dd4..77443ad75382b167c11f5df5289cfd4b62dd451a 100644
--- a/src/plugins/debugger/gdb/remoteplaingdbadapter.cpp
+++ b/src/plugins/debugger/gdb/remoteplaingdbadapter.cpp
@@ -50,8 +50,8 @@ void RemotePlainGdbAdapter::startAdapter()
     setState(AdapterStarting);
     debugMessage(QLatin1String("TRYING TO START ADAPTER"));
 
-    if (!startParameters().workingDir.isEmpty())
-        m_gdbProc.setWorkingDirectory(startParameters().workingDir);
+    if (!startParameters().workingDirectory.isEmpty())
+        m_gdbProc.setWorkingDirectory(startParameters().workingDirectory);
     if (!startParameters().environment.isEmpty())
         m_gdbProc.setEnvironment(startParameters().environment);
 
diff --git a/src/plugins/debugger/gdb/termgdbadapter.cpp b/src/plugins/debugger/gdb/termgdbadapter.cpp
index ddb95c5559e41f8f6d1fb14a25d6097a3d8a5d8f..489a5791d8e7d6618a118527ac49f54f2c55fb93 100644
--- a/src/plugins/debugger/gdb/termgdbadapter.cpp
+++ b/src/plugins/debugger/gdb/termgdbadapter.cpp
@@ -91,7 +91,7 @@ void TermGdbAdapter::startAdapter()
 //    m_stubProc.stop();
 //    m_stubProc.blockSignals(false);
 
-    m_stubProc.setWorkingDirectory(startParameters().workingDir);
+    m_stubProc.setWorkingDirectory(startParameters().workingDirectory);
     // Set environment + dumper preload.
     QStringList environment = startParameters().environment;
     m_stubProc.setEnvironment(environment);
diff --git a/src/plugins/debugger/startexternaldialog.ui b/src/plugins/debugger/startexternaldialog.ui
index 90ed85ac592adeccdd88461465e950874682ec1e..c3408136a4bedf4fe11fb3aa7ecc5fa753fe0711 100644
--- a/src/plugins/debugger/startexternaldialog.ui
+++ b/src/plugins/debugger/startexternaldialog.ui
@@ -48,6 +48,9 @@
        </property>
       </widget>
      </item>
+     <item row="0" column="1">
+      <widget class="Utils::PathChooser" name="execFile" native="true"/>
+     </item>
      <item row="1" column="0">
       <widget class="QLabel" name="argLabel">
        <property name="text">
@@ -58,17 +61,24 @@
      <item row="1" column="1">
       <widget class="QLineEdit" name="argsEdit"/>
      </item>
-     <item row="0" column="1">
-      <widget class="Utils::PathChooser" name="execFile" native="true"/>
+     <item row="2" column="0">
+      <widget class="QLabel" name="workingDirectoryLabel">
+       <property name="text">
+        <string>Working directory:</string>
+       </property>
+      </widget>
      </item>
      <item row="2" column="1">
+      <widget class="Utils::PathChooser" name="workingDirectory" native="true"/>
+     </item>
+     <item row="3" column="1">
       <widget class="QCheckBox" name="checkBoxBreakAtMain">
        <property name="text">
         <string/>
        </property>
       </widget>
      </item>
-     <item row="2" column="0">
+     <item row="3" column="0">
       <widget class="QLabel" name="labelBreakAtMain">
        <property name="text">
         <string>Break at 'main':</string>