diff --git a/src/plugins/bookmarks/bookmarksplugin.cpp b/src/plugins/bookmarks/bookmarksplugin.cpp
index 2fab511ecb8062bf679adc8944072c6243e22497..15eb13a8c1aa3fd8b8759fee6a48cd95b81bd6fb 100644
--- a/src/plugins/bookmarks/bookmarksplugin.cpp
+++ b/src/plugins/bookmarks/bookmarksplugin.cpp
@@ -37,6 +37,8 @@
 #include <coreplugin/coreconstants.h>
 #include <coreplugin/uniqueidmanager.h>
 #include <coreplugin/actionmanager/actionmanager.h>
+#include <coreplugin/actionmanager/actioncontainer.h>
+#include <coreplugin/actionmanager/command.h>
 #include <extensionsystem/pluginmanager.h>
 #include <texteditor/itexteditor.h>
 #include <texteditor/texteditorconstants.h>
diff --git a/src/plugins/coreplugin/actionmanager/actioncontainer.h b/src/plugins/coreplugin/actionmanager/actioncontainer.h
index 6409a8993e3daf65d82774b9ab513a5482bc63bf..2fa268ba3f60722fcd350218cdc5fe58e7eade41 100644
--- a/src/plugins/coreplugin/actionmanager/actioncontainer.h
+++ b/src/plugins/coreplugin/actionmanager/actioncontainer.h
@@ -31,9 +31,12 @@
 #define ACTIONCONTAINER_H
 
 #include <QtCore/QObject>
-#include <QtGui/QMenu>
-#include <QtGui/QMenuBar>
-#include <QtGui/QAction>
+
+QT_BEGIN_NAMESPACE
+class QMenu;
+class QMenuBar;
+class QAction;
+QT_END_NAMESPACE
 
 namespace Core {
 
diff --git a/src/plugins/coreplugin/actionmanager/actionmanager.h b/src/plugins/coreplugin/actionmanager/actionmanager.h
index c975b367b7a30e9d8394e079a089340924403bfa..bb205e93dc7e9092133dcd442018ff93420a95ae 100644
--- a/src/plugins/coreplugin/actionmanager/actionmanager.h
+++ b/src/plugins/coreplugin/actionmanager/actionmanager.h
@@ -32,9 +32,6 @@
 
 #include "coreplugin/core_global.h"
 
-#include <coreplugin/actionmanager/actioncontainer.h>
-#include <coreplugin/actionmanager/command.h>
-
 #include <QtCore/QObject>
 #include <QtCore/QList>
 
@@ -46,6 +43,9 @@ QT_END_NAMESPACE
 
 namespace Core {
 
+class ActionContainer;
+class Command;
+
 class CORE_EXPORT ActionManager : public QObject
 {
     Q_OBJECT
diff --git a/src/plugins/coreplugin/actionmanager/commandmappings.cpp b/src/plugins/coreplugin/actionmanager/commandmappings.cpp
index 19dfa352fd67ec14ac8eaae8223c1e24573326e2..ecc677eec8e517325b0337857e695a660d8c86eb 100644
--- a/src/plugins/coreplugin/actionmanager/commandmappings.cpp
+++ b/src/plugins/coreplugin/actionmanager/commandmappings.cpp
@@ -37,12 +37,13 @@
 #include "filemanager.h"
 #include "icore.h"
 #include "uniqueidmanager.h"
-#include <utils/treewidgetcolumnstretcher.h>
 
+#include <utils/treewidgetcolumnstretcher.h>
 
 #include <QtGui/QKeyEvent>
 #include <QtGui/QShortcut>
 #include <QtGui/QHeaderView>
+#include <QtGui/QTreeWidgetItem>
 #include <QtGui/QFileDialog>
 #include <QtCore/QCoreApplication>
 #include <QtDebug>
diff --git a/src/plugins/coreplugin/actionmanager/commandmappings.h b/src/plugins/coreplugin/actionmanager/commandmappings.h
index 21ae8af9964ed231eddbebe57158ef4add569a98..a040c2f9afdb017d3dd680f8c2e9e8c18888cee0 100644
--- a/src/plugins/coreplugin/actionmanager/commandmappings.h
+++ b/src/plugins/coreplugin/actionmanager/commandmappings.h
@@ -33,11 +33,11 @@
 #include <coreplugin/dialogs/ioptionspage.h>
 
 #include <QtCore/QObject>
-#include <QtGui/QTreeWidgetItem>
 
 QT_BEGIN_NAMESPACE
 class QLineEdit;
 class QTreeWidget;
+class QTreeWidgetItem;
 class Ui_CommandMappings;
 QT_END_NAMESPACE
 
diff --git a/src/plugins/coreplugin/actionmanager/commandsfile.h b/src/plugins/coreplugin/actionmanager/commandsfile.h
index ea67e098ed0f737338b541a27f6a52e9661025f0..0be4f0d2c3befa99b9bdf1e87486dcd3b2be9ed6 100644
--- a/src/plugins/coreplugin/actionmanager/commandsfile.h
+++ b/src/plugins/coreplugin/actionmanager/commandsfile.h
@@ -33,7 +33,6 @@
 #include <QtCore/QObject>
 #include <QtCore/QString>
 #include <QtCore/QMap>
-#include <QtCore/QList>
 #include <QtGui/QKeySequence>
 
 namespace Core {
diff --git a/src/plugins/coreplugin/basefilewizard.cpp b/src/plugins/coreplugin/basefilewizard.cpp
index ba40ced4b54236623c28fd624bf37c11605b1183..54a51b53c839a54e930cec307a43a5c452aac8cf 100644
--- a/src/plugins/coreplugin/basefilewizard.cpp
+++ b/src/plugins/coreplugin/basefilewizard.cpp
@@ -51,6 +51,7 @@
 #include <QtGui/QMessageBox>
 #include <QtGui/QWizard>
 #include <QtGui/QMainWindow>
+#include <QtGui/QIcon>
 
 enum { debugWizard = 0 };
 
diff --git a/src/plugins/coreplugin/basefilewizard.h b/src/plugins/coreplugin/basefilewizard.h
index 268b54f5436de1d14b268a3f7986a51eb1ec69e6..8c88ea635053e0df75f6a9170c0b44f95ab01d26 100644
--- a/src/plugins/coreplugin/basefilewizard.h
+++ b/src/plugins/coreplugin/basefilewizard.h
@@ -34,12 +34,11 @@
 
 #include <coreplugin/dialogs/iwizard.h>
 
-#include <QtGui/QIcon>
 #include <QtCore/QSharedDataPointer>
-#include <QtCore/QMap>
 #include <QtCore/QList>
 
 QT_BEGIN_NAMESPACE
+class QIcon;
 class QWizard;
 class QWizardPage;
 class QDebug;
diff --git a/src/plugins/coreplugin/basemode.cpp b/src/plugins/coreplugin/basemode.cpp
index d59ee5c20943ce7f4d97bddcb580923b7cc26b02..87b40cc460d588e37e9df917cb502c83a0296475 100644
--- a/src/plugins/coreplugin/basemode.cpp
+++ b/src/plugins/coreplugin/basemode.cpp
@@ -32,6 +32,7 @@
 #include <extensionsystem/pluginmanager.h>
 
 #include <QtGui/QWidget>
+#include <QtGui/QIcon>
 
 using namespace Core;
 
diff --git a/src/plugins/coreplugin/basemode.h b/src/plugins/coreplugin/basemode.h
index 23f99eb697616e7fc7d2d9782165f09d55d49218..1e0fcbcc13c9f9712f75fbc0338770de017bd48b 100644
--- a/src/plugins/coreplugin/basemode.h
+++ b/src/plugins/coreplugin/basemode.h
@@ -34,9 +34,13 @@
 #include "imode.h"
 
 #include <QtCore/QObject>
-#include <QtGui/QWidget>
+
 #include <QtGui/QIcon>
 
+QT_BEGIN_NAMESPACE
+class QWidget;
+QT_END_NAMESPACE
+
 namespace Core {
 
 class CORE_EXPORT BaseMode
diff --git a/src/plugins/coreplugin/coreimpl.cpp b/src/plugins/coreplugin/coreimpl.cpp
index 64bf9b492d72de831de4c60ab002c0465addfbe2..70eef1a5602fd0effca40d9ad26c6a67309d9825 100644
--- a/src/plugins/coreplugin/coreimpl.cpp
+++ b/src/plugins/coreplugin/coreimpl.cpp
@@ -28,6 +28,7 @@
 **************************************************************************/
 
 #include "coreimpl.h"
+#include "mainwindow.h"
 
 #include <QtCore/QDir>
 #include <QtCore/QCoreApplication>
diff --git a/src/plugins/coreplugin/coreimpl.h b/src/plugins/coreplugin/coreimpl.h
index 7a2112d11760824607763ab5ebe5ddb5332ca8bd..3ae7874b537fc7f95c4d38fe3358acdd6436a6e8 100644
--- a/src/plugins/coreplugin/coreimpl.h
+++ b/src/plugins/coreplugin/coreimpl.h
@@ -31,10 +31,10 @@
 #define COREIMPL_H
 
 #include "icore.h"
-#include "mainwindow.h"
 
 namespace Core {
 namespace Internal {
+class MainWindow;
 
 class CoreImpl : public ICore
 {
diff --git a/src/plugins/coreplugin/dialogs/saveitemsdialog.h b/src/plugins/coreplugin/dialogs/saveitemsdialog.h
index 2e1c0739e25b2dc2f64d7237d303ea00828ba3a8..4cc55502b467f6e95843bc7a05a90c89db6e6bba 100644
--- a/src/plugins/coreplugin/dialogs/saveitemsdialog.h
+++ b/src/plugins/coreplugin/dialogs/saveitemsdialog.h
@@ -30,7 +30,7 @@
 #ifndef SAVEITEMSDIALOG_H
 #define SAVEITEMSDIALOG_H
 
-#include <QtCore/QMap>
+#include <QtCore/QList>
 #include <QtGui/QDialog>
 
 #include "ui_saveitemsdialog.h"
diff --git a/src/plugins/coreplugin/dialogs/settingsdialog.h b/src/plugins/coreplugin/dialogs/settingsdialog.h
index 2c7ac54817582c0fe308071795457b1630a35b1d..6def3821b56ed48031be3f07b826eee8b362c6c6 100644
--- a/src/plugins/coreplugin/dialogs/settingsdialog.h
+++ b/src/plugins/coreplugin/dialogs/settingsdialog.h
@@ -30,12 +30,12 @@
 #ifndef SETTINGSDIALOG_H
 #define SETTINGSDIALOG_H
 
+#include "coreplugin/dialogs/ioptionspage.h"
+
 #include <QtCore/QList>
 #include <QtCore/QSet>
 #include <QtGui/QDialog>
 
-#include "coreplugin/dialogs/ioptionspage.h"
-
 QT_BEGIN_NAMESPACE
 class QModelIndex;
 class QStandardItemModel;
diff --git a/src/plugins/coreplugin/dialogs/shortcutsettings.cpp b/src/plugins/coreplugin/dialogs/shortcutsettings.cpp
index a0fd5f4b071dfaf2c641d7b97e7e58eef072546d..7dc83c6b2d751cb593fd0750c3c106fef0c0d985 100644
--- a/src/plugins/coreplugin/dialogs/shortcutsettings.cpp
+++ b/src/plugins/coreplugin/dialogs/shortcutsettings.cpp
@@ -44,6 +44,9 @@
 #include <QtGui/QHeaderView>
 #include <QtGui/QFileDialog>
 #include <QtGui/QLineEdit>
+#include <QtGui/QAction>
+#include <QtGui/QKeyEvent>
+#include <QtGui/QTreeWidgetItem>
 #include <QtCore/QCoreApplication>
 #include <QtDebug>
 
diff --git a/src/plugins/coreplugin/dialogs/shortcutsettings.h b/src/plugins/coreplugin/dialogs/shortcutsettings.h
index e331fd8d285210cd336931358f5241770485a3d5..32343f10cb0fa40ff672a0d5be39467e1ef87a93 100644
--- a/src/plugins/coreplugin/dialogs/shortcutsettings.h
+++ b/src/plugins/coreplugin/dialogs/shortcutsettings.h
@@ -32,10 +32,11 @@
 
 #include <coreplugin/actionmanager/commandmappings.h>
 
-#include <QtCore/QObject>
 #include <QtGui/QKeySequence>
-#include <QtGui/QTreeWidgetItem>
-#include <QtGui/QKeyEvent>
+
+QT_BEGIN_NAMESPACE
+class QKeyEvent;
+QT_END_NAMESPACE
 
 namespace Core {
 
diff --git a/src/plugins/coreplugin/editmode.h b/src/plugins/coreplugin/editmode.h
index 158f0258b812765d16838afc92330549238247c9..82a10d1bcb2f9c1800d57f9bfa7c00accdaa5dea 100644
--- a/src/plugins/coreplugin/editmode.h
+++ b/src/plugins/coreplugin/editmode.h
@@ -32,8 +32,6 @@
 
 #include <coreplugin/imode.h>
 
-#include <QtCore/QObject>
-
 QT_BEGIN_NAMESPACE
 class QSplitter;
 class QWidget;
diff --git a/src/plugins/coreplugin/editormanager/editormanager.cpp b/src/plugins/coreplugin/editormanager/editormanager.cpp
index 8e86066c3dfc2e1f1055f427f3821ae9cf853bd6..002bdbfd07a5f81f83ab411cf065aff5d5c8de2f 100644
--- a/src/plugins/coreplugin/editormanager/editormanager.cpp
+++ b/src/plugins/coreplugin/editormanager/editormanager.cpp
@@ -45,8 +45,11 @@
 #include <coreplugin/modemanager.h>
 #include <coreplugin/uniqueidmanager.h>
 #include <coreplugin/actionmanager/actionmanager.h>
+#include <coreplugin/actionmanager/actioncontainer.h>
+#include <coreplugin/actionmanager/command.h>
 #include <coreplugin/editormanager/ieditorfactory.h>
 #include <coreplugin/editormanager/iexternaleditor.h>
+#include <coreplugin/icorelistener.h>
 #include <coreplugin/imode.h>
 #include <coreplugin/settingsdatabase.h>
 #include <coreplugin/variablemanager.h>
@@ -76,10 +79,6 @@
 
 Q_DECLARE_METATYPE(Core::IEditor*)
 
-using namespace Core;
-using namespace Core::Internal;
-using namespace Utils;
-
 enum { debugEditorManager=0 };
 
 static inline ExtensionSystem::PluginManager *pluginManager()
@@ -87,6 +86,46 @@ static inline ExtensionSystem::PluginManager *pluginManager()
     return ExtensionSystem::PluginManager::instance();
 }
 
+//===================EditorClosingCoreListener======================
+
+namespace Core {
+namespace Internal {
+
+class EditorClosingCoreListener : public ICoreListener
+{
+public:
+    EditorClosingCoreListener(EditorManager *em);
+    bool editorAboutToClose(IEditor *editor);
+    bool coreAboutToClose();
+
+private:
+    EditorManager *m_em;
+};
+
+EditorClosingCoreListener::EditorClosingCoreListener(EditorManager *em)
+        : m_em(em)
+{
+}
+
+bool EditorClosingCoreListener::editorAboutToClose(IEditor *)
+{
+    return true;
+}
+
+bool EditorClosingCoreListener::coreAboutToClose()
+{
+    // Do not ask for files to save.
+    // MainWindow::closeEvent has already done that.
+    return m_em->closeAllEditors(false);
+}
+
+} // namespace Internal
+} // namespace Core
+
+using namespace Core;
+using namespace Core::Internal;
+using namespace Utils;
+
 //===================EditorManager=====================
 
 EditorManagerPlaceHolder *EditorManagerPlaceHolder::m_current = 0;
@@ -1953,19 +1992,3 @@ void EditorManager::gotoOtherSplit()
 }
 //===================EditorClosingCoreListener======================
 
-EditorClosingCoreListener::EditorClosingCoreListener(EditorManager *em)
-        : m_em(em)
-{
-}
-
-bool EditorClosingCoreListener::editorAboutToClose(IEditor *)
-{
-    return true;
-}
-
-bool EditorClosingCoreListener::coreAboutToClose()
-{
-    // Do not ask for files to save.
-    // MainWindow::closeEvent has already done that.
-    return m_em->closeAllEditors(false);
-}
diff --git a/src/plugins/coreplugin/editormanager/editormanager.h b/src/plugins/coreplugin/editormanager/editormanager.h
index 3697dd2a507b953ab359e87cfd69e4172760a49a..f3deeb6812e381a89f9f72088f6d7444c8df7bf9 100644
--- a/src/plugins/coreplugin/editormanager/editormanager.h
+++ b/src/plugins/coreplugin/editormanager/editormanager.h
@@ -32,15 +32,12 @@
 
 #include "../core_global.h"
 
-#include <coreplugin/icorelistener.h>
-#include <coreplugin/ifile.h>
+#include <coreplugin/ifile.h> // enumerations
 
 #include <QtGui/QWidget>
 #include <QtCore/QList>
-#include <QtCore/QPointer>
 
 QT_BEGIN_NAMESPACE
-class QSettings;
 class QModelIndex;
 QT_END_NAMESPACE
 
@@ -273,27 +270,4 @@ private:
 } // namespace Core
 
 Q_DECLARE_OPERATORS_FOR_FLAGS(Core::EditorManager::OpenEditorFlags);
-
-
-//===================EditorClosingCoreListener======================
-
-namespace Core {
-namespace Internal {
-
-class EditorClosingCoreListener : public ICoreListener
-{
-    Q_OBJECT
-
-public:
-    EditorClosingCoreListener(EditorManager *em);
-    bool editorAboutToClose(IEditor *editor);
-    bool coreAboutToClose();
-
-private:
-    EditorManager *m_em;
-};
-
-} // namespace Internal
-} // namespace Core
-
 #endif // EDITORMANAGER_H
diff --git a/src/plugins/coreplugin/editormanager/editorview.cpp b/src/plugins/coreplugin/editormanager/editorview.cpp
index c346fbbc463f4b2bcf53660d750d035a0a1b2db5..24cbd1fe51b120d7a0b2178e605c7c3f842f8745 100644
--- a/src/plugins/coreplugin/editormanager/editorview.cpp
+++ b/src/plugins/coreplugin/editormanager/editorview.cpp
@@ -58,6 +58,9 @@
 #include <QtGui/QToolButton>
 #include <QtGui/QMenu>
 #include <QtGui/QClipboard>
+#include <QtGui/QAction>
+#include <QtGui/QSplitter>
+#include <QtGui/QStackedLayout>
 
 #ifdef Q_WS_MAC
 #include <qmacstyle_mac.h>
diff --git a/src/plugins/coreplugin/editormanager/editorview.h b/src/plugins/coreplugin/editormanager/editorview.h
index 2ba22fcf6f17526a24701518824f39d11717308d..8bc153d692cd4050c7d78c76b9e7fc5ec0771e2c 100644
--- a/src/plugins/coreplugin/editormanager/editorview.h
+++ b/src/plugins/coreplugin/editormanager/editorview.h
@@ -33,27 +33,24 @@
 #include <QtCore/QMap>
 #include <QtCore/QList>
 #include <QtCore/QString>
-#include <QtCore/QSettings>
 #include <QtGui/QWidget>
-#include <QtGui/QAction>
-#include <QtGui/QSplitter>
-#include <QtGui/QStackedLayout>
 #include <QtCore/QPointer>
-
-#include <coreplugin/icontext.h>
-#include <coreplugin/ifile.h>
-
-#include <QtGui/QSortFilterProxyModel>
+#include <QtCore/QVariant>
 
 QT_BEGIN_NAMESPACE
 class QComboBox;
 class QToolButton;
 class QLabel;
 class QStackedWidget;
+class QSplitter;
+class QStackedLayout;
+class QAction;
+class QFrame;
 QT_END_NAMESPACE
 
 namespace Core {
-
+class IContext;
+class IFile;
 class IEditor;
 class OpenEditorsModel;
 class EditorToolBar;
@@ -72,7 +69,7 @@ class EditorView : public QWidget
     Q_OBJECT
 
 public:
-    EditorView(QWidget *parent = 0);
+    explicit EditorView(QWidget *parent = 0);
     virtual ~EditorView();
 
     int editorCount() const;
@@ -146,8 +143,8 @@ class SplitterOrView  : public QWidget
 {
     Q_OBJECT
 public:
-    SplitterOrView(OpenEditorsModel *model); // creates a root splitter
-    SplitterOrView(Core::IEditor *editor = 0);
+    explicit SplitterOrView(OpenEditorsModel *model); // creates a root splitter
+    explicit SplitterOrView(Core::IEditor *editor = 0);
     ~SplitterOrView();
 
     void split(Qt::Orientation orientation);
@@ -187,7 +184,6 @@ protected:
     void paintEvent(QPaintEvent *);
     void mousePressEvent(QMouseEvent *e);
 
-
 private:
     void unsplitAll_helper();
     SplitterOrView *findNextView_helper(SplitterOrView *view, bool *found);
diff --git a/src/plugins/coreplugin/editormanager/openeditorsview.h b/src/plugins/coreplugin/editormanager/openeditorsview.h
index e802b26bf21dc86c944fc67065f08aa4b19eb872..91d905bcc2fa5772c146af2506fd680e22e4bcd4 100644
--- a/src/plugins/coreplugin/editormanager/openeditorsview.h
+++ b/src/plugins/coreplugin/editormanager/openeditorsview.h
@@ -32,17 +32,13 @@
 
 #include "ui_openeditorsview.h"
 
-#include <coreplugin/editormanager/ieditor.h>
 #include <coreplugin/inavigationwidgetfactory.h>
 
-#include <QtCore/QList>
-#include <QtGui/QWidget>
-#include <QtGui/QKeySequence>
-#include <QtGui/QAbstractButton>
-#include <QtGui/QTreeWidgetItem>
 #include <QtGui/QStyledItemDelegate>
 
 namespace Core {
+class IEditor;
+
 namespace Internal {
 
 class OpenEditorsDelegate : public QStyledItemDelegate
@@ -50,7 +46,7 @@ class OpenEditorsDelegate : public QStyledItemDelegate
     Q_OBJECT
 
 public:
-    OpenEditorsDelegate(QObject *parent = 0);
+    explicit OpenEditorsDelegate(QObject *parent = 0);
 
     void paint(QPainter *painter, const QStyleOptionViewItem &option,
                const QModelIndex &index) const;
@@ -58,7 +54,6 @@ public:
     mutable QModelIndex pressedIndex;
 };
 
-
 class OpenEditorsWidget : public QWidget
 {
     Q_OBJECT
diff --git a/src/plugins/coreplugin/editormanager/openeditorswindow.cpp b/src/plugins/coreplugin/editormanager/openeditorswindow.cpp
index 0a8210378c84c80d5058ea92fda2db32818b9f42..d65d4e45d1f43e5d7be49d6d68fcb64b83bcf6c9 100644
--- a/src/plugins/coreplugin/editormanager/openeditorswindow.cpp
+++ b/src/plugins/coreplugin/editormanager/openeditorswindow.cpp
@@ -31,6 +31,7 @@
 #include "openeditorsmodel.h"
 #include "editormanager.h"
 #include "editorview.h"
+#include "ifile.h"
 
 #include <utils/qtcassert.h>
 
diff --git a/src/plugins/coreplugin/fancyactionbar.h b/src/plugins/coreplugin/fancyactionbar.h
index ce646135b54afbe8935ed81e2b802021b20ebd02..013fdcf8811458c9af2b38bda5a23456ad6dd75d 100644
--- a/src/plugins/coreplugin/fancyactionbar.h
+++ b/src/plugins/coreplugin/fancyactionbar.h
@@ -30,7 +30,6 @@
 #ifndef FANCYACTIONBAR_H
 #define FANCYACTIONBAR_H
 
-#include <QtCore/QMap>
 #include <QtGui/QToolButton>
 
 QT_BEGIN_NAMESPACE
diff --git a/src/plugins/coreplugin/fancytabwidget.h b/src/plugins/coreplugin/fancytabwidget.h
index 2152f9151c6ec032b10a692933d4a74feab7f7d6..3bb5b6b128225013a10629c39ce07cf2dbf9e429 100644
--- a/src/plugins/coreplugin/fancytabwidget.h
+++ b/src/plugins/coreplugin/fancytabwidget.h
@@ -30,12 +30,12 @@
 #ifndef FANCYTABWIDGET_H
 #define FANCYTABWIDGET_H
 
-#include <QtGui/QPushButton>
-#include <QtGui/QTabBar>
-#include <QtGui/QStyleOptionTabV2>
-#include <QtCore/QTimeLine>
+#include <QtGui/QIcon>
+#include <QtGui/QWidget>
+
 #include <QtCore/QTimer>
 #include <QtCore/QPropertyAnimation>
+
 QT_BEGIN_NAMESPACE
 class QPainter;
 class QStackedLayout;
diff --git a/src/plugins/coreplugin/flowlayout.cpp b/src/plugins/coreplugin/flowlayout.cpp
index 0cb6c79fe8b4dfe936a970625ef355666bad759f..d30001923e1098dd51e384878dc51ed1113fe03c 100644
--- a/src/plugins/coreplugin/flowlayout.cpp
+++ b/src/plugins/coreplugin/flowlayout.cpp
@@ -29,6 +29,9 @@
 
 #include "flowlayout.h"
 
+#include <QRect>
+#include <QWidgetItem>
+
 using namespace Core::Internal;
 
 FlowLayout::FlowLayout(QWidget *parent, int margin, int spacing)
diff --git a/src/plugins/coreplugin/flowlayout.h b/src/plugins/coreplugin/flowlayout.h
index 50c8b60e63086392147456e20673480779379077..7164909dc546f9544631301749e3ce6343d31a80 100644
--- a/src/plugins/coreplugin/flowlayout.h
+++ b/src/plugins/coreplugin/flowlayout.h
@@ -30,9 +30,7 @@
 #ifndef FLOWLAYOUT_H
 #define FLOWLAYOUT_H
 
-#include <QLayout>
-#include <QRect>
-#include <QWidgetItem>
+#include <QtGui/QLayout>
 
 namespace Core {
 namespace Internal {
diff --git a/src/plugins/coreplugin/generalsettings.cpp b/src/plugins/coreplugin/generalsettings.cpp
index 2ca185a049a76b055e3a4a735a9a0b4980c61717..07a778139be58b4b9e4adc20646487f195324592 100644
--- a/src/plugins/coreplugin/generalsettings.cpp
+++ b/src/plugins/coreplugin/generalsettings.cpp
@@ -38,6 +38,7 @@
 #include <coreplugin/icore.h>
 
 #include <QtGui/QMainWindow>
+#include <QtGui/QMessageBox>
 
 #include <QtCore/QCoreApplication>
 #include <QtCore/QTextStream>
diff --git a/src/plugins/coreplugin/generalsettings.h b/src/plugins/coreplugin/generalsettings.h
index 47ef4d18acdcdc44bade1a1fed46550019929008..ef85249ee384a6b8097c36a0319eb458002691a8 100644
--- a/src/plugins/coreplugin/generalsettings.h
+++ b/src/plugins/coreplugin/generalsettings.h
@@ -32,7 +32,10 @@
 
 #include <coreplugin/dialogs/ioptionspage.h>
 #include <QtCore/QPointer>
-#include <QtGui/QMessageBox>
+
+QT_BEGIN_NAMESPACE
+class QMessageBox;
+QT_END_NAMESPACE
 
 namespace Core {
 namespace Internal {
diff --git a/src/plugins/coreplugin/mainwindow.cpp b/src/plugins/coreplugin/mainwindow.cpp
index a964c7299ce088d78f29de911d930c860ad0f959..6fece8bb89e9536bda96612a26caab69af2cb67d 100644
--- a/src/plugins/coreplugin/mainwindow.cpp
+++ b/src/plugins/coreplugin/mainwindow.cpp
@@ -29,6 +29,7 @@
 
 #include "mainwindow.h"
 #include "actioncontainer.h"
+#include "command.h"
 #include "actionmanager_p.h"
 #include "coreimpl.h"
 #include "coreconstants.h"
@@ -64,6 +65,7 @@
 #include "editormanager/systemeditor.h"
 
 #include <coreplugin/findplaceholder.h>
+#include <coreplugin/icorelistener.h>
 #include <coreplugin/settingsdatabase.h>
 #include <utils/pathchooser.h>
 #include <utils/stylehelper.h>
@@ -86,6 +88,7 @@
 #include <QtGui/QWizard>
 #include <QtGui/QToolButton>
 #include <QtGui/QMessageBox>
+#include <QtGui/QMenuBar>
 
 /*
 #ifdef Q_OS_UNIX
diff --git a/src/plugins/coreplugin/modemanager.cpp b/src/plugins/coreplugin/modemanager.cpp
index 37b6bfd63727f19cf6f62a6da7066b0d94bf2abb..6f390f7216e60020ae7b8a105573be0b0cc05d50 100644
--- a/src/plugins/coreplugin/modemanager.cpp
+++ b/src/plugins/coreplugin/modemanager.cpp
@@ -46,35 +46,58 @@
 
 #include <utils/qtcassert.h>
 
-#include <QtCore/QObject>
 #include <QtCore/QDebug>
+#include <QtCore/QList>
+#include <QtCore/QMap>
+#include <QtCore/QVector>
+
 #include <QtCore/QSignalMapper>
 #include <QtGui/QShortcut>
-
 #include <QtGui/QAction>
-#include <QtGui/QTabWidget>
-#include <QtGui/QVBoxLayout>
-
-using namespace Core;
-using namespace Core::Internal;
-
-ModeManager *ModeManager::m_instance = 0;
 
-ModeManager::ModeManager(Internal::MainWindow *mainWindow, FancyTabWidget *modeStack) :
+namespace Core {
+
+struct ModeManagerPrivate {
+    explicit ModeManagerPrivate(Internal::MainWindow *mainWindow,
+                                Internal::FancyTabWidget *modeStack,
+                                ModeManager *q);
+
+    static ModeManager *m_instance;
+    Internal::MainWindow *m_mainWindow;
+    Internal::FancyTabWidget *m_modeStack;
+    Internal::FancyActionBar *m_actionBar;
+    QMap<Command*, int> m_actions;
+    QVector<IMode*> m_modes;
+    QVector<Command*> m_modeShortcuts;
+    QSignalMapper *m_signalMapper;
+    QList<int> m_addedContexts;
+    int m_oldCurrent;
+};
+
+ModeManager *ModeManagerPrivate::m_instance = 0;
+
+ModeManagerPrivate::ModeManagerPrivate(Internal::MainWindow *mainWindow,
+                                       Internal::FancyTabWidget *modeStack,
+                                       ModeManager *q) :
     m_mainWindow(mainWindow),
     m_modeStack(modeStack),
-    m_signalMapper(new QSignalMapper(this)),
+    m_signalMapper(new QSignalMapper(q)),
     m_oldCurrent(-1)
+{
+}
 
+ModeManager::ModeManager(Internal::MainWindow *mainWindow,
+                         Internal::FancyTabWidget *modeStack) :
+        d(new ModeManagerPrivate(mainWindow, modeStack, this))
 {
-    m_instance = this;
+    ModeManagerPrivate::m_instance = this;
 
-    m_actionBar = new FancyActionBar(modeStack);
-    m_modeStack->addCornerWidget(m_actionBar);
+    d->m_actionBar = new Internal::FancyActionBar(modeStack);
+    d->m_modeStack->addCornerWidget(d->m_actionBar);
 
-    connect(m_modeStack, SIGNAL(currentAboutToShow(int)), SLOT(currentTabAboutToChange(int)));
-    connect(m_modeStack, SIGNAL(currentChanged(int)), SLOT(currentTabChanged(int)));
-    connect(m_signalMapper, SIGNAL(mapped(QString)), this, SLOT(activateMode(QString)));
+    connect(d->m_modeStack, SIGNAL(currentAboutToShow(int)), SLOT(currentTabAboutToChange(int)));
+    connect(d->m_modeStack, SIGNAL(currentChanged(int)), SLOT(currentTabChanged(int)));
+    connect(d->m_signalMapper, SIGNAL(mapped(QString)), this, SLOT(activateMode(QString)));
 }
 
 void ModeManager::init()
@@ -85,26 +108,32 @@ void ModeManager::init()
                      this, SLOT(aboutToRemoveObject(QObject*)));
 }
 
+ModeManager::~ModeManager()
+{
+    delete d;
+    ModeManagerPrivate::m_instance = 0;
+}
+
 void ModeManager::addWidget(QWidget *widget)
 {
     // We want the actionbar to stay on the bottom
-    // so m_modeStack->cornerWidgetCount() -1 inserts it at the position immediately above
+    // so d->m_modeStack->cornerWidgetCount() -1 inserts it at the position immediately above
     // the actionbar
-    m_modeStack->insertCornerWidget(m_modeStack->cornerWidgetCount() -1, widget);
+    d->m_modeStack->insertCornerWidget(d->m_modeStack->cornerWidgetCount() -1, widget);
 }
 
 IMode *ModeManager::currentMode() const
 {
-    int currentIndex = m_modeStack->currentIndex();
+    int currentIndex = d->m_modeStack->currentIndex();
     if (currentIndex < 0)
         return 0;
-    return m_modes.at(currentIndex);
+    return d->m_modes.at(currentIndex);
 }
 
 int ModeManager::indexOf(const QString &id) const
 {
-    for (int i = 0; i < m_modes.count(); ++i) {
-        if (m_modes.at(i)->id() == id)
+    for (int i = 0; i < d->m_modes.count(); ++i) {
+        if (d->m_modes.at(i)->id() == id)
             return i;
     }
     qDebug() << "Warning, no such mode:" << id;
@@ -115,7 +144,7 @@ IMode *ModeManager::mode(const QString &id) const
 {
     const int index = indexOf(id);
     if (index >= 0)
-        return m_modes.at(index);
+        return d->m_modes.at(index);
     return 0;
 }
 
@@ -123,7 +152,7 @@ void ModeManager::activateMode(const QString &id)
 {
     const int index = indexOf(id);
     if (index >= 0)
-        m_modeStack->setCurrentIndex(index);
+        d->m_modeStack->setCurrentIndex(index);
 }
 
 void ModeManager::objectAdded(QObject *obj)
@@ -132,29 +161,29 @@ void ModeManager::objectAdded(QObject *obj)
     if (!mode)
         return;
 
-    m_mainWindow->addContextObject(mode);
+    d->m_mainWindow->addContextObject(mode);
 
     // Count the number of modes with a higher priority
     int index = 0;
-    foreach (const IMode *m, m_modes)
+    foreach (const IMode *m, d->m_modes)
         if (m->priority() > mode->priority())
             ++index;
 
-    m_modes.insert(index, mode);
-    m_modeStack->insertTab(index, mode->widget(), mode->icon(), mode->displayName());
-    m_modeStack->setTabEnabled(index, mode->isEnabled());
+    d->m_modes.insert(index, mode);
+    d->m_modeStack->insertTab(index, mode->widget(), mode->icon(), mode->displayName());
+    d->m_modeStack->setTabEnabled(index, mode->isEnabled());
 
     // Register mode shortcut
-    ActionManager *am = m_mainWindow->actionManager();
+    ActionManager *am = d->m_mainWindow->actionManager();
     const QString shortcutId = QLatin1String("QtCreator.Mode.") + mode->id();
-    QShortcut *shortcut = new QShortcut(m_mainWindow);
+    QShortcut *shortcut = new QShortcut(d->m_mainWindow);
     shortcut->setWhatsThis(tr("Switch to %1 mode").arg(mode->displayName()));
     Command *cmd = am->registerShortcut(shortcut, shortcutId, QList<int>() << Constants::C_GLOBAL_ID);
 
-    m_modeShortcuts.insert(index, cmd);
+    d->m_modeShortcuts.insert(index, cmd);
     connect(cmd, SIGNAL(keySequenceChanged()), this, SLOT(updateModeToolTip()));
-    for (int i = 0; i < m_modeShortcuts.size(); ++i) {
-        Command *currentCmd = m_modeShortcuts.at(i);
+    for (int i = 0; i < d->m_modeShortcuts.size(); ++i) {
+        Command *currentCmd = d->m_modeShortcuts.at(i);
         bool currentlyHasDefaultSequence = (currentCmd->keySequence()
                                             == currentCmd->defaultKeySequence());
 #ifdef Q_WS_MAC
@@ -166,8 +195,8 @@ void ModeManager::objectAdded(QObject *obj)
             currentCmd->setKeySequence(currentCmd->defaultKeySequence());
     }
 
-    m_signalMapper->setMapping(shortcut, mode->id());
-    connect(shortcut, SIGNAL(activated()), m_signalMapper, SLOT(map()));
+    d->m_signalMapper->setMapping(shortcut, mode->id());
+    connect(shortcut, SIGNAL(activated()), d->m_signalMapper, SLOT(map()));
     connect(mode, SIGNAL(enabledStateChanged(bool)),
             this, SLOT(enabledStateChanged()));
 }
@@ -176,9 +205,9 @@ void ModeManager::updateModeToolTip()
 {
     Command *cmd = qobject_cast<Command *>(sender());
     if (cmd) {
-        int index = m_modeShortcuts.indexOf(cmd);
+        int index = d->m_modeShortcuts.indexOf(cmd);
         if (index != -1)
-            m_modeStack->setTabToolTip(index, cmd->stringWithAppendedShortcut(cmd->shortcut()->whatsThis()));
+            d->m_modeStack->setTabToolTip(index, cmd->stringWithAppendedShortcut(cmd->shortcut()->whatsThis()));
     }
 }
 
@@ -186,9 +215,9 @@ void ModeManager::enabledStateChanged()
 {
     IMode *mode = qobject_cast<IMode *>(sender());
     QTC_ASSERT(mode, return);
-    int index = m_modes.indexOf(mode);
+    int index = d->m_modes.indexOf(mode);
     QTC_ASSERT(index >= 0, return);
-    m_modeStack->setTabEnabled(index, mode->isEnabled());
+    d->m_modeStack->setTabEnabled(index, mode->isEnabled());
 }
 
 void ModeManager::aboutToRemoveObject(QObject *obj)
@@ -197,37 +226,37 @@ void ModeManager::aboutToRemoveObject(QObject *obj)
     if (!mode)
         return;
 
-    const int index = m_modes.indexOf(mode);
-    m_modes.remove(index);
-    m_modeShortcuts.remove(index);
-    m_modeStack->removeTab(index);
+    const int index = d->m_modes.indexOf(mode);
+    d->m_modes.remove(index);
+    d->m_modeShortcuts.remove(index);
+    d->m_modeStack->removeTab(index);
 
-    m_mainWindow->removeContextObject(mode);
+    d->m_mainWindow->removeContextObject(mode);
 }
 
 void ModeManager::addAction(Command *command, int priority)
 {
-    m_actions.insert(command, priority);
+    d->m_actions.insert(command, priority);
 
     // Count the number of commands with a higher priority
     int index = 0;
-    foreach (int p, m_actions) {
+    foreach (int p, d->m_actions) {
         if (p > priority)
             ++index;
     }
 
-    m_actionBar->insertAction(index, command->action());
+    d->m_actionBar->insertAction(index, command->action());
 }
 
 void ModeManager::addProjectSelector(QAction *action)
 {
-    m_actionBar->addProjectSelector(action);
+    d->m_actionBar->addProjectSelector(action);
 }
 
 void ModeManager::currentTabAboutToChange(int index)
 {
     if (index >= 0) {
-        IMode *mode = m_modes.at(index);
+        IMode *mode = d->m_modes.at(index);
         if (mode)
             emit currentModeAboutToChange(mode);
     }
@@ -237,22 +266,22 @@ void ModeManager::currentTabChanged(int index)
 {
     // Tab index changes to -1 when there is no tab left.
     if (index >= 0) {
-        IMode *mode = m_modes.at(index);
+        IMode *mode = d->m_modes.at(index);
 
         // FIXME: This hardcoded context update is required for the Debug and Edit modes, since
         // they use the editor widget, which is already a context widget so the main window won't
         // go further up the parent tree to find the mode context.
         ICore *core = ICore::instance();
-        foreach (const int context, m_addedContexts)
+        foreach (const int context, d->m_addedContexts)
             core->removeAdditionalContext(context);
 
-        m_addedContexts = mode->context();
-        foreach (const int context, m_addedContexts)
+        d->m_addedContexts = mode->context();
+        foreach (const int context, d->m_addedContexts)
             core->addAdditionalContext(context);
         IMode *oldMode = 0;
-        if (m_oldCurrent >= 0)
-            oldMode = m_modes.at(m_oldCurrent);
-        m_oldCurrent = index;
+        if (d->m_oldCurrent >= 0)
+            oldMode = d->m_modes.at(d->m_oldCurrent);
+        d->m_oldCurrent = index;
         emit currentModeChanged(mode, oldMode);
         core->updateContext();
     }
@@ -271,3 +300,10 @@ void ModeManager::setFocusToCurrentMode()
             widget->setFocus();
     }
 }
+
+ModeManager *ModeManager::instance()
+{
+    return ModeManagerPrivate::m_instance;
+}
+
+} // namespace Core
diff --git a/src/plugins/coreplugin/modemanager.h b/src/plugins/coreplugin/modemanager.h
index c995f16a662bd68cc488c66cb52f3edc877e0942..ea0fb71618805b9a80413db4f47ddc9053453a55 100644
--- a/src/plugins/coreplugin/modemanager.h
+++ b/src/plugins/coreplugin/modemanager.h
@@ -31,39 +31,33 @@
 #define MODEMANAGER_H
 
 #include <QtCore/QObject>
-#include <QtCore/QList>
-#include <QtCore/QMap>
-#include <QtCore/QVector>
-
 #include <coreplugin/core_global.h>
 
 QT_BEGIN_NAMESPACE
 class QAction;
-class QSignalMapper;
-class QMenu;
 QT_END_NAMESPACE
 
 namespace Core {
 
 class Command;
 class IMode;
-
 namespace Internal {
-class FancyTabWidget;
-class FancyActionBar;
-class FancyConfigButton;
-class MainWindow;
-} // namespace Internal
+    class MainWindow;
+    class FancyTabWidget;
+}
+
+struct ModeManagerPrivate;
 
 class CORE_EXPORT ModeManager : public QObject
 {
     Q_OBJECT
 
 public:
-    ModeManager(Internal::MainWindow *mainWindow, Internal::FancyTabWidget *modeStack);
+    explicit ModeManager(Internal::MainWindow *mainWindow, Internal::FancyTabWidget *modeStack);
+    virtual ~ModeManager();
 
     void init();
-    static ModeManager *instance() { return m_instance; }
+    static ModeManager *instance();
 
     IMode* currentMode() const;
     IMode* mode(const QString &id) const;
@@ -93,16 +87,7 @@ private slots:
 private:
     int indexOf(const QString &id) const;
 
-    static ModeManager *m_instance;
-    Internal::MainWindow *m_mainWindow;
-    Internal::FancyTabWidget *m_modeStack;
-    Internal::FancyActionBar *m_actionBar;
-    QMap<Command*, int> m_actions;
-    QVector<IMode*> m_modes;
-    QVector<Command*> m_modeShortcuts;
-    QSignalMapper *m_signalMapper;
-    QList<int> m_addedContexts;
-    int m_oldCurrent;
+    ModeManagerPrivate *d;
 };
 
 } // namespace Core
diff --git a/src/plugins/coreplugin/navigationwidget.cpp b/src/plugins/coreplugin/navigationwidget.cpp
index 6d9c19da1c035502712003f9b14844b6c0c2b9bf..df0bbf0b6b67be29c9d100cd6f5c1d4284796b40 100644
--- a/src/plugins/coreplugin/navigationwidget.cpp
+++ b/src/plugins/coreplugin/navigationwidget.cpp
@@ -35,6 +35,7 @@
 #include "modemanager.h"
 #include "uniqueidmanager.h"
 #include "actionmanager/actionmanager.h"
+#include "actionmanager/command.h"
 
 #include <extensionsystem/pluginmanager.h>
 
diff --git a/src/plugins/coreplugin/outputpane.cpp b/src/plugins/coreplugin/outputpane.cpp
index 0b2db2a0d77a7a0521709b6475059fbf89d3e0df..be80a2bccaaaae4c3fec24c69a236595a16f10b6 100644
--- a/src/plugins/coreplugin/outputpane.cpp
+++ b/src/plugins/coreplugin/outputpane.cpp
@@ -36,6 +36,7 @@
 
 #include <coreplugin/actionmanager/actionmanager.h>
 #include <coreplugin/actionmanager/actioncontainer.h>
+#include <coreplugin/actionmanager/command.h>
 #include <coreplugin/editormanager/editormanager.h>
 #include <coreplugin/findplaceholder.h>
 #include <coreplugin/editormanager/ieditor.h>
@@ -56,6 +57,7 @@
 #include <QtGui/QPainter>
 #include <QtGui/QToolButton>
 #include <QtGui/QStackedWidget>
+#include <QtGui/QMenu>
 
 using namespace Core;
 using namespace Core::Internal;
diff --git a/src/plugins/coreplugin/progressmanager/futureprogress.cpp b/src/plugins/coreplugin/progressmanager/futureprogress.cpp
index 11cda41f34518965c441bb64107e687c04669691..aaa56fcb0a1c739c9e0409e6d229a69eed4ef169 100644
--- a/src/plugins/coreplugin/progressmanager/futureprogress.cpp
+++ b/src/plugins/coreplugin/progressmanager/futureprogress.cpp
@@ -36,12 +36,12 @@
 #include <QtGui/QProgressBar>
 #include <QtGui/QHBoxLayout>
 #include <QtGui/QPainter>
+#include <QtGui/QMouseEvent>
 #include <QtCore/QTimer>
 #include <QtCore/QCoreApplication>
 #include <QtCore/QPropertyAnimation>
 #include <utils/stylehelper.h>
 
-
 using namespace Core;
 
 const int notificationTimeout = 8000;
diff --git a/src/plugins/coreplugin/progressmanager/progressbar.cpp b/src/plugins/coreplugin/progressmanager/progressbar.cpp
index 812f4cd13099c8c0fe18fe53546fc63812132eda..59b099d9824d337c91f39f76ebbe29a5c9e1d518 100644
--- a/src/plugins/coreplugin/progressmanager/progressbar.cpp
+++ b/src/plugins/coreplugin/progressmanager/progressbar.cpp
@@ -36,6 +36,7 @@
 #include <QtGui/QFont>
 #include <QtGui/QBrush>
 #include <QtGui/QColor>
+#include <QtGui/QMouseEvent>
 #include <QtDebug>
 
 #define PROGRESSBAR_HEIGHT 13
diff --git a/src/plugins/coreplugin/progressmanager/progressbar.h b/src/plugins/coreplugin/progressmanager/progressbar.h
index 4b59e018747dc8c4d71b305c18c5fb17d7c782c9..a62e5b1c0e2c6dda6254574a002c46fbd4eab2a4 100644
--- a/src/plugins/coreplugin/progressmanager/progressbar.h
+++ b/src/plugins/coreplugin/progressmanager/progressbar.h
@@ -32,8 +32,6 @@
 
 #include <QtCore/QString>
 #include <QtGui/QWidget>
-#include <QtGui/QProgressBar>
-#include <QtGui/QMouseEvent>
 
 class ProgressBar : public QWidget
 {
@@ -42,7 +40,7 @@ class ProgressBar : public QWidget
     Q_PROPERTY(float fader READ fader WRITE setFader)
 
 public:
-    ProgressBar(QWidget *parent = 0);
+    explicit ProgressBar(QWidget *parent = 0);
     ~ProgressBar();
 
     QString title() const;
diff --git a/src/plugins/coreplugin/progressmanager/progressmanager.h b/src/plugins/coreplugin/progressmanager/progressmanager.h
index 6364e250330f53ebf007b2bc99e9ffa44b7e4b46..312e85ccadfb5a4fcfba00ffd17e6513a993d490 100644
--- a/src/plugins/coreplugin/progressmanager/progressmanager.h
+++ b/src/plugins/coreplugin/progressmanager/progressmanager.h
@@ -31,12 +31,12 @@
 #define PROGRESSMANAGER_H
 
 #include <coreplugin/core_global.h>
-#include <coreplugin/progressmanager/futureprogress.h>
 
 #include <QtCore/QObject>
 #include <QtCore/QFuture>
 
 namespace Core {
+class FutureProgress;
 
 class CORE_EXPORT ProgressManager : public QObject
 {
diff --git a/src/plugins/coreplugin/progressmanager/progressview.cpp b/src/plugins/coreplugin/progressmanager/progressview.cpp
index 36e55f80673bd3e3b9c853c487904d8b49aa9816..35d3032860a865014690f8ff4fd8a2ae56c45604 100644
--- a/src/plugins/coreplugin/progressmanager/progressview.cpp
+++ b/src/plugins/coreplugin/progressmanager/progressview.cpp
@@ -33,6 +33,7 @@
 #include <utils/qtcassert.h>
 
 #include <QtGui/QHBoxLayout>
+#include <QtGui/QVBoxLayout>
 
 using namespace Core;
 using namespace Core::Internal;
diff --git a/src/plugins/coreplugin/progressmanager/progressview.h b/src/plugins/coreplugin/progressmanager/progressview.h
index bc589f671158881cc29c21dc350b2f87bc306287..3742ad244b19ceba8da46e52da3fb2229b248557 100644
--- a/src/plugins/coreplugin/progressmanager/progressview.h
+++ b/src/plugins/coreplugin/progressmanager/progressview.h
@@ -34,8 +34,10 @@
 
 #include <QtCore/QFuture>
 #include <QtGui/QWidget>
-#include <QtGui/QIcon>
-#include <QtGui/QVBoxLayout>
+
+QT_BEGIN_NAMESPACE
+class QVBoxLayout;
+QT_END_NAMESPACE
 
 namespace Core {
 
diff --git a/src/plugins/coreplugin/sidebar.cpp b/src/plugins/coreplugin/sidebar.cpp
index 2472edaad35f37bf2a1514c45b2ffa2b65ac54ae..c4d5e16e9e64ad0dba7d3579779331bb700f05a7 100644
--- a/src/plugins/coreplugin/sidebar.cpp
+++ b/src/plugins/coreplugin/sidebar.cpp
@@ -32,6 +32,7 @@
 #include "modemanager.h"
 
 #include "actionmanager/actionmanager.h"
+#include "actionmanager/command.h"
 
 #include <QtCore/QDebug>
 #include <QtCore/QEvent>
diff --git a/src/plugins/cpaster/cpasterplugin.cpp b/src/plugins/cpaster/cpasterplugin.cpp
index f03162ae9177ee5459f8bbb7917eeecfdaccf707..4bc7c500ccdad4c1730203be7da1312c2311f9be 100644
--- a/src/plugins/cpaster/cpasterplugin.cpp
+++ b/src/plugins/cpaster/cpasterplugin.cpp
@@ -38,6 +38,8 @@
 #include "pastebindotcaprotocol.h"
 
 #include <coreplugin/actionmanager/actionmanager.h>
+#include <coreplugin/actionmanager/actioncontainer.h>
+#include <coreplugin/actionmanager/command.h>
 #include <coreplugin/coreconstants.h>
 #include <coreplugin/editormanager/editormanager.h>
 #include <coreplugin/filemanager.h>
diff --git a/src/plugins/cppeditor/cppeditor.cpp b/src/plugins/cppeditor/cppeditor.cpp
index bd81f847dda9174d36b2b579e0bd4acbf5c53084..0074c8f5588d65ce893d1afba8ba031c3506ce30 100644
--- a/src/plugins/cppeditor/cppeditor.cpp
+++ b/src/plugins/cppeditor/cppeditor.cpp
@@ -63,6 +63,7 @@
 #include <coreplugin/icore.h>
 #include <coreplugin/uniqueidmanager.h>
 #include <coreplugin/actionmanager/actionmanager.h>
+#include <coreplugin/actionmanager/actioncontainer.h>
 #include <coreplugin/editormanager/ieditor.h>
 #include <coreplugin/editormanager/editormanager.h>
 #include <coreplugin/mimedatabase.h>
diff --git a/src/plugins/cppeditor/cppplugin.cpp b/src/plugins/cppeditor/cppplugin.cpp
index 9f98a7067367ed6c44a38cd05b3bf0237acdd026..026f3df670b5539bb408ce4a25b6cd89f34f8ab4 100644
--- a/src/plugins/cppeditor/cppplugin.cpp
+++ b/src/plugins/cppeditor/cppplugin.cpp
@@ -42,6 +42,7 @@
 #include <coreplugin/uniqueidmanager.h>
 #include <coreplugin/fileiconprovider.h>
 #include <coreplugin/actionmanager/actionmanager.h>
+#include <coreplugin/actionmanager/actioncontainer.h>
 #include <coreplugin/actionmanager/command.h>
 #include <coreplugin/editormanager/editormanager.h>
 #include <coreplugin/progressmanager/progressmanager.h>
diff --git a/src/plugins/cpptools/cppfindreferences.cpp b/src/plugins/cpptools/cppfindreferences.cpp
index 102f3ef5c3ea43c817b6530dd3188ebf79bbb6b4..6a6a048da7243cb37dd3cd542de80fbea4b170f5 100644
--- a/src/plugins/cpptools/cppfindreferences.cpp
+++ b/src/plugins/cpptools/cppfindreferences.cpp
@@ -37,6 +37,7 @@
 #include <extensionsystem/pluginmanager.h>
 #include <utils/filesearch.h>
 #include <coreplugin/progressmanager/progressmanager.h>
+#include <coreplugin/progressmanager/futureprogress.h>
 #include <coreplugin/editormanager/editormanager.h>
 #include <coreplugin/icore.h>
 
diff --git a/src/plugins/cpptools/cpptoolsplugin.cpp b/src/plugins/cpptools/cpptoolsplugin.cpp
index 1e0280cf907ef4dedf9e810ab301f580b0d188e3..6af7f926cfd174f1d5b8dc774873ad5a0c0a0a11 100644
--- a/src/plugins/cpptools/cpptoolsplugin.cpp
+++ b/src/plugins/cpptools/cpptoolsplugin.cpp
@@ -45,6 +45,8 @@
 #include <coreplugin/coreconstants.h>
 #include <coreplugin/uniqueidmanager.h>
 #include <coreplugin/actionmanager/actionmanager.h>
+#include <coreplugin/actionmanager/actioncontainer.h>
+#include <coreplugin/actionmanager/command.h>
 #include <coreplugin/editormanager/editormanager.h>
 #include <coreplugin/progressmanager/progressmanager.h>
 #include <coreplugin/vcsmanager.h>
diff --git a/src/plugins/cvs/cvsplugin.cpp b/src/plugins/cvs/cvsplugin.cpp
index 2edcfc411d2a8a8b3f892145fd0fc39b9b7fdee2..78df829fcda866250da9ac8660ed4b39c8d1e484 100644
--- a/src/plugins/cvs/cvsplugin.cpp
+++ b/src/plugins/cvs/cvsplugin.cpp
@@ -50,6 +50,8 @@
 #include <coreplugin/mimedatabase.h>
 #include <coreplugin/uniqueidmanager.h>
 #include <coreplugin/actionmanager/actionmanager.h>
+#include <coreplugin/actionmanager/actioncontainer.h>
+#include <coreplugin/actionmanager/command.h>
 #include <coreplugin/editormanager/editormanager.h>
 #include <coreplugin/vcsmanager.h>
 #include <utils/stringutils.h>
diff --git a/src/plugins/debugger/breakwindow.cpp b/src/plugins/debugger/breakwindow.cpp
index 953d1cea250342d324114030c6835336461ab32b..9996063627004a00cf13e7d6f873c25e9f29b20d 100644
--- a/src/plugins/debugger/breakwindow.cpp
+++ b/src/plugins/debugger/breakwindow.cpp
@@ -35,6 +35,7 @@
 #include "ui_breakbyfunction.h"
 
 #include <utils/qtcassert.h>
+#include <utils/savedaction.h>
 
 #include <QtCore/QDebug>
 #include <QtCore/QDir>
diff --git a/src/plugins/debugger/cdb/cdbdebugengine.cpp b/src/plugins/debugger/cdb/cdbdebugengine.cpp
index ec7c9f34d4194f359f3b100303b5dce1fc5d651a..9125b67c39096864c952373ccc86dbed3f913c4c 100644
--- a/src/plugins/debugger/cdb/cdbdebugengine.cpp
+++ b/src/plugins/debugger/cdb/cdbdebugengine.cpp
@@ -58,6 +58,7 @@
 #include <utils/consoleprocess.h>
 #include <utils/fancymainwindow.h>
 #include <texteditor/itexteditor.h>
+#include <utils/savedaction.h>
 
 #include <QtCore/QDebug>
 #include <QtCore/QTimer>
diff --git a/src/plugins/debugger/debuggeractions.cpp b/src/plugins/debugger/debuggeractions.cpp
index f30794c780e986a6acc34938f86492d5235698c6..63eb591de78612a031b4d49eb047a8a4773166a8 100644
--- a/src/plugins/debugger/debuggeractions.cpp
+++ b/src/plugins/debugger/debuggeractions.cpp
@@ -29,6 +29,7 @@
 
 #include "debuggeractions.h"
 
+#include <utils/savedaction.h>
 #include <utils/qtcassert.h>
 #include <utils/pathchooser.h>
 
diff --git a/src/plugins/debugger/debuggeractions.h b/src/plugins/debugger/debuggeractions.h
index 5b97b0dc0e81c11d93eb07c3a9f16c3c9d8f22d4..c85336f1ba05125eab2f84b1e8a56c956cc719ac 100644
--- a/src/plugins/debugger/debuggeractions.h
+++ b/src/plugins/debugger/debuggeractions.h
@@ -32,12 +32,16 @@
 
 #include <QtCore/QHash>
 
-#include <utils/savedaction.h>
-
 QT_BEGIN_NAMESPACE
+class QAction;
 class QActionGroup;
+class QSettings;
 QT_END_NAMESPACE
 
+namespace Utils {
+    class SavedAction;
+}
+
 namespace Debugger {
 namespace Internal {
 
diff --git a/src/plugins/debugger/debuggeragents.cpp b/src/plugins/debugger/debuggeragents.cpp
index 4092e38b0b331b6f6410b1ee9b36e8d170a1a152..b18ce8916d65501f749a3cec4d0a47b80fdf3b0f 100644
--- a/src/plugins/debugger/debuggeragents.cpp
+++ b/src/plugins/debugger/debuggeragents.cpp
@@ -28,6 +28,8 @@
 **************************************************************************/
 
 #include "debuggeragents.h"
+#include "debuggermanager.h"
+#include "stackframe.h"
 #include "debuggerstringutils.h"
 #include "idebuggerengine.h"
 
diff --git a/src/plugins/debugger/debuggeragents.h b/src/plugins/debugger/debuggeragents.h
index 68a6a8c81e516153b58c343abfb9794a29188277..fe3cc3a8552e0842190a4749e3b18ab260e3e2bb 100644
--- a/src/plugins/debugger/debuggeragents.h
+++ b/src/plugins/debugger/debuggeragents.h
@@ -30,22 +30,18 @@
 #ifndef DEBUGGER_AGENTS_H
 #define DEBUGGER_AGENTS_H
 
-#include "debuggermanager.h"
-#include "stackframe.h"
-
-#include <coreplugin/editormanager/ieditor.h>
-
 #include <QtCore/QObject>
-#include <QtCore/QDebug>
-#include <QtCore/QList>
 #include <QtCore/QPointer>
-#include <QtGui/QAction>
-
 
+namespace Core {
+    class IEditor;
+}
 namespace Debugger {
 class DebuggerManager;
-namespace Internal {
 
+namespace Internal {
+struct StackFrame;
+class IDebuggerEngine;
 struct DisassemblerViewAgentPrivate;
 
 class MemoryViewAgent : public QObject
diff --git a/src/plugins/debugger/debuggerconstants.h b/src/plugins/debugger/debuggerconstants.h
index 8172be795cfc1d753e2aee99113fa01f204dfa46..6db14726724005b2a805567d40e8d25d2c63ee83 100644
--- a/src/plugins/debugger/debuggerconstants.h
+++ b/src/plugins/debugger/debuggerconstants.h
@@ -30,7 +30,7 @@
 #ifndef DEBUGGERCONSTANTS_H
 #define DEBUGGERCONSTANTS_H
 
-#include "debugger_global.h"
+#include <QtCore/QtGlobal>
 
 namespace Debugger {
 namespace Constants {
diff --git a/src/plugins/debugger/debuggermainwindow.cpp b/src/plugins/debugger/debuggermainwindow.cpp
index d35103acf226e281ee66bf3be9bc94bf30ba5e5f..356b0dd269e5b217835ae893acb93853e31b3f17 100644
--- a/src/plugins/debugger/debuggermainwindow.cpp
+++ b/src/plugins/debugger/debuggermainwindow.cpp
@@ -1,16 +1,13 @@
 #include "debuggermainwindow.h"
+#include "debuggeruiswitcher.h"
 
-#include <QtCore/QCoreApplication>
-#include <QtGui/QApplication>
 #include <QtGui/QMenu>
-#include <QtGui/QLayout>
-#include <QtGui/QMainWindow>
 #include <QtGui/QDockWidget>
-#include <QtGui/QStyle>
 
-#include <QDebug>
+#include <QtCore/QDebug>
 
 namespace Debugger {
+namespace Internal {
 
 DebuggerMainWindow::DebuggerMainWindow(DebuggerUISwitcher *uiSwitcher, QWidget *parent) :
         FancyMainWindow(parent), m_uiSwitcher(uiSwitcher)
@@ -38,7 +35,7 @@ QMenu* DebuggerMainWindow::createPopupMenu()
 {
     QMenu *menu = 0;
 
-    QList<Internal::DebugToolWindow* > dockwidgets = m_uiSwitcher->m_dockWidgets;
+    const QList<Internal::DebugToolWindow* > dockwidgets = m_uiSwitcher->i_mw_debugToolWindows();
 
     if (!dockwidgets.isEmpty()) {
         menu = new QMenu(this);
@@ -46,7 +43,7 @@ QMenu* DebuggerMainWindow::createPopupMenu()
         for (int i = 0; i < dockwidgets.size(); ++i) {
             QDockWidget *dockWidget = dockwidgets.at(i)->m_dockWidget;
             if (dockWidget->parentWidget() == this &&
-                dockwidgets.at(i)->m_languageId == m_uiSwitcher->m_activeLanguage) {
+                dockwidgets.at(i)->m_languageId == m_uiSwitcher->activeLanguageId()) {
 
                 menu->addAction(dockWidget->toggleViewAction());
             }
@@ -57,4 +54,5 @@ QMenu* DebuggerMainWindow::createPopupMenu()
     return menu;
 }
 
-}
+} // namespace Internal
+} // namespace Debugger
diff --git a/src/plugins/debugger/debuggermainwindow.h b/src/plugins/debugger/debuggermainwindow.h
index 536cba8f95589d42717804ac9ba12d51693643d4..0e254961829466195de310c164df8ae08c3402af 100644
--- a/src/plugins/debugger/debuggermainwindow.h
+++ b/src/plugins/debugger/debuggermainwindow.h
@@ -1,19 +1,30 @@
 #ifndef DEBUGGERMAINWINDOW_H
 #define DEBUGGERMAINWINDOW_H
 
-#include "debuggeruiswitcher.h"
 #include <utils/fancymainwindow.h>
 
 QT_FORWARD_DECLARE_CLASS(QMenu);
 
 namespace Debugger {
+class DebuggerUISwitcher;
+
+namespace Internal {
+
+class DebugToolWindow {
+public:
+    DebugToolWindow() : m_visible(false) {}
+    QDockWidget* m_dockWidget;
+
+    int m_languageId;
+    bool m_visible;
+};
 
 class DebuggerMainWindow : public Utils::FancyMainWindow
 {
+    Q_OBJECT
 public:
-    DebuggerMainWindow(DebuggerUISwitcher *uiSwitcher, QWidget *parent = 0);
-    ~DebuggerMainWindow();
-
+    explicit DebuggerMainWindow(DebuggerUISwitcher *uiSwitcher, QWidget *parent = 0);
+    virtual ~DebuggerMainWindow();
 
 protected:
     virtual QMenu *createPopupMenu();
@@ -22,6 +33,7 @@ private:
     DebuggerUISwitcher *m_uiSwitcher;
 };
 
-}
+} // namespace Internal
+} // namespace Debugger
 
 #endif // DEBUGGERMAINWINDOW_H
diff --git a/src/plugins/debugger/debuggermanager.cpp b/src/plugins/debugger/debuggermanager.cpp
index 41ea1a7d379de892e0a355b180d633be4285fb87..399c65e0c60680d45c4e6f91e07cef033f4c52da 100644
--- a/src/plugins/debugger/debuggermanager.cpp
+++ b/src/plugins/debugger/debuggermanager.cpp
@@ -67,6 +67,7 @@
 #include <coreplugin/minisplitter.h>
 #include <coreplugin/editormanager/editormanager.h>
 #include <utils/qtcassert.h>
+#include <utils/savedaction.h>
 #include <projectexplorer/toolchain.h>
 #include <cplusplus/CppDocument.h>
 #include <cpptools/cppmodelmanagerinterface.h>
@@ -373,7 +374,8 @@ void DebuggerManager::init()
     d->m_watchersWindow = new WatchWindow(WatchWindow::WatchersType, this);
     d->m_statusTimer = new QTimer(this);
 
-    d->m_mainWindow = DebuggerUISwitcher::instance()->mainWindow();
+    d->m_mainWindow = qobject_cast<Debugger::Internal::DebuggerMainWindow*>(DebuggerUISwitcher::instance()->mainWindow());
+    QTC_ASSERT(d->m_mainWindow, return)
 
     // Snapshots
     d->m_snapshotHandler = new SnapshotHandler;
diff --git a/src/plugins/debugger/debuggermanager.h b/src/plugins/debugger/debuggermanager.h
index 8a752a8988cf3cfb34a08126330268205f2b6421..13e9f4f08c1eb5bf88dac417ed666d78249709f9 100644
--- a/src/plugins/debugger/debuggermanager.h
+++ b/src/plugins/debugger/debuggermanager.h
@@ -46,7 +46,6 @@ class QDockWidget;
 class QLabel;
 class QMessageBox;
 class QPoint;
-class QVariant;
 class QIcon;
 QT_END_NAMESPACE
 
diff --git a/src/plugins/debugger/debuggeroutputwindow.cpp b/src/plugins/debugger/debuggeroutputwindow.cpp
index 0c39f9a15318644e10b2f1ab88f51def56f1c3f2..9bbb1a030e81987a681a014212aa3611bdee0076 100644
--- a/src/plugins/debugger/debuggeroutputwindow.cpp
+++ b/src/plugins/debugger/debuggeroutputwindow.cpp
@@ -44,12 +44,15 @@
 #include <QtGui/QSplitter>
 #include <QtGui/QSyntaxHighlighter>
 #include <QtGui/QTextBlock>
+#include <QtGui/QPlainTextEdit>
 
 #include <aggregation/aggregate.h>
 #include <coreplugin/findplaceholder.h>
 #include <coreplugin/minisplitter.h>
 #include <find/basetextfind.h>
 
+#include <utils/savedaction.h>
+
 using namespace Debugger;
 using namespace Debugger::Internal;
 using namespace Find;
diff --git a/src/plugins/debugger/debuggeroutputwindow.h b/src/plugins/debugger/debuggeroutputwindow.h
index 2221911a08afcfef7d768488dd8d3f8f2739469a..b43c13ac0b867ed8b316e27fdcfa91f19a7c102d 100644
--- a/src/plugins/debugger/debuggeroutputwindow.h
+++ b/src/plugins/debugger/debuggeroutputwindow.h
@@ -30,11 +30,13 @@
 #ifndef DEBUGGER_OUTPUTWINDOW_H
 #define DEBUGGER_OUTPUTWINDOW_H
 
-#include <QtGui/QLineEdit>
-#include <QtGui/QPlainTextEdit>
-#include <QtGui/QSplitter>
 #include <QtGui/QWidget>
 
+QT_BEGIN_NAMESPACE
+class QPlainTextEdit;
+class QLineEdit;
+QT_END_NAMESPACE
+
 namespace Debugger {
 namespace Internal {
 
diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp
index 43b5a5fc94230c67d4fb5ddaa763f9eacccfeaa9..a2f98fc7a0c1d7e309726a1fd8d7f32fb0aa7308 100644
--- a/src/plugins/debugger/debuggerplugin.cpp
+++ b/src/plugins/debugger/debuggerplugin.cpp
@@ -43,6 +43,8 @@
 #include "ui_dumperoptionpage.h"
 
 #include <coreplugin/actionmanager/actionmanager.h>
+#include <coreplugin/actionmanager/actioncontainer.h>
+#include <coreplugin/actionmanager/command.h>
 #include <coreplugin/basemode.h>
 #include <coreplugin/coreconstants.h>
 #include <coreplugin/dialogs/ioptionspage.h>
@@ -78,6 +80,7 @@
 
 #include <utils/qtcassert.h>
 #include <utils/styledbar.h>
+#include <utils/savedaction.h>
 
 #include <QtCore/QDebug>
 #include <QtCore/QObject>
@@ -95,6 +98,8 @@
 #include <QtGui/QTextCursor>
 #include <QtGui/QToolButton>
 #include <QtGui/QMessageBox>
+#include <QtGui/QAction>
+#include <QtGui/QMenu>
 
 #include <climits>
 
diff --git a/src/plugins/debugger/debuggerplugin.h b/src/plugins/debugger/debuggerplugin.h
index 8ecf7e492c362886282b9f305137ac8731e1931b..9fade014919a1c2ba39cf0e757810745dcdc5036 100644
--- a/src/plugins/debugger/debuggerplugin.h
+++ b/src/plugins/debugger/debuggerplugin.h
@@ -33,12 +33,10 @@
 #include <extensionsystem/iplugin.h>
 
 #include <QtCore/QObject>
-#include <QtCore/QStringList>
 
 QT_BEGIN_NAMESPACE
 class QAction;
 class QComboBox;
-class QCursor;
 class QMenu;
 class QPoint;
 class QToolButton;
diff --git a/src/plugins/debugger/debuggerrunner.cpp b/src/plugins/debugger/debuggerrunner.cpp
index 87c22cc3a70460bc9889620f7a527527cdc5db66..ad3b4dac3fdb6f132f2f3dca8e070db561da776b 100644
--- a/src/plugins/debugger/debuggerrunner.cpp
+++ b/src/plugins/debugger/debuggerrunner.cpp
@@ -29,8 +29,6 @@
 
 #include "debuggerrunner.h"
 
-#include "debuggermanager.h"
-
 #include <projectexplorer/debugginghelper.h>
 #include <projectexplorer/environment.h>
 #include <projectexplorer/project.h>
diff --git a/src/plugins/debugger/debuggerrunner.h b/src/plugins/debugger/debuggerrunner.h
index 80efa6918e9b87492262ad08f40752a8f8c69353..5bbb76af992cfdf82b32348388804d22e41b504f 100644
--- a/src/plugins/debugger/debuggerrunner.h
+++ b/src/plugins/debugger/debuggerrunner.h
@@ -36,10 +36,7 @@
 #include <projectexplorer/applicationrunconfiguration.h>
 
 namespace Debugger {
-class DebuggerManager;
-
 namespace Internal {
-class StartData;
 
 class DebuggerRunControlFactory
     : public ProjectExplorer::IRunControlFactory
diff --git a/src/plugins/debugger/debuggeruiswitcher.cpp b/src/plugins/debugger/debuggeruiswitcher.cpp
index a5c49e32a69ff817e0bd563fbbb980472a16e2e3..88e5e40e6a988ad4705cd527d910dc709d19f927 100644
--- a/src/plugins/debugger/debuggeruiswitcher.cpp
+++ b/src/plugins/debugger/debuggeruiswitcher.cpp
@@ -4,6 +4,7 @@
 #include <debugger/debuggerconstants.h>
 #include <utils/styledbar.h>
 #include <coreplugin/modemanager.h>
+#include <coreplugin/basemode.h>
 #include <coreplugin/uniqueidmanager.h>
 #include <coreplugin/coreconstants.h>
 #include <coreplugin/icore.h>
@@ -15,35 +16,75 @@
 #include <coreplugin/outputpane.h>
 #include <coreplugin/navigationwidget.h>
 #include <coreplugin/actionmanager/actioncontainer.h>
-#include <coreplugin/actionmanager/actioncontainer_p.h>
 #include <projectexplorer/projectexplorerconstants.h>
 
-#include <QtCore/QSettings>
-
 #include <QtGui/QActionGroup>
 #include <QtGui/QStackedWidget>
-#include <QtGui/QComboBox>
-#include <QtGui/QHBoxLayout>
-#include <QtGui/QLabel>
+#include <QtGui/QVBoxLayout>
+#include <QtGui/QMenu>
 #include <QtGui/QDockWidget>
 
-#include <QDebug>
+#include <QtCore/QDebug>
+#include <QtCore/QList>
+#include <QtCore/QMap>
+#include <QtCore/QPair>
+#include <QtCore/QSettings>
 
 namespace Debugger {
+namespace Internal {
 
+} // namespace Internal
 using namespace Debugger::Internal;
 
-DebuggerUISwitcher *DebuggerUISwitcher::m_instance = 0;
+// first: language id, second: menu item
+typedef QPair<int, QAction* > ViewsMenuItems;
+
+struct DebuggerUISwitcherPrivate {
+    explicit DebuggerUISwitcherPrivate(DebuggerUISwitcher *q);
+
+    QList< ViewsMenuItems > m_viewsMenuItems;
+    QList< Internal::DebugToolWindow* > m_dockWidgets;
+
+    QMap<QString, QWidget *> m_toolBars;
+    QStringList m_languages;
+
+    QStackedWidget *m_toolbarStack;
+    Internal::DebuggerMainWindow *m_mainWindow;
+
+    QList<int> m_debuggercontext;
+    QActionGroup *m_languageActionGroup;
+
+    int m_activeLanguage;
+    bool m_isActiveMode;
+    bool m_changingUI;
+
+    QAction *m_toggleLockedAction;
+
+    const static int StackIndexRole = Qt::UserRole + 11;
 
-DebuggerUISwitcher::DebuggerUISwitcher(Core::BaseMode *mode, QObject* parent) : QObject(parent),
+    Core::ActionContainer *m_languageMenu;
+    Core::ActionContainer *m_viewsMenu;
+    Core::ActionContainer *m_debugMenu;
+
+    static DebuggerUISwitcher *m_instance;
+};
+
+DebuggerUISwitcherPrivate::DebuggerUISwitcherPrivate(DebuggerUISwitcher *q) :
     m_toolbarStack(new QStackedWidget),
-    m_languageActionGroup(new QActionGroup(this)),
+    m_languageActionGroup(new QActionGroup(q)),
     m_activeLanguage(-1),
     m_isActiveMode(false),
     m_changingUI(false),
     m_toggleLockedAction(0),
     m_viewsMenu(0),
     m_debugMenu(0)
+{
+}
+
+DebuggerUISwitcher *DebuggerUISwitcherPrivate::m_instance = 0;
+
+DebuggerUISwitcher::DebuggerUISwitcher(Core::BaseMode *mode, QObject* parent) :
+    QObject(parent), d(new DebuggerUISwitcherPrivate(this))
 {
     mode->setWidget(createContents(mode));
 
@@ -53,25 +94,27 @@ DebuggerUISwitcher::DebuggerUISwitcher(Core::BaseMode *mode, QObject* parent) :
     connect(Core::ModeManager::instance(), SIGNAL(currentModeChanged(Core::IMode*)),
             SLOT(modeChanged(Core::IMode*)));
 
-    m_debugMenu = am->actionContainer(ProjectExplorer::Constants::M_DEBUG);
-    m_languageMenu = am->createMenu(Debugger::Constants::M_DEBUG_LANGUAGES);
-    m_languageActionGroup->setExclusive(true);
-    m_viewsMenu = am->createMenu(Debugger::Constants::M_DEBUG_VIEWS);
+    d->m_debugMenu = am->actionContainer(ProjectExplorer::Constants::M_DEBUG);
+    d->m_languageMenu = am->createMenu(Debugger::Constants::M_DEBUG_LANGUAGES);
+    d->m_languageActionGroup->setExclusive(true);
+    d->m_viewsMenu = am->createMenu(Debugger::Constants::M_DEBUG_VIEWS);
 
-    m_debuggercontext << Core::ICore::instance()->uniqueIDManager()->uniqueIdentifier(Debugger::Constants::C_GDBDEBUGGER);
+    d->m_debuggercontext << Core::ICore::instance()->uniqueIDManager()->uniqueIdentifier(Debugger::Constants::C_GDBDEBUGGER);
 
-    m_instance = this;
+    DebuggerUISwitcherPrivate::m_instance = this;
 }
 
 DebuggerUISwitcher::~DebuggerUISwitcher()
 {
-    qDeleteAll(m_dockWidgets);
-    m_dockWidgets.clear();
+    qDeleteAll(d->m_dockWidgets);
+    d->m_dockWidgets.clear();
+    DebuggerUISwitcherPrivate::m_instance = 0;
+    delete d;
 }
 
 void DebuggerUISwitcher::addMenuAction(Core::Command *command, const QString &group)
 {
-    m_debugMenu->addAction(command, group);
+    d->m_debugMenu->addAction(command, group);
 }
 
 void DebuggerUISwitcher::setActiveLanguage(const QString &langName)
@@ -79,19 +122,23 @@ void DebuggerUISwitcher::setActiveLanguage(const QString &langName)
     changeDebuggerUI(langName);
 }
 
+int DebuggerUISwitcher::activeLanguageId() const
+{
+    return d->m_activeLanguage;
+}
 
 void DebuggerUISwitcher::modeChanged(Core::IMode *mode)
 {
-    m_isActiveMode = (mode->id() == Debugger::Constants::MODE_DEBUG);
+    d->m_isActiveMode = (mode->id() == Debugger::Constants::MODE_DEBUG);
     hideInactiveWidgets();
 }
 
 void DebuggerUISwitcher::hideInactiveWidgets()
 {
-    if (!m_isActiveMode) {
+    if (!d->m_isActiveMode) {
         // hide all the debugger windows if mode is different
-        foreach(Internal::DebugToolWindow *window, m_dockWidgets) {
-            if (window->m_languageId == m_activeLanguage &&
+        foreach(Internal::DebugToolWindow *window, d->m_dockWidgets) {
+            if (window->m_languageId == d->m_activeLanguage &&
                 window->m_dockWidget->isVisible())
             {
                 window->m_dockWidget->hide();
@@ -99,8 +146,8 @@ void DebuggerUISwitcher::hideInactiveWidgets()
         }
     } else {
         // bring them back
-        foreach(Internal::DebugToolWindow *window, m_dockWidgets) {
-            if (window->m_languageId == m_activeLanguage &&
+        foreach(Internal::DebugToolWindow *window, d->m_dockWidgets) {
+            if (window->m_languageId == d->m_activeLanguage &&
                 window->m_visible &&
                 !window->m_dockWidget->isVisible())
             {
@@ -120,32 +167,32 @@ void DebuggerUISwitcher::createViewsMenuItems()
 
     Core::Command *cmd = 0;
 
-    m_toggleLockedAction = new QAction(tr("Locked"), this);
-    m_toggleLockedAction->setCheckable(true);
-    m_toggleLockedAction->setChecked(true);
-    connect(m_toggleLockedAction, SIGNAL(toggled(bool)),
-            m_mainWindow, SLOT(setLocked(bool)));
+    d->m_toggleLockedAction = new QAction(tr("Locked"), this);
+    d->m_toggleLockedAction->setCheckable(true);
+    d->m_toggleLockedAction->setChecked(true);
+    connect(d->m_toggleLockedAction, SIGNAL(toggled(bool)),
+            d->m_mainWindow, SLOT(setLocked(bool)));
 
     QAction *sep = new QAction(this);
     sep->setSeparator(true);
     cmd = am->registerAction(sep, QLatin1String("Debugger.Sep.Views"), globalcontext);
-    m_debugMenu->addAction(cmd);
+    d->m_debugMenu->addAction(cmd);
 
-    QMenu *mLang = m_languageMenu->menu();
+    QMenu *mLang = d->m_languageMenu->menu();
     mLang->setEnabled(true);
     mLang->setTitle(tr("&Languages"));
-    m_debugMenu->addMenu(m_languageMenu, Core::Constants::G_DEFAULT_THREE);
+    d->m_debugMenu->addMenu(d->m_languageMenu, Core::Constants::G_DEFAULT_THREE);
 
-    QMenu *m = m_viewsMenu->menu();
+    QMenu *m = d->m_viewsMenu->menu();
     m->setEnabled(true);
     m->setTitle(tr("&Views"));
-    m_debugMenu->addMenu(m_viewsMenu, Core::Constants::G_DEFAULT_THREE);
+    d->m_debugMenu->addMenu(d->m_viewsMenu, Core::Constants::G_DEFAULT_THREE);
 
     m->addSeparator();
-    m->addAction(m_toggleLockedAction);
+    m->addAction(d->m_toggleLockedAction);
     m->addSeparator();
 
-    QAction *resetToSimpleAction = m_viewsMenu->menu()->addAction(tr("Reset to default layout"));
+    QAction *resetToSimpleAction = d->m_viewsMenu->menu()->addAction(tr("Reset to default layout"));
     connect(resetToSimpleAction, SIGNAL(triggered()),
             SLOT(resetDebuggerLayout()));
 
@@ -153,25 +200,25 @@ void DebuggerUISwitcher::createViewsMenuItems()
 
 DebuggerUISwitcher *DebuggerUISwitcher::instance()
 {
-    return m_instance;
+    return DebuggerUISwitcherPrivate::m_instance;
 }
 
 void DebuggerUISwitcher::addLanguage(const QString &langName)
 {
-    m_toolBars.insert(langName, 0);
-    m_languages.append(langName);
+    d->m_toolBars.insert(langName, 0);
+    d->m_languages.append(langName);
 
     Core::ActionManager *am = Core::ICore::instance()->actionManager();
     QAction *langChange = new QAction(langName, this);
     langChange->setCheckable(true);
     langChange->setChecked(false);
 
-    m_languageActionGroup->addAction(langChange);
+    d->m_languageActionGroup->addAction(langChange);
 
     connect(langChange, SIGNAL(triggered()), SLOT(langChangeTriggered()));
     Core::Command *cmd = am->registerAction(langChange,
-                         "Debugger.Language" + langName, m_debuggercontext);
-    m_languageMenu->addAction(cmd);
+                         "Debugger.Language" + langName, d->m_debuggercontext);
+    d->m_languageMenu->addAction(cmd);
 
 }
 
@@ -184,23 +231,23 @@ void DebuggerUISwitcher::langChangeTriggered()
 
 void DebuggerUISwitcher::changeDebuggerUI(const QString &langName)
 {
-    if (m_changingUI)
+    if (d->m_changingUI)
         return;
-    m_changingUI = true;
+    d->m_changingUI = true;
 
-    int langId = m_languages.indexOf(langName);
-    if (langId != m_activeLanguage) {
-        m_languageActionGroup->actions()[langId]->setChecked(true);
-        m_activeLanguage = langId;
+    int langId = d->m_languages.indexOf(langName);
+    if (langId != d->m_activeLanguage) {
+        d->m_languageActionGroup->actions()[langId]->setChecked(true);
+        d->m_activeLanguage = langId;
 
-        m_toolbarStack->setCurrentWidget(m_toolBars.value(langName));
+        d->m_toolbarStack->setCurrentWidget(d->m_toolBars.value(langName));
 
-        foreach (DebugToolWindow *window, m_dockWidgets) {
+        foreach (DebugToolWindow *window, d->m_dockWidgets) {
             if (window->m_languageId != langId) {
                 // visibleTo must be used because during init, debugger is not visible,
                 // although visibility is explicitly set through both default layout and
                 // QSettings.
-                window->m_visible = window->m_dockWidget->isVisibleTo(m_mainWindow);
+                window->m_visible = window->m_dockWidget->isVisibleTo(d->m_mainWindow);
                 window->m_dockWidget->hide();
             } else {
                 if (window->m_visible) {
@@ -209,37 +256,37 @@ void DebuggerUISwitcher::changeDebuggerUI(const QString &langName)
             }
         }
 
-        foreach (ViewsMenuItems menuitem, m_viewsMenuItems) {
+        foreach (ViewsMenuItems menuitem, d->m_viewsMenuItems) {
             if (menuitem.first == langId) {
                 menuitem.second->setVisible(true);
             } else {
                 menuitem.second->setVisible(false);
             }
         }
-        m_languageMenu->menu()->setTitle(tr("Language") + " (" + langName + ")");
+        d->m_languageMenu->menu()->setTitle(tr("Language") + " (" + langName + ")");
         emit languageChanged(langName);
     }
 
-    m_changingUI = false;
+    d->m_changingUI = false;
 }
 
 void DebuggerUISwitcher::setToolbar(const QString &langName, QWidget *widget)
 {
-    Q_ASSERT(m_toolBars.contains(langName));
-    m_toolBars[langName] = widget;
-    m_toolbarStack->addWidget(widget);
+    Q_ASSERT(d->m_toolBars.contains(langName));
+    d->m_toolBars[langName] = widget;
+    d->m_toolbarStack->addWidget(widget);
 }
 
-DebuggerMainWindow *DebuggerUISwitcher::mainWindow() const
+Utils::FancyMainWindow *DebuggerUISwitcher::mainWindow() const
 {
-    return m_mainWindow;
+    return d->m_mainWindow;
 }
 
 QWidget *DebuggerUISwitcher::createMainWindow(Core::BaseMode *mode)
 {
-    m_mainWindow = new DebuggerMainWindow(this);
-    m_mainWindow->setTabPosition(Qt::AllDockWidgetAreas, QTabWidget::North);
-    m_mainWindow->setDocumentMode(true);
+    d->m_mainWindow = new DebuggerMainWindow(this);
+    d->m_mainWindow->setTabPosition(Qt::AllDockWidgetAreas, QTabWidget::North);
+    d->m_mainWindow->setDocumentMode(true);
 
     QBoxLayout *editorHolderLayout = new QVBoxLayout;
     editorHolderLayout->setMargin(0);
@@ -261,12 +308,12 @@ QWidget *DebuggerUISwitcher::createMainWindow(Core::BaseMode *mode)
     QHBoxLayout *debugToolBarLayout = new QHBoxLayout(debugToolBar);
     debugToolBarLayout->setMargin(0);
     debugToolBarLayout->setSpacing(0);
-    debugToolBarLayout->addWidget(m_toolbarStack);
+    debugToolBarLayout->addWidget(d->m_toolbarStack);
     debugToolBarLayout->addStretch();
     debugToolBarLayout->addWidget(new Utils::StyledSeparator);
 
     QWidget *centralWidget = new QWidget;
-    m_mainWindow->setCentralWidget(centralWidget);
+    d->m_mainWindow->setCentralWidget(centralWidget);
 
     QVBoxLayout *centralLayout = new QVBoxLayout(centralWidget);
     centralWidget->setLayout(centralLayout);
@@ -277,7 +324,7 @@ QWidget *DebuggerUISwitcher::createMainWindow(Core::BaseMode *mode)
     centralLayout->setStretch(0, 1);
     centralLayout->setStretch(1, 0);
 
-    return m_mainWindow;
+    return d->m_mainWindow;
 }
 
 
@@ -287,24 +334,24 @@ QWidget *DebuggerUISwitcher::createMainWindow(Core::BaseMode *mode)
 QDockWidget *DebuggerUISwitcher::createDockWidget(const QString &langName, QWidget *widget,
                                                Qt::DockWidgetArea area, bool visibleByDefault)
 {
-    QDockWidget *dockWidget = m_mainWindow->addDockForWidget(widget);
-    m_mainWindow->addDockWidget(area, dockWidget);
+    QDockWidget *dockWidget = d->m_mainWindow->addDockForWidget(widget);
+    d->m_mainWindow->addDockWidget(area, dockWidget);
     DebugToolWindow *window = new DebugToolWindow;
-    window->m_languageId = m_languages.indexOf(langName);
+    window->m_languageId = d->m_languages.indexOf(langName);
     window->m_dockWidget = dockWidget;
 
     window->m_visible = visibleByDefault;
-    m_dockWidgets.append(window);
+    d->m_dockWidgets.append(window);
 
-    if (m_languages.indexOf(langName) != m_activeLanguage)
+    if (d->m_languages.indexOf(langName) != d->m_activeLanguage)
         dockWidget->hide();
 
     Core::ActionManager *am = Core::ICore::instance()->actionManager();
     Core::Command *cmd = am->registerAction(dockWidget->toggleViewAction(),
-                         "Debugger." + dockWidget->objectName(), m_debuggercontext);
-    m_viewsMenu->addAction(cmd);
+                         "Debugger." + dockWidget->objectName(), d->m_debuggercontext);
+    d->m_viewsMenu->addAction(cmd);
 
-    m_viewsMenuItems.append(qMakePair(m_languages.indexOf(langName), dockWidget->toggleViewAction()));
+    d->m_viewsMenuItems.append(qMakePair(d->m_languages.indexOf(langName), dockWidget->toggleViewAction()));
 
     return dockWidget;
 }
@@ -338,15 +385,15 @@ void DebuggerUISwitcher::writeSettings() const
     QSettings *s = Core::ICore::instance()->settings();
     s->beginGroup(QLatin1String("DebugMode"));
 
-    foreach(Internal::DebugToolWindow *toolWindow, m_dockWidgets) {
+    foreach(Internal::DebugToolWindow *toolWindow, d->m_dockWidgets) {
         bool visible = toolWindow->m_visible;
-        if (toolWindow->m_languageId == m_activeLanguage) {
-            visible = toolWindow->m_dockWidget->isVisibleTo(m_mainWindow);
+        if (toolWindow->m_languageId == d->m_activeLanguage) {
+            visible = toolWindow->m_dockWidget->isVisibleTo(d->m_mainWindow);
         }
         toolWindow->m_dockWidget->setVisible(visible);
     }
 
-    m_mainWindow->saveSettings(s);
+    d->m_mainWindow->saveSettings(s);
     s->endGroup();
 }
 
@@ -354,12 +401,12 @@ void DebuggerUISwitcher::readSettings()
 {
     QSettings *s = Core::ICore::instance()->settings();
     s->beginGroup(QLatin1String("DebugMode"));
-    m_mainWindow->restoreSettings(s);
-    m_toggleLockedAction->setChecked(m_mainWindow->isLocked());
+    d->m_mainWindow->restoreSettings(s);
+    d->m_toggleLockedAction->setChecked(d->m_mainWindow->isLocked());
     s->endGroup();
 
-    foreach(Internal::DebugToolWindow *toolWindow, m_dockWidgets) {
-        toolWindow->m_visible = toolWindow->m_dockWidget->isVisibleTo(m_mainWindow);
+    foreach(Internal::DebugToolWindow *toolWindow, d->m_dockWidgets) {
+        toolWindow->m_visible = toolWindow->m_dockWidget->isVisibleTo(d->m_mainWindow);
     }
 }
 
@@ -370,15 +417,20 @@ void DebuggerUISwitcher::initialize()
     emit dockArranged(QString());
     readSettings();
 
-    if (m_activeLanguage == -1) {
-        changeDebuggerUI(m_languages.first());
+    if (d->m_activeLanguage == -1) {
+        changeDebuggerUI(d->m_languages.first());
     }
     hideInactiveWidgets();
 }
 
 void DebuggerUISwitcher::resetDebuggerLayout()
 {
-    emit dockArranged(m_languages.at(m_activeLanguage));
+    emit dockArranged(d->m_languages.at(d->m_activeLanguage));
+}
+
+QList<Internal::DebugToolWindow* > DebuggerUISwitcher::i_mw_debugToolWindows() const
+{
+    return d->m_dockWidgets;
 }
 
 }
diff --git a/src/plugins/debugger/debuggeruiswitcher.h b/src/plugins/debugger/debuggeruiswitcher.h
index be3f1523e4868f2b7ce1c0a83995c5fe621022eb..9ee3c32bf201f1558ed645eb03decbde3e800df8 100644
--- a/src/plugins/debugger/debuggeruiswitcher.h
+++ b/src/plugins/debugger/debuggeruiswitcher.h
@@ -3,42 +3,35 @@
 
 #include "debugger_global.h"
 
-#include <coreplugin/basemode.h>
 #include <QtCore/QObject>
-#include <QtCore/QList>
-#include <QtCore/QMap>
+
+QT_FORWARD_DECLARE_CLASS(QDockWidget);
 
 namespace Core {
     class ActionContainer;
     class Command;
+    class BaseMode;
+    class IMode;
 }
 
-QT_FORWARD_DECLARE_CLASS(Action);
-QT_FORWARD_DECLARE_CLASS(QDockWidget);
-QT_FORWARD_DECLARE_CLASS(QStackedWidget);
-QT_FORWARD_DECLARE_CLASS(QComboBox);
-QT_FORWARD_DECLARE_CLASS(QActionGroup);
+namespace Utils {
+class FancyMainWindow;
+}
 
 namespace Debugger {
-    class DebuggerMainWindow;
+struct DebuggerUISwitcherPrivate;
+
 namespace Internal {
-class DebugToolWindow {
-public:
-    DebugToolWindow() : m_visible(false) {}
-    QDockWidget* m_dockWidget;
-    int m_languageId;
-    bool m_visible;
+    class DebugToolWindow;
+    class DebuggerMainWindow;
 };
-}
-}
 
-namespace Debugger {
 class DEBUGGER_EXPORT DebuggerUISwitcher : public QObject
 {
     Q_OBJECT
 public:
-    DebuggerUISwitcher(Core::BaseMode *mode, QObject *parent = 0);
-    ~DebuggerUISwitcher();
+    explicit DebuggerUISwitcher(Core::BaseMode *mode, QObject *parent = 0);
+    virtual ~DebuggerUISwitcher();
 
     static DebuggerUISwitcher *instance();
 
@@ -53,6 +46,7 @@ public:
                             const QString &group = QString());
 
     void setActiveLanguage(const QString &langName);
+    int activeLanguageId() const;
 
     // called when all dependent plugins have loaded
     void initialize();
@@ -64,7 +58,7 @@ public:
                                   Qt::DockWidgetArea area = Qt::TopDockWidgetArea,
                                   bool visibleByDefault = true);
 
-    DebuggerMainWindow *mainWindow() const;
+    Utils::FancyMainWindow *mainWindow() const;
 
 signals:
     void languageChanged(const QString &langName);
@@ -78,6 +72,10 @@ private slots:
     void langChangeTriggered();
 
 private:
+    // Used by MainWindow
+    friend class Internal::DebuggerMainWindow;
+    QList<Internal::DebugToolWindow* > i_mw_debugToolWindows() const;
+
     void hideInactiveWidgets();
     void createViewsMenuItems();
     void readSettings();
@@ -85,35 +83,7 @@ private:
     QWidget *createContents(Core::BaseMode *mode);
     QWidget *createMainWindow(Core::BaseMode *mode);
 
-    // first: language id, second: menu item
-    typedef QPair<int, QAction* > ViewsMenuItems;
-    QList< ViewsMenuItems > m_viewsMenuItems;
-    QList< Internal::DebugToolWindow* > m_dockWidgets;
-
-    QMap<QString, QWidget *> m_toolBars;
-    QStringList m_languages;
-
-    QStackedWidget *m_toolbarStack;
-    DebuggerMainWindow *m_mainWindow;
-
-    QList<int> m_debuggercontext;
-    QActionGroup *m_languageActionGroup;
-
-    int m_activeLanguage;
-    bool m_isActiveMode;
-    bool m_changingUI;
-
-    QAction *m_toggleLockedAction;
-
-    const static int StackIndexRole = Qt::UserRole + 11;
-
-    Core::ActionContainer *m_languageMenu;
-    Core::ActionContainer *m_viewsMenu;
-    Core::ActionContainer *m_debugMenu;
-
-    static DebuggerUISwitcher *m_instance;
-
-    friend class DebuggerMainWindow;
+    DebuggerUISwitcherPrivate *d;
 };
 
 }
diff --git a/src/plugins/debugger/gdb/classicgdbengine.cpp b/src/plugins/debugger/gdb/classicgdbengine.cpp
index 5d8cd936ab61a26e2b39abe9f255eaac32b952bb..d0179b6eff7fedd298b6abbbca1ce4c8cfa5c91e 100644
--- a/src/plugins/debugger/gdb/classicgdbengine.cpp
+++ b/src/plugins/debugger/gdb/classicgdbengine.cpp
@@ -37,6 +37,7 @@
 #include "watchhandler.h"
 
 #include <utils/qtcassert.h>
+#include <utils/savedaction.h>
 
 #include <QtCore/QFile>
 #include <QtCore/QFileInfo>
diff --git a/src/plugins/debugger/gdb/trkgdbadapter.cpp b/src/plugins/debugger/gdb/trkgdbadapter.cpp
index dac301f685c46e1e121eee799483cf7d3261ad52..6fba477d9b8eb94817509a499be2949eddf269b7 100644
--- a/src/plugins/debugger/gdb/trkgdbadapter.cpp
+++ b/src/plugins/debugger/gdb/trkgdbadapter.cpp
@@ -46,6 +46,7 @@
 #endif
 
 #include <utils/qtcassert.h>
+#include <utils/savedaction.h>
 
 #include <QtCore/QTimer>
 #include <QtCore/QDir>
diff --git a/src/plugins/debugger/moduleswindow.cpp b/src/plugins/debugger/moduleswindow.cpp
index 30eaa277ebfc92212b48f10d9074be044438c9c8..0eb63d9f9649b580079289c091126f955ef0cec6 100644
--- a/src/plugins/debugger/moduleswindow.cpp
+++ b/src/plugins/debugger/moduleswindow.cpp
@@ -33,6 +33,8 @@
 #include "debuggeractions.h"
 #include "debuggermanager.h"
 
+#include <utils/savedaction.h>
+
 #include <QtCore/QDebug>
 #include <QtCore/QProcess>
 #include <QtCore/QRegExp>
diff --git a/src/plugins/debugger/outputcollector.h b/src/plugins/debugger/outputcollector.h
index 86544d7e7419eaa0421b4deb176bcc13b28c898c..5f5787868f3b7c4c83104965172359e240a13a08 100644
--- a/src/plugins/debugger/outputcollector.h
+++ b/src/plugins/debugger/outputcollector.h
@@ -30,7 +30,6 @@
 #ifndef OUTPUT_COLLECTOR_H
 #define OUTPUT_COLLECTOR_H
 
-#include <QtCore/QByteArray>
 #include <QtCore/QObject>
 
 QT_BEGIN_NAMESPACE
diff --git a/src/plugins/debugger/procinterrupt.h b/src/plugins/debugger/procinterrupt.h
index 3852fd08f121e9357b5f40fd29b7b218c87bf27b..4cfa61e1f51294ed8046b155fe4ad6232b1b51fb 100644
--- a/src/plugins/debugger/procinterrupt.h
+++ b/src/plugins/debugger/procinterrupt.h
@@ -30,8 +30,6 @@
 #ifndef DEBUGGER_PROCINTERRUPT_H
 #define DEBUGGER_PROCINTERRUPT_H
 
-#include <QtCore/QProcess>
-
 namespace Debugger {
 namespace Internal {
 
diff --git a/src/plugins/debugger/registerwindow.cpp b/src/plugins/debugger/registerwindow.cpp
index 1c38483d16a7350010c72326c798720134383ee4..537df775e8e550ad8b35240c26b37e730c228a38 100644
--- a/src/plugins/debugger/registerwindow.cpp
+++ b/src/plugins/debugger/registerwindow.cpp
@@ -32,9 +32,11 @@
 
 #include "debuggeractions.h"
 #include "debuggeragents.h"
+#include "debuggermanager.h"
 #include "debuggerconstants.h"
 
 #include <utils/qtcassert.h>
+#include <utils/savedaction.h>
 
 #include <QtCore/QDebug>
 #include <QtCore/QDir>
@@ -50,7 +52,6 @@
 #include <QtGui/QResizeEvent>
 #include <QtGui/QToolButton>
 
-
 namespace Debugger {
 namespace Internal {
 
diff --git a/src/plugins/debugger/snapshothandler.cpp b/src/plugins/debugger/snapshothandler.cpp
index 4f79e2d54e5c15ec74710b8d1b7cc53f997e08bc..af6bb22b771aeef2a67e745ce28c7e736f211cb8 100644
--- a/src/plugins/debugger/snapshothandler.cpp
+++ b/src/plugins/debugger/snapshothandler.cpp
@@ -32,6 +32,7 @@
 #include "debuggeractions.h"
 
 #include <utils/qtcassert.h>
+#include <utils/savedaction.h>
 
 #include <QtCore/QAbstractTableModel>
 #include <QtCore/QDebug>
diff --git a/src/plugins/debugger/snapshothandler.h b/src/plugins/debugger/snapshothandler.h
index 6ae6c9a07f586e0d6405ac14b6db064ab3f764f3..35a42603ebae59d9d6c33aed1b7f478587207ea0 100644
--- a/src/plugins/debugger/snapshothandler.h
+++ b/src/plugins/debugger/snapshothandler.h
@@ -34,10 +34,6 @@
 
 #include <QtCore/QAbstractItemModel>
 #include <QtCore/QDateTime>
-#include <QtCore/QObject>
-
-#include <QtGui/QIcon>
-
 
 namespace Debugger {
 namespace Internal {
diff --git a/src/plugins/debugger/snapshotwindow.cpp b/src/plugins/debugger/snapshotwindow.cpp
index ab11f0fbfbef6e31bf7f60cf711cb7fff0a355e9..7cb1463d1627917b0e08823456872a78565b9cfe 100644
--- a/src/plugins/debugger/snapshotwindow.cpp
+++ b/src/plugins/debugger/snapshotwindow.cpp
@@ -31,8 +31,10 @@
 
 #include "debuggeractions.h"
 #include "debuggeragents.h"
+#include "debuggermanager.h"
 
 #include <utils/qtcassert.h>
+#include <utils/savedaction.h>
 
 #include <QtCore/QDebug>
 
@@ -46,7 +48,6 @@
 #include <QtGui/QTreeView>
 #include <QtGui/QVBoxLayout>
 
-
 static QModelIndexList normalizeIndexes(const QModelIndexList &list)
 {
     QModelIndexList res;
diff --git a/src/plugins/debugger/snapshotwindow.h b/src/plugins/debugger/snapshotwindow.h
index 269e74418645c5665aad733693b1209b3d5578f9..e737f6427c65c1fe4afb2a9089a7afb472df9321 100644
--- a/src/plugins/debugger/snapshotwindow.h
+++ b/src/plugins/debugger/snapshotwindow.h
@@ -31,7 +31,6 @@
 #define DEBUGGER_SNAPSHOTWINDOW_H
 
 #include <QtGui/QTreeView>
-#include <QtGui/QWidget>
 
 QT_BEGIN_NAMESPACE
 class QComboBox;
diff --git a/src/plugins/debugger/sourcefileswindow.cpp b/src/plugins/debugger/sourcefileswindow.cpp
index 5d321fc81c1944cf89e0be5a6467332a36c162ae..448bfefffb87d28c857bf1ea4b131bfffca5ef9b 100644
--- a/src/plugins/debugger/sourcefileswindow.cpp
+++ b/src/plugins/debugger/sourcefileswindow.cpp
@@ -34,6 +34,8 @@
 #include <QtCore/QDebug>
 #include <QtCore/QFileInfo>
 
+#include <utils/savedaction.h>
+
 #include <QtGui/QAction>
 #include <QtGui/QComboBox>
 #include <QtGui/QHeaderView>
diff --git a/src/plugins/debugger/sourcefileswindow.h b/src/plugins/debugger/sourcefileswindow.h
index e57db075ae69813293b87f3e8286a1c7e03870b5..d9923b1f152db73071cad3f34da4a01159256641 100644
--- a/src/plugins/debugger/sourcefileswindow.h
+++ b/src/plugins/debugger/sourcefileswindow.h
@@ -30,14 +30,7 @@
 #ifndef DEBUGGER_SOURCEFILEWINDOW_H
 #define DEBUGGER_SOURCEFILEWINDOW_H
 
-#include <QtGui/QTreeWidget>
-#include <QtGui/QWidget>
-
-QT_BEGIN_NAMESPACE
-class QComboBox;
-class QModelIndex;
-class QStandardItemModel;
-QT_END_NAMESPACE
+#include <QtGui/QTreeView>
 
 namespace Debugger {
 namespace Internal {
diff --git a/src/plugins/debugger/stackhandler.cpp b/src/plugins/debugger/stackhandler.cpp
index 39831c42be5b7d3eeef2059d2a3df1fa25a0ff8b..05faf0d96fcd8e4ef6379a8f8338cce93873a005 100644
--- a/src/plugins/debugger/stackhandler.cpp
+++ b/src/plugins/debugger/stackhandler.cpp
@@ -32,6 +32,7 @@
 #include "debuggeractions.h"
 
 #include <utils/qtcassert.h>
+#include <utils/savedaction.h>
 
 #include <QtCore/QAbstractTableModel>
 #include <QtCore/QDebug>
diff --git a/src/plugins/debugger/stackhandler.h b/src/plugins/debugger/stackhandler.h
index fdeb2cd4e4153f730a2c0ad0cc6238fb6a7ce177..6c6cd6b740492b580899e485264c6a35710e4d0c 100644
--- a/src/plugins/debugger/stackhandler.h
+++ b/src/plugins/debugger/stackhandler.h
@@ -37,7 +37,6 @@
 
 #include <QtGui/QIcon>
 
-
 namespace Debugger {
 namespace Internal {
 
diff --git a/src/plugins/debugger/stackwindow.cpp b/src/plugins/debugger/stackwindow.cpp
index c5e3637801b91c225a0aff82c1706aa3fe332c9c..0d262588438e4f046632b04318cce433923b8e3a 100644
--- a/src/plugins/debugger/stackwindow.cpp
+++ b/src/plugins/debugger/stackwindow.cpp
@@ -32,8 +32,10 @@
 
 #include "debuggeractions.h"
 #include "debuggeragents.h"
+#include "debuggermanager.h"
 
 #include <utils/qtcassert.h>
+#include <utils/savedaction.h>
 
 #include <QtCore/QDebug>
 
diff --git a/src/plugins/debugger/stackwindow.h b/src/plugins/debugger/stackwindow.h
index f9856e01a383e7d1948c01bed2a61bc76bba7abe..29de3c73848ad55f407bb75364d548e3483585c6 100644
--- a/src/plugins/debugger/stackwindow.h
+++ b/src/plugins/debugger/stackwindow.h
@@ -31,12 +31,6 @@
 #define DEBUGGER_STACKWINDOW_H
 
 #include <QtGui/QTreeView>
-#include <QtGui/QWidget>
-
-QT_BEGIN_NAMESPACE
-class QComboBox;
-class QModelIndex;
-QT_END_NAMESPACE
 
 namespace Debugger {
 class DebuggerManager;
diff --git a/src/plugins/debugger/threadswindow.cpp b/src/plugins/debugger/threadswindow.cpp
index 951a0eb03852dc8c8d82548385142d093f287645..6f5d4bbff3e758e0e2e9fda843a08e450864ee6e 100644
--- a/src/plugins/debugger/threadswindow.cpp
+++ b/src/plugins/debugger/threadswindow.cpp
@@ -31,6 +31,8 @@
 
 #include "debuggeractions.h"
 
+#include <utils/savedaction.h>
+
 #include <QtGui/QAction>
 #include <QtGui/QContextMenuEvent>
 #include <QtGui/QHeaderView>
diff --git a/src/plugins/debugger/watchhandler.cpp b/src/plugins/debugger/watchhandler.cpp
index fff4f3ce7cd5b361baa9fceaf21b6f7186a6cfab..66794218e01c75bf9f8ff1cb85f1784fce7dca38 100644
--- a/src/plugins/debugger/watchhandler.cpp
+++ b/src/plugins/debugger/watchhandler.cpp
@@ -38,6 +38,7 @@
 #endif
 
 #include <utils/qtcassert.h>
+#include <utils/savedaction.h>
 
 #include <QtCore/QDebug>
 #include <QtCore/QEvent>
diff --git a/src/plugins/debugger/watchwindow.cpp b/src/plugins/debugger/watchwindow.cpp
index 55b51c80edac655089196bd6186959c1b99a8d3a..11c9d552bd8ff3e90a5795662407bd2e3cd95606 100644
--- a/src/plugins/debugger/watchwindow.cpp
+++ b/src/plugins/debugger/watchwindow.cpp
@@ -37,6 +37,7 @@
 #include "idebuggerengine.h"
 
 #include <utils/qtcassert.h>
+#include <utils/savedaction.h>
 
 #include <QtCore/QDebug>
 #include <QtCore/QTimer>
diff --git a/src/plugins/designer/formeditorw.cpp b/src/plugins/designer/formeditorw.cpp
index 5f3a39ecc0ca1eee3e74333b67923181074bf72d..71daf719c1bf90ebbde415e5b219d41ca4083a0e 100644
--- a/src/plugins/designer/formeditorw.cpp
+++ b/src/plugins/designer/formeditorw.cpp
@@ -48,6 +48,8 @@
 #include <coreplugin/icore.h>
 #include <coreplugin/uniqueidmanager.h>
 #include <coreplugin/actionmanager/actionmanager.h>
+#include <coreplugin/actionmanager/actioncontainer.h>
+#include <coreplugin/actionmanager/command.h>
 #include <coreplugin/editormanager/editormanager.h>
 #include <texteditor/texteditorsettings.h>
 #include <extensionsystem/pluginmanager.h>
diff --git a/src/plugins/fakevim/fakevimplugin.cpp b/src/plugins/fakevim/fakevimplugin.cpp
index b644ee2063d4831ba7635e71cd9ec8306712ef65..92565f56d48a7aa50bd3fe94efed4c8d4b63cb88 100644
--- a/src/plugins/fakevim/fakevimplugin.cpp
+++ b/src/plugins/fakevim/fakevimplugin.cpp
@@ -32,8 +32,10 @@
 #include "fakevimhandler.h"
 #include "ui_fakevimoptions.h"
 
-
 #include <coreplugin/actionmanager/actionmanager.h>
+#include <coreplugin/actionmanager/actioncontainer.h>
+#include <coreplugin/actionmanager/command.h>
+#include <coreplugin/actionmanager/command.h>
 #include <coreplugin/coreconstants.h>
 #include <coreplugin/editormanager/editormanager.h>
 #include <coreplugin/editormanager/openeditorsmodel.h>
@@ -82,7 +84,7 @@
 #include <QtGui/QTextBlock>
 #include <QtGui/QTextCursor>
 #include <QtGui/QTextEdit>
-
+#include <QtGui/QTreeWidgetItem>
 
 using namespace FakeVim::Internal;
 using namespace TextEditor;
diff --git a/src/plugins/find/findplugin.cpp b/src/plugins/find/findplugin.cpp
index ab822dfcb9c83be32c4c8d3c7ef8160f3c136f96..d488b5c3f969b7f711dfcf849fdca3c116e12767 100644
--- a/src/plugins/find/findplugin.cpp
+++ b/src/plugins/find/findplugin.cpp
@@ -45,6 +45,8 @@
 
 #include <utils/qtcassert.h>
 
+#include <QtGui/QMenu>
+
 #include <QtCore/QtPlugin>
 #include <QtCore/QSettings>
 
diff --git a/src/plugins/genericprojectmanager/genericprojectwizard.cpp b/src/plugins/genericprojectmanager/genericprojectwizard.cpp
index 299a582513be67f92f386dd6a0f1a6b82961a441..a69503b4f58ef550a5d27213794166edad848309 100644
--- a/src/plugins/genericprojectmanager/genericprojectwizard.cpp
+++ b/src/plugins/genericprojectmanager/genericprojectwizard.cpp
@@ -36,6 +36,8 @@
 
 #include <utils/filewizardpage.h>
 
+#include <QtGui/QIcon>
+
 #include <QtCore/QDir>
 #include <QtCore/QFileInfo>
 #include <QtCore/QtDebug>
diff --git a/src/plugins/git/gitplugin.cpp b/src/plugins/git/gitplugin.cpp
index 38b6a956d8856b2f8fd4d90ee8b86963c62fdf80..bcee1990993180fb1586a2b4a72840026f7dbcb9 100644
--- a/src/plugins/git/gitplugin.cpp
+++ b/src/plugins/git/gitplugin.cpp
@@ -47,6 +47,8 @@
 #include <coreplugin/messagemanager.h>
 #include <coreplugin/uniqueidmanager.h>
 #include <coreplugin/actionmanager/actionmanager.h>
+#include <coreplugin/actionmanager/actioncontainer.h>
+#include <coreplugin/actionmanager/command.h>
 #include <coreplugin/editormanager/editormanager.h>
 
 #include <utils/qtcassert.h>
diff --git a/src/plugins/help/helpplugin.cpp b/src/plugins/help/helpplugin.cpp
index 45e8256b6e817887a9fb969e9e0d785556ae7a40..b963e14175d91d944830f5f056f00cdc7a6c63cd 100644
--- a/src/plugins/help/helpplugin.cpp
+++ b/src/plugins/help/helpplugin.cpp
@@ -43,6 +43,8 @@
 #include "searchwidget.h"
 
 #include <coreplugin/actionmanager/actionmanager.h>
+#include <coreplugin/actionmanager/actioncontainer.h>
+#include <coreplugin/actionmanager/command.h>
 #include <coreplugin/coreconstants.h>
 #include <coreplugin/editormanager/editormanager.h>
 #include <coreplugin/editormanager/ieditor.h>
diff --git a/src/plugins/locator/locatorplugin.cpp b/src/plugins/locator/locatorplugin.cpp
index 24cdc5c20f9772c893f81b142b0f4e3096954add..5d59c7605b3e8c3b00096ac4ff1e0b08a92641dc 100644
--- a/src/plugins/locator/locatorplugin.cpp
+++ b/src/plugins/locator/locatorplugin.cpp
@@ -47,7 +47,10 @@
 #include <coreplugin/icore.h>
 #include <coreplugin/uniqueidmanager.h>
 #include <coreplugin/actionmanager/actionmanager.h>
+#include <coreplugin/actionmanager/actioncontainer.h>
+#include <coreplugin/actionmanager/command.h>
 #include <coreplugin/progressmanager/progressmanager.h>
+#include <coreplugin/progressmanager/futureprogress.h>
 #include <extensionsystem/pluginmanager.h>
 #include <qtconcurrent/QtConcurrentTools>
 
diff --git a/src/plugins/mercurial/mercurialplugin.cpp b/src/plugins/mercurial/mercurialplugin.cpp
index b93c673087b62c058ef0a7dffe7b4956be27dcef..0d8fcabda76f280d9918494ee41c0fec01892aba 100644
--- a/src/plugins/mercurial/mercurialplugin.cpp
+++ b/src/plugins/mercurial/mercurialplugin.cpp
@@ -40,6 +40,8 @@
 #include "mercurialsettings.h"
 
 #include <coreplugin/actionmanager/actionmanager.h>
+#include <coreplugin/actionmanager/actioncontainer.h>
+#include <coreplugin/actionmanager/command.h>
 #include <coreplugin/basemode.h>
 #include <coreplugin/vcsmanager.h>
 #include <coreplugin/coreconstants.h>
diff --git a/src/plugins/perforce/perforceplugin.cpp b/src/plugins/perforce/perforceplugin.cpp
index 4b98b955be4d7d5d49a39b9496de1ca8f5a9e3d6..287d9bcfe2102f0eebd65792d15a23bccf3bfdce 100644
--- a/src/plugins/perforce/perforceplugin.cpp
+++ b/src/plugins/perforce/perforceplugin.cpp
@@ -39,6 +39,8 @@
 #include "settingspage.h"
 
 #include <coreplugin/actionmanager/actionmanager.h>
+#include <coreplugin/actionmanager/actioncontainer.h>
+#include <coreplugin/actionmanager/command.h>
 #include <coreplugin/coreconstants.h>
 #include <coreplugin/editormanager/editormanager.h>
 #include <coreplugin/filemanager.h>
diff --git a/src/plugins/projectexplorer/customwizard/customwizard.h b/src/plugins/projectexplorer/customwizard/customwizard.h
index de910b04fe3d54908a2bd8c34c8778af3fc1be27..b294a7bef3d40fc75e94625c8bacc732bc70c353 100644
--- a/src/plugins/projectexplorer/customwizard/customwizard.h
+++ b/src/plugins/projectexplorer/customwizard/customwizard.h
@@ -36,6 +36,7 @@
 
 #include <QtCore/QSharedPointer>
 #include <QtCore/QList>
+#include <QtCore/QMap>
 
 QT_BEGIN_NAMESPACE
 class QDir;
diff --git a/src/plugins/projectexplorer/outputwindow.cpp b/src/plugins/projectexplorer/outputwindow.cpp
index c172dc1a209f1bdcc219f976e627c17b8db8680c..a4c15c1c02f79b0dc55d65f05e71ada26c345cbb 100644
--- a/src/plugins/projectexplorer/outputwindow.cpp
+++ b/src/plugins/projectexplorer/outputwindow.cpp
@@ -32,6 +32,8 @@
 #include "runconfiguration.h"
 
 #include <coreplugin/actionmanager/actionmanager.h>
+#include <coreplugin/actionmanager/actioncontainer.h>
+#include <coreplugin/actionmanager/command.h>
 #include <coreplugin/coreconstants.h>
 #include <coreplugin/icore.h>
 #include <coreplugin/uniqueidmanager.h>
diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp
index 85ed2f2753d8e7784a43f6ddf8d1a1f6e0886227..d3fd611623394434c6ada569e86552cfb6fca99d 100644
--- a/src/plugins/projectexplorer/projectexplorer.cpp
+++ b/src/plugins/projectexplorer/projectexplorer.cpp
@@ -79,6 +79,8 @@
 #include <coreplugin/modemanager.h>
 #include <coreplugin/uniqueidmanager.h>
 #include <coreplugin/actionmanager/actionmanager.h>
+#include <coreplugin/actionmanager/actioncontainer.h>
+#include <coreplugin/actionmanager/command.h>
 #include <coreplugin/editormanager/editormanager.h>
 #include <coreplugin/editormanager/ieditor.h>
 #include <coreplugin/editormanager/ieditorfactory.h>
diff --git a/src/plugins/projectexplorer/taskwindow.cpp b/src/plugins/projectexplorer/taskwindow.cpp
index 5f62d247e4c09f9935ce4141c9bd4c7de9b35a7c..6b7a446e1f078932b08135f62416b924c10be179 100644
--- a/src/plugins/projectexplorer/taskwindow.cpp
+++ b/src/plugins/projectexplorer/taskwindow.cpp
@@ -47,6 +47,7 @@
 #include <QtGui/QPainter>
 #include <QtGui/QStyledItemDelegate>
 #include <QtGui/QSortFilterProxyModel>
+#include <QtGui/QMenu>
 
 namespace {
     const int TASK_ICON_SIZE = 16;
diff --git a/src/plugins/qmldesigner/qmldesignerplugin.cpp b/src/plugins/qmldesigner/qmldesignerplugin.cpp
index c52835e921b749f04fda922b607479824f0ce349..e7cd5fb2175f9d8e663f037a407bcc4eba1afab1 100644
--- a/src/plugins/qmldesigner/qmldesignerplugin.cpp
+++ b/src/plugins/qmldesigner/qmldesignerplugin.cpp
@@ -40,6 +40,7 @@
 
 #include <coreplugin/modemanager.h>
 #include <coreplugin/actionmanager/actionmanager.h>
+#include <coreplugin/actionmanager/actioncontainer.h>
 #include <coreplugin/actionmanager/command.h>
 #include <coreplugin/icore.h>
 #include <coreplugin/dialogs/iwizard.h>
diff --git a/src/plugins/qmlinspector/qmlinspector.cpp b/src/plugins/qmlinspector/qmlinspector.cpp
index 902c2f398bfaaf18c10578a7977e387bae25459d..4cd0efe196f3cbebc3a16075a419e150fa95513f 100644
--- a/src/plugins/qmlinspector/qmlinspector.cpp
+++ b/src/plugins/qmlinspector/qmlinspector.cpp
@@ -377,7 +377,7 @@ void QmlInspector::initWidgets()
 
 void QmlInspector::setSimpleDockWidgetArrangement()
 {
-    Debugger::DebuggerMainWindow *mainWindow = Debugger::DebuggerUISwitcher::instance()->mainWindow();
+    Utils::FancyMainWindow *mainWindow = Debugger::DebuggerUISwitcher::instance()->mainWindow();
 
     mainWindow->setTrackingEnabled(false);
     QList<QDockWidget *> dockWidgets = mainWindow->dockWidgets();
diff --git a/src/plugins/qmlinspector/qmlinspectorplugin.cpp b/src/plugins/qmlinspector/qmlinspectorplugin.cpp
index 52ee83c5a05c7c1bc00a4ce732523d70f3c943c3..58f789f7ba6cb96e4a5b4882777857a3642c2190 100644
--- a/src/plugins/qmlinspector/qmlinspectorplugin.cpp
+++ b/src/plugins/qmlinspector/qmlinspectorplugin.cpp
@@ -50,6 +50,7 @@
 #include <coreplugin/coreconstants.h>
 #include <coreplugin/uniqueidmanager.h>
 #include <coreplugin/actionmanager/actionmanager.h>
+#include <coreplugin/actionmanager/command.h>
 
 #include <extensionsystem/pluginmanager.h>
 
diff --git a/src/plugins/qmljseditor/qmljseditor.cpp b/src/plugins/qmljseditor/qmljseditor.cpp
index 7bf3057c095ec2f4024f611ced3d7aca2b146075..1d3d24c5a61ce0d7cdf1790819de6db10f8cba1a 100644
--- a/src/plugins/qmljseditor/qmljseditor.cpp
+++ b/src/plugins/qmljseditor/qmljseditor.cpp
@@ -44,6 +44,8 @@
 #include <qmljs/parser/qmljsengine_p.h>
 
 #include <coreplugin/actionmanager/actionmanager.h>
+#include <coreplugin/actionmanager/actioncontainer.h>
+#include <coreplugin/actionmanager/command.h>
 #include <coreplugin/icore.h>
 #include <coreplugin/coreconstants.h>
 #include <coreplugin/modemanager.h>
diff --git a/src/plugins/qmljseditor/qmljseditorplugin.cpp b/src/plugins/qmljseditor/qmljseditorplugin.cpp
index 6ed83cb363d3bdcd4958b7b8d55a81be85bda683..65e2835a8f73d1a17df4fc37c685c5e32b9c61aa 100644
--- a/src/plugins/qmljseditor/qmljseditorplugin.cpp
+++ b/src/plugins/qmljseditor/qmljseditorplugin.cpp
@@ -42,6 +42,8 @@
 #include <coreplugin/mimedatabase.h>
 #include <coreplugin/uniqueidmanager.h>
 #include <coreplugin/actionmanager/actionmanager.h>
+#include <coreplugin/actionmanager/actioncontainer.h>
+#include <coreplugin/actionmanager/command.h>
 #include <coreplugin/editormanager/editormanager.h>
 #include <extensionsystem/pluginmanager.h>
 #include <texteditor/fontsettings.h>
diff --git a/src/plugins/qmlprojectmanager/qmlprojectapplicationwizard.cpp b/src/plugins/qmlprojectmanager/qmlprojectapplicationwizard.cpp
index 23a32c1f072dae03072ebc256e5f2a8458751331..59e4bfdd88caa0e55fc8962f22ec22e2b01e1d48 100644
--- a/src/plugins/qmlprojectmanager/qmlprojectapplicationwizard.cpp
+++ b/src/plugins/qmlprojectmanager/qmlprojectapplicationwizard.cpp
@@ -34,6 +34,8 @@
 #include <projectexplorer/projectexplorer.h>
 #include <projectexplorer/projectexplorerconstants.h>
 
+#include <QtGui/QIcon>
+
 #include <QtCore/QTextStream>
 #include <QtCore/QCoreApplication>
 
diff --git a/src/plugins/qmlprojectmanager/qmlprojectimportwizard.cpp b/src/plugins/qmlprojectmanager/qmlprojectimportwizard.cpp
index a243d74d2ae2584f6c1a6f92688b1c3824ce5aaa..01526cc4aef879827dfcd7043ea61035d28fb700 100644
--- a/src/plugins/qmlprojectmanager/qmlprojectimportwizard.cpp
+++ b/src/plugins/qmlprojectmanager/qmlprojectimportwizard.cpp
@@ -39,11 +39,12 @@
 #include <utils/filenamevalidatinglineedit.h>
 #include <utils/filewizardpage.h>
 
+#include <QtGui/QIcon>
+
 #include <QtCore/QDir>
 #include <QtCore/QtDebug>
 #include <QtCore/QCoreApplication>
 
-
 using namespace Utils;
 
 namespace QmlProjectManager {
diff --git a/src/plugins/qt4projectmanager/customwidgetwizard/customwidgetwizard.cpp b/src/plugins/qt4projectmanager/customwidgetwizard/customwidgetwizard.cpp
index 0f0c87f4d65c571042e48d42c7926040bd91fe3e..cbc94a4028a36eb79e82fb28033966f15c8d92c9 100644
--- a/src/plugins/qt4projectmanager/customwidgetwizard/customwidgetwizard.cpp
+++ b/src/plugins/qt4projectmanager/customwidgetwizard/customwidgetwizard.cpp
@@ -36,6 +36,8 @@
 #include <cpptools/cppmodelmanagerinterface.h>
 #include <projectexplorer/projectexplorerconstants.h>
 
+#include <QtGui/QIcon>
+
 namespace Qt4ProjectManager {
 namespace Internal {
 
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemodeviceconfigurations.h b/src/plugins/qt4projectmanager/qt-maemo/maemodeviceconfigurations.h
index e1bf20305132cb13dff4650720ec7310adda8352..3367c2c964f3a7d93840354df3550019b9b66781 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemodeviceconfigurations.h
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemodeviceconfigurations.h
@@ -38,7 +38,6 @@
 #include <QtCore/QList>
 #include <QtCore/QObject>
 #include <QtCore/QString>
-#include <QtCore/QtGlobal>
 
 QT_BEGIN_NAMESPACE
 class QSettings;
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemomanager.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemomanager.cpp
index d513d755a9930cd406ccf3f7eb93384dd98583c3..cec55536b31957c95700c4e19fa5653a416f7466 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemomanager.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemomanager.cpp
@@ -28,6 +28,7 @@
 **************************************************************************/
 
 #include "maemomanager.h"
+#include "qtversionmanager.h"
 
 #include "maemodeviceconfigurations.h"
 #include "maemorunfactories.h"
@@ -41,6 +42,8 @@
 #include <coreplugin/modemanager.h>
 #include <extensionsystem/pluginmanager.h>
 
+#include <coreplugin/actionmanager/command.h>
+
 #include <QtCore/QDir>
 #include <QtCore/QFile>
 #include <QtCore/QList>
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemomanager.h b/src/plugins/qt4projectmanager/qt-maemo/maemomanager.h
index 9de6ab4dc7fb554b088b66b059e89bfc07b6c7d9..a1d59319735694a209ad80f816dff00d2bcf0d6c 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemomanager.h
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemomanager.h
@@ -30,10 +30,6 @@
 #ifndef MAEMOMANAGER_H
 #define MAEMOMANAGER_H
 
-#include "qtversionmanager.h"
-
-#include <coreplugin/actionmanager/command.h>
-
 #include <QtCore/QObject>
 #include <QtCore/QSet>
 
@@ -43,6 +39,9 @@ QT_BEGIN_NAMESPACE
 class QAction;
 QT_END_NAMESPACE
 
+namespace Core {
+    class Command;
+}
 namespace ProjectExplorer {
     class Project;
     class ToolChain;
@@ -52,7 +51,7 @@ using ProjectExplorer::ToolChain;
 
 namespace Qt4ProjectManager {
     class QtVersion;
-    namespace Internal {
+namespace Internal {
 
 class MaemoRunControlFactory;
 class MaemoRunConfigurationFactory;
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp
index 68862439fcea5b25e934b234bd82f34199e5f38b..47fe16422319d246e2ca2257b8134aa28b320124 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp
@@ -35,8 +35,12 @@
 
 #include <coreplugin/icore.h>
 #include <coreplugin/messagemanager.h>
+
+#include <projectexplorer/projectexplorer.h>
 #include <projectexplorer/session.h>
+
 #include <qt4projectmanager/qt4project.h>
+
 #include <utils/qtcassert.h>
 
 #include <QtCore/QDebug>
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.h b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.h
index 988740f466f1a1e600d6b837effe4768d8dc94ef..83a7fbef688bca1d0882110da8c53f16cc927e88 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.h
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.h
@@ -32,7 +32,6 @@
 
 #include "maemodeviceconfigurations.h"
 
-#include <projectexplorer/projectexplorer.h>
 #include <projectexplorer/runconfiguration.h>
 
 #include <QtCore/QDateTime>
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemoruncontrol.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemoruncontrol.cpp
index b6af2fe3cffd1dc02731b93554e49db957573eb0..288044ea7b23c3b7bd5e5cccbf1610e2df53d77b 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemoruncontrol.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemoruncontrol.cpp
@@ -33,7 +33,7 @@
 ****************************************************************************/
 
 #include "maemoruncontrol.h"
-
+#include "maemosshthread.h"
 #include "maemorunconfiguration.h"
 
 #include <coreplugin/icore.h>
@@ -62,6 +62,10 @@ AbstractMaemoRunControl::AbstractMaemoRunControl(RunConfiguration *rc)
 {
 }
 
+AbstractMaemoRunControl::~AbstractMaemoRunControl()
+{
+}
+
 void AbstractMaemoRunControl::startDeployment(bool forDebugging)
 {
     QTC_ASSERT(runConfig, return);
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemoruncontrol.h b/src/plugins/qt4projectmanager/qt-maemo/maemoruncontrol.h
index b4964d1c3b2cad0ae99eb7826f8ad5c84a63a5bb..6f925dc8532fc7911f96c1a3415cdd23bd0d71cf 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemoruncontrol.h
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemoruncontrol.h
@@ -36,7 +36,6 @@
 #define MAEMORUNCONTROL_H
 
 #include "maemodeviceconfigurations.h"
-#include "maemosshthread.h"
 
 #include <projectexplorer/runconfiguration.h>
 
@@ -55,7 +54,8 @@ namespace Debugger {
 
 namespace Qt4ProjectManager {
 namespace Internal {
-
+class MaemoSshDeployer;
+class MaemoSshRunner;
 class MaemoRunConfiguration;
 
 class AbstractMaemoRunControl : public ProjectExplorer::RunControl
@@ -63,8 +63,8 @@ class AbstractMaemoRunControl : public ProjectExplorer::RunControl
     Q_OBJECT
 
 public:
-    AbstractMaemoRunControl(ProjectExplorer::RunConfiguration *runConfig);
-    virtual ~AbstractMaemoRunControl() {}
+    explicit AbstractMaemoRunControl(ProjectExplorer::RunConfiguration *runConfig);
+    virtual ~AbstractMaemoRunControl();
 
 protected:
     void startDeployment(bool forDebugging);
@@ -111,7 +111,7 @@ class MaemoRunControl : public AbstractMaemoRunControl
 {
     Q_OBJECT
 public:
-    MaemoRunControl(ProjectExplorer::RunConfiguration *runConfiguration);
+    explicit MaemoRunControl(ProjectExplorer::RunConfiguration *runConfiguration);
     ~MaemoRunControl();
     void start();
     void stop();
@@ -134,7 +134,7 @@ class MaemoDebugRunControl : public AbstractMaemoRunControl
 {
     Q_OBJECT
 public:
-    MaemoDebugRunControl(ProjectExplorer::RunConfiguration *runConfiguration);
+    explicit MaemoDebugRunControl(ProjectExplorer::RunConfiguration *runConfiguration);
     ~MaemoDebugRunControl();
     void start();
     void stop();
diff --git a/src/plugins/qt4projectmanager/qt-s60/s60devicespreferencepane.cpp b/src/plugins/qt4projectmanager/qt-s60/s60devicespreferencepane.cpp
index 6d786f426dba73104a58f5c7ef7ec9822d41a954..b04bedcebe2d45a123638345cd3d627e8b558707 100644
--- a/src/plugins/qt4projectmanager/qt-s60/s60devicespreferencepane.cpp
+++ b/src/plugins/qt4projectmanager/qt-s60/s60devicespreferencepane.cpp
@@ -29,6 +29,7 @@
 
 #include "s60devicespreferencepane.h"
 #include "ui_s60devicespreferencepane.h"
+#include "s60devices.h"
 
 #include <qt4projectmanager/qt4projectmanagerconstants.h>
 
diff --git a/src/plugins/qt4projectmanager/qt-s60/s60devicespreferencepane.h b/src/plugins/qt4projectmanager/qt-s60/s60devicespreferencepane.h
index f4203fe775850eeeaae21d524fb41b16dc69c233..b1bb9496c7bc692f64d146836ada18835cecfeef 100644
--- a/src/plugins/qt4projectmanager/qt-s60/s60devicespreferencepane.h
+++ b/src/plugins/qt4projectmanager/qt-s60/s60devicespreferencepane.h
@@ -30,8 +30,6 @@
 #ifndef S60DEVICESPREFERENCEPANE_H
 #define S60DEVICESPREFERENCEPANE_H
 
-#include "s60devices.h"
-
 #include <coreplugin/dialogs/ioptionspage.h>
 
 #include <QtCore/QPointer>
@@ -39,8 +37,9 @@
 
 namespace Qt4ProjectManager {
 namespace Internal {
+class S60Devices;
 
-namespace Ui {
+namespace Ui {    
     class S60DevicesPreferencePane;
 }
 
diff --git a/src/plugins/qt4projectmanager/qt-s60/s60manager.cpp b/src/plugins/qt4projectmanager/qt-s60/s60manager.cpp
index 29ef2d62aaf44cb2cb2731a7a0a2353fdc390093..c88c778628536bf4c9dc54f766784455a26eaddc 100644
--- a/src/plugins/qt4projectmanager/qt-s60/s60manager.cpp
+++ b/src/plugins/qt4projectmanager/qt-s60/s60manager.cpp
@@ -28,6 +28,7 @@
 **************************************************************************/
 
 #include "s60manager.h"
+#include "qtversionmanager.h"
 
 #include "s60devicespreferencepane.h"
 #include "symbiandevicemanager.h"
@@ -47,6 +48,9 @@
 
 #include <QtGui/QMainWindow>
 
+#include <QtCore/QDir>
+#include <QtCore/QFileInfo>
+
 namespace {
     const char S60_AUTODETECTION_SOURCE[] = "QTS60";
 }
diff --git a/src/plugins/qt4projectmanager/qt-s60/s60manager.h b/src/plugins/qt4projectmanager/qt-s60/s60manager.h
index bba53d23f96ffdc222745097d5489aed1a667393..ed334a624961cdd49b72b7889c425825f58102f7 100644
--- a/src/plugins/qt4projectmanager/qt-s60/s60manager.h
+++ b/src/plugins/qt4projectmanager/qt-s60/s60manager.h
@@ -30,17 +30,16 @@
 #ifndef S60MANAGER_H
 #define S60MANAGER_H
 
-#include "qtversionmanager.h"
 #include "s60devices.h"
 
-#include <QtCore/QObject>
+#include <projectexplorer/toolchain.h>
 
-namespace ProjectExplorer {
-class ToolChain;
-}
+#include <QtCore/QObject>
 
 namespace Qt4ProjectManager {
+class QtVersion;
 namespace Internal {
+class S60Devices;
 
 class S60Manager : public QObject
 {
diff --git a/src/plugins/qt4projectmanager/qt-s60/winscwtoolchain.h b/src/plugins/qt4projectmanager/qt-s60/winscwtoolchain.h
index 81f0dad4c1169c3acd043c38fb598e194897079c..9681cc75d14001d72995fbe37452aa77962e2f94 100644
--- a/src/plugins/qt4projectmanager/qt-s60/winscwtoolchain.h
+++ b/src/plugins/qt4projectmanager/qt-s60/winscwtoolchain.h
@@ -32,7 +32,6 @@
 
 #include "s60devices.h"
 
-#include <projectexplorer/project.h>
 #include <projectexplorer/toolchain.h>
 
 namespace Qt4ProjectManager {
diff --git a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp
index edf53116264731089903f7a7db93d1dd3a1c1c33..a3b8b4c5a1bf0e1f68aa1ab3588bf94150b9221d 100644
--- a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp
+++ b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp
@@ -63,6 +63,8 @@
 #include <coreplugin/uniqueidmanager.h>
 #include <coreplugin/mimedatabase.h>
 #include <coreplugin/actionmanager/actionmanager.h>
+#include <coreplugin/actionmanager/actioncontainer.h>
+#include <coreplugin/actionmanager/command.h>
 #include <texteditor/texteditoractionhandler.h>
 
 #ifdef WITH_TESTS
diff --git a/src/plugins/qt4projectmanager/wizards/consoleappwizard.cpp b/src/plugins/qt4projectmanager/wizards/consoleappwizard.cpp
index abcfc4f98176559bc52ed8d024ff5a8966f3e8e6..7b79d3c8ded0af4ca5cc3daf5352f5f93c9a50ba 100644
--- a/src/plugins/qt4projectmanager/wizards/consoleappwizard.cpp
+++ b/src/plugins/qt4projectmanager/wizards/consoleappwizard.cpp
@@ -34,6 +34,8 @@
 
 #include <cpptools/cppmodelmanagerinterface.h>
 
+#include <QtGui/QIcon>
+
 #include <QtCore/QTextStream>
 
 static const char *mainCppC =
diff --git a/src/plugins/qt4projectmanager/wizards/emptyprojectwizard.cpp b/src/plugins/qt4projectmanager/wizards/emptyprojectwizard.cpp
index 231a7dfd01b7b2ffefddc988f515438b6f30429b..02ad1f3a3b8d49bfb8af9553d01f9d7e06f67581 100644
--- a/src/plugins/qt4projectmanager/wizards/emptyprojectwizard.cpp
+++ b/src/plugins/qt4projectmanager/wizards/emptyprojectwizard.cpp
@@ -33,6 +33,8 @@
 
 #include <projectexplorer/projectexplorerconstants.h>
 
+#include <QtGui/QIcon>
+
 namespace Qt4ProjectManager {
 namespace Internal {
 
diff --git a/src/plugins/subversion/subversionplugin.cpp b/src/plugins/subversion/subversionplugin.cpp
index e933eeb2cbffca95a9c31404deda2714081e6e4f..ee1a116964158e6e9d8af644a25a5d63ea163308 100644
--- a/src/plugins/subversion/subversionplugin.cpp
+++ b/src/plugins/subversion/subversionplugin.cpp
@@ -51,6 +51,8 @@
 #include <coreplugin/mimedatabase.h>
 #include <coreplugin/uniqueidmanager.h>
 #include <coreplugin/actionmanager/actionmanager.h>
+#include <coreplugin/actionmanager/actioncontainer.h>
+#include <coreplugin/actionmanager/command.h>
 #include <coreplugin/editormanager/editormanager.h>
 
 #include <locator/commandlocator.h>
diff --git a/src/plugins/texteditor/basefilefind.cpp b/src/plugins/texteditor/basefilefind.cpp
index bb6635997c2d969b4003c9cda83e1699ea5e9b86..4886685943a8b0f01bdc22c048baf743b7265a2b 100644
--- a/src/plugins/texteditor/basefilefind.cpp
+++ b/src/plugins/texteditor/basefilefind.cpp
@@ -31,6 +31,7 @@
 
 #include <coreplugin/icore.h>
 #include <coreplugin/progressmanager/progressmanager.h>
+#include <coreplugin/progressmanager/futureprogress.h>
 #include <coreplugin/editormanager/editormanager.h>
 #include <coreplugin/filemanager.h>
 #include <find/textfindconstants.h>
diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp
index 9034469a45663cf64dbc28bf0e20aae00083a62c..5ec6f11ffadcef4592db6d79483b9e088087c2fd 100644
--- a/src/plugins/texteditor/basetexteditor.cpp
+++ b/src/plugins/texteditor/basetexteditor.cpp
@@ -40,6 +40,8 @@
 
 #include <aggregation/aggregate.h>
 #include <coreplugin/actionmanager/actionmanager.h>
+#include <coreplugin/actionmanager/actioncontainer.h>
+#include <coreplugin/actionmanager/command.h>
 #include <coreplugin/coreconstants.h>
 #include <coreplugin/editormanager/editormanager.h>
 #include <coreplugin/icore.h>
diff --git a/src/plugins/texteditor/texteditoractionhandler.cpp b/src/plugins/texteditor/texteditoractionhandler.cpp
index c3bc5ff3d8cd74bfd79ca08f93c56f11617524c7..17687f245f6570446dc96bfed96fde41fa2feb45 100644
--- a/src/plugins/texteditor/texteditoractionhandler.cpp
+++ b/src/plugins/texteditor/texteditoractionhandler.cpp
@@ -40,6 +40,8 @@
 #include <coreplugin/coreconstants.h>
 #include <coreplugin/uniqueidmanager.h>
 #include <coreplugin/actionmanager/actionmanager.h>
+#include <coreplugin/actionmanager/actioncontainer.h>
+#include <coreplugin/actionmanager/command.h>
 #include <coreplugin/editormanager/editormanager.h>
 #include <utils/qtcassert.h>