diff --git a/src/plugins/debugger/breakhandler.cpp b/src/plugins/debugger/breakhandler.cpp
index 1df3f70369222f4b584a01a2ad3ee7ba7a70c44c..e8cfac0dd7b32520ee6b43cd032e392cec6ae021 100644
--- a/src/plugins/debugger/breakhandler.cpp
+++ b/src/plugins/debugger/breakhandler.cpp
@@ -964,21 +964,18 @@ void BreakHandler::removeAllBreakpoints()
     for (int index = size(); --index >= 0;)
         removeBreakpointHelper(index);
     emit layoutChanged();
-    saveBreakpoints();
+    //saveBreakpoints();
     updateMarkers();
 }
 
+/*
 void BreakHandler::setAllPending()
 {
-    QTC_ASSERT(false, /*ABC*/ return);
-/*
-    loadBreakpoints();
     for (int index = size(); --index >= 0;)
         at(index)->pending = true;
-    saveBreakpoints();
     updateMarkers();
-*/
 }
+*/
 
 void BreakHandler::saveSessionData()
 {
@@ -1016,7 +1013,7 @@ void BreakHandler::initializeFromTemplate(BreakHandler *other)
     //qDebug() << "COPYING BREAKPOINTS INTO NEW SESSION";
     QTC_ASSERT(m_bp.isEmpty(), /**/);
     foreach (BreakpointData *data, other->m_bp)
-        m_bp.append(data->clone());
+        append(data->clone());
     updateMarkers();
 }
 
diff --git a/src/plugins/debugger/breakhandler.h b/src/plugins/debugger/breakhandler.h
index a697474e7e4a818eb04931989c34fa90ccb9c56b..2d15b488c70ede406ff5d8489ddeee9cb0389417 100644
--- a/src/plugins/debugger/breakhandler.h
+++ b/src/plugins/debugger/breakhandler.h
@@ -56,7 +56,7 @@ public:
     ~BreakHandler();
 
     void removeAllBreakpoints();
-    void setAllPending();
+    //void setAllPending();
     void loadSessionData();
     void saveSessionData();
 
diff --git a/src/plugins/debugger/debuggerengine.cpp b/src/plugins/debugger/debuggerengine.cpp
index 1f95d73c152a17aa7255998578fcf74850cd3fe9..a437340010531647765c06a4d1a996907f21c979 100644
--- a/src/plugins/debugger/debuggerengine.cpp
+++ b/src/plugins/debugger/debuggerengine.cpp
@@ -678,16 +678,23 @@ void DebuggerManager::executeJumpToLine()
 }
 */
 
-void DebuggerEngine::cleanup()
+// Called from RunControl.
+void DebuggerEngine::handleFinished()
 {
-/*
-    FIXME ABS: Still needed?
     modulesHandler()->removeAll();
-    breakHandler()->setAllPending();
+    //breakHandler()->setAllPending();
     stackHandler()->removeAll();
     threadsHandler()->removeAll();
     watchHandler()->cleanup();
-*/
+
+    DebuggerEngine *sessionTemplate = plugin()->sessionTemplate();
+    if (sessionTemplate != this) {
+        BreakHandler *handler = sessionTemplate->breakHandler();
+        qDebug() << "MOVING BREAKPOINTS TO SESSION";
+        handler->removeAllBreakpoints();
+        handler->initializeFromTemplate(breakHandler());
+    }
+    breakHandler()->removeAllBreakpoints();
 }
 
 const DebuggerStartParameters &DebuggerEngine::startParameters() const
diff --git a/src/plugins/debugger/debuggerengine.h b/src/plugins/debugger/debuggerengine.h
index cf27d8291e2aa2c99679015e6c91a84afa285383..43c7a39dce7c6840bd0161233bdfbeea0bf577f8 100644
--- a/src/plugins/debugger/debuggerengine.h
+++ b/src/plugins/debugger/debuggerengine.h
@@ -216,7 +216,7 @@ public:
     QAbstractItemModel *snapshotModel() const;
     QAbstractItemModel *sourceFilesModel() const;
 
-    void cleanup();
+    void handleFinished();
     bool debuggerActionsEnabled() const;
     static bool debuggerActionsEnabled(DebuggerState state);
     void showModuleSymbols(const QString &moduleName, const Symbols &symbols);
diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp
index 7757fd7d5f6ba6f2668314ccfce54756eda610d6..903869c6122e4eea9072e7327d61a60284d05d3a 100644
--- a/src/plugins/debugger/debuggerplugin.cpp
+++ b/src/plugins/debugger/debuggerplugin.cpp
@@ -2683,6 +2683,7 @@ void DebuggerPlugin::runControlStarted(DebuggerRunControl *runControl)
 void DebuggerPlugin::runControlFinished(DebuggerRunControl *runControl)
 {
     Q_UNUSED(runControl);
+    d->disconnectEngine();
     qDebug() << "RUNCONTROL FINISHED: " << runControl;
 }
 
diff --git a/src/plugins/debugger/debuggerrunner.cpp b/src/plugins/debugger/debuggerrunner.cpp
index a0f2c36a58f0234069a84bac853d7668022ec30d..e6d7bf36ecf19ab49de0f333e99dcfd60a43f76b 100644
--- a/src/plugins/debugger/debuggerrunner.cpp
+++ b/src/plugins/debugger/debuggerrunner.cpp
@@ -209,6 +209,15 @@ DebuggerRunControl::DebuggerRunControl(RunConfiguration *runConfiguration)
     m_enabledEngines = AllEngineTypes;
 }
 
+DebuggerRunControl::~DebuggerRunControl()
+{
+    disconnect();
+    DebuggerEngine *engine = m_engine;
+    m_engine = 0;
+    engine->disconnect();
+    delete engine;
+}
+
 static DebuggerEngineType engineForToolChain(int toolChainType)
 {
     switch (toolChainType) {
@@ -372,11 +381,6 @@ void DebuggerRunControl::createEngine(const DebuggerStartParameters &sp)
     }
 }
 
-DebuggerRunControl::~DebuggerRunControl()
-{
-    delete m_engine;
-}
-
 QString DebuggerRunControl::displayName() const
 {
     QTC_ASSERT(m_engine, return QString());
@@ -481,6 +485,7 @@ void DebuggerRunControl::handleStarted()
 
 void DebuggerRunControl::handleFinished()
 {
+    engine()->handleFinished();
     plugin()->runControlFinished(this);
 }