diff --git a/src/app/main.cpp b/src/app/main.cpp
index afc08fc4569acd2469d26b9cccc3ac0365f9f917..a453325a55f937af86b19abeccfc7dd22f5d81c1 100644
--- a/src/app/main.cpp
+++ b/src/app/main.cpp
@@ -317,11 +317,12 @@ int main(int argc, char **argv)
     }
     QObject::connect(&app, SIGNAL(fileOpenRequest(QString)), coreplugin->plugin(), SLOT(fileOpenRequest(QString)));
 
+    // shutdown plugin manager on the exit
+    QObject::connect(&app, SIGNAL(aboutToQuit()), &pluginManager, SLOT(shutdown()));
+
     // Do this after the event loop has started
     QTimer::singleShot(100, &pluginManager, SLOT(startTests()));
 
-    int ret = app.exec();
-    pluginManager.shutdown();
-    return ret;
+    return app.exec();
 }
 
diff --git a/src/libs/extensionsystem/pluginmanager.cpp b/src/libs/extensionsystem/pluginmanager.cpp
index 37dd4daeb9aab4dfc967d2731794543478c3fdae..82f75f3dee0ec86b58b18331a400a2f9e5bef7eb 100644
--- a/src/libs/extensionsystem/pluginmanager.cpp
+++ b/src/libs/extensionsystem/pluginmanager.cpp
@@ -262,7 +262,6 @@ void PluginManager::shutdown()
     d->shutdown();
 }
 
-
 /*!
     \fn QStringList PluginManager::pluginPaths() const
     The list of paths were the plugin manager searches for plugins.
diff --git a/src/libs/extensionsystem/pluginmanager.h b/src/libs/extensionsystem/pluginmanager.h
index d371dfe30c98fbf4d590407515c4dff6f62aa45e..480f40b4727ca08098242edb7732245e1699dc44 100644
--- a/src/libs/extensionsystem/pluginmanager.h
+++ b/src/libs/extensionsystem/pluginmanager.h
@@ -93,7 +93,6 @@ public:
     // Plugin operations
     QList<PluginSpec *> loadQueue();
     void loadPlugins();
-    void shutdown();
     QStringList pluginPaths() const;
     void setPluginPaths(const QStringList &paths);
     QList<PluginSpec *> plugins() const;
@@ -130,6 +129,7 @@ signals:
 
 public slots:
     void remoteArguments(const QString &serializedArguments);
+    void shutdown();
 
 private slots:
     void startTests();