diff --git a/src/plugins/cpptools/cppmodelmanager.cpp b/src/plugins/cpptools/cppmodelmanager.cpp
index 094c1245e3620c8be82a9d8ff57952cc81f0477c..d14753a4681e87489f6b0112927312266bfa7efe 100644
--- a/src/plugins/cpptools/cppmodelmanager.cpp
+++ b/src/plugins/cpptools/cppmodelmanager.cpp
@@ -611,8 +611,8 @@ CppModelManager::CppModelManager(QObject *parent)
     connect(session, SIGNAL(aboutToRemoveProject(ProjectExplorer::Project *)),
             this, SLOT(onAboutToRemoveProject(ProjectExplorer::Project *)));
 
-    connect(session, SIGNAL(sessionUnloaded()),
-            this, SLOT(onSessionUnloaded()));
+    connect(session, SIGNAL(aboutToUnloadSession()),
+            this, SLOT(onAboutToUnloadSession()));
 
     qRegisterMetaType<CPlusPlus::Document::Ptr>("CPlusPlus::Document::Ptr");
 
@@ -1078,7 +1078,7 @@ void CppModelManager::onAboutToRemoveProject(ProjectExplorer::Project *project)
     GC();
 }
 
-void CppModelManager::onSessionUnloaded()
+void CppModelManager::onAboutToUnloadSession()
 {
     if (m_core->progressManager()) {
         m_core->progressManager()->cancelTasks(CppTools::Constants::TASK_INDEX);
diff --git a/src/plugins/cpptools/cppmodelmanager.h b/src/plugins/cpptools/cppmodelmanager.h
index e911971773e7a941702e5f7964293ab052042051..66d77c8194de86b9c89dfd2c403bfd52d7d44fa1 100644
--- a/src/plugins/cpptools/cppmodelmanager.h
+++ b/src/plugins/cpptools/cppmodelmanager.h
@@ -118,7 +118,7 @@ private Q_SLOTS:
     // this should be executed in the GUI thread.
     void onDocumentUpdated(CPlusPlus::Document::Ptr doc);
     void onAboutToRemoveProject(ProjectExplorer::Project *project);
-    void onSessionUnloaded();
+    void onAboutToUnloadSession();
     void onProjectAdded(ProjectExplorer::Project *project);
     void postEditorUpdate();
     void updateEditorSelections();
diff --git a/src/plugins/debugger/debuggermanager.cpp b/src/plugins/debugger/debuggermanager.cpp
index 5776cfd7551aadc3eaff2b398c26f59f42e6c987..e5925f71e247d175fbdf8e4f388b8fe2868ffff5 100644
--- a/src/plugins/debugger/debuggermanager.cpp
+++ b/src/plugins/debugger/debuggermanager.cpp
@@ -1046,7 +1046,7 @@ void DebuggerManager::sessionLoaded()
     loadSessionData();
 }
 
-void DebuggerManager::sessionUnloaded()
+void DebuggerManager::aboutToUnloadSession()
 {
     cleanupViews();
     if (m_engine)
diff --git a/src/plugins/debugger/debuggermanager.h b/src/plugins/debugger/debuggermanager.h
index 2313503874df278554765076df899e79f775ebe0..72806c60db646bd8deaaebf5c21c0c288cc74958 100644
--- a/src/plugins/debugger/debuggermanager.h
+++ b/src/plugins/debugger/debuggermanager.h
@@ -311,7 +311,7 @@ public slots:
     void updateWatchData(const WatchData &data);
 
     void sessionLoaded();
-    void sessionUnloaded();
+    void aboutToUnloadSession();
     void aboutToSaveSession();
 
     void assignValueInDebugger();
diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp
index 0ea4fd850031d9475d961ba289934ed3d4d0c686..01dc96476e5270aae55341a88e7f4fa0cc2621a4 100644
--- a/src/plugins/debugger/debuggerplugin.cpp
+++ b/src/plugins/debugger/debuggerplugin.cpp
@@ -871,8 +871,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()));
+    connect(sessionManager(), SIGNAL(aboutToUnloadSession()),
+       m_manager, SLOT(aboutToUnloadSession()));
 
     // EditorManager
     QObject *editorManager = core->editorManager();
diff --git a/src/plugins/projectexplorer/session.cpp b/src/plugins/projectexplorer/session.cpp
index 09dcb6e1491efbfc1c033d1985b4fd5a3b9083f2..0759061694a9154d4f1239bf867cd75ec7cc8f32 100644
--- a/src/plugins/projectexplorer/session.cpp
+++ b/src/plugins/projectexplorer/session.cpp
@@ -399,8 +399,8 @@ SessionManager::SessionManager(QObject *parent)
 
 SessionManager::~SessionManager()
 {
+    emit aboutToUnloadSession();
     delete m_file;
-    emit sessionUnloaded();
 }
 
 
@@ -598,8 +598,8 @@ bool SessionManager::createImpl(const QString &fileName)
     }
 
     if (success) {
+        emit aboutToUnloadSession();
         delete m_file;
-        emit sessionUnloaded();
         m_file = new SessionFile;
         m_file->setFileName(fileName);
         setStartupProject(defaultStartupProject());
@@ -633,9 +633,8 @@ bool SessionManager::loadImpl(const QString &fileName)
     }
 
     if (success) {
+        emit aboutToUnloadSession();
         delete m_file;
-        m_file = 0;
-        emit sessionUnloaded();
         m_file = new SessionFile;
         if (!m_file->load(fileName)) {
             QMessageBox::warning(0, tr("Error while restoring session"),
diff --git a/src/plugins/projectexplorer/session.h b/src/plugins/projectexplorer/session.h
index 063f72f74b8ed4b53fc1348f531ea76321fe103e..654877e4da4566d893c982eba13b7639e33ae103 100644
--- a/src/plugins/projectexplorer/session.h
+++ b/src/plugins/projectexplorer/session.h
@@ -159,8 +159,8 @@ signals:
 
     void startupProjectChanged(ProjectExplorer::Project *project);
 
-    void sessionUnloaded();
     void sessionLoaded();
+    void aboutToUnloadSession();
     void aboutToSaveSession();
     void dependencyChanged(ProjectExplorer::Project *a, ProjectExplorer::Project *b);