diff --git a/src/plugins/debugger/debuggerrunner.cpp b/src/plugins/debugger/debuggerrunner.cpp
index aae1346567010c5e9742a75f2629d3de69f2b8b1..db59fd1b15062f4cd392dfe4ce280ef0f855b67e 100644
--- a/src/plugins/debugger/debuggerrunner.cpp
+++ b/src/plugins/debugger/debuggerrunner.cpp
@@ -717,7 +717,6 @@ static DebuggerStartParameters localStartParameters(RunConfiguration *runConfigu
             qobject_cast<LocalApplicationRunConfiguration *>(runConfiguration);
     QTC_ASSERT(rc, return sp);
 
-    sp.startMode = StartInternal;
     sp.environment = rc->environment();
     sp.workingDirectory = rc->workingDirectory();
 
@@ -727,6 +726,9 @@ static DebuggerStartParameters localStartParameters(RunConfiguration *runConfigu
 #endif
 
     sp.executable = rc->executable();
+    if (sp.executable.isEmpty())
+        return sp;
+    sp.startMode = StartInternal;
     sp.processArgs = rc->commandLineArguments();
     sp.toolChainAbi = rc->abi();
     if (!sp.toolChainAbi.isValid()) {
@@ -784,6 +786,8 @@ RunControl *DebuggerRunControlFactory::create
 {
     QTC_ASSERT(mode == Constants::DEBUGMODE || mode == Constants::DEBUGMODE2, return 0);
     DebuggerStartParameters sp = localStartParameters(runConfiguration);
+    if (sp.startMode == NoStartMode)
+        return 0;
     if (mode == Constants::DEBUGMODE2)
         sp.breakOnMain = true;
     return create(sp, runConfiguration);
diff --git a/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp b/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp
index 8cb89f70d755664456660e5181a82b310d529d4d..8dc30c72d8a6b72e7f66ec13f8ff8dd88b214f61 100644
--- a/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp
+++ b/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp
@@ -128,9 +128,12 @@ QString CustomExecutableRunConfiguration::executable() const
 
     if (exec.isEmpty() || !QFileInfo(exec).exists()) {
         // Oh the executable doesn't exists, ask the user.
-        QWidget *confWidget = const_cast<CustomExecutableRunConfiguration *>(this)->createConfigurationWidget();
+        CustomExecutableRunConfiguration *that = const_cast<CustomExecutableRunConfiguration *>(this);
+        QWidget *confWidget = that->createConfigurationWidget();
         confWidget->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
         QDialog dialog(Core::ICore::instance()->mainWindow());
+        dialog.setWindowTitle(displayName());
+        dialog.setWindowFlags(dialog.windowFlags() & ~Qt::WindowContextHelpButtonHint);
         dialog.setLayout(new QVBoxLayout());
         QLabel *label = new QLabel(tr("Could not find the executable, please specify one."));
         label->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
@@ -146,14 +149,18 @@ QString CustomExecutableRunConfiguration::executable() const
         QString oldWorkingDirectory = m_workingDirectory;
         QString oldCmdArguments = m_cmdArguments;
 
-        if (dialog.exec()) {
+        if (dialog.exec() == QDialog::Accepted) {
             return executable();
         } else {
-            CustomExecutableRunConfiguration *that = const_cast<CustomExecutableRunConfiguration *>(this);
-            that->m_executable = oldExecutable;
-            that->m_workingDirectory = oldWorkingDirectory;
-            that->m_cmdArguments = oldCmdArguments;
-            emit that->changed();
+            // Restore values changed by the configuration widget.
+            if (that->m_executable != oldExecutable
+                || that->m_workingDirectory != oldWorkingDirectory
+                || that->m_cmdArguments != oldCmdArguments) {
+                that->m_executable = oldExecutable;
+                that->m_workingDirectory = oldWorkingDirectory;
+                that->m_cmdArguments = oldCmdArguments;
+                emit that->changed();
+            }
             return QString();
         }
     }
diff --git a/src/plugins/projectexplorer/localapplicationruncontrol.cpp b/src/plugins/projectexplorer/localapplicationruncontrol.cpp
index 85c90cdbd35cb957d5b8729140684720b0af1597..2ab3cfbd0fa8ae0738de733cddfca2dab79a851d 100644
--- a/src/plugins/projectexplorer/localapplicationruncontrol.cpp
+++ b/src/plugins/projectexplorer/localapplicationruncontrol.cpp
@@ -67,7 +67,11 @@ QString LocalApplicationRunControlFactory::displayName() const
 RunControl *LocalApplicationRunControlFactory::create(ProjectExplorer::RunConfiguration *runConfiguration, const QString &mode)
 {
     QTC_ASSERT(canRun(runConfiguration, mode), return 0);
-    return new LocalApplicationRunControl(qobject_cast<LocalApplicationRunConfiguration *>(runConfiguration), mode);
+    LocalApplicationRunConfiguration *localRunConfiguration = qobject_cast<LocalApplicationRunConfiguration *>(runConfiguration);
+    // Force the dialog about executables at this point and fail if there is none
+    if (localRunConfiguration->executable().isEmpty())
+        return 0;
+    return new LocalApplicationRunControl(localRunConfiguration, mode);
 }
 
 RunConfigWidget *LocalApplicationRunControlFactory::createConfigurationWidget(RunConfiguration *runConfiguration)