diff --git a/src/plugins/coreplugin/coreplugin.cpp b/src/plugins/coreplugin/coreplugin.cpp
index 5012493812bc32668f9c231365307bd0094e8e4c..7d912a4578f8068543321442627a12b9d5e2e6d8 100644
--- a/src/plugins/coreplugin/coreplugin.cpp
+++ b/src/plugins/coreplugin/coreplugin.cpp
@@ -96,4 +96,9 @@ void CorePlugin::remoteArgument(const QString& arg)
     }
 }
 
+void CorePlugin::shutdown()
+{
+    m_mainWindow->shutdown();
+}
+
 Q_EXPORT_PLUGIN(CorePlugin)
diff --git a/src/plugins/coreplugin/coreplugin.h b/src/plugins/coreplugin/coreplugin.h
index 1d12c14ec39cac087351485a854534d8d736caff..4580dd6fd0e084cadfc575eb21c273d5959eb2c4 100644
--- a/src/plugins/coreplugin/coreplugin.h
+++ b/src/plugins/coreplugin/coreplugin.h
@@ -47,8 +47,9 @@ public:
     CorePlugin();
     ~CorePlugin();
 
-    bool initialize(const QStringList &arguments, QString *errorMessage = 0);
-    void extensionsInitialized();
+    virtual bool initialize(const QStringList &arguments, QString *errorMessage = 0);
+    virtual void extensionsInitialized();
+    virtual void shutdown();
 
 public slots:
     void remoteArgument(const QString&);
diff --git a/src/plugins/coreplugin/mainwindow.cpp b/src/plugins/coreplugin/mainwindow.cpp
index aaec0076ae68f5f85f8da2edf1aad93316661ba0..66b84c85f92d5d095024143454be816a3c91edb0 100644
--- a/src/plugins/coreplugin/mainwindow.cpp
+++ b/src/plugins/coreplugin/mainwindow.cpp
@@ -1081,6 +1081,13 @@ void MainWindow::resetContext()
     updateContextObject(0);
 }
 
+void MainWindow::shutdown()
+{
+    disconnect(QApplication::instance(), SIGNAL(focusChanged(QWidget*,QWidget*)),
+               this, SLOT(updateFocusWidget(QWidget*,QWidget*)));
+    m_activeContext = 0;
+}
+
 static const char *settingsGroup = "MainWindow";
 static const char *geometryKey = "Geometry";
 static const char *colorKey = "Color";
diff --git a/src/plugins/coreplugin/mainwindow.h b/src/plugins/coreplugin/mainwindow.h
index 13e980d4824950a1dd72895b182128e43a9cf65c..c0aa8494a7064a7af21f0aab3aa9b414a85ea879 100644
--- a/src/plugins/coreplugin/mainwindow.h
+++ b/src/plugins/coreplugin/mainwindow.h
@@ -89,6 +89,7 @@ public:
 
     bool init(QString *errorMessage);
     void extensionsInitialized();
+    void shutdown();
 
     IContext *contextObject(QWidget *widget);
     void addContextObject(IContext *contex);