diff --git a/src/plugins/debugger/debuggermanager.cpp b/src/plugins/debugger/debuggermanager.cpp
index 561397ed36e47c34abc150a9f196f6f745d79710..971eb1e8d9c3fe5294602ccee2dd80ef0bf9b1ec 100644
--- a/src/plugins/debugger/debuggermanager.cpp
+++ b/src/plugins/debugger/debuggermanager.cpp
@@ -1053,6 +1053,15 @@ void DebuggerManager::sessionLoaded()
     loadSessionData();
 }
 
+void DebuggerManager::sessionUnloaded()
+{
+    cleanupViews();
+    if (m_engine)
+        m_engine->shutdown();
+    setStatus(DebuggerProcessNotReady);
+    setBusyCursor(false);
+}
+
 void DebuggerManager::aboutToSaveSession()
 {
     saveSessionData();
diff --git a/src/plugins/debugger/debuggermanager.h b/src/plugins/debugger/debuggermanager.h
index 4d9351d951d459ccd5fe0f565f4c52eb89841dc8..fb6bc9e36cfe2dee111d7df59282852dfbb7c94d 100644
--- a/src/plugins/debugger/debuggermanager.h
+++ b/src/plugins/debugger/debuggermanager.h
@@ -233,6 +233,7 @@ public slots:
     void updateWatchModel();
     
     void sessionLoaded();
+    void sessionUnloaded();
     void aboutToSaveSession();
 
     void assignValueInDebugger();
diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp
index 1046a9307bab311891471c6b6d897a4ea5c46075..2ecd00ffc2ad1a997bf7b1c1aa5608d1a9552752 100644
--- a/src/plugins/debugger/debuggerplugin.cpp
+++ b/src/plugins/debugger/debuggerplugin.cpp
@@ -752,6 +752,8 @@ bool DebuggerPlugin::initialize(const QStringList &arguments, QString *errorMess
        m_manager, SLOT(sessionLoaded()));
     connect(sessionManager(), SIGNAL(aboutToSaveSession()),
        m_manager, SLOT(aboutToSaveSession()));
+    connect(sessionManager(), SIGNAL(sessionUnloaded()),
+       m_manager, SLOT(sessionUnloaded()));
 
     // EditorManager
     QObject *editorManager = core->editorManager();
diff --git a/src/plugins/debugger/gdbengine.cpp b/src/plugins/debugger/gdbengine.cpp
index 600a399f2562e636aa912921e7ad29183b8a5f1d..17cb99081acaae01620b9ad178dbca6359bc012c 100644
--- a/src/plugins/debugger/gdbengine.cpp
+++ b/src/plugins/debugger/gdbengine.cpp
@@ -398,6 +398,10 @@ void GdbEngine::handleResponse(const QByteArray &buff)
                 // Archer has "{id="28902"}" 
             } else if (asyncClass == "thread-created") {
                 //"{id="1",group-id="28902"}" 
+            } else if (asyncClass == "thread-group-exited") {
+                // Archer has "{id="28902"}" 
+            } else if (asyncClass == "thread-exited") {
+                //"{id="1",group-id="28902"}" 
             #ifdef Q_OS_MAC
             } else if (asyncClass == "shlibs-updated") {
                 // MAC announces updated libs
diff --git a/src/plugins/debugger/registerhandler.h b/src/plugins/debugger/registerhandler.h
index 8c38c1544e7e516e631faa8eae7beee82e37e64f..57e138b2edd09d4bdde702920a9858610ad22502 100644
--- a/src/plugins/debugger/registerhandler.h
+++ b/src/plugins/debugger/registerhandler.h
@@ -54,7 +54,6 @@ class RegisterHandler : public QAbstractTableModel
 public:
     RegisterHandler(QObject *parent = 0);
 
-    void sessionClosed();
     QAbstractItemModel *model() { return this; }
 
     bool isEmpty() const; // nothing known so far?
diff --git a/src/plugins/projectexplorer/session.cpp b/src/plugins/projectexplorer/session.cpp
index 54d46e2e5bfdf9fe3ff575175455ee6677fd4905..ad09041e9cf52ff5eea8a8cd68eb26605638e535 100644
--- a/src/plugins/projectexplorer/session.cpp
+++ b/src/plugins/projectexplorer/session.cpp
@@ -996,16 +996,16 @@ void SessionManager::removeProjects(QList<Project *> remove)
 
 void SessionManager::setValue(const QString &name, const QVariant &value)
 {
-    m_file->m_values.insert(name, value);
+    if (m_file)
+        m_file->m_values.insert(name, value);
 }
 
 QVariant SessionManager::value(const QString &name)
 {
-    QMap<QString, QVariant>::const_iterator it = m_file->m_values.find(name);
-    if (it != m_file->m_values.constEnd())
-        return *it;
-    else
+    if (!m_file)
         return QVariant();
+    QMap<QString, QVariant>::const_iterator it = m_file->m_values.find(name);
+    return (it == m_file->m_values.constEnd()) ? QVariant() : *it;
 }
 
 QString SessionManager::activeSession() const