diff --git a/src/plugins/debugger/cdb/cdbengine.cpp b/src/plugins/debugger/cdb/cdbengine.cpp
index dcc62945f2c7754690afec1dc6b491ac94166508..7f42953870812cdfb6f61d6fa97cc68568d60e11 100644
--- a/src/plugins/debugger/cdb/cdbengine.cpp
+++ b/src/plugins/debugger/cdb/cdbengine.cpp
@@ -217,6 +217,7 @@ CdbEngine::CdbEngine(const DebuggerStartParameters &startParameters) :
     DebuggerEngine(startParameters),
     m_d(new CdbEnginePrivate(this))
 {
+    setObjectName(QLatin1String("CdbEngine"));
     m_d->m_consoleStubProc.setMode(Utils::ConsoleProcess::Suspend);
     connect(&m_d->m_consoleStubProc, SIGNAL(processMessage(QString,bool)),
             this, SLOT(slotConsoleStubMessage(QString, bool)));
diff --git a/src/plugins/debugger/debuggerengine.cpp b/src/plugins/debugger/debuggerengine.cpp
index 13cd1c8cfc562cac1e37cc52cd09f0db1e9a0672..24609f446a2715fc697e63487a2dc790674e8e63 100644
--- a/src/plugins/debugger/debuggerengine.cpp
+++ b/src/plugins/debugger/debuggerengine.cpp
@@ -657,7 +657,10 @@ QAbstractItemModel *DebuggerEngine::sourceFilesModel() const
 
 QAbstractItemModel *DebuggerEngine::commandModel() const
 {
-    return d->m_commandHandler.model();
+    QAbstractItemModel *model = d->m_commandHandler.model();
+    if (model->objectName().isEmpty()) // Make debugging easier.
+        model->setObjectName(objectName() + QLatin1String("CommandModel"));
+    return model;
 }
 
 void DebuggerEngine::fetchMemory(MemoryViewAgent *, QObject *,
@@ -1097,7 +1100,6 @@ void DebuggerEngine::notifyEngineSetupOk()
     QTC_ASSERT(state() == EngineSetupRequested, qDebug() << state());
     setState(EngineSetupOk);
     QTC_ASSERT(d->m_runControl, return);
-    d->m_runControl->startSuccessful();
     showMessage(_("QUEUE: SETUP INFERIOR"));
     QTimer::singleShot(0, d, SLOT(doSetupInferior()));
 }
diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp
index a1c88ba96ea8190d00a64a7775e9adadf2c33356..eeea0e44e9fdb6e0ca7dc31851746e170293be2a 100644
--- a/src/plugins/debugger/debuggerplugin.cpp
+++ b/src/plugins/debugger/debuggerplugin.cpp
@@ -1982,24 +1982,24 @@ void DebuggerPluginPrivate::displayDebugger(ProjectExplorer::RunControl *rc)
 
 void DebuggerPluginPrivate::startDebugger(ProjectExplorer::RunControl *rc)
 {
-    //qDebug() << "START DEBUGGER 1";
     QTC_ASSERT(rc, return);
-    DebuggerRunControl *runControl = qobject_cast<DebuggerRunControl *>(rc);
-    QTC_ASSERT(runControl, return);
-    activateDebugMode();
-    connectEngine(runControl->engine());
-    ProjectExplorerPlugin::instance()->startRunControl(runControl, PE::DEBUGMODE);
-    //qDebug() << "START DEBUGGER 2";
+    ProjectExplorerPlugin::instance()->startRunControl(rc, PE::DEBUGMODE);
 }
 
 void DebuggerPluginPrivate::connectEngine(DebuggerEngine *engine, bool notify)
 {
+    const QAbstractItemModel *oldCommandModel = m_commandWindow->model();
+    if (oldCommandModel == engine->commandModel()) {
+        // qDebug("RECONNECTING ENGINE %s", qPrintable(engine->objectName()));
+        return;
+    }
+
     if (notify)
         notifyCurrentEngine(RequestActivationRole, false);
-    //if (engine == m_sessionEngine)
-    //    qDebug() << "CONNECTING DUMMY ENGINE" << engine;
-    //else
-    //    qDebug() << "CONNECTING ENGINE " << engine;
+
+    // qDebug("CONNECTING ENGINE %s (OLD ENGINE: %s)", qPrintable(engine->objectName()),
+    //       (oldCommandModel ? qPrintable(oldCommandModel->objectName()) : ""));
+
     m_breakWindow->setModel(engine->breakModel());
     m_commandWindow->setModel(engine->commandModel());
     m_localsWindow->setModel(engine->localsModel());
diff --git a/src/plugins/debugger/debuggerrunner.cpp b/src/plugins/debugger/debuggerrunner.cpp
index 663d08ee965357f82a8507b19b1a2faba3c784e6..7452fa91e21d4cbca90ad014c5f142a994a67909 100644
--- a/src/plugins/debugger/debuggerrunner.cpp
+++ b/src/plugins/debugger/debuggerrunner.cpp
@@ -189,7 +189,6 @@ DebuggerRunControl *DebuggerRunControlFactory::create(
         delete runControl;
         return 0;
     }
-    connect(runControl, SIGNAL(started()), runControl, SLOT(handleStarted()));
     connect(runControl, SIGNAL(finished()), runControl, SLOT(handleFinished()));
     return runControl;
 }
@@ -460,7 +459,6 @@ void DebuggerRunControl::start()
     QString errorMessage;
     QString settingsCategory;
     QString settingsPage;
-    QString settingsIdHint;
 
     if (!checkDebugConfiguration(sp.toolChainType,
             &errorMessage, &settingsCategory, &settingsPage)) {
@@ -471,17 +469,16 @@ void DebuggerRunControl::start()
         return;
     }
 
-    plugin()->activateDebugMode();
-    plugin()->showMessage(tr("Starting debugger for tool chain '%1'...")
-        .arg(toolChainName(sp.toolChainType)), StatusBar);
+    plugin()->activateDebugMode();    
+
+    const QString message = tr("Starting debugger '%1' for tool chain '%2'...").
+                  arg(m_engine->objectName(), toolChainName(sp.toolChainType));
+    plugin()->showMessage(message, StatusBar);
     plugin()->showMessage(DebuggerSettings::instance()->dump(), LogDebug);
 
     engine()->startDebugger(this);
-}
-
-void DebuggerRunControl::startSuccessful()
-{
     m_running = true;
+    plugin()->runControlStarted(this);
     emit started();
 }
 
@@ -492,11 +489,6 @@ void DebuggerRunControl::startFailed()
     engine()->handleStartFailed();
 }
 
-void DebuggerRunControl::handleStarted()
-{
-    plugin()->runControlStarted(this);
-}
-
 void DebuggerRunControl::handleFinished()
 {
     engine()->handleFinished();
diff --git a/src/plugins/debugger/debuggerrunner.h b/src/plugins/debugger/debuggerrunner.h
index e6dd8a354df74485993a289e63063a28d9558bc4..12a3d4d362b13ee801ce9d1a61e36019a0c6c41b 100644
--- a/src/plugins/debugger/debuggerrunner.h
+++ b/src/plugins/debugger/debuggerrunner.h
@@ -104,7 +104,6 @@ public:
     void setEnabledEngines(DebuggerEngineType enabledEngines);
 
     void startFailed();
-    void startSuccessful();
     void debuggingFinished();
     RunConfiguration *runConfiguration() const { return m_myRunConfiguration.data(); }
 
@@ -119,7 +118,6 @@ public:
                                  QString *settingsPage = 0);
 
 private slots:
-    void handleStarted();
     void handleFinished();
 
 protected:
diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp
index 7932a4611a7b94addc96434c6cd58bb48c06b227..a4ea3f156dbcad96a9d3e43585b34ed3b74b1e6b 100644
--- a/src/plugins/debugger/gdb/gdbengine.cpp
+++ b/src/plugins/debugger/gdb/gdbengine.cpp
@@ -178,6 +178,7 @@ static QByteArray parsePlainConsoleStream(const GdbResponse &response)
 GdbEngine::GdbEngine(const DebuggerStartParameters &startParameters)
   : DebuggerEngine(startParameters)
 {
+    setObjectName(QLatin1String("GdbEngine"));
     qRegisterMetaType<WatchData>("WatchData");
 
     m_commandTimer = new QTimer(this);
diff --git a/src/plugins/debugger/pdb/pdbengine.cpp b/src/plugins/debugger/pdb/pdbengine.cpp
index 2395280fa0cd2f2fed2257e45c40276edc9ea88b..24b3502842a76835e2babca7e906fca2fa3fb972 100644
--- a/src/plugins/debugger/pdb/pdbengine.cpp
+++ b/src/plugins/debugger/pdb/pdbengine.cpp
@@ -87,7 +87,9 @@ namespace Internal {
 
 PdbEngine::PdbEngine(const DebuggerStartParameters &startParameters)
     : DebuggerEngine(startParameters)
-{}
+{
+    setObjectName(QLatin1String("PdbEngine"));
+}
 
 PdbEngine::~PdbEngine()
 {}
diff --git a/src/plugins/debugger/qml/qmlengine.cpp b/src/plugins/debugger/qml/qmlengine.cpp
index 063dd97c188b37cb54fd582745cb1da9b2845170..7d4177b132c19f6b7670fd44dc8b9c6101f8001a 100644
--- a/src/plugins/debugger/qml/qmlengine.cpp
+++ b/src/plugins/debugger/qml/qmlengine.cpp
@@ -106,7 +106,7 @@ QmlEngine::QmlEngine(const DebuggerStartParameters &startParameters)
     , m_adapter(new QmlAdapter(this))
     , m_addedAdapterToObjectPool(false)
 {
-
+    setObjectName(QLatin1String("QmlEngine"));
 }
 
 QmlEngine::~QmlEngine()
diff --git a/src/plugins/debugger/script/scriptengine.cpp b/src/plugins/debugger/script/scriptengine.cpp
index 6301a8302df0efed9005f2220f26fec89dc564ac..ef3a84460c53f414814ed0134a6053259518e913 100644
--- a/src/plugins/debugger/script/scriptengine.cpp
+++ b/src/plugins/debugger/script/scriptengine.cpp
@@ -204,6 +204,7 @@ void ScriptAgent::scriptUnload(qint64 scriptId)
 ScriptEngine::ScriptEngine(const DebuggerStartParameters &startParameters)
     : DebuggerEngine(startParameters)
 {
+    setObjectName(QLatin1String("ScriptEngine"));
 }
 
 ScriptEngine::~ScriptEngine()
diff --git a/src/plugins/debugger/sessionengine.cpp b/src/plugins/debugger/sessionengine.cpp
index be9fc6d3086bf3329fb59a7f730e7048aa80e125..9914ff33ed87c3dc15171573c7d1974c888fab0a 100644
--- a/src/plugins/debugger/sessionengine.cpp
+++ b/src/plugins/debugger/sessionengine.cpp
@@ -31,6 +31,10 @@
 #include "breakhandler.h"
 #include "watchhandler.h"
 
+#include <utils/qtcassert.h>
+
+#include <QtCore/QDebug>
+
 namespace Debugger {
 namespace Internal {
 
@@ -40,6 +44,12 @@ namespace Internal {
 SessionEngine::SessionEngine()
     : DebuggerEngine(DebuggerStartParameters())
 {
+    setObjectName(QLatin1String("SessionEngine"));
+}
+
+void SessionEngine::executeDebuggerCommand(const QString &command)
+{
+    QTC_ASSERT(false, qDebug() << command)
 }
 
 void SessionEngine::loadSessionData()
diff --git a/src/plugins/debugger/sessionengine.h b/src/plugins/debugger/sessionengine.h
index 95edc7981894f3656531128be8f78499ffb51b1a..9bdc833bc1dc4bed0bb6699a179603b874717d9c 100644
--- a/src/plugins/debugger/sessionengine.h
+++ b/src/plugins/debugger/sessionengine.h
@@ -45,13 +45,14 @@ class SessionEngine : public DebuggerEngine
 public:
     SessionEngine();
 
-    void setupEngine() {}
-    void setupInferior() {}
-    void runEngine() {}
-    void shutdownEngine() {}
-    void shutdownInferior() {}
+    virtual void setupEngine() {}
+    virtual void setupInferior() {}
+    virtual void runEngine() {}
+    virtual void shutdownEngine() {}
+    virtual void shutdownInferior() {}
+    virtual void executeDebuggerCommand(const QString &command);
 
-    bool isSessionEngine() const { return true; }
+    virtual bool isSessionEngine() const { return true; }
 
     void loadSessionData();
     void saveSessionData();
diff --git a/src/plugins/debugger/tcf/tcfengine.cpp b/src/plugins/debugger/tcf/tcfengine.cpp
index f534d000fdd813e242948a20817878e855916382..88a2d33bbb1552b8981c058b1ff330f7318dbc7b 100644
--- a/src/plugins/debugger/tcf/tcfengine.cpp
+++ b/src/plugins/debugger/tcf/tcfengine.cpp
@@ -107,6 +107,7 @@ QString TcfEngine::TcfCommand::toString() const
 TcfEngine::TcfEngine(const DebuggerStartParameters &startParameters)
     : DebuggerEngine(startParameters)
 {
+    setObjectName(QLatin1String("TcfEngine"));
     m_congestion = 0;
     m_inAir = 0;