diff --git a/src/plugins/coreplugin/mainwindow.cpp b/src/plugins/coreplugin/mainwindow.cpp
index ad10e914982b6972ada04b55ff5fbb703e0c2a91..ac9ce6d31104c2b9b3a8eca88af9d7bdaf777b5d 100644
--- a/src/plugins/coreplugin/mainwindow.cpp
+++ b/src/plugins/coreplugin/mainwindow.cpp
@@ -1386,7 +1386,7 @@ bool MainWindow::showWarningWithOptions(const QString &title,
         parent = this;
     QMessageBox msgBox(QMessageBox::Warning, title, text,
                        QMessageBox::Ok, parent);
-    if (details.isEmpty())
+    if (!details.isEmpty())
         msgBox.setDetailedText(details);
     QAbstractButton *settingsButton = 0;
     if (!settingsId.isEmpty() || !settingsCategory.isEmpty())
diff --git a/src/plugins/debugger/cdb/cdbengine.cpp b/src/plugins/debugger/cdb/cdbengine.cpp
index 771bf6f65c26a99ad32d166fbeef588f24781f37..2a8ed5ebf0390e8eae0111d9ed4b4fcdb72e44ab 100644
--- a/src/plugins/debugger/cdb/cdbengine.cpp
+++ b/src/plugins/debugger/cdb/cdbengine.cpp
@@ -337,34 +337,34 @@ bool checkCdbConfiguration(const DebuggerStartParameters &sp, ConfigurationCheck
 {
 #ifdef Q_OS_WIN
     if (!isCdbEngineEnabled()) {
-        check->errorMessage = CdbEngine::tr("The CDB debug engine required for %1 is currently disabled.").
-                              arg(sp.toolChainAbi.toString());
+        check->errorDetails.push_back(CdbEngine::tr("The CDB debug engine required for %1 is currently disabled.").
+                           arg(sp.toolChainAbi.toString()));
         check->settingsCategory = QLatin1String(Debugger::Constants::DEBUGGER_SETTINGS_CATEGORY);
         check->settingsPage = CdbOptionsPage::settingsId();
         return false;
     }
 
     if (debuggerCore()->debuggerForAbi(sp.toolChainAbi, CdbEngineType).isEmpty()) {
-        check->errorMessage = msgNoCdbBinaryForToolChain(sp.toolChainAbi);
+        check->errorDetails.push_back(msgNoCdbBinaryForToolChain(sp.toolChainAbi));
         check->settingsCategory = QLatin1String(ProjectExplorer::Constants::TOOLCHAIN_SETTINGS_CATEGORY);
         check->settingsPage = QLatin1String(ProjectExplorer::Constants::TOOLCHAIN_SETTINGS_CATEGORY);
         return false;
     }
 
     if (!validMode(sp.startMode)) {
-        check->errorMessage = CdbEngine::tr("The CDB engine does not support start mode %1.").arg(sp.startMode);
+        check->errorDetails.push_back(CdbEngine::tr("The CDB engine does not support start mode %1.").arg(sp.startMode));
         return false;
     }
 
     if (sp.toolChainAbi.binaryFormat() != Abi::PEFormat || sp.toolChainAbi.os() != Abi::WindowsOS) {
-        check->errorMessage = CdbEngine::tr("The CDB debug engine does not support the %1 ABI.").
-                                            arg(sp.toolChainAbi.toString());
+        check->errorDetails.push_back(CdbEngine::tr("The CDB debug engine does not support the %1 ABI.").
+                                      arg(sp.toolChainAbi.toString()));
         return false;
     }
     return true;
 #else
     Q_UNUSED(sp);
-    check->errorMessage = QString::fromLatin1("Unsupported debug mode");
+    check->errorDetails.push_back(QString::fromLatin1("Unsupported debug mode"));
     return false;
 #endif
 }
diff --git a/src/plugins/debugger/cdb/cdboptions.cpp b/src/plugins/debugger/cdb/cdboptions.cpp
index fe91471d998ae0994a5ee2e4e1efbea9a09b3182..4c00d042724a25adfa3253cef45c0b87675769d5 100644
--- a/src/plugins/debugger/cdb/cdboptions.cpp
+++ b/src/plugins/debugger/cdb/cdboptions.cpp
@@ -36,7 +36,6 @@
 #include <QtCore/QSettings>
 
 static const char settingsGroupC[] = "CDB2";
-static const char enabledKeyC[] = "Enabled";
 static const char symbolPathsKeyC[] = "SymbolPaths";
 static const char sourcePathsKeyC[] = "SourcePaths";
 static const char breakEventKeyC[] = "BreakEvent";
@@ -45,7 +44,7 @@ static const char additionalArgumentsKeyC[] = "AdditionalArguments";
 namespace Debugger {
 namespace Internal {
 
-CdbOptions::CdbOptions() : enabled(false)
+CdbOptions::CdbOptions()
 {
 }
 
@@ -56,7 +55,6 @@ QString CdbOptions::settingsGroup()
 
 void CdbOptions::clear()
 {
-    enabled = false;
     symbolPaths.clear();
     sourcePaths.clear();
 }
@@ -70,7 +68,6 @@ void CdbOptions::fromSettings(QSettings *s)
 {
     clear();
     const QString keyRoot = QLatin1String(settingsGroupC) + QLatin1Char('/');
-    enabled = s->value(keyRoot + QLatin1String(enabledKeyC), QVariant(false)).toBool();
     additionalArguments = s->value(keyRoot + QLatin1String(additionalArgumentsKeyC), QString()).toString();
     symbolPaths = s->value(keyRoot + QLatin1String(symbolPathsKeyC), QStringList()).toStringList();
     sourcePaths = s->value(keyRoot + QLatin1String(sourcePathsKeyC), QStringList()).toStringList();
@@ -80,7 +77,6 @@ void CdbOptions::fromSettings(QSettings *s)
 void CdbOptions::toSettings(QSettings *s) const
 {
     s->beginGroup(QLatin1String(settingsGroupC));
-    s->setValue(QLatin1String(enabledKeyC), enabled);
     s->setValue(QLatin1String(symbolPathsKeyC), symbolPaths);
     s->setValue(QLatin1String(sourcePathsKeyC), sourcePaths);
     s->setValue(QLatin1String(breakEventKeyC), breakEvents);
@@ -90,13 +86,11 @@ void CdbOptions::toSettings(QSettings *s) const
 
 bool CdbOptions::equals(const CdbOptions &rhs) const
 {
-    return enabled == rhs.enabled
-            && additionalArguments == rhs.additionalArguments
+    return additionalArguments == rhs.additionalArguments
             && symbolPaths == rhs.symbolPaths
             && sourcePaths == rhs.sourcePaths
             && breakEvents == rhs.breakEvents;
 }
 
-
 } // namespace Internal
 } // namespace Debugger
diff --git a/src/plugins/debugger/cdb/cdboptions.h b/src/plugins/debugger/cdb/cdboptions.h
index 5ebd85fd426e65ec01aeaf7daa76e38e44c90648..8bc8bece187690b53a1721448604b99bae1bc227 100644
--- a/src/plugins/debugger/cdb/cdboptions.h
+++ b/src/plugins/debugger/cdb/cdboptions.h
@@ -48,10 +48,10 @@ struct CdbOptions
 public:
     CdbOptions();
 
-    bool isValid() const { return enabled; }
-
     void clear();
 
+    bool isValid() { return true; }
+
     void fromSettings(QSettings *s); // Writes parameters on first-time autodetect
     void toSettings(QSettings *s) const;
 
@@ -60,7 +60,6 @@ public:
     static QString settingsGroup();
     static QStringList oldEngineSymbolPaths(const QSettings *s);
 
-    bool enabled;
     QString additionalArguments;
     QStringList symbolPaths;
     QStringList sourcePaths;
diff --git a/src/plugins/debugger/cdb/cdboptionspage.cpp b/src/plugins/debugger/cdb/cdboptionspage.cpp
index 015bae61f8f753652e7e48d1d0ea32b74ff87bce..18caf5ac8429a7ed91c9761cd544d86ed17da8f9 100644
--- a/src/plugins/debugger/cdb/cdboptionspage.cpp
+++ b/src/plugins/debugger/cdb/cdboptionspage.cpp
@@ -172,7 +172,6 @@ CdbOptionsPageWidget::CdbOptionsPageWidget(QWidget *parent) :
 void CdbOptionsPageWidget::setOptions(CdbOptions &o)
 {
     m_ui.additionalArgumentsLineEdit->setText(o.additionalArguments);
-    m_ui.cdbPathGroupBox->setChecked(o.enabled);
     setSymbolPaths(o.symbolPaths);
     m_ui.sourcePathListEditor->setPathList(o.sourcePaths);
     m_breakEventWidget->setBreakEvents(o.breakEvents);
@@ -182,7 +181,6 @@ CdbOptions CdbOptionsPageWidget::options() const
 {
     CdbOptions  rc;
     rc.additionalArguments = m_ui.additionalArgumentsLineEdit->text().trimmed();
-    rc.enabled = m_ui.cdbPathGroupBox->isChecked();
     rc.symbolPaths = symbolPaths();
     rc.sourcePaths = m_ui.sourcePathListEditor->pathList();
     rc.breakEvents = m_breakEventWidget->breakEvents();
diff --git a/src/plugins/debugger/cdb/cdboptionspagewidget.ui b/src/plugins/debugger/cdb/cdboptionspagewidget.ui
index 7a74d5ac03962e06ce915050087e2078bc537a20..c3a29266ee75cc62c693b662d9a27adfc1c4f3e6 100644
--- a/src/plugins/debugger/cdb/cdboptionspagewidget.ui
+++ b/src/plugins/debugger/cdb/cdboptionspagewidget.ui
@@ -16,10 +16,13 @@
      <item>
       <widget class="QGroupBox" name="cdbPathGroupBox">
        <property name="title">
-        <string extracomment="Placeholder">CDB</string>
+        <string extracomment="Placeholder">Startup</string>
        </property>
        <property name="checkable">
-        <bool>true</bool>
+        <bool>false</bool>
+       </property>
+       <property name="checked">
+        <bool>false</bool>
        </property>
        <layout class="QFormLayout" name="formLayout">
         <property name="fieldGrowthPolicy">
@@ -44,7 +47,7 @@
     </layout>
    </item>
    <item>
-    <widget class="QGroupBox" name="pathGroupBox">
+    <widget class="QGroupBox" name="startupGroupBox">
      <property name="title">
       <string>Debugger Paths</string>
      </property>
diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp
index 9371f8f659361d2421f34f85a5a914ca0b5d5a20..6a6968db288401ebb14a118b7d489205397a6ee0 100644
--- a/src/plugins/debugger/debuggerplugin.cpp
+++ b/src/plugins/debugger/debuggerplugin.cpp
@@ -2394,6 +2394,7 @@ void DebuggerPluginPrivate::remoteCommand(const QStringList &options,
 
 QString DebuggerPluginPrivate::debuggerForAbi(const Abi &abi, DebuggerEngineType et) const
 {
+    enum { debug = 0 };
     Abi searchAbi = abi;
     // Pick the right toolchain in case cdb/gdb were started with other toolchains.
     // Also, lldb should be preferred over gdb.
@@ -2411,8 +2412,15 @@ QString DebuggerPluginPrivate::debuggerForAbi(const Abi &abi, DebuggerEngineType
             break;
         }
     }
-    foreach (const ToolChain *tc, ToolChainManager::instance()->findToolChains(searchAbi)) {
-        const QString debugger = tc->debuggerCommand();
+    if (debug)
+        qDebug() << "debuggerForAbi" << abi.toString() << searchAbi.toString() << et;
+
+    const QList<ToolChain *> toolchains = ToolChainManager::instance()->findToolChains(searchAbi);
+    // Find manually configured ones first
+    for (int i = toolchains.size() - 1; i >= 0; i--) {
+        const QString debugger = toolchains.at(i)->debuggerCommand();
+        if (debug)
+            qDebug() << i << toolchains.at(i)->displayName() << debugger;
         if (!debugger.isEmpty())
             return debugger;
     }
diff --git a/src/plugins/debugger/debuggerrunner.cpp b/src/plugins/debugger/debuggerrunner.cpp
index 27919378834500da80b18284a27781f4b4ef050d..9eb243c4a0d567106846cc55850bcd03a1194f2c 100644
--- a/src/plugins/debugger/debuggerrunner.cpp
+++ b/src/plugins/debugger/debuggerrunner.cpp
@@ -65,11 +65,14 @@
 #include <coreplugin/icore.h>
 
 #include <QtCore/QDir>
+#include <QtCore/QDebug>
 #include <QtGui/QMessageBox>
 
 using namespace ProjectExplorer;
 using namespace Debugger::Internal;
 
+enum { debug = 0 };
+
 namespace Debugger {
 namespace Internal {
 
@@ -118,6 +121,17 @@ static const char *engineTypeName(DebuggerEngineType et)
     return "No engine";
 }
 
+static inline QString engineTypeNames(const QList<DebuggerEngineType> &l)
+{
+    QString rc;
+    foreach (DebuggerEngineType et, l) {
+        if (!rc.isEmpty())
+            rc.append(QLatin1Char(','));
+        rc += QLatin1String(engineTypeName(et));
+    }
+    return rc;
+}
+
 static QString msgEngineNotAvailable(const char *engine)
 {
     return DebuggerPlugin::tr("The application requires the debugger engine '%1', "
@@ -479,7 +493,7 @@ static inline bool engineConfigurationCheck(const DebuggerStartParameters &sp,
         return checkCdbConfiguration(sp, check);
     case Debugger::GdbEngineType:
         if (debuggerCore()->debuggerForAbi(sp.toolChainAbi, et).isEmpty()) {
-            check->errorMessage = msgNoBinaryForToolChain(sp.toolChainAbi, et);
+            check->errorDetails.push_back(msgNoBinaryForToolChain(sp.toolChainAbi, et));
             check->settingsCategory = QLatin1String(ProjectExplorer::Constants::TOOLCHAIN_SETTINGS_CATEGORY);
             check->settingsPage = QLatin1String(ProjectExplorer::Constants::TOOLCHAIN_SETTINGS_CATEGORY);
             return false;
@@ -498,7 +512,12 @@ ConfigurationCheck::ConfigurationCheck() :
 
 ConfigurationCheck::operator bool() const
 {
-    return errorMessage.isEmpty() &&  masterSlaveEngineTypes.first != NoEngineType;
+    return errorMessage.isEmpty() &&  errorDetails.isEmpty() && masterSlaveEngineTypes.first != NoEngineType;
+}
+
+QString ConfigurationCheck::errorDetailsString() const
+{
+    return errorDetails.join(QLatin1String("\n\n"));
 }
 
 /*!
@@ -516,6 +535,10 @@ DEBUGGER_EXPORT ConfigurationCheck checkDebugConfiguration(const DebuggerStartPa
     const unsigned activeLangs = debuggerCore()->activeLanguages();
     const bool qmlLanguage = activeLangs & QmlLanguage;
     const bool cppLanguage = activeLangs & CppLanguage;
+    if (debug)
+        qDebug().nospace() << "checkDebugConfiguration " << sp.toolChainAbi.toString()
+                           << " Start mode=" << sp.startMode << " Executable=" << sp.executable
+                           << " Debugger command=" << sp.debuggerCommand;
     // Get all applicable types.
     QList<DebuggerEngineType> requiredTypes;
     if (qmlLanguage && !cppLanguage) {
@@ -527,6 +550,8 @@ DEBUGGER_EXPORT ConfigurationCheck checkDebugConfiguration(const DebuggerStartPa
         result.errorMessage = DebuggerPlugin::tr("Internal error: Unable to determine debugger engine type for this configuration");
         return result;
     }
+    if (debug)
+        qDebug() << " Required: " << engineTypeNames(requiredTypes);
     // Filter out disables types, command line + current settings.
     unsigned cmdLineEnabledEngines = debuggerCore()->enabledEngines();
 #ifdef CDB_ENABLED
@@ -548,12 +573,15 @@ DEBUGGER_EXPORT ConfigurationCheck checkDebugConfiguration(const DebuggerStartPa
                 arg(QLatin1String(engineTypeName(usableTypes.front())));
         return result;
     }
+    if (debug)
+        qDebug() << " Usable engines: " << engineTypeNames(usableTypes);
     // Configuration check: Strip off non-configured engines.
     while (!usableTypes.isEmpty() && !engineConfigurationCheck(sp, usableTypes.front(), &result))
         usableTypes.pop_front();
+    if (debug)
+        qDebug() << "Configured engines: " << engineTypeNames(usableTypes);
     if (usableTypes.isEmpty()) {
-        result.errorMessage = DebuggerPlugin::tr("The debugger engine required for this configuration is not correctly configured:\n%1")
-                .arg(result.errorMessage);
+        result.errorMessage = DebuggerPlugin::tr("The debugger engine required for this configuration is not correctly configured.");
         return result;
     }
     // Anything left: Happy.
@@ -563,6 +591,8 @@ DEBUGGER_EXPORT ConfigurationCheck checkDebugConfiguration(const DebuggerStartPa
     } else {
         result.masterSlaveEngineTypes.first = usableTypes.front();
     }
+    if (debug)
+        qDebug() << engineTypeName(result.masterSlaveEngineTypes.first) << engineTypeName(result.masterSlaveEngineTypes.second);
     return result;
 }
 
@@ -690,7 +720,7 @@ DebuggerRunControl *DebuggerRunControlFactory::create
     if (!check) {
         //appendMessage(errorMessage, true);
         Core::ICore::instance()->showWarningWithOptions(DebuggerRunControl::tr("Debugger"),
-            check.errorMessage, QString(), check.settingsCategory, check.settingsPage);
+            check.errorMessage, check.errorDetailsString(), check.settingsCategory, check.settingsPage);
         return 0;
     }
 
diff --git a/src/plugins/debugger/debuggerrunner.h b/src/plugins/debugger/debuggerrunner.h
index 0a864a1ad67a720eeaf91bd013efbf968f91fe2a..70991889ff7f32a437811489bc0d7cadee29a84f 100644
--- a/src/plugins/debugger/debuggerrunner.h
+++ b/src/plugins/debugger/debuggerrunner.h
@@ -42,6 +42,7 @@
 
 #include <QtCore/QScopedPointer>
 #include <QtCore/QPair>
+#include <QtCore/QStringList>
 
 namespace Utils {
 class Environment;
@@ -63,8 +64,10 @@ class DEBUGGER_EXPORT ConfigurationCheck
 public:
     ConfigurationCheck();
     operator bool() const;
+    QString errorDetailsString() const;
 
     QString errorMessage;
+    QStringList errorDetails;
     QString settingsCategory;
     QString settingsPage;
     QPair<DebuggerEngineType, DebuggerEngineType> masterSlaveEngineTypes;
diff --git a/src/plugins/debugger/debuggertoolchaincombobox.cpp b/src/plugins/debugger/debuggertoolchaincombobox.cpp
index 1f2acfe370db50fe4430922b53d32c43c263a712..b11125d1a078c7ed74d6f40f597406db581839a2 100644
--- a/src/plugins/debugger/debuggertoolchaincombobox.cpp
+++ b/src/plugins/debugger/debuggertoolchaincombobox.cpp
@@ -38,6 +38,8 @@
 
 #include <QtCore/QFileInfo>
 
+#include <QtGui/QtEvents>
+
 Q_DECLARE_METATYPE(ProjectExplorer::Abi)
 
 namespace Debugger {
@@ -86,5 +88,14 @@ ProjectExplorer::Abi DebuggerToolChainComboBox::abiAt(int index) const
                         ProjectExplorer::Abi();
 }
 
+bool DebuggerToolChainComboBox::event(QEvent *event)
+{
+    if (event->type() == QEvent::ToolTip) {
+        const ProjectExplorer::Abi current = abi();
+        setToolTip(current.isValid() ? current.toString() : QString());
+    }
+    return QComboBox::event(event);
+}
+
 } // namespace Debugger
 } // namespace Internal
diff --git a/src/plugins/debugger/debuggertoolchaincombobox.h b/src/plugins/debugger/debuggertoolchaincombobox.h
index bf198da303938fa7f6b3ff3d446d96899ff4fbdb..f853092dec54b440b19aaebbef28ccf6b0286356 100644
--- a/src/plugins/debugger/debuggertoolchaincombobox.h
+++ b/src/plugins/debugger/debuggertoolchaincombobox.h
@@ -55,7 +55,11 @@ public:
     void setAbi(const ProjectExplorer::Abi &abi);
     ProjectExplorer::Abi abi() const;
 
+protected:
+    virtual bool event(QEvent *event);
+
 private:
+
     ProjectExplorer::Abi abiAt(int index) const;
 };
 
diff --git a/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp b/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp
index 44c7c564d246d90a124b9efb694434d3bd8d5440..4bd7ea0c60d73c6c4b3de91d4a00aaf1995bfb3b 100644
--- a/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp
+++ b/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp
@@ -530,7 +530,7 @@ ProjectExplorer::RunControl* S60DeviceDebugRunControlFactory::create(ProjectExpl
     const Debugger::ConfigurationCheck check = Debugger::checkDebugConfiguration(startParameters);
     if (!check) {
         Core::ICore::instance()->showWarningWithOptions(tr("Debugger for Symbian Platform"),
-            check.errorMessage, QString(), check.settingsCategory, check.settingsPage);
+            check.errorMessage, check.errorDetailsString(), check.settingsCategory, check.settingsPage);
         return 0;
     }
     return new S60DeviceDebugRunControl(rc, startParameters, check.masterSlaveEngineTypes);