diff --git a/doc/doc.pri b/doc/doc.pri
index e9e34fe733b561ee693ab897afa04be814003186..4207e364c766b53f2dc01a487c5d62bef801ec23 100644
--- a/doc/doc.pri
+++ b/doc/doc.pri
@@ -9,7 +9,11 @@ unix {
 QHP_FILE = $$OUT_PWD/doc/html/qtcreator.qhp
 QCH_FILE = $$OUT_PWD/doc/qtcreator.qch
 
-html_docs.commands =$$QDOC $$PWD/qtcreator.qdocconf
+unix {
+html_docs.commands = $$QDOC $$PWD/qtcreator.qdocconf
+} else {
+html_docs.commands = \"$$QDOC $$PWD/qtcreator.qdocconf\"
+}
 html_docs.depends += $$PWD/qtcreator.qdoc $$PWD/qtcreator.qdocconf
 html_docs.files = $$QHP_FILE
 
diff --git a/doc/qtcreator-session-manager.png b/doc/qtcreator-session-manager.png
new file mode 100644
index 0000000000000000000000000000000000000000..66f387ac5dab659b0160db05834958112db37ede
Binary files /dev/null and b/doc/qtcreator-session-manager.png differ
diff --git a/doc/qtcreator-session-menu.png b/doc/qtcreator-session-menu.png
new file mode 100644
index 0000000000000000000000000000000000000000..eaae9ef1465d8dbc2ecfbc76ed50cc987808c0d0
Binary files /dev/null and b/doc/qtcreator-session-menu.png differ
diff --git a/doc/qtcreator-vcs-annotate.png b/doc/qtcreator-vcs-annotate.png
new file mode 100644
index 0000000000000000000000000000000000000000..87b7ed117352fe8b04cf6ce032560a5e93a3eb93
Binary files /dev/null and b/doc/qtcreator-vcs-annotate.png differ
diff --git a/doc/qtcreator-vcs-commit.png b/doc/qtcreator-vcs-commit.png
new file mode 100644
index 0000000000000000000000000000000000000000..2c58ad57732edbbd1d83f96dce548ffd65c34bf9
Binary files /dev/null and b/doc/qtcreator-vcs-commit.png differ
diff --git a/doc/qtcreator-vcs-describe.png b/doc/qtcreator-vcs-describe.png
new file mode 100644
index 0000000000000000000000000000000000000000..d0949b1e59e657fa34f1f9c926eae082533973af
Binary files /dev/null and b/doc/qtcreator-vcs-describe.png differ
diff --git a/doc/qtcreator-vcs-diff.png b/doc/qtcreator-vcs-diff.png
new file mode 100644
index 0000000000000000000000000000000000000000..fdb9a0f5da83259e30a92995bba2349349cef858
Binary files /dev/null and b/doc/qtcreator-vcs-diff.png differ
diff --git a/doc/qtcreator-vcs-gitbranch.png b/doc/qtcreator-vcs-gitbranch.png
new file mode 100644
index 0000000000000000000000000000000000000000..398de10ee6595f196b5dac31407a310c1b201f31
Binary files /dev/null and b/doc/qtcreator-vcs-gitbranch.png differ
diff --git a/doc/qtcreator-vcs-log.png b/doc/qtcreator-vcs-log.png
new file mode 100644
index 0000000000000000000000000000000000000000..e74cd3dade8ba9bffbb30affe5a688fbdd38d315
Binary files /dev/null and b/doc/qtcreator-vcs-log.png differ
diff --git a/doc/qtcreator-vcs-pane.png b/doc/qtcreator-vcs-pane.png
new file mode 100644
index 0000000000000000000000000000000000000000..faea0cf32e1a20cfceb71e79274d694cfdb04354
Binary files /dev/null and b/doc/qtcreator-vcs-pane.png differ
diff --git a/doc/qtcreator.qdoc b/doc/qtcreator.qdoc
index 3c50c9d428050c7e4668c2f21e5b1dc7ad5c6b10..4f393ec9dc186c3e6a6d4d989d7e861b43a83f3b 100644
--- a/doc/qtcreator.qdoc
+++ b/doc/qtcreator.qdoc
@@ -20,9 +20,9 @@
 
     \table
     \row
-    \o \inlineimage qtcreator-screenshots.png
+        \o \inlineimage qtcreator-screenshots.png
     \row
-    \o Qt Creator includes a wide range of useful features. Among them are:
+        \o Qt Creator includes a wide range of useful features. Among them are:
     \list 1
         \o \bold{Smart Code Editor}: The code editor provides syntax
             highlighting as well as code completion.
@@ -49,8 +49,11 @@
     \list
        \o \l{A Quick Tour of Qt Creator}
        \o \l{Creating a Project in Qt Creator}
+       \o \l{The Code Editor}
        \o \l{Build Settings}
+       \o \l{Qt Version Management}
        \o \l{Writing a Simple Program with Qt Creator}
+       \o \l{Qt Creator and Version Control Systems}
        \o \l{Navigating Quickly Around Your Code with Locator}
        \o \l{Debugging with Qt Creator}
        \o \l{Tips and Tricks}
@@ -154,21 +157,20 @@
 
     \section1 Session Management in Qt Creator
 
-    ### screenshot
-
     In Qt Creator, a session is a collection of loaded projects, opened files,
     editor settings, and so on. When you run Qt Creator, you have a default
     session. You can create a new session using the \gui{Session Manager...},
     available in the \gui{File -> Session} menu.
 
+
+    \image qtcreator-session-manager.png
+
+
     To switch between sessions, select \gui{File -> Session}. If you do not
     create and select any session, Qt Creator will always use the default
     session.
 
-\omit
-    session management can also store project dependencies, thorbjorn is
-    currently working on it
-\endomit
+    \image qtcreator-session-menu.png
 
 
     \section1 Qt Help Integration
@@ -206,10 +208,74 @@
     are available to help speed up the process of developing your application.
 */
 
+/*! \contentspage index.html
+    \previouspage creator-quick-tour.html
+    \page creator-code-editor.html
+    \nextpage creator-build-settings.html
+
+    \title The Code Editor
+
+    ### SCREENSHOT of the editor in action
+
+
+    \table
+        \row
+            \i  Block navigation
+            \i  To navigate between blocks, e.g., from one \bold{\{} to another
+                \bold{\}} , use \key{Ctrl+[} and \key{Ctrl+]}.
+        \row
+            \i  Block selection
+            \i  To select a current block, use \key{Ctrl+U}. Pressing
+                \key{Ctrl+U} again extends the selection to the parent block.
+                To deselect, use \key{Ctrl+Shift+U}.    
+        \row
+            \i  Moving lines up and down
+            \i  
+
+        \row
+            \i  Completion
+            \i
+
+        \row
+            \i  Indenting Blocks
+            \i
+        \row
+            \i  Commenting or Uncommenting Blocks
+            \i
+
+        \row
+            \i  Switch between Header and Source
+            \i  Use \key{F4}.
+
+        \row
+            \i  Increasing and Decreasing Font Size
+            \i  Use \key{Ctrl+Scroll Wheel}
+
+        \row
+            \i  Follow Symbols under The Cursor
+            \i  Use \key{F2} and \key{Shift+F2}. This feature works with
+                namespaces, classes, methods, variables, include statements,
+                and macros.
+    \endtable
+
+
+    More:
+
+    Collapse
+
+    Up/Down/Page Up/Page Down - hold ctrl to prevent the cursor from moving
+
+
+
+    To switch to an external editor, select \gui{Open in external editor} from
+    the \gui{Edit -> Advanced} menu.
+
+*/
+
 
 /*!
     \contentspage index.html
-    \previouspage creator-quick-tour.html
+    \previouspage creator-code-editor.html
     \page creator-build-settings.html
     \nextpage creator-creating-project.html
 
@@ -266,8 +332,23 @@
     remove the build step. You will still be able to debug applications, but the
     contents of Qt and STL data types will not be displayed properly.
 
+    \section1 Dependencies
+
+    If you have multiple projects loaded in your session, you can configure
+    dependencies between them. This will affect the build order of your
+    projects. To do this, go the the \bold{Dependencies} tab after selecting
+    the project for which you want to configure the dependencies, and then use
+    the checkboxes to check which of the other projects is a dependency.
 
-    \section1 Qt Version Management
+*/
+
+/*!
+    \contentspage index.html
+    \previouspage creator-build-settings.html
+    \page creator-version-management.html
+    \nextpage creator-creating-project.html
+
+    \title Qt Version Management
 
     Qt Creator allows you to use multiple versions of Qt installed on your hard
     disk and switch between them easily.
@@ -692,6 +773,136 @@
 
 */
 
+/*!
+    \contentspage index.html
+    \previouspage creator-navigation.html
+    \page creator-version-control.html
+    \nextpage creator-debugging.html
+
+    \title Qt Creator and Version Control Systems
+
+    \table
+        \caption    Version control systems supported by Qt Creator
+        \row
+            \i  \bold{git}
+            \i  \l{http://git-scm.com/}
+        \row
+            \i  \bold{Subversion}
+            \i  \l{http://subversion.tigris.org/}
+        \row
+            \i  \bold{Perforce}
+            \i  \l{http://www.perforce.com}
+    \endtable
+
+
+    \section1 Setup
+
+    Qt Creator uses the version control system's command line clients to
+    access your repositories. To set it up, you must ensure that these command
+    line clients can be located via the \c{PATH} environment variable. You can
+    specify the path to the command line client's executable in the settings    
+    pages that can be found under \gui{Options...} in the \gui{Tools} menu.
+
+
+    \section1 Usage
+
+    You can find the version control menu entires in a sub-menu of the
+    \gui{Tools} menu. The version control system displayed here is the system
+    that manages the current project.
+
+    Each version control system adds a pane to the \gui{Application Output}
+    panes within which it will log the commands it executes, prepended by a
+    timestamp and the relevant output.
+
+    \image qtcreator-vcs-pane.png
+
+
+    \section2 Addings Files
+
+    When you create a new file or a new project, the wizards will display page
+    requesting whether the files should be added to a version control system.
+    This depends on whether the parent directory or the project is already
+    under version control and the system supports the concept of adding files,
+    e.g., \bold{Perforce} and \bold{Subversion}. Alternatively, you can also
+    add files later on using the version control tool menus.
+
+    With \bold{git}, there is no concept of adding files. Instead, all modified
+    files must be \e{staged} for a commit.
+
+
+    \section2 Viewing Diff Output
+
+    All version control systems provide menu options to \e{diff} the current
+    file or project - comparing with the latest version stored in the
+    repository and displaying the differences. In Qt Creator, a diff is
+    displayed in a read-only editor. If the file is accessible, you can double
+    -click on a selected diff chunk and Qt Creator will open an editor
+    displaying the file, scrolled to the line in question.
+
+    \image qtcreator-vcs-diff.png
+
+
+    \section2 Viewing Versioning History and Change Details
+
+    The versioning history of a file can be displayed by selecting the
+    \gui{Log} (for \bold{git}) or \gui{Filelog} (for \bold{Perforce} and
+    \bold{Subversion}) option. Typically, the log output will contain the
+    date, the commit message, and a change or revision identifier. If you
+    click on the identifier, a description of the change including the diff
+    will be displayed.
+
+    \image qtcreator-vcs-log.png
+    \image qtcreator-vcs-describe.png
+
+
+    \section2 Annotating Files
+
+    Annotation views are obtained by selecting \gui{Annotate} or \gui{Blame}.
+    This will display the lines of the file prepended by the change identifier
+    they originate from. Clicking on the change identifier shows a detailed
+    description of the file.
+
+
+    \section2 Committing Changes
+
+    Once you have finished making changes, you can submit them to the version
+    control system by choosing \gui{Commit} or \gui{Submit}. Qt Creator will
+    display a commit page containing a text editor, where you can enter your
+    commit message, and a checkable list of modified files to be included.
+    When you are done, click \gui{Commit} to start committing. In addition,
+    there is a \gui{Diff selected} button that brings up a diff view of the
+    files selected in the file list. Since the commit page is just another
+    editor, you can go back to it by closing the diff view. Alternatively, you
+    can view it from the editor combo box showing the \gui{Opened files}.
+
+    \image qtcreator-vcs-commit.png
+
+
+    \section2 Menu Entries Specific to git
+
+    The git sub-menu contains additional entries:
+
+    \table
+        \row
+            \i  \gui{Stash}
+            \i  Stash local changes prior to executing a \bold{pull}.
+        \row
+            \i  \gui{Pull}
+            \i  Pull changes from the remote repository. If there are locally
+                modified files, you will be prompted to stash those changes.
+        \row
+            \i  \gui{Branches...}
+            \i  Displays the branch dialog showing the local branches at the
+                top and remote branches at the bottom. To switch to the local
+                branch, simply double-click on it. Double-clicking on a remote
+                branch will first create a local branch with the same name that
+                tracks the remote branch, and then switch to it.
+
+                \image qtcreator-vcs-gitbranch.png
+    \endtable
+
+*/
+
 
 /*!
     \contentspage index.html
@@ -1017,8 +1228,8 @@
 
     \bold{Keyboard Shortcuts}
 
-    Qt Creator provides a lot of useful keyboard shortcuts. A complete list can
-    be found \l{Keyboard Shortcuts}{here}.
+    Qt Creator provides a lot of useful keyboard shortcuts. Some useful
+    shortcuts can be found \l{Keyboard Shortcuts}{here}.
 
     \bold{Running Qt Creator from the Command Line}
 
@@ -1065,25 +1276,41 @@
             \o  Meaning
 
         \row
-            \o  System Qt   \target glossary-system-qt
+            \o
+                \raw HTML
+                System Qt
+                \endraw
+                \target glossary-system-qt
             \o  The version of Qt installed on your system. This is the Qt
                 version for the \c qmake command found in your \c PATH.
 
         \row
-            \o  Default Qt  \target glossary-default-qt
+            \o
+                \raw HTML
+                Default Qt
+                \endraw
+                \target glossary-default-qt
             \o  The version of Qt configured in \gui{Tools -> Options -> Qt 4
                 -> Default Qt Version}. This is the Qt version used by your
                 new projects. It defaults to System Qt.
 
         \row
-            \o  Project Qt  \target glossary-project-qt
+            \o
+                \raw HTML
+                Project Qt
+                \endraw
+                \target glossary-project-qt
             \o  The version of Qt configured in \gui{Build&Run -> Build
                 Settings -> Build Configurations}. This is the Qt version that
                 is actually used by a particular project. It defaults to
                 Default Qt.
 
         \row
-            \o  Shadow Build    \target glossary-shadow-build
+            \o
+                \raw HTML
+                Shadow Build
+                \endraw
+                \target glossary-shadow-build
             \o  Shadow building means building a project in a separate
                 directory, the \e{build directory}. The build directory is
                 different from the source directory. One of the benefits of
diff --git a/scripts/shipping/prepare-linux-qt-for-shipping.sh b/scripts/shipping/prepare-linux-qt-for-shipping.sh
index d56a58763ea9cd38a6d58e72032d57e662a90834..10f4620a2cd082898c34e7789e679483a1133322 100755
--- a/scripts/shipping/prepare-linux-qt-for-shipping.sh
+++ b/scripts/shipping/prepare-linux-qt-for-shipping.sh
@@ -1,8 +1,9 @@
 #!/usr/bin/env bash
 
-workdir=/home/berlin/dev/qt-4.4.3-temp
-destdir=/home/berlin/dev/qt-4.4.3-shipping
-dir=qt-x11-opensource-src-4.4.3
+version=4.4.3
+workdir=/home/berlin/dev/qt-${version}-temp
+destdir=/home/berlin/dev/qt-${version}-shipping
+dir=qt-x11-opensource-src-${version}
 file_tar="${dir}.tar"
 file_tar_gz="${file_tar}.gz"
 [ -z ${MAKE} ] && MAKE=make
@@ -44,7 +45,7 @@ download() {
 		mirror=http://wftp.tu-chemnitz.de/pub/Qt/qt/source
 		;;
 	esac
-	wget "${mirror}/${file}" || die "Download failed"
+	wget "${mirror}/${file_tar_gz}" || die "Download failed"
 }
 
 unpack() {
@@ -55,7 +56,7 @@ unpack() {
 
 build() {
 	(
-		cd "${dir}"
+		cd "${dir}" || die "cd failed"
 		if [ ! -f config.status ] ; then
 			env -i PATH=${envpath} ./configure \
 				-prefix "${destdir}" \
@@ -75,11 +76,44 @@ build() {
 	ret=$?; [ ${ret} = 0 ] || exit ${ret}
 }
 
+fix_rpath() {
+	folder=$1
+	pattern=$2
+	rpath=$3
+	(
+		cd "${destdir}" || die "cd failed"
+		while read file ; do
+			echo "Fixing ${file}"
+			chrpath -r "${rpath}" "${file}" 2>&1 | sed 's/^/\t/'
+		done < <(find "${folder}" -type f -name "${pattern}")
+	)
+	ret=$?; [ ${ret} = 0 ] || exit ${ret}
+}
+
 inst() {
 	(
-		cd "${dir}"
-		mkdir -p "${destdir}"
-		env -i "${MAKE}" install || die "make install failed"
+		cd "${dir}" || die "cd failed"
+		if [ ! -d "${destdir}" ]; then
+			mkdir -p "${destdir}"
+			env -i "${MAKE}" install || die "make install failed"
+		fi
+
+		cd "${destdir}" || die "cd failed"
+
+		# Fix files bin/*
+		fix_rpath bin '*' '$ORIGIN/../lib'
+
+		# Fix files lib/*.so
+		fix_rpath lib '*.so.?.?.?' '$ORIGIN'
+		fix_rpath lib '*.so.?.?.?.debug' '$ORIGIN'
+
+		# Fix files examples/tools/*/*/*.so
+		fix_rpath examples/tools '*.so' '$ORIGIN/../../../lib'
+		fix_rpath examples/tools '*.so.debug' '$ORIGIN/../../../lib'
+
+		# Fix files plugins/*/*.so
+		fix_rpath plugins '*.so' '$ORIGIN/../../lib'
+		fix_rpath plugins '*.so.debug' '$ORIGIN/../../lib'
 	)
 	ret=$?; [ ${ret} = 0 ] || exit ${ret}
 }
diff --git a/shared/cplusplus/Parser.cpp b/shared/cplusplus/Parser.cpp
index ae9f39469a0671c7732d26cf3ae617a9e92e7be0..eefa3d5b9fe978bdcc6ecc7b4c1fcfcfa8c174e7 100644
--- a/shared/cplusplus/Parser.cpp
+++ b/shared/cplusplus/Parser.cpp
@@ -751,6 +751,9 @@ bool Parser::parseCvQualifiers(SpecifierAST *&node)
             spec->specifier_token = consumeToken();
             *ast = spec;
             ast = &(*ast)->next;
+        } else if(LA() == T___ATTRIBUTE__) {
+            parseAttributeSpecifier(*ast);
+            ast = &(*ast)->next;
         } else {
             break;
         }
diff --git a/shared/scriptwrapper/interface_wrap_helpers.h b/shared/scriptwrapper/interface_wrap_helpers.h
index 0ead88f90fccfc22ebea0c1003ff54f018e82695..8ec308fe7e152dd5e528e34c844274980549217a 100644
--- a/shared/scriptwrapper/interface_wrap_helpers.h
+++ b/shared/scriptwrapper/interface_wrap_helpers.h
@@ -34,7 +34,6 @@
 #ifndef INTERFACE_WRAP_HELPERS_H
 #define INTERFACE_WRAP_HELPERS_H
 
-#include <extensionsystem/ExtensionSystemInterfaces>
 #include <QtScript/QScriptEngine>
 
 namespace SharedTools {
diff --git a/src/libs/cplusplus/pp-engine.cpp b/src/libs/cplusplus/pp-engine.cpp
index 6ed55492e50479b8531474d28971bf17ddd4afbe..e7d3011a7677ff132f46378e1d99538a201614d1 100644
--- a/src/libs/cplusplus/pp-engine.cpp
+++ b/src/libs/cplusplus/pp-engine.cpp
@@ -963,7 +963,21 @@ void Preprocessor::processElif(TokenIterator firstToken, TokenIterator lastToken
     } else if (iflevel == 0 && !skipping()) {
         // std::cerr << "*** WARNING #else without #if" << std::endl;
     } else if (!_true_test[iflevel] && !_skipping[iflevel - 1]) {
-        const Value result = evalExpression(tk.dot(), lastToken, _source);
+
+        const char *first = startOfToken(*tk);
+        const char *last = startOfToken(*lastToken);
+
+        MacroExpander expandCondition (env);
+        QByteArray condition;
+        condition.reserve(256);
+        expandCondition(first, last, &condition);
+
+        QVector<Token> tokens = tokenize(condition);
+
+        const Value result = evalExpression(tokens.constBegin(),
+                                            tokens.constEnd() - 1,
+                                            condition);
+
         _true_test[iflevel] = ! result.is_zero ();
         _skipping[iflevel]  =   result.is_zero ();
     } else {
diff --git a/src/libs/extensionsystem/ExtensionSystemInterfaces b/src/libs/extensionsystem/ExtensionSystemInterfaces
deleted file mode 100644
index 7f42b55e89a78c663b3b8d72107a62dd2804c8b9..0000000000000000000000000000000000000000
--- a/src/libs/extensionsystem/ExtensionSystemInterfaces
+++ /dev/null
@@ -1,39 +0,0 @@
-/***************************************************************************
-**
-** This file is part of Qt Creator
-**
-** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
-**
-** Contact:  Qt Software Information (qt-info@nokia.com)
-**
-**
-** Non-Open Source Usage
-**
-** Licensees may use this file in accordance with the Qt Beta Version
-** License Agreement, Agreement version 2.2 provided with the Software or,
-** alternatively, in accordance with the terms contained in a written
-** agreement between you and Nokia.
-**
-** GNU General Public License Usage
-**
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License versions 2.0 or 3.0 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the packaging
-** of this file.  Please review the following information to ensure GNU
-** General Public Licensing requirements will be met:
-**
-** http://www.fsf.org/licensing/licenses/info/GPLv2.html and
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt GPL Exception
-** version 1.3, included in the file GPL_EXCEPTION.txt in this package.
-**
-***************************************************************************/
-
-#include "extensionsystem/pluginmanager.h"
-#include "extensionsystem/pluginspec.h"
-#include "extensionsystem/iplugin.h"
-#include "extensionsystem/pluginview.h"
-#include "extensionsystem/pluginerrorview.h"
-#include "extensionsystem/plugindetailsview.h"
diff --git a/src/plugins/bineditor/bineditorplugin.cpp b/src/plugins/bineditor/bineditorplugin.cpp
index 883459ba7d7c88f471516929e57e5c7a0f15af83..7e3d15dc4c18a2330aa5707da716e9a28311c54d 100644
--- a/src/plugins/bineditor/bineditorplugin.cpp
+++ b/src/plugins/bineditor/bineditorplugin.cpp
@@ -35,22 +35,23 @@
 #include "bineditor.h"
 #include "bineditorconstants.h"
 
+#include <QtCore/QFile>
 #include <QtCore/QFileInfo>
 #include <QtGui/QMenu>
 #include <QtGui/QAction>
 #include <QtGui/QMainWindow>
 #include <QtGui/QHBoxLayout>
-#include <QtCore/QFile>
 
-#include <coreplugin/icore.h>
+#include <coreplugin/actionmanager/actionmanager.h>
 #include <coreplugin/coreconstants.h>
+#include <coreplugin/editormanager/editormanager.h>
+#include <coreplugin/icore.h>
 #include <coreplugin/mimedatabase.h>
 #include <coreplugin/uniqueidmanager.h>
-#include <coreplugin/actionmanager/actionmanager.h>
-#include <coreplugin/editormanager/editormanager.h>
-#include <texteditor/texteditorsettings.h>
-#include <texteditor/fontsettings.h>
+#include <extensionsystem/pluginmanager.h>
 #include <find/ifindsupport.h>
+#include <texteditor/fontsettings.h>
+#include <texteditor/texteditorsettings.h>
 #include <utils/linecolumnlabel.h>
 #include <utils/reloadpromptutils.h>
 
@@ -204,7 +205,7 @@ public:
             break;
         }
 
-        switch (Core::Utils::reloadPrompt(fileName, BinEditorPlugin::core()->mainWindow())) {
+        switch (Core::Utils::reloadPrompt(fileName, Core::ICore::instance()->mainWindow())) {
         case Core::Utils::ReloadCurrent:
             open(fileName);
             break;
@@ -230,12 +231,15 @@ class BinEditorInterface : public Core::IEditor
 {
     Q_OBJECT
 public:
-    BinEditorInterface(BinEditor *parent ) : Core::IEditor(parent) {
+    BinEditorInterface(BinEditor *parent)
+        : Core::IEditor(parent)
+    {
+        Core::ICore *core = Core::ICore::instance();
         m_editor = parent;
         m_file = new BinEditorFile(parent);
-        m_context << BinEditorPlugin::core()->uniqueIDManager()->
+        m_context << core->uniqueIDManager()->
             uniqueIdentifier(Core::Constants::K_DEFAULT_BINARY_EDITOR);
-        m_context << BinEditorPlugin::core()->uniqueIDManager()->uniqueIdentifier(Constants::C_BINEDITOR);
+        m_context << core->uniqueIDManager()->uniqueIdentifier(Constants::C_BINEDITOR);
         m_cursorPositionLabel = new Core::Utils::LineColumnLabel;
 
         QHBoxLayout *l = new QHBoxLayout;
@@ -316,7 +320,8 @@ QString BinEditorFactory::kind() const
 
 Core::IFile *BinEditorFactory::open(const QString &fileName)
 {
-    Core::IEditor *iface = m_owner->m_core->editorManager()->openEditor(fileName, kind());
+    Core::ICore *core = Core::ICore::instance();
+    Core::IEditor *iface = core->editorManager()->openEditor(fileName, kind());
     return iface ? iface->file() : 0;
 }
 
@@ -336,8 +341,7 @@ QStringList BinEditorFactory::mimeTypes() const
 
 BinEditorPlugin *BinEditorPlugin::m_instance = 0;
 
-BinEditorPlugin::BinEditorPlugin() :
-    m_core(0)
+BinEditorPlugin::BinEditorPlugin()
 {
     m_undoAction = m_redoAction = m_copyAction = m_selectAllAction = 0;
     m_instance = this;
@@ -353,16 +357,11 @@ BinEditorPlugin *BinEditorPlugin::instance()
     return m_instance;
 }
 
-Core::ICore *BinEditorPlugin::core()
-{
-    return m_instance->m_core;
-}
-
 QAction *BinEditorPlugin::registerNewAction(const QString &id, const QString &title)
 {
 
     QAction *result = new QAction(title, this);
-    m_core->actionManager()->registerAction(result, id, m_context);
+    Core::ICore::instance()->actionManager()->registerAction(result, id, m_context);
     return result;
 }
 
@@ -385,7 +384,8 @@ void BinEditorPlugin::initializeEditor(BinEditor *editor)
     QObject::connect(editor, SIGNAL(modificationChanged(bool)), editorInterface, SIGNAL(changed()));
     editor->setEditorInterface(editorInterface);
 
-    m_context << BinEditorPlugin::core()->uniqueIDManager()->uniqueIdentifier(Constants::C_BINEDITOR);
+    Core::ICore *core = Core::ICore::instance();
+    m_context << core->uniqueIDManager()->uniqueIdentifier(Constants::C_BINEDITOR);
     if (!m_undoAction) {
         m_undoAction      = registerNewAction(QLatin1String(Core::Constants::UNDO),
                                               this, SLOT(undoAction()),
@@ -415,13 +415,16 @@ void BinEditorPlugin::initializeEditor(BinEditor *editor)
     aggregate->add(editor);
 }
 
-bool BinEditorPlugin::initialize(const QStringList & /*arguments*/, QString *errorMessage)
+bool BinEditorPlugin::initialize(const QStringList &arguments, QString *errorMessage)
 {
-    m_core = ExtensionSystem::PluginManager::instance()->getObject<Core::ICore>();
-    if (!m_core->mimeDatabase()->addMimeTypes(QLatin1String(":/bineditor/BinEditor.mimetypes.xml"), errorMessage))
+    Q_UNUSED(arguments);
+    Q_UNUSED(errorMessage);
+
+    Core::ICore *core = Core::ICore::instance();
+    if (!core->mimeDatabase()->addMimeTypes(QLatin1String(":/bineditor/BinEditor.mimetypes.xml"), errorMessage))
         return false;
 
-    connect(m_core, SIGNAL(contextAboutToChange(Core::IContext *)),
+    connect(core, SIGNAL(contextAboutToChange(Core::IContext *)),
         this, SLOT(updateCurrentEditor(Core::IContext *)));
 
     addAutoReleasedObject(new BinEditorFactory(this));
diff --git a/src/plugins/bineditor/bineditorplugin.h b/src/plugins/bineditor/bineditorplugin.h
index 51ff129dd6259de65c085116b4116302e647433b..ddc4333acdb5c36514060642c9ee98228f052a1a 100644
--- a/src/plugins/bineditor/bineditorplugin.h
+++ b/src/plugins/bineditor/bineditorplugin.h
@@ -62,7 +62,6 @@ public:
     ~BinEditorPlugin();
 
     static BinEditorPlugin *instance();
-    static Core::ICore *core();
 
     bool initialize(const QStringList &arguments, QString *error_message = 0);
     void extensionsInitialized();
diff --git a/src/plugins/bookmarks/bookmarkmanager.cpp b/src/plugins/bookmarks/bookmarkmanager.cpp
index 88857a81fb7d0a9a5c97f3df6399762461b1a5f2..3d9ea294d927d0eef495f8da7b2a4d9280e33009 100644
--- a/src/plugins/bookmarks/bookmarkmanager.cpp
+++ b/src/plugins/bookmarks/bookmarkmanager.cpp
@@ -37,10 +37,11 @@
 #include "bookmarksplugin.h"
 #include "bookmarks_global.h"
 
-#include <projectexplorer/ProjectExplorerInterfaces>
-#include <coreplugin/icore.h>
 #include <coreplugin/editormanager/editormanager.h>
+#include <coreplugin/icore.h>
 #include <coreplugin/uniqueidmanager.h>
+#include <extensionsystem/pluginmanager.h>
+#include <projectexplorer/projectexplorer.h>
 #include <texteditor/basetexteditor.h>
 #include <utils/qtcassert.h>
 
@@ -49,6 +50,7 @@
 
 #include <QtGui/QAction>
 #include <QtGui/QContextMenuEvent>
+#include <QtGui/QMenu>
 #include <QtGui/QPainter>
 
 Q_DECLARE_METATYPE(Bookmarks::Internal::Bookmark*)
@@ -56,6 +58,7 @@ Q_DECLARE_METATYPE(Bookmarks::Internal::Bookmark*)
 using namespace Bookmarks;
 using namespace Bookmarks::Internal;
 using namespace ProjectExplorer;
+using namespace Core;
 
 BookmarkDelegate::BookmarkDelegate(QObject *parent)
     : QStyledItemDelegate(parent), m_normalPixmap(0), m_selectedPixmap(0)
@@ -212,8 +215,7 @@ BookmarkView::BookmarkView(QWidget *parent)
             this, SLOT(gotoBookmark(const QModelIndex &)));
 
     m_bookmarkContext = new BookmarkContext(this);
-    Core::ICore *core = ExtensionSystem::PluginManager::instance()->getObject<Core::ICore>();
-    core->addContextObject(m_bookmarkContext);
+    ICore::instance()->addContextObject(m_bookmarkContext);
 
     setItemDelegate(new BookmarkDelegate(this));
     setFrameStyle(QFrame::NoFrame);
@@ -223,8 +225,7 @@ BookmarkView::BookmarkView(QWidget *parent)
 
 BookmarkView::~BookmarkView()
 {
-    Core::ICore *core = ExtensionSystem::PluginManager::instance()->getObject<Core::ICore>();
-    core->removeContextObject(m_bookmarkContext);
+    ICore::instance()->removeContextObject(m_bookmarkContext);
 }
 
 void BookmarkView::contextMenuEvent(QContextMenuEvent *event)
@@ -244,13 +245,11 @@ void BookmarkView::contextMenuEvent(QContextMenuEvent *event)
     connect(removeAll, SIGNAL(triggered()),
             this, SLOT(removeAll()));
 
-
     menu.exec(mapToGlobal(event->pos()));
 }
 
 void BookmarkView::removeFromContextMenu()
 {
-
     removeBookmark(m_contextMenuIndex);
 }
 
@@ -294,7 +293,7 @@ void BookmarkView::gotoBookmark(const QModelIndex &index)
 BookmarkContext::BookmarkContext(BookmarkView *widget)
     : m_bookmarkView(widget)
 {
-    Core::ICore *core = ExtensionSystem::PluginManager::instance()->getObject<Core::ICore>();
+    Core::ICore *core = ICore::instance();
     m_context << core->uniqueIDManager()->uniqueIdentifier(Constants::BOOKMARKS_CONTEXT);
 }
 
@@ -313,15 +312,14 @@ QWidget *BookmarkContext::widget()
 ////
 
 BookmarkManager::BookmarkManager() :
-    m_core(BookmarksPlugin::core()),
     m_bookmarkIcon(QIcon(QLatin1String(":/bookmarks/images/bookmark.png")))
 {
     m_selectionModel = new QItemSelectionModel(this, this);
 
-    connect(m_core, SIGNAL(contextChanged(Core::IContext*)),
+    connect(Core::ICore::instance(), SIGNAL(contextChanged(Core::IContext*)),
             this, SLOT(updateActionStatus()));
 
-    ExtensionSystem::PluginManager *pm = m_core->pluginManager();
+    ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
     ProjectExplorerPlugin *projectExplorer = pm->getObject<ProjectExplorerPlugin>();
 
     connect(projectExplorer->session(), SIGNAL(sessionLoaded()),
@@ -511,7 +509,8 @@ void BookmarkManager::documentPrevNext(bool next)
             nextLine = markLine;
     }
 
-    m_core->editorManager()->addCurrentPositionToNavigationHistory(true);
+    Core::EditorManager *em = Core::ICore::instance()->editorManager();
+    em->addCurrentPositionToNavigationHistory(true);
     if (next) {
         if (nextLine == -1)
             editor->gotoLine(firstLine);
@@ -523,7 +522,7 @@ void BookmarkManager::documentPrevNext(bool next)
         else
             editor->gotoLine(prevLine);
     }
-    m_core->editorManager()->addCurrentPositionToNavigationHistory();
+    em->addCurrentPositionToNavigationHistory();
 }
 
 void BookmarkManager::next()
@@ -555,16 +554,17 @@ void BookmarkManager::prev()
 
 TextEditor::ITextEditor *BookmarkManager::currentTextEditor() const
 {
-    Core::IEditor *currEditor = m_core->editorManager()->currentEditor();
+    Core::EditorManager *em = Core::ICore::instance()->editorManager();
+    Core::IEditor *currEditor = em->currentEditor();
     if (!currEditor)
         return 0;
     return qobject_cast<TextEditor::ITextEditor *>(currEditor);
 }
 
 /* Returns the current session. */
-SessionManager* BookmarkManager::sessionManager() const
+SessionManager *BookmarkManager::sessionManager() const
 {
-    ExtensionSystem::PluginManager *pm = m_core->pluginManager();
+    ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
     ProjectExplorerPlugin *pe = pm->getObject<ProjectExplorerPlugin>();
     return pe->session();
 }
diff --git a/src/plugins/bookmarks/bookmarkmanager.h b/src/plugins/bookmarks/bookmarkmanager.h
index 1763b4e52605dde5c5dd3a2b43ac92dc0817d4d9..0a422e5b2393871d6c3f1082655109b4a1915c25 100644
--- a/src/plugins/bookmarks/bookmarkmanager.h
+++ b/src/plugins/bookmarks/bookmarkmanager.h
@@ -48,7 +48,6 @@ class SessionManager;
 }
 
 namespace Core {
-class ICore;
 class IEditor;
 }
 
@@ -131,7 +130,6 @@ private:
     typedef QMap<QString, FileNameBookmarksMap *> DirectoryFileBookmarksMap;
 
     DirectoryFileBookmarksMap m_bookmarksMap;
-    Core::ICore *m_core;
 
     QIcon m_bookmarkIcon;
 
diff --git a/src/plugins/bookmarks/bookmarksplugin.cpp b/src/plugins/bookmarks/bookmarksplugin.cpp
index 55b28ec82a3a8f2cec7a6c4ab709e9de71858a27..d7051fab068429fd18bffe645be56afa5d9ccb2e 100644
--- a/src/plugins/bookmarks/bookmarksplugin.cpp
+++ b/src/plugins/bookmarks/bookmarksplugin.cpp
@@ -35,16 +35,17 @@
 #include "bookmarkmanager.h"
 #include "bookmarks_global.h"
 
-#include <texteditor/texteditorconstants.h>
-#include <texteditor/itexteditor.h>
 #include <coreplugin/icore.h>
 #include <coreplugin/editormanager/ieditor.h>
 #include <coreplugin/editormanager/editormanager.h>
 #include <coreplugin/coreconstants.h>
 #include <coreplugin/uniqueidmanager.h>
 #include <coreplugin/actionmanager/actionmanager.h>
+#include <extensionsystem/pluginmanager.h>
+#include <texteditor/itexteditor.h>
+#include <texteditor/texteditorconstants.h>
 
-#include <QtCore/qplugin.h>
+#include <QtCore/QtPlugin>
 #include <QtCore/QDebug>
 
 #include <QtGui/QMenu>
@@ -56,7 +57,7 @@ using namespace TextEditor;
 BookmarksPlugin *BookmarksPlugin::m_instance = 0;
 
 BookmarksPlugin::BookmarksPlugin()
-    : m_bookmarkManager(0), m_core(0)
+    : m_bookmarkManager(0)
 {
     m_instance = this;
 }
@@ -67,13 +68,13 @@ void BookmarksPlugin::extensionsInitialized()
 
 bool BookmarksPlugin::initialize(const QStringList & /*arguments*/, QString *)
 {
-    m_core = ExtensionSystem::PluginManager::instance()->getObject<Core::ICore>();
-    Core::ActionManager *am = m_core->actionManager();
+    Core::ICore *core = Core::ICore::instance();
+    Core::ActionManager *am = core->actionManager();
 
-    QList<int> context = QList<int>() << m_core->uniqueIDManager()->
+    QList<int> context = QList<int>() << core->uniqueIDManager()->
         uniqueIdentifier(Constants::BOOKMARKS_CONTEXT);
     QList<int> textcontext, globalcontext;
-    textcontext << m_core->uniqueIDManager()->
+    textcontext << core->uniqueIDManager()->
         uniqueIdentifier(TextEditor::Constants::C_TEXTEDITOR);
     globalcontext << Core::Constants::C_GLOBAL_ID;
 
@@ -171,7 +172,7 @@ bool BookmarksPlugin::initialize(const QStringList & /*arguments*/, QString *)
         this, SLOT(bookmarkMarginActionTriggered()));
 
     // EditorManager
-    QObject *editorManager = m_core->editorManager();
+    QObject *editorManager = core->editorManager();
     connect(editorManager, SIGNAL(editorAboutToClose(Core::IEditor*)),
         this, SLOT(editorAboutToClose(Core::IEditor*)));
     connect(editorManager, SIGNAL(editorOpened(Core::IEditor*)),
diff --git a/src/plugins/bookmarks/bookmarksplugin.h b/src/plugins/bookmarks/bookmarksplugin.h
index f4853c48cb89f1b9d1d88ad9bde02dcded293471..ef3cfbe0236b25f8b98750df672d4f6917e59e24 100644
--- a/src/plugins/bookmarks/bookmarksplugin.h
+++ b/src/plugins/bookmarks/bookmarksplugin.h
@@ -45,7 +45,6 @@ class QMenu;
 QT_END_NAMESPACE
 
 namespace Core {
-class ICore;
 class IEditor;
 }
 
@@ -67,7 +66,6 @@ public:
     ~BookmarksPlugin();
 
     static BookmarksPlugin *instance() { return m_instance; }
-    static Core::ICore *core() { return m_instance->m_core; }
 
     bool initialize(const QStringList &arguments, QString *error_message);
     void extensionsInitialized();
@@ -85,7 +83,6 @@ private slots:
 private:
     static BookmarksPlugin *m_instance;
     BookmarkManager *m_bookmarkManager;
-    Core::ICore *m_core;
 
     QAction *m_toggleAction;
     QAction *m_prevAction;
diff --git a/src/plugins/cmakeprojectmanager/cmakeproject.cpp b/src/plugins/cmakeprojectmanager/cmakeproject.cpp
index d98539969afc79073744f6da6b35c387245a1dcb..effe432e36ade9e953ae7eceace894c7221feba0 100644
--- a/src/plugins/cmakeprojectmanager/cmakeproject.cpp
+++ b/src/plugins/cmakeprojectmanager/cmakeproject.cpp
@@ -80,13 +80,14 @@ CMakeProject::~CMakeProject()
 // TODO make this function work even if it is reparsing
 void CMakeProject::parseCMakeLists(const QDir &directory)
 {
-    createCbpFile(directory);
+    createCbpFile(buildDirectory(QString()));
 
-    QString cbpFile = findCbpFile(directory);
+    QString cbpFile = findCbpFile(buildDirectory(QString()));
 
     CMakeCbpParser cbpparser;
     qDebug()<<"Parsing file "<<cbpFile;
     if (cbpparser.parseCbpFile(cbpFile)) {
+        m_projectName = cbpparser.projectName();
         qDebug()<<"Building Tree";
         // TODO do a intelligent updating of the tree
         buildTree(m_rootNode, cbpparser.fileList());
@@ -152,9 +153,10 @@ void CMakeProject::createCbpFile(const QDir &directory)
 
     // TODO we need to pass on the same paremeters as the cmakestep
     qDebug()<<"Creating cbp file";
+    directory.mkpath(directory.absolutePath());
     QProcess cmake;
     cmake.setWorkingDirectory(directory.absolutePath());
-    cmake.start("cmake", QStringList() << "-GCodeBlocks - Unix Makefiles");
+    cmake.start("cmake", QStringList() << ".." << "-GCodeBlocks - Unix Makefiles");
     cmake.waitForFinished(-1);
     qDebug()<<"cmake output: \n"<<cmake.readAll();
 }
@@ -200,8 +202,7 @@ ProjectExplorer::FolderNode *CMakeProject::findOrCreateFolder(CMakeProjectNode *
 
 QString CMakeProject::name() const
 {
-    // TODO
-    return "";
+    return m_projectName;
 }
 
 Core::IFile *CMakeProject::file() const
@@ -214,11 +215,6 @@ ProjectExplorer::IProjectManager *CMakeProject::projectManager() const
     return m_manager;
 }
 
-QList<Core::IFile *> CMakeProject::dependencies()
-{
-    return QList<Core::IFile *>();
-}
-
 QList<ProjectExplorer::Project *> CMakeProject::dependsOn()
 {
     return QList<Project *>();
@@ -240,7 +236,7 @@ QString CMakeProject::buildDirectory(const QString &buildConfiguration) const
 {
     QString buildDirectory = value(buildConfiguration, "buildDirectory").toString();
     if (buildDirectory.isEmpty())
-        buildDirectory = QFileInfo(m_fileName).absolutePath();
+        buildDirectory = QFileInfo(m_fileName).absolutePath() + "/qtcreator-build";
     return buildDirectory;
 }
 
@@ -469,6 +465,8 @@ void CMakeCbpParser::parseProject()
         readNext();
         if (isEndElement()) {
             return;
+        } else if (name() == "Option") {
+            parseOption();
         } else if (name() == "Unit") {
             parseUnit();
         } else if (name() == "Build") {
@@ -521,7 +519,7 @@ void CMakeCbpParser::parseTargetOption()
 {
     if (attributes().hasAttribute("output"))
         m_target.executable = attributes().value("output").toString();
-    else if (attributes().hasAttribute("type") && attributes().value("type") == "1")
+    else if (attributes().hasAttribute("type") && (attributes().value("type") == "1" || attributes().value("type") == "0"))
         m_targetType = true;
     else if (attributes().hasAttribute("working_dir"))
         m_target.workingDirectory = attributes().value("working_dir").toString();
@@ -537,6 +535,26 @@ void CMakeCbpParser::parseTargetOption()
     }
 }
 
+QString CMakeCbpParser::projectName() const
+{
+    return m_projectName;
+}
+
+void CMakeCbpParser::parseOption()
+{
+    if (attributes().hasAttribute("title"))
+        m_projectName = attributes().value("title").toString();
+
+    while (!atEnd()) {
+        readNext();
+        if (isEndElement()) {
+            return;
+        } else if(isStartElement()) {
+            parseUnknownElement();
+        }
+    }
+}
+
 void CMakeCbpParser::parseMakeCommand()
 {
     while (!atEnd()) {
diff --git a/src/plugins/cmakeprojectmanager/cmakeproject.h b/src/plugins/cmakeprojectmanager/cmakeproject.h
index cad7b5fe5df1dd46042d36edf963380031a6a88a..a71ca7c8b008d477be1fad35bf59eeeb38e61d61 100644
--- a/src/plugins/cmakeprojectmanager/cmakeproject.h
+++ b/src/plugins/cmakeprojectmanager/cmakeproject.h
@@ -73,7 +73,6 @@ public:
     virtual Core::IFile *file() const;
     virtual ProjectExplorer::IProjectManager *projectManager() const;
 
-    virtual QList<Core::IFile *> dependencies(); //NBS TODO remove
     virtual QList<ProjectExplorer::Project *> dependsOn(); //NBS TODO implement dependsOn
 
     virtual bool isApplication() const;
@@ -118,6 +117,7 @@ private:
     CMakeManager *m_manager;
     QString m_fileName;
     CMakeFile *m_file;
+    QString m_projectName;
 
     // TODO probably need a CMake specific node structure
     CMakeProjectNode* m_rootNode;
@@ -137,10 +137,12 @@ public:
     QList<ProjectExplorer::FileNode *> fileList();
     QStringList includeFiles();
     QList<CMakeTarget> targets();
+    QString projectName() const;
 private:
     void parseCodeBlocks_project_file();
     void parseProject();
     void parseBuild();
+    void parseOption();
     void parseTarget();
     void parseTargetOption();
     void parseMakeCommand();
@@ -157,6 +159,7 @@ private:
     CMakeTarget m_target;
     bool m_targetType;
     QList<CMakeTarget> m_targets;
+    QString m_projectName;
 };
 
 class CMakeFile : public Core::IFile
diff --git a/src/plugins/cmakeprojectmanager/cmakeprojectmanager.cpp b/src/plugins/cmakeprojectmanager/cmakeprojectmanager.cpp
index 1f4bc59e9efb04170f759024f6dd5a1244de86bd..966c0144355d73273e7d03b0db7d9ce527e3f7dc 100644
--- a/src/plugins/cmakeprojectmanager/cmakeprojectmanager.cpp
+++ b/src/plugins/cmakeprojectmanager/cmakeprojectmanager.cpp
@@ -37,7 +37,6 @@
 #include "cmakeprojectconstants.h"
 
 #include <coreplugin/icore.h>
-#include <extensionsystem/pluginmanager.h>
 #include <coreplugin/uniqueidmanager.h>
 #include <projectexplorer/projectexplorerconstants.h>
 
@@ -45,7 +44,7 @@ using namespace CMakeProjectManager::Internal;
 
 CMakeManager::CMakeManager()
 {
-    Core::ICore *core = ExtensionSystem::PluginManager::instance()->getObject<Core::ICore>();
+    Core::ICore *core = Core::ICore::instance();
     m_projectContext = core->uniqueIDManager()->uniqueIdentifier(CMakeProjectManager::Constants::PROJECTCONTEXT);
     m_projectLanguage = core->uniqueIDManager()->uniqueIdentifier(ProjectExplorer::Constants::LANG_CXX);
 }
diff --git a/src/plugins/cmakeprojectmanager/cmakeprojectplugin.cpp b/src/plugins/cmakeprojectmanager/cmakeprojectplugin.cpp
index e1b2b1279b61697701dea9d3dee90b4b8d65d2c3..29ad08ec5f1501ee5ec58c5a62f1fb72673a4f68 100644
--- a/src/plugins/cmakeprojectmanager/cmakeprojectplugin.cpp
+++ b/src/plugins/cmakeprojectmanager/cmakeprojectplugin.cpp
@@ -40,7 +40,7 @@
 #include <coreplugin/icore.h>
 #include <coreplugin/mimedatabase.h>
 
-#include <QtCore/qplugin.h>
+#include <QtCore/QtPlugin>
 #include <QtCore/QDebug>
 
 
@@ -56,7 +56,7 @@ CMakeProjectPlugin::~CMakeProjectPlugin()
 
 bool CMakeProjectPlugin::initialize(const QStringList & /*arguments*/, QString *errorMessage)
 {
-    Core::ICore *core = ExtensionSystem::PluginManager::instance()->getObject<Core::ICore>();
+    Core::ICore *core = Core::ICore::instance();
     if (!core->mimeDatabase()->addMimeTypes(QLatin1String(":cmakeproject/CMakeProject.mimetypes.xml"), errorMessage))
         return false;
     addAutoReleasedObject(new CMakeManager());
diff --git a/src/plugins/coreplugin/actionmanager/actionmanager.cpp b/src/plugins/coreplugin/actionmanager/actionmanager.cpp
index 3932d42598b6cd2b466a993a9b131863d9173297..9101801ac735804376aa8b81c536ce0e03e52d6d 100644
--- a/src/plugins/coreplugin/actionmanager/actionmanager.cpp
+++ b/src/plugins/coreplugin/actionmanager/actionmanager.cpp
@@ -61,7 +61,7 @@ namespace {
     You get the only implementation of this class from the core interface
     ICore::actionManager() method, e.g.
     \code
-        ExtensionSystem::PluginManager::instance()->getObject<Core::ICore>()->actionManager()
+        Core::ICore::instance()->actionManager()
     \endcode
 
     The main reasons for the need of this class is to provide a central place where the user
@@ -80,8 +80,7 @@ namespace {
     So to register a globally active action "My Action"
     put the following in your plugin's IPlugin::initialize method:
     \code
-        Core::ActionManager *am = ExtensionSystem::PluginManager::instance()
-            ->getObject<Core::ICore>()->actionManager();
+        Core::ActionManager *am = Core::ICore::instance()->actionManager();
         QAction *myAction = new QAction(tr("My Action"), this);
         Core::Command *cmd = am->registerAction(myAction,
                                                  "myplugin.myaction",
diff --git a/src/plugins/coreplugin/basefilewizard.cpp b/src/plugins/coreplugin/basefilewizard.cpp
index aad82af6677679758db01335d57134af0bb5f07d..17cf04615b5e1cb1025c9721a0227737ecf6fcbc 100644
--- a/src/plugins/coreplugin/basefilewizard.cpp
+++ b/src/plugins/coreplugin/basefilewizard.cpp
@@ -38,6 +38,7 @@
 #include <coreplugin/icore.h>
 #include <coreplugin/coreconstants.h>
 #include <coreplugin/ifilewizardextension.h>
+#include <extensionsystem/pluginmanager.h>
 #include <utils/filewizarddialog.h>
 
 #include <QtCore/QDir>
@@ -345,28 +346,19 @@ void WizardEventLoop::rejected()
 // ---------------- BaseFileWizardPrivate
 struct BaseFileWizardPrivate
 {
-    explicit BaseFileWizardPrivate(const Core::BaseFileWizardParameters &parameters,
-                                   Core::ICore *core);
+    explicit BaseFileWizardPrivate(const Core::BaseFileWizardParameters &parameters)
+      : m_parameters(parameters), m_wizardDialog(0)
+    {}
 
     const Core::BaseFileWizardParameters m_parameters;
     QWizard *m_wizardDialog;
-    Core::ICore *m_core;
 };
 
-Core::BaseFileWizardPrivate::BaseFileWizardPrivate(const BaseFileWizardParameters &parameters,
-                                   Core::ICore *core) :
-    m_parameters(parameters),
-    m_wizardDialog(0),
-    m_core(core)
-{
-}
-
 // ---------------- Wizard
 BaseFileWizard::BaseFileWizard(const BaseFileWizardParameters &parameters,
-                       Core::ICore *core,
                        QObject *parent) :
     IWizard(parent),
-    m_d(new BaseFileWizardPrivate(parameters, core))
+    m_d(new BaseFileWizardPrivate(parameters))
 {
 }
 
@@ -517,13 +509,14 @@ bool BaseFileWizard::postGenerateFiles(const GeneratedFiles &l, QString *errorMe
 {
     // File mode: open the editors in file mode and ensure editor pane
     const Core::GeneratedFiles::const_iterator cend = l.constEnd();
+    Core::EditorManager *em = Core::ICore::instance()->editorManager();
     for (Core::GeneratedFiles::const_iterator it = l.constBegin(); it != cend; ++it) {
-        if (!m_d->m_core->editorManager()->openEditor(it->path(), it->editorKind())) {
+        if (!em->openEditor(it->path(), it->editorKind())) {
             *errorMessage = tr("Failed to open an editor for %1").arg(it->path());
             return false;
         }
     }
-    m_d->m_core->editorManager()->ensureEditorManagerVisible();
+    em->ensureEditorManagerVisible();
     return true;
 }
 
@@ -534,7 +527,6 @@ BaseFileWizard::OverwriteResult BaseFileWizard::promptOverwrite(const QString &l
     if (debugWizard)
         qDebug() << Q_FUNC_INFO  << location << files;
 
-
     bool existingFilesFound = false;
     bool oddStuffFound = false;
 
@@ -581,7 +573,7 @@ BaseFileWizard::OverwriteResult BaseFileWizard::promptOverwrite(const QString &l
     const QString messageFormat = tr("The following files already exist in the directory %1:\n"
                                      "%2.\nWould you like to overwrite them?");
     const QString message = messageFormat.arg(location).arg(fileNamesMsgPart);
-    const bool yes = (QMessageBox::question(core()->mainWindow(),
+    const bool yes = (QMessageBox::question(Core::ICore::instance()->mainWindow(),
                                             tr("Existing files"), message,
                                             QMessageBox::Yes | QMessageBox::No,
                                             QMessageBox::No)
@@ -589,11 +581,6 @@ BaseFileWizard::OverwriteResult BaseFileWizard::promptOverwrite(const QString &l
     return yes ? OverwriteOk :  OverwriteCanceled;
 }
 
-Core::ICore *BaseFileWizard::core() const
-{
-    return m_d->m_core;
-}
-
 QList<IWizard*> BaseFileWizard::allWizards()
 {
     return ExtensionSystem::PluginManager::instance()->getObjects<IWizard>();
@@ -636,19 +623,18 @@ QString BaseFileWizard::buildFileName(const QString &path,
 
 QString BaseFileWizard::preferredSuffix(const QString &mimeType) const
 {
-    const QString rc = m_d->m_core->mimeDatabase()->preferredSuffixByType(mimeType);
+    const QString rc = Core::ICore::instance()->mimeDatabase()->preferredSuffixByType(mimeType);
     if (rc.isEmpty())
         qWarning("%s: WARNING: Unable to find a preferred suffix for %s.",
                  Q_FUNC_INFO, mimeType.toUtf8().constData());
     return rc;
 }
 
-// ------------- StandardFileWizard(
+// ------------- StandardFileWizard
 
 StandardFileWizard::StandardFileWizard(const BaseFileWizardParameters &parameters,
-                                       Core::ICore *core,
                                        QObject *parent) :
-    BaseFileWizard(parameters,  core, parent)
+    BaseFileWizard(parameters, parent)
 {
 }
 
diff --git a/src/plugins/coreplugin/basefilewizard.h b/src/plugins/coreplugin/basefilewizard.h
index 40e98793cb9f57e310fbd62b75906d90846ceb72..5f0a1ec9b555f44d24f0f7eca64cc54e773d7848 100644
--- a/src/plugins/coreplugin/basefilewizard.h
+++ b/src/plugins/coreplugin/basefilewizard.h
@@ -50,7 +50,6 @@ QT_END_NAMESPACE
 
 namespace Core {
 
-class ICore;
 class IEditor;
 class IFileWizardExtension;
 
@@ -69,7 +68,7 @@ public:
     GeneratedFile();
     explicit GeneratedFile(const QString &path);
     GeneratedFile(const GeneratedFile &);
-    GeneratedFile &operator=(const GeneratedFile&);
+    GeneratedFile &operator=(const GeneratedFile &);
     ~GeneratedFile();
 
     // Full path of the file should be created, or the suggested file name
@@ -107,19 +106,19 @@ public:
     void setKind(IWizard::Kind k);
 
     QIcon icon() const;
-    void setIcon(const QIcon&);
+    void setIcon(const QIcon &icon);
 
     QString description() const;
-    void setDescription(const QString &);
+    void setDescription(const QString &description);
 
     QString name() const;
-    void setName(const QString &);
+    void setName(const QString &name);
 
     QString category() const;
-    void setCategory(const QString &);
+    void setCategory(const QString &category);
 
     QString trCategory() const;
-    void setTrCategory(const QString &);
+    void setTrCategory(const QString &trCategory);
 
 private:
     QSharedDataPointer<BaseFileWizardParameterData> m_d;
@@ -172,7 +171,7 @@ public:
 protected:
     typedef QList<QWizardPage *> WizardPageList;
 
-    explicit BaseFileWizard(const BaseFileWizardParameters &parameters, Core::ICore *core, QObject *parent = 0);
+    explicit BaseFileWizard(const BaseFileWizardParameters &parameters, QObject *parent = 0);
 
     // Overwrite to create the wizard dialog on the parent, adding
     // the extension pages.
@@ -197,8 +196,6 @@ protected:
     OverwriteResult promptOverwrite(const QString &location,
                                     const QStringList &files,
                                     QString *errorMessage) const;
-    Core::ICore *core() const;
-
 private:
     BaseFileWizardPrivate *m_d;
 };
@@ -213,7 +210,7 @@ class CORE_EXPORT StandardFileWizard : public BaseFileWizard
     Q_OBJECT
 
 protected:
-    explicit StandardFileWizard(const BaseFileWizardParameters &parameters, Core::ICore *core, QObject *parent = 0);
+    explicit StandardFileWizard(const BaseFileWizardParameters &parameters, QObject *parent = 0);
 
     // Implemented to create a Core::Utils::FileWizardDialog
     virtual QWizard *createWizardDialog(QWidget *parent,
diff --git a/src/plugins/coreplugin/baseview.cpp b/src/plugins/coreplugin/baseview.cpp
index f3dd93f51553b09e8cb7d66c653b3faa1a913107..ae93c281fa5bb49b679b7de3130498077fa69bc1 100644
--- a/src/plugins/coreplugin/baseview.cpp
+++ b/src/plugins/coreplugin/baseview.cpp
@@ -33,7 +33,7 @@
 
 #include "baseview.h"
 
-#include <extensionsystem/ExtensionSystemInterfaces>
+#include <QtGui/QWidget>
 
 using namespace Core;
 
diff --git a/src/plugins/coreplugin/coreconstants.h b/src/plugins/coreplugin/coreconstants.h
index 822e452c3503d26a6f8888117e80c18ae6e8fcf1..c16838fb049f36a5578be45055d9f4a492171325 100644
--- a/src/plugins/coreplugin/coreconstants.h
+++ b/src/plugins/coreplugin/coreconstants.h
@@ -34,8 +34,6 @@
 #ifndef CORECONSTANTS_H
 #define CORECONSTANTS_H
 
-#include <extensionsystem/ExtensionSystemInterfaces>
-
 namespace Core {
 namespace Constants {
 
@@ -122,6 +120,7 @@ const char * const EXIT                  = "QtCreator.Exit";
 
 const char * const OPTIONS               = "QtCreator.Options";
 const char * const TOGGLE_SIDEBAR        = "QtCreator.ToggleSidebar";
+const char * const TOGGLE_FULLSCREEN     = "QtCreator.ToggleFullScreen";
 
 const char * const MINIMIZE_WINDOW       = "QtCreator.MinimizeWindow";
 const char * const ZOOM_WINDOW           = "QtCreator.ZoomWindow";
@@ -146,7 +145,7 @@ const char * const ABOUT_WORKBENCH       = "QtCreator.AboutWorkbench";
 const char * const ABOUT_PLUGINS         = "QtCreator.AboutPlugins";
 const char * const ABOUT_QT              = "QtCreator.AboutQt";
 const char * const S_RETURNTOEDITOR      = "QtCreator.ReturnToEditor";
-const char * const OPEN_IN_EXTERNAL_EDITOR = "QtCreattor.OpenInExternalEditor";
+const char * const OPEN_IN_EXTERNAL_EDITOR = "QtCreator.OpenInExternalEditor";
 
 // default groups
 const char * const G_DEFAULT_ONE         = "QtCreator.Group.Default.One";
@@ -174,11 +173,18 @@ const char * const G_FILE_OTHER          = "QtCreator.Group.File.Other";
 const char * const G_EDIT_UNDOREDO       = "QtCreator.Group.Edit.UndoRedo";
 const char * const G_EDIT_COPYPASTE      = "QtCreator.Group.Edit.CopyPaste";
 const char * const G_EDIT_SELECTALL      = "QtCreator.Group.Edit.SelectAll";
-const char * const G_EDIT_FORMAT         = "QtCreator.Group.Edit.Format";
+const char * const G_EDIT_ADVANCED       = "QtCreator.Group.Edit.Advanced";
 
 const char * const G_EDIT_FIND           = "QtCreator.Group.Edit.Find";
 const char * const G_EDIT_OTHER          = "QtCreator.Group.Edit.Other";
 
+// advanced edit menu groups
+
+const char * const G_EDIT_FORMAT         = "QtCreator.Group.Edit.Format";
+const char * const G_EDIT_COLLAPSING     = "QtCreator.Group.Edit.Collapsing";
+const char * const G_EDIT_FONT           = "QtCreator.Group.Edit.Font";
+const char * const G_EDIT_EDITOR         = "QtCreator.Group.Edit.Editor";
+
 // window menu groups
 const char * const G_WINDOW_SIZE         = "QtCreator.Group.Window.Size";
 const char * const G_WINDOW_PANES        = "QtCreator.Group.Window.Panes";
@@ -188,6 +194,7 @@ const char * const G_WINDOW_NAVIGATE     = "QtCreator.Group.Window.Navigate";
 const char * const G_WINDOW_NAVIGATE_GROUPS = "QtCreator.Group.Window.Navigate.Groups";
 const char * const G_WINDOW_OTHER        = "QtCreator.Group.Window.Other";
 const char * const G_WINDOW_LIST         = "QtCreator.Group.Window.List";
+const char * const G_WINDOW_FULLSCREEN   = "QtCreator.Group.Window.Fullscreen";
 
 // help groups (global)
 const char * const G_HELP_HELP           = "QtCreator.Group.Help.Help";
diff --git a/src/plugins/coreplugin/coreimpl.cpp b/src/plugins/coreplugin/coreimpl.cpp
index 68653b52fc7a7a5e963822e516350cef4e92de7a..9f8ec24b576b20712c6447f3d5c04317c26f3d92 100644
--- a/src/plugins/coreplugin/coreimpl.cpp
+++ b/src/plugins/coreplugin/coreimpl.cpp
@@ -36,12 +36,21 @@
 #include <QtCore/QDir>
 #include <QtCore/QCoreApplication>
 
+namespace Core {
+namespace Internal {
+
+// The Core Singleton
+static CoreImpl *m_instance = 0;
+
+} // namespace Internal
+} // namespace Core
+
+
 using namespace Core;
 using namespace Core::Internal;
 
-CoreImpl *CoreImpl::m_instance = 0;
 
-CoreImpl *CoreImpl::instance()
+ICore* ICore::instance()
 {
     return m_instance;
 }
@@ -190,3 +199,4 @@ void CoreImpl::openFiles(const QStringList &arguments)
 {
     m_mainwindow->openFiles(arguments);
 }
+
diff --git a/src/plugins/coreplugin/coreimpl.h b/src/plugins/coreplugin/coreimpl.h
index b09de4101f6a13262d7e0e0cc66e4ac08aee8889..a845a4b99056c679dd89e3e1faef964256acf55f 100644
--- a/src/plugins/coreplugin/coreimpl.h
+++ b/src/plugins/coreplugin/coreimpl.h
@@ -45,8 +45,6 @@ class CoreImpl : public ICore
     Q_OBJECT
 
 public:
-    static CoreImpl *instance();
-
     CoreImpl(MainWindow *mainwindow);
     ~CoreImpl() {}
 
@@ -93,8 +91,6 @@ public:
 private:
     MainWindow *m_mainwindow;
     friend class MainWindow;
-
-    static CoreImpl *m_instance;
 };
 
 } // namespace Internal
diff --git a/src/plugins/coreplugin/coreplugin.cpp b/src/plugins/coreplugin/coreplugin.cpp
index 4b18570037a82aec00ab52461f4ce885d970a18f..b947b54827cefd168c20658f70642d58c458b84f 100644
--- a/src/plugins/coreplugin/coreplugin.cpp
+++ b/src/plugins/coreplugin/coreplugin.cpp
@@ -39,7 +39,9 @@
 #include "modemanager.h"
 #include "fileiconprovider.h"
 
-#include <QtCore/qplugin.h>
+#include <extensionsystem/pluginmanager.h>
+
+#include <QtCore/QtPlugin>
 #if !defined(QT_NO_WEBKIT)
 #include <QtGui/QApplication>
 #include <QtWebKit/QWebSettings>
diff --git a/src/plugins/coreplugin/dialogs/settingsdialog.cpp b/src/plugins/coreplugin/dialogs/settingsdialog.cpp
index 669ea09bf928639f4164f26584e064fd96d0b22b..547c0f2d40dbf9dedf2f828be9f271689a1d0913 100644
--- a/src/plugins/coreplugin/dialogs/settingsdialog.cpp
+++ b/src/plugins/coreplugin/dialogs/settingsdialog.cpp
@@ -34,6 +34,8 @@
 #include "settingsdialog.h"
 #include "coreimpl.h"
 
+#include <extensionsystem/pluginmanager.h>
+
 #include <QtGui/QHeaderView>
 #include <QtGui/QPushButton>
 
@@ -58,7 +60,7 @@ SettingsDialog::SettingsDialog(QWidget *parent, const QString &initialCategory,
     QMap<QString, QTreeWidgetItem *> categories;
 
     QList<IOptionsPage*> pages =
-        CoreImpl::instance()->pluginManager()->getObjects<IOptionsPage>();
+        ExtensionSystem::PluginManager::instance()->getObjects<IOptionsPage>();
 
     int index = 0;
     foreach (IOptionsPage *page, pages) {
diff --git a/src/plugins/coreplugin/editormanager/editormanager.cpp b/src/plugins/coreplugin/editormanager/editormanager.cpp
index 72751522ad22d08b1bb78540f660040418a2f051..4572fef6f255da061c01842bfbdc5c9fd1800a8b 100644
--- a/src/plugins/coreplugin/editormanager/editormanager.cpp
+++ b/src/plugins/coreplugin/editormanager/editormanager.cpp
@@ -53,6 +53,8 @@
 #include <coreplugin/baseview.h>
 #include <coreplugin/imode.h>
 
+#include <extensionsystem/pluginmanager.h>
+
 #include <utils/qtcassert.h>
 
 #include <QtCore/QDebug>
@@ -77,6 +79,11 @@ using namespace Core::Internal;
 
 enum { debugEditorManager=0 };
 
+static inline ExtensionSystem::PluginManager *pluginManager()
+{
+    return ExtensionSystem::PluginManager::instance();
+}
+
 //===================EditorManager=====================
 
 EditorManagerPlaceHolder *EditorManagerPlaceHolder::m_current = 0;
@@ -201,6 +208,16 @@ EditorManagerPrivate::~EditorManagerPrivate()
 
 EditorManager *EditorManager::m_instance = 0;
 
+static Command *createSeparator(ActionManager *am, QObject *parent,
+                                const QString &name,
+                                const QList<int> &context)
+{
+    QAction *tmpaction = new QAction(parent);
+    tmpaction->setSeparator(true);
+    Command *cmd = am->registerAction(tmpaction, name, context);
+    return cmd;
+}
+
 EditorManager::EditorManager(ICore *core, QWidget *parent) :
     QWidget(parent),
     m_d(new EditorManagerPrivate(core, parent))
@@ -338,12 +355,24 @@ EditorManager::EditorManager(ICore *core, QWidget *parent) :
 
     ActionContainer *medit = am->actionContainer(Constants::M_EDIT);
     ActionContainer *advancedMenu = am->createMenu(Constants::M_EDIT_ADVANCED);
-    medit->addMenu(advancedMenu, Constants::G_EDIT_FORMAT);
+    medit->addMenu(advancedMenu, Constants::G_EDIT_ADVANCED);
     advancedMenu->menu()->setTitle(tr("&Advanced"));
+    advancedMenu->appendGroup(Constants::G_EDIT_FORMAT);
+    advancedMenu->appendGroup(Constants::G_EDIT_COLLAPSING);
+    advancedMenu->appendGroup(Constants::G_EDIT_FONT);
+    advancedMenu->appendGroup(Constants::G_EDIT_EDITOR);
+
+    // Advanced menu separators
+    cmd = createSeparator(am, this, QLatin1String("QtCreator.Edit.Sep.Collapsing"), editManagerContext);
+    advancedMenu->addAction(cmd, Constants::G_EDIT_COLLAPSING);
+    cmd = createSeparator(am, this, QLatin1String("QtCreator.Edit.Sep.Font"), editManagerContext);
+    advancedMenu->addAction(cmd, Constants::G_EDIT_FONT);
+    cmd = createSeparator(am, this, QLatin1String("QtCreator.Edit.Sep.Editor"), editManagerContext);
+    advancedMenu->addAction(cmd, Constants::G_EDIT_EDITOR);
 
     cmd = am->registerAction(m_d->m_openInExternalEditorAction, Constants::OPEN_IN_EXTERNAL_EDITOR, editManagerContext);
     cmd->setDefaultKeySequence(QKeySequence(tr("Alt+V,Alt+I")));
-    advancedMenu->addAction(cmd);
+    advancedMenu->addAction(cmd, Constants::G_EDIT_EDITOR);
     connect(m_d->m_openInExternalEditorAction, SIGNAL(triggered()), this, SLOT(openInExternalEditor()));
 
 
@@ -367,11 +396,12 @@ EditorManager::EditorManager(ICore *core, QWidget *parent) :
 EditorManager::~EditorManager()
 {
     if (m_d->m_core) {
+        ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
         if (m_d->m_coreListener) {
-            m_d->m_core->pluginManager()->removeObject(m_d->m_coreListener);
+            pm->removeObject(m_d->m_coreListener);
             delete m_d->m_coreListener;
         }
-        m_d->m_core->pluginManager()->removeObject(m_d->m_openEditorsFactory);
+        pm->removeObject(m_d->m_openEditorsFactory);
         delete m_d->m_openEditorsFactory;
     }
     delete m_d;
@@ -383,10 +413,11 @@ void EditorManager::init()
     context << m_d->m_core->uniqueIDManager()->uniqueIdentifier("QtCreator.OpenDocumentsView");
 
     m_d->m_coreListener = new EditorClosingCoreListener(this);
-    m_d->m_core->pluginManager()->addObject(m_d->m_coreListener);
+    
+    pluginManager()->addObject(m_d->m_coreListener);
 
     m_d->m_openEditorsFactory = new OpenEditorsViewFactory();
-    m_d->m_core->pluginManager()->addObject(m_d->m_openEditorsFactory);
+    pluginManager()->addObject(m_d->m_openEditorsFactory);
 }
 
 QSize EditorManager::minimumSizeHint() const
@@ -568,7 +599,7 @@ bool EditorManager::closeEditors(const QList<IEditor*> editorsToClose, bool askA
     QList<IEditor*> acceptedEditors;
     //ask all core listeners to check whether the editor can be closed
     const QList<ICoreListener *> listeners =
-        m_d->m_core->pluginManager()->getObjects<ICoreListener>();
+        pluginManager()->getObjects<ICoreListener>();
     foreach (IEditor *editor, editorsToClose) {
         bool editorAccepted = true;
         foreach (ICoreListener *listener, listeners) {
@@ -680,7 +711,7 @@ EditorManager::EditorFactoryList
     EditorManager::editorFactories(const MimeType &mimeType, bool bestMatchOnly) const
 {
     EditorFactoryList rc;
-    const EditorFactoryList allFactories = m_d->m_core->pluginManager()->getObjects<IEditorFactory>();
+    const EditorFactoryList allFactories = pluginManager()->getObjects<IEditorFactory>();
     mimeTypeFactoryRecursion(m_d->m_core->mimeDatabase(), mimeType, allFactories, bestMatchOnly, &rc);
     if (debugEditorManager)
         qDebug() << Q_FUNC_INFO << mimeType.type() << " returns " << rc;
@@ -707,7 +738,7 @@ IEditor *EditorManager::createEditor(const QString &editorKind,
         factories = editorFactories(mimeType, true);
     } else {
         // Find by editor kind
-        const EditorFactoryList allFactories = m_d->m_core->pluginManager()->getObjects<IEditorFactory>();
+        const EditorFactoryList allFactories = pluginManager()->getObjects<IEditorFactory>();
         const EditorFactoryList::const_iterator acend = allFactories.constEnd();
         for (EditorFactoryList::const_iterator ait = allFactories.constBegin(); ait != acend; ++ait) {
             if (editorKind == (*ait)->kind()) {
diff --git a/src/plugins/coreplugin/editormanager/stackededitorgroup.cpp b/src/plugins/coreplugin/editormanager/stackededitorgroup.cpp
index 91a0895e5481fc70b0f853e255621fbf545ab607..7d27b72e73729613156045fd5cd29e2e02d4a040 100644
--- a/src/plugins/coreplugin/editormanager/stackededitorgroup.cpp
+++ b/src/plugins/coreplugin/editormanager/stackededitorgroup.cpp
@@ -80,6 +80,7 @@ StackedEditorGroup::StackedEditorGroup(QWidget *parent) :
     tl->setMargin(0);
     {
         m_editorList->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
+        m_editorList->setSizeAdjustPolicy(QComboBox::AdjustToContents);
         m_editorList->setMinimumContentsLength(20);
         m_proxyModel.setSourceModel(model());
         m_proxyModel.sort(0);
@@ -297,9 +298,9 @@ void StackedEditorGroup::setCurrentEditor(IEditor *editor)
 
 void StackedEditorGroup::checkEditorStatus()
 {
-        IEditor *editor = qobject_cast<IEditor *>(sender());
-        if (editor == currentEditor())
-            updateEditorStatus(editor);
+    IEditor *editor = qobject_cast<IEditor *>(sender());
+    if (editor == currentEditor())
+        updateEditorStatus(editor);
 }
 
 void StackedEditorGroup::updateEditorStatus(IEditor *editor)
diff --git a/src/plugins/coreplugin/icore.cpp b/src/plugins/coreplugin/icore.cpp
index 5d6d32741778dee6d1a526db4e83f4bb75be5552..5654c885758b8430dc34e4ccecc44428f1708cd0 100644
--- a/src/plugins/coreplugin/icore.cpp
+++ b/src/plugins/coreplugin/icore.cpp
@@ -51,10 +51,7 @@
 
     You should never create a subclass of this interface. The one and only
     instance is created by the Core plugin. You can access this instance
-    from your plugin via the plugin manager, e.g.
-    \code
-        ExtensionSystem::PluginManager::instance()->getObject<Core::ICore>();
-    \endcode
+    from your plugin through \c{Core::instance()}.
 
     \mainclass
 */
diff --git a/src/plugins/coreplugin/icore.h b/src/plugins/coreplugin/icore.h
index 7244782b495a3b613494628bdd22e7f28a0ccb9c..565b8589345643bd1bb8a6d08d5d7bec10bed47d 100644
--- a/src/plugins/coreplugin/icore.h
+++ b/src/plugins/coreplugin/icore.h
@@ -35,36 +35,30 @@
 #define ICORE_H
 
 #include "core_global.h"
-#include <extensionsystem/pluginmanager.h>
 #include <QtCore/QObject>
-#include <QtCore/QList>
 
 QT_BEGIN_NAMESPACE
-class QSettings;
-class QStatusBar;
-class QFocusEvent;
 class QMainWindow;
 class QPrinter;
+class QSettings;
+template <class T> class QList;
 QT_END_NAMESPACE
 
 namespace Core {
 
-// forward declarations
 class ActionManager;
-class IFile;
+class EditorManager;
 class FileManager;
+class IContext;
+class IWizard;
 class MessageManager;
-class IEditor;
-class UniqueIDManager;
-class EditorManager;
+class MimeDatabase;
+class ModeManager;
 class ProgressManager;
 class ScriptManager;
+class UniqueIDManager;
 class VariableManager;
-class IContext;
 class VCSManager;
-class ModeManager;
-class IWizard;
-class MimeDatabase;
 
 class CORE_EXPORT ICore : public QObject
 {
@@ -74,6 +68,8 @@ public:
     ICore() {}
     virtual ~ICore() {}
 
+    static ICore *instance();
+
     virtual QStringList showNewItemDialog(const QString &title,
                                           const QList<IWizard *> &wizards,
                                           const QString &defaultLocation = QString()) = 0;
@@ -85,7 +81,6 @@ public:
     virtual FileManager *fileManager() const = 0;
     virtual UniqueIDManager *uniqueIDManager() const = 0;
     virtual MessageManager *messageManager() const = 0;
-    virtual ExtensionSystem::PluginManager *pluginManager() const = 0;
     virtual EditorManager *editorManager() const = 0;
     virtual ProgressManager *progressManager() const = 0;
     virtual ScriptManager *scriptManager() const = 0;
diff --git a/src/plugins/coreplugin/mainwindow.cpp b/src/plugins/coreplugin/mainwindow.cpp
index 32879ecf8a680efac3d2f79d7dc433f7e19c34cd..c1347c3ef703f9fa321f99f8a6ed47a212182726 100644
--- a/src/plugins/coreplugin/mainwindow.cpp
+++ b/src/plugins/coreplugin/mainwindow.cpp
@@ -70,22 +70,23 @@
 #include "basefilewizard.h"
 
 #include <coreplugin/findplaceholder.h>
+#include <extensionsystem/pluginmanager.h>
 
-#include <QtCore/qplugin.h>
 #include <QtCore/QDebug>
+#include <QtCore/QFileInfo>
 #include <QtCore/QSettings>
 #include <QtCore/QTimer>
-#include <QtCore/QFileInfo>
+#include <QtCore/QtPlugin>
 
-#include <QtGui/QMenu>
-#include <QtGui/QToolBar>
 #include <QtGui/QApplication>
-#include <QtGui/QPixmap>
 #include <QtGui/QCloseEvent>
-#include <QtGui/QShortcut>
+#include <QtGui/QMenu>
+#include <QtGui/QPixmap>
 #include <QtGui/QPrinter>
-#include <QtGui/QWizard>
+#include <QtGui/QShortcut>
 #include <QtGui/QStatusBar>
+#include <QtGui/QToolBar>
+#include <QtGui/QWizard>
 
 /*
 #ifdef Q_OS_UNIX
@@ -142,6 +143,7 @@ MainWindow::MainWindow() :
     m_exitAction(0),
     m_optionsAction(0),
     m_toggleSideBarAction(0),
+    m_toggleFullScreenAction(0),
 #ifdef Q_OS_MAC
     m_minimizeAction(0),
     m_zoomAction(0),
@@ -186,6 +188,7 @@ MainWindow::MainWindow() :
     QCoreApplication::setOrganizationName(QLatin1String("Nokia"));
     QSettings::setDefaultFormat(QSettings::IniFormat);
     QString baseName = qApp->style()->objectName();
+#ifdef Q_WS_X11
     if (baseName == "windows") {
         // Sometimes we get the standard windows 95 style as a fallback
         // e.g. if we are running on a KDE4 desktop
@@ -195,18 +198,19 @@ MainWindow::MainWindow() :
         else
             baseName = "cleanlooks";
     }
+#endif
     qApp->setStyle(new ManhattanStyle(baseName));
     statusBar()->setProperty("p_styled", true);
 }
 
-void MainWindow::toggleNavigation()
+void MainWindow::setSidebarVisible(bool visible)
 {
     if (NavigationWidgetPlaceHolder::current()) {
-        if (m_navigationWidget->isSuppressed()) {
+        if (m_navigationWidget->isSuppressed() && visible) {
             m_navigationWidget->setShown(true);
             m_navigationWidget->setSuppressed(false);
         } else {
-            m_navigationWidget->setShown(!m_navigationWidget->isShown());
+            m_navigationWidget->setShown(visible);
         }
     }
 }
@@ -398,7 +402,7 @@ void MainWindow::registerDefaultContainers()
     medit->appendGroup(Constants::G_EDIT_UNDOREDO);
     medit->appendGroup(Constants::G_EDIT_COPYPASTE);
     medit->appendGroup(Constants::G_EDIT_SELECTALL);
-    medit->appendGroup(Constants::G_EDIT_FORMAT);
+    medit->appendGroup(Constants::G_EDIT_ADVANCED);
     medit->appendGroup(Constants::G_EDIT_FIND);
     medit->appendGroup(Constants::G_EDIT_OTHER);
 
@@ -428,9 +432,9 @@ void MainWindow::registerDefaultContainers()
     ac->appendGroup(Constants::G_HELP_ABOUT);
 }
 
-static Command *createSeparator(ActionManagerPrivate *am, QObject *parent,
-                                 const QString &name,
-                                 const QList<int> &context)
+static Command *createSeparator(ActionManager *am, QObject *parent,
+                                const QString &name,
+                                const QList<int> &context)
 {
     QAction *tmpaction = new QAction(parent);
     tmpaction->setSeparator(true);
@@ -445,7 +449,6 @@ void MainWindow::registerDefaultActions()
     ActionContainer *medit = am->actionContainer(Constants::M_EDIT);
     ActionContainer *mtools = am->actionContainer(Constants::M_TOOLS);
     ActionContainer *mwindow = am->actionContainer(Constants::M_WINDOW);
-    Q_UNUSED(mwindow)
     ActionContainer *mhelp = am->actionContainer(Constants::M_HELP);
 
     // File menu separators
@@ -462,7 +465,7 @@ void MainWindow::registerDefaultActions()
     mfile->addAction(cmd, Constants::G_FILE_OTHER);
 
     // Edit menu separators
-    cmd =  createSeparator(am, this,  QLatin1String("QtCreator.Edit.Sep.CopyPaste"), m_globalContext);
+    cmd = createSeparator(am, this, QLatin1String("QtCreator.Edit.Sep.CopyPaste"), m_globalContext);
     medit->addAction(cmd, Constants::G_EDIT_COPYPASTE);
 
     cmd = createSeparator(am, this, QLatin1String("QtCreator.Edit.Sep.SelectAll"), m_globalContext);
@@ -471,8 +474,8 @@ void MainWindow::registerDefaultActions()
     cmd = createSeparator(am, this, QLatin1String("QtCreator.Edit.Sep.Find"), m_globalContext);
     medit->addAction(cmd, Constants::G_EDIT_FIND);
 
-    cmd = createSeparator(am, this, QLatin1String("QtCreator.Edit.Sep.Format"), m_globalContext);
-    medit->addAction(cmd, Constants::G_EDIT_FORMAT);
+    cmd = createSeparator(am, this, QLatin1String("QtCreator.Edit.Sep.Advanced"), m_globalContext);
+    medit->addAction(cmd, Constants::G_EDIT_ADVANCED);
 
     //Tools menu separators
     cmd = createSeparator(am, this, QLatin1String("QtCreator.Tools.Sep.Options"), m_globalContext);
@@ -625,7 +628,7 @@ void MainWindow::registerDefaultActions()
 
     // Toggle Sidebar Action
     m_toggleSideBarAction = new QAction(QIcon(Constants::ICON_TOGGLE_SIDEBAR),
-                                        tr("Toggle Sidebar"), this);
+                                        tr("Show Sidebar"), this);
     m_toggleSideBarAction->setCheckable(true);
     cmd = am->registerAction(m_toggleSideBarAction, Constants::TOGGLE_SIDEBAR, m_globalContext);
 #ifdef Q_OS_MAC
@@ -633,11 +636,24 @@ void MainWindow::registerDefaultActions()
 #else
     cmd->setDefaultKeySequence(QKeySequence("Alt+0"));
 #endif
-    connect(m_toggleSideBarAction, SIGNAL(triggered()), this, SLOT(toggleNavigation()));
+    connect(m_toggleSideBarAction, SIGNAL(triggered(bool)), this, SLOT(setSidebarVisible(bool)));
     m_toggleSideBarButton->setDefaultAction(cmd->action());
     mwindow->addAction(cmd, Constants::G_WINDOW_PANES);
     m_toggleSideBarAction->setEnabled(false);
 
+#if !defined(Q_OS_MAC)
+    // Toggle Full Screen
+    m_toggleFullScreenAction = new QAction(tr("Toggle Fullscreen"), this);
+    m_toggleFullScreenAction->setCheckable(true);
+    m_toggleFullScreenAction->setChecked(false);
+    cmd = am->registerAction(m_toggleFullScreenAction,
+        Constants::TOGGLE_FULLSCREEN, m_globalContext);
+    cmd->setDefaultKeySequence(QKeySequence("Ctrl+Shift+F11"));
+    mwindow->addAction(cmd, Constants::G_WINDOW_SIZE);
+    connect(m_toggleFullScreenAction, SIGNAL(triggered(bool)),
+        this, SLOT(setFullScreen(bool)));
+#endif
+
     //About IDE Action
 #ifdef Q_OS_MAC
     tmpaction = new QAction(tr("About &Qt Creator"), this); // it's convention not to add dots to the about menu
@@ -682,8 +698,8 @@ void MainWindow::openFile()
 
 static QList<IFileFactory*> getNonEditorFileFactories()
 {
-    const ICore *core = CoreImpl::instance();
-    const QList<IFileFactory*> allFileFactories = core->pluginManager()->getObjects<IFileFactory>();
+    const QList<IFileFactory*> allFileFactories =
+        ExtensionSystem::PluginManager::instance()->getObjects<IFileFactory>();
     QList<IFileFactory*> nonEditorFileFactories;
     foreach (IFileFactory *factory, allFileFactories) {
         if (!qobject_cast<IEditorFactory *>(factory))
@@ -914,13 +930,18 @@ void MainWindow::changeEvent(QEvent *e)
                 qDebug() << "main window activated";
             emit windowActivated();
         }
-#ifdef Q_OS_MAC
     } else if (e->type() == QEvent::WindowStateChange) {
+#ifdef Q_OS_MAC
         bool minimized = isMinimized();
         if (debugMainWindow)
             qDebug() << "main window state changed to minimized=" << minimized;
         m_minimizeAction->setEnabled(!minimized);
         m_zoomAction->setEnabled(!minimized);
+#else
+        QWindowStateChangeEvent *ev =
+            static_cast<QWindowStateChangeEvent *>(e);
+        bool isFullScreen = (ev->oldState() & Qt::WindowFullScreen) != 0;
+        m_toggleFullScreenAction->setChecked(!isFullScreen);
 #endif
     }
 }
@@ -1110,3 +1131,19 @@ QPrinter *MainWindow::printer() const
         m_printer = new QPrinter(QPrinter::HighResolution);
     return  m_printer;
 }
+
+void MainWindow::setFullScreen(bool on)
+{
+    if (bool(windowState() & Qt::WindowFullScreen) == on)
+        return;
+
+    if (on) {
+        setWindowState(windowState() | Qt::WindowFullScreen);
+        //statusBar()->hide();
+        //menuBar()->hide();
+    } else {
+        setWindowState(windowState() & ~Qt::WindowFullScreen);
+        //menuBar()->show();
+        //statusBar()->show();
+    }
+}
diff --git a/src/plugins/coreplugin/mainwindow.h b/src/plugins/coreplugin/mainwindow.h
index 4a1c08f16efb5ffa31a85df67bd335e070fd49ac..e1fb1d9c6626aeb7466c66ce919881fe4c10965e 100644
--- a/src/plugins/coreplugin/mainwindow.h
+++ b/src/plugins/coreplugin/mainwindow.h
@@ -137,6 +137,7 @@ public slots:
     void newFile();
     void openFileWith();
     void exit();
+    void setFullScreen(bool on);
 
     QStringList showNewItemDialog(const QString &title,
                                   const QList<IWizard *> &wizards,
@@ -157,7 +158,7 @@ private slots:
     void aboutQtCreator();
     void aboutPlugins();
     void updateFocusWidget(QWidget *old, QWidget *now);
-    void toggleNavigation();
+    void setSidebarVisible(bool visible);
     void destroyVersionDialog();
 
 private:
@@ -213,6 +214,7 @@ private:
     QAction *m_exitAction;
     QAction *m_optionsAction;
     QAction *m_toggleSideBarAction;
+    QAction *m_toggleFullScreenAction;
 #ifdef Q_OS_MAC
     QAction *m_minimizeAction;
     QAction *m_zoomAction;
diff --git a/src/plugins/coreplugin/modemanager.cpp b/src/plugins/coreplugin/modemanager.cpp
index 579881a215d885d8bacc5875749dee73b55a692c..24a0b6eac3783d2935639cf77b6e326cdcecc2a4 100644
--- a/src/plugins/coreplugin/modemanager.cpp
+++ b/src/plugins/coreplugin/modemanager.cpp
@@ -46,6 +46,8 @@
 #include <coreplugin/imode.h>
 #include <coreplugin/uniqueidmanager.h>
 
+#include <extensionsystem/pluginmanager.h>
+
 #include <utils/qtcassert.h>
 
 #include <QtCore/QObject>
@@ -215,7 +217,7 @@ void ModeManager::currentTabChanged(int 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.
-        CoreImpl *core = CoreImpl::instance();
+        ICore *core = ICore::instance();
         foreach (const int context, m_addedContexts)
             core->removeAdditionalContext(context);
 
diff --git a/src/plugins/coreplugin/navigationwidget.cpp b/src/plugins/coreplugin/navigationwidget.cpp
index f6b586f76035f7783913328900bee3cc74ff8df0..1141909aa0cf611cd26a3c32fb16f3874955d7e0 100644
--- a/src/plugins/coreplugin/navigationwidget.cpp
+++ b/src/plugins/coreplugin/navigationwidget.cpp
@@ -39,15 +39,16 @@
 #include <coreplugin/modemanager.h>
 #include <coreplugin/uniqueidmanager.h>
 #include <coreplugin/actionmanager/actionmanager.h>
-#include <extensionsystem/ExtensionSystemInterfaces>
+#include <extensionsystem/pluginmanager.h>
+
+#include <QtCore/QDebug>
+#include <QtCore/QSettings>
 
 #include <QtGui/QAction>
 #include <QtGui/QHBoxLayout>
-#include <QtGui/QToolButton>
-#include <QtGui/QToolBar>
 #include <QtGui/QResizeEvent>
-#include <QtCore/QDebug>
-#include <QtCore/QSettings>
+#include <QtGui/QToolBar>
+#include <QtGui/QToolButton>
 
 Q_DECLARE_METATYPE(Core::INavigationWidgetFactory *)
 
@@ -315,8 +316,8 @@ void NavigationWidget::objectAdded(QObject * obj)
     if (!factory)
         return;
 
-    Core::ICore *core = ExtensionSystem::PluginManager::instance()->getObject<Core::ICore>();
-    Core::ActionManager *am = core->actionManager();
+    ICore *core = ICore::instance();
+    ActionManager *am = core->actionManager();
     QList<int> navicontext = QList<int>() << core->uniqueIDManager()->
         uniqueIdentifier(Core::Constants::C_NAVIGATION_PANE);
 
@@ -398,9 +399,8 @@ NavigationSubWidget::~NavigationSubWidget()
 void NavigationSubWidget::setCurrentIndex(int index)
 {
     // Remove toolbutton
-    foreach (QWidget *w, m_additionalToolBarWidgets) {
+    foreach (QWidget *w, m_additionalToolBarWidgets)
         delete w;
-    }
 
     // Remove old Widget
     delete m_navigationWidget;
@@ -465,8 +465,7 @@ void NavigationSubWidget::setFactory(INavigationWidgetFactory *factory)
 
 void NavigationSubWidget::setFactory(const QString &name)
 {
-    for (int i = 0; i < m_navigationComboBox->count(); ++i)
-    {
+    for (int i = 0; i < m_navigationComboBox->count(); ++i) {
         INavigationWidgetFactory *factory =
                 m_navigationComboBox->itemData(i).value<INavigationWidgetFactory *>();
         if (factory->displayName() == name)
diff --git a/src/plugins/coreplugin/outputpane.cpp b/src/plugins/coreplugin/outputpane.cpp
index e5f756a498f22badce037ccf673155f3744c4119..7169249cfaa8d4a94fd1e8e8c19dcf2a093ee4cd 100644
--- a/src/plugins/coreplugin/outputpane.cpp
+++ b/src/plugins/coreplugin/outputpane.cpp
@@ -42,12 +42,13 @@
 #include <coreplugin/editormanager/editormanager.h>
 #include <coreplugin/editormanager/editorgroup.h>
 
+#include <extensionsystem/pluginmanager.h>
+
 #include <QtGui/QAction>
 #include <QtGui/QApplication>
 #include <QtGui/QComboBox>
 #include <QtGui/QFocusEvent>
 #include <QtGui/QHBoxLayout>
-#include <QtGui/QLineEdit>
 #include <QtGui/QMenu>
 #include <QtGui/QPainter>
 #include <QtGui/QPushButton>
@@ -393,8 +394,7 @@ void OutputPane::showPage(int idx, bool focus)
         if (!OutputPanePlaceHolder::m_current) {
             // In this mode we don't have a placeholder
             // switch to the output mode and switch the page
-            ICore *core = m_pluginManager->getObject<ICore>();
-            core->modeManager()->activateMode(Constants::MODE_OUTPUT);
+            ICore::instance()->modeManager()->activateMode(Constants::MODE_OUTPUT);
             ensurePageVisible(idx);
         } else {
             // else we make that page visible
@@ -409,14 +409,13 @@ void OutputPane::showPage(int idx, bool focus)
 void OutputPane::togglePage(bool focus)
 {
     int idx = findIndexForPage(qobject_cast<IOutputPane*>(sender()));
-    if(OutputPanePlaceHolder::m_current
+    if (OutputPanePlaceHolder::m_current
        && OutputPanePlaceHolder::m_current->isVisible()
        && m_widgetComboBox->itemData(m_widgetComboBox->currentIndex()).toInt() == idx) {
          slotHide();
     } else {
          showPage(idx, focus);
     }
-
 }
 
 void OutputPane::setCloseable(bool b)
diff --git a/src/plugins/coreplugin/scriptmanager/scriptmanager.cpp b/src/plugins/coreplugin/scriptmanager/scriptmanager.cpp
index 1ac21ca743ce87e60a40629402c20adacf062418..937af4f66a36ea9983970350ed7c4d330a263fa8 100644
--- a/src/plugins/coreplugin/scriptmanager/scriptmanager.cpp
+++ b/src/plugins/coreplugin/scriptmanager/scriptmanager.cpp
@@ -35,7 +35,6 @@
 #include "qworkbench_wrapper.h"
 #include "metatypedeclarations.h"
 
-#include <extensionsystem/ExtensionSystemInterfaces>
 #include <utils/qtcassert.h>
 #include <interface_wrap_helpers.h>
 #include <wrap_helpers.h>
diff --git a/src/plugins/coreplugin/viewmanager.cpp b/src/plugins/coreplugin/viewmanager.cpp
index 0db47634729ce9fb4d0b584f6bcc4dfd1b1efa32..052e2dee522c3ad59d04b1d661d7df75dbf14042 100644
--- a/src/plugins/coreplugin/viewmanager.cpp
+++ b/src/plugins/coreplugin/viewmanager.cpp
@@ -40,21 +40,13 @@
 
 #include <coreplugin/actionmanager/actionmanager.h>
 #include <coreplugin/actionmanager/command.h>
-#include <extensionsystem/ExtensionSystemInterfaces>
 #include <aggregation/aggregate.h>
+#include <extensionsystem/pluginmanager.h>
 
 #include <QtCore/QSettings>
-#include <QtGui/QAction>
-#include <QtGui/QActionGroup>
-#include <QtGui/QComboBox>
-#include <QtGui/QDockWidget>
 #include <QtGui/QHBoxLayout>
 #include <QtGui/QLabel>
-#include <QtGui/QMenu>
-#include <QtGui/QStackedWidget>
 #include <QtGui/QStatusBar>
-#include <QtGui/QToolButton>
-#include <QtGui/QVBoxLayout>
 
 using namespace Core;
 using namespace Core::Internal;
diff --git a/src/plugins/cpaster/cpasterplugin.cpp b/src/plugins/cpaster/cpasterplugin.cpp
index 1ab4daa0a4a9f3b8602aa7ddf8be9aaa5cfcecce..af4cbabbbe808ebafe7d8e0d6574212bd9286eb0 100644
--- a/src/plugins/cpaster/cpasterplugin.cpp
+++ b/src/plugins/cpaster/cpasterplugin.cpp
@@ -38,17 +38,18 @@
 #include "splitter.h"
 #include "view.h"
 
-#include <coreplugin/icore.h>
+#include <coreplugin/actionmanager/actionmanager.h>
 #include <coreplugin/coreconstants.h>
+#include <coreplugin/editormanager/editormanager.h>
 #include <coreplugin/filemanager.h>
+#include <coreplugin/icore.h>
 #include <coreplugin/messagemanager.h>
+#include <coreplugin/messageoutputwindow.h>
 #include <coreplugin/uniqueidmanager.h>
-#include <coreplugin/actionmanager/actionmanager.h>
-#include <coreplugin/editormanager/editormanager.h>
+#include <extensionsystem/pluginmanager.h>
 #include <texteditor/itexteditor.h>
-#include <coreplugin/messageoutputwindow.h>
 
-#include <QtCore/qplugin.h>
+#include <QtCore/QtPlugin>
 #include <QtCore/QDebug>
 #include <QtGui/QAction>
 #include <QtGui/QApplication>
@@ -62,8 +63,6 @@ using namespace CodePaster;
 using namespace Core;
 using namespace TextEditor;
 
-Core::ICore *gCoreInstance = NULL;
-
 CodepasterPlugin::CodepasterPlugin()
     : m_settingsPage(0), m_fetcher(0), m_poster(0)
 {
@@ -83,11 +82,9 @@ bool CodepasterPlugin::initialize(const QStringList &arguments, QString *error_m
     Q_UNUSED(arguments);
     Q_UNUSED(error_message);
 
-    gCoreInstance = ExtensionSystem::PluginManager::instance()->getObject<Core::ICore>();
-
     // Create the globalcontext list to register actions accordingly
     QList<int> globalcontext;
-    globalcontext << gCoreInstance->uniqueIDManager()->
+    globalcontext << ICore::instance()->uniqueIDManager()->
         uniqueIdentifier(Core::Constants::C_GLOBAL);
 
     // Create the settings Page
@@ -95,7 +92,7 @@ bool CodepasterPlugin::initialize(const QStringList &arguments, QString *error_m
     addObject(m_settingsPage);
 
     //register actions
-    Core::ActionManager *actionManager = gCoreInstance->actionManager();
+    Core::ActionManager *actionManager = ICore::instance()->actionManager();
 
     Core::ActionContainer *toolsContainer =
         actionManager->actionContainer(Core::Constants::M_TOOLS);
@@ -132,7 +129,7 @@ void CodepasterPlugin::post()
 {
     if (m_poster)
         delete m_poster;
-    IEditor* editor = gCoreInstance->editorManager()->currentEditor();
+    IEditor* editor = ICore::instance()->editorManager()->currentEditor();
     ITextEditor* textEditor = qobject_cast<ITextEditor*>(editor);
     if (!textEditor)
         return;
@@ -243,7 +240,7 @@ void CustomFetcher::customRequestFinished(int, bool error)
     QByteArray data = body();
     if (!m_listWidget) {
         QString title = QString::fromLatin1("Code Paster: %1").arg(m_id);
-        gCoreInstance->editorManager()->newFile(Core::Constants::K_DEFAULT_TEXT_EDITOR
+        ICore::instance()->editorManager()->newFile(Core::Constants::K_DEFAULT_TEXT_EDITOR
                                                 , &title, data);
     } else {
         m_listWidget->clear();
@@ -283,7 +280,7 @@ void CustomPoster::customRequestFinished(int, bool error)
     if (!error) {
         if (m_copy)
             QApplication::clipboard()->setText(pastedUrl());
-        gCoreInstance->messageManager()->printToOutputPane(pastedUrl(), m_output);
+        ICore::instance()->messageManager()->printToOutputPane(pastedUrl(), m_output);
     } else
         QMessageBox::warning(0, "Code Paster Error", "Some error occured while posting", QMessageBox::Ok);
 #if 0 // Figure out how to access
diff --git a/src/plugins/cpaster/cpasterplugin.h b/src/plugins/cpaster/cpasterplugin.h
index b6694be562cde0cfb401f3e00b02d091da9566fc..56c41144a96e7882c0636f5837020ff931d97b90 100644
--- a/src/plugins/cpaster/cpasterplugin.h
+++ b/src/plugins/cpaster/cpasterplugin.h
@@ -40,8 +40,8 @@
 
 #include <coreplugin/editormanager/ieditorfactory.h>
 #include <coreplugin/icorelistener.h>
-#include <projectexplorer/ProjectExplorerInterfaces>
 #include <extensionsystem/iplugin.h>
+#include <projectexplorer/projectexplorer.h>
 
 #include <QtCore/QObject>
 
diff --git a/src/plugins/cpaster/settingspage.cpp b/src/plugins/cpaster/settingspage.cpp
index 333630636178df33155ff3acdab70eb3b7cb0fb7..1907d6eebea6ea9d7cde7b11e708ef8e3d2e0d4f 100644
--- a/src/plugins/cpaster/settingspage.cpp
+++ b/src/plugins/cpaster/settingspage.cpp
@@ -34,7 +34,6 @@
 #include "settingspage.h"
 
 #include <coreplugin/icore.h>
-#include <extensionsystem/pluginmanager.h>
 
 #include <QtCore/QSettings>
 #include <QtGui/QLineEdit>
@@ -46,10 +45,7 @@ using namespace CodePaster;
 
 SettingsPage::SettingsPage()
 {
-    Core::ICore *coreIFace = ExtensionSystem::PluginManager::instance()->getObject<Core::ICore>();
-    if (coreIFace)
-        m_settings = coreIFace->settings();
-
+    m_settings = Core::ICore::instance()->settings();
     if (m_settings) {
         m_settings->beginGroup("CodePaster");
         m_username = m_settings->value("UserName", qgetenv("USER")).toString();
diff --git a/src/plugins/cppeditor/cppclasswizard.cpp b/src/plugins/cppeditor/cppclasswizard.cpp
index ecdcc110197a22d4a02ba8eff9da4bf7b3d1bbcb..99db1ca123ad65aa4816fcd46ed77d8f97f182a6 100644
--- a/src/plugins/cppeditor/cppclasswizard.cpp
+++ b/src/plugins/cppeditor/cppclasswizard.cpp
@@ -42,9 +42,6 @@
 #include <QtCore/QDir>
 #include <QtCore/QTextStream>
 
-#include <QtGui/QCheckBox>
-#include <QtGui/QComboBox>
-#include <QtGui/QLabel>
 #include <QtGui/QVBoxLayout>
 #include <QtGui/QWizard>
 
@@ -124,8 +121,8 @@ CppClassWizardParameters  CppClassWizardDialog::parameters() const
 // ========= CppClassWizard =========
 
 CppClassWizard::CppClassWizard(const Core::BaseFileWizardParameters &parameters,
-                               Core::ICore *core, QObject *parent) :
-    Core::BaseFileWizard(parameters, core, parent)
+                               QObject *parent)
+  : Core::BaseFileWizard(parameters, parent)
 {
 }
 
diff --git a/src/plugins/cppeditor/cppclasswizard.h b/src/plugins/cppeditor/cppclasswizard.h
index b117dc7ad09ee2717f15cf2c89b8fed18e3dd257..987b6232d4386460c2266e6ccc776239636feb55 100644
--- a/src/plugins/cppeditor/cppclasswizard.h
+++ b/src/plugins/cppeditor/cppclasswizard.h
@@ -40,16 +40,13 @@
 #include <QtGui/QWizardPage>
 #include <QtGui/QWizard>
 
-QT_BEGIN_NAMESPACE
-class QCheckBox;
-class QComboBox;
-QT_END_NAMESPACE
-
 namespace Core {
 namespace Utils {
-    class NewClassWidget;
-}
-}
+
+class NewClassWidget;
+
+} // namespace Utils
+} // namespace Core
 
 namespace CppEditor {
 namespace Internal {
@@ -75,7 +72,8 @@ private:
 };
 
 
-struct CppClassWizardParameters {
+struct CppClassWizardParameters
+{
     QString className;
     QString headerFile;
     QString sourceFile;
@@ -83,9 +81,10 @@ struct CppClassWizardParameters {
     QString path;
 };
 
-class CppClassWizardDialog : public QWizard {
-    Q_DISABLE_COPY(CppClassWizardDialog)
+class CppClassWizardDialog : public QWizard
+{
     Q_OBJECT
+    Q_DISABLE_COPY(CppClassWizardDialog)
 public:
     explicit CppClassWizardDialog(const QString &sourceSuffix,
                                   const QString &headerSuffix,
@@ -104,7 +103,7 @@ class CppClassWizard : public Core::BaseFileWizard
     Q_OBJECT
 public:
     explicit CppClassWizard(const Core::BaseFileWizardParameters &parameters,
-                            Core::ICore *core, QObject *parent = 0);
+                            QObject *parent = 0);
 
 protected:
     virtual QWizard *createWizardDialog(QWidget *parent,
diff --git a/src/plugins/cppeditor/cppeditor.cpp b/src/plugins/cppeditor/cppeditor.cpp
index c8e9a946b9095fd38ba564124df23ac85a21d5b7..093c39611bbcb89c02e97d86564c2cfa6846696e 100644
--- a/src/plugins/cppeditor/cppeditor.cpp
+++ b/src/plugins/cppeditor/cppeditor.cpp
@@ -58,6 +58,7 @@
 #include <coreplugin/actionmanager/actionmanager.h>
 #include <coreplugin/editormanager/ieditor.h>
 #include <coreplugin/editormanager/editormanager.h>
+#include <extensionsystem/pluginmanager.h>
 #include <projectexplorer/projectexplorerconstants.h>
 #include <texteditor/basetextdocument.h>
 #include <texteditor/fontsettings.h>
@@ -65,21 +66,17 @@
 #include <texteditor/textblockiterator.h>
 #include <indenter.h>
 
-#include <QtCore/QFileInfo>
-#include <QtCore/QTextStream>
 #include <QtCore/QDebug>
 #include <QtCore/QTime>
 #include <QtCore/QTimer>
 #include <QtGui/QAction>
-#include <QtGui/QKeyEvent>
+#include <QtGui/QHeaderView>
 #include <QtGui/QLayout>
 #include <QtGui/QMenu>
 #include <QtGui/QShortcut>
 #include <QtGui/QTextEdit>
 #include <QtGui/QComboBox>
 #include <QtGui/QTreeView>
-#include <QtGui/QHeaderView>
-#include <QtGui/QStringListModel>
 
 using namespace CPlusPlus;
 using namespace CppEditor::Internal;
@@ -142,15 +139,14 @@ QualifiedNameId *qualifiedNameIdForSymbol(Symbol *s, const LookupContext &contex
 CPPEditorEditable::CPPEditorEditable(CPPEditor *editor)
     : BaseTextEditorEditable(editor)
 {
-    Core::ICore *core = CppPlugin::core();
+    Core::ICore *core = Core::ICore::instance();
     m_context << core->uniqueIDManager()->uniqueIdentifier(CppEditor::Constants::C_CPPEDITOR);
     m_context << core->uniqueIDManager()->uniqueIdentifier(ProjectExplorer::Constants::LANG_CXX);
     m_context << core->uniqueIDManager()->uniqueIdentifier(TextEditor::Constants::C_TEXTEDITOR);
 }
 
-CPPEditor::CPPEditor(QWidget *parent) :
-    TextEditor::BaseTextEditor(parent),
-    m_core(CppPlugin::core())
+CPPEditor::CPPEditor(QWidget *parent)
+    : TextEditor::BaseTextEditor(parent)
 {
     setParenthesesMatchingEnabled(true);
     setMarksVisible(true);
@@ -172,7 +168,8 @@ CPPEditor::CPPEditor(QWidget *parent) :
                   /*ambiguousMember=*/ 0, Qt::WidgetShortcut);
 #endif
 
-    m_modelManager = m_core->pluginManager()->getObject<CppTools::CppModelManagerInterface>();
+    m_modelManager = ExtensionSystem::PluginManager::instance()
+        ->getObject<CppTools::CppModelManagerInterface>();
 
     if (m_modelManager) {
         connect(m_modelManager, SIGNAL(documentUpdated(CPlusPlus::Document::Ptr)),
diff --git a/src/plugins/cppeditor/cppeditoractionhandler.cpp b/src/plugins/cppeditor/cppeditoractionhandler.cpp
index f8f2510523b08a11da301d8d78f9744bbf5d3a42..0037f11756225208ec42b6fd4d41ab9997f93e52 100644
--- a/src/plugins/cppeditor/cppeditoractionhandler.cpp
+++ b/src/plugins/cppeditor/cppeditoractionhandler.cpp
@@ -38,10 +38,9 @@
 
 using namespace CppEditor::Internal;
 
-CPPEditorActionHandler::CPPEditorActionHandler(Core::ICore *core,
-                                               const QString &context,
+CPPEditorActionHandler::CPPEditorActionHandler(const QString &context,
                                                uint optionalActions)
-    : TextEditor::TextEditorActionHandler(core, context, optionalActions)
+    : TextEditor::TextEditorActionHandler(context, optionalActions)
 { }
 
 CPPEditorActionHandler::~CPPEditorActionHandler()
diff --git a/src/plugins/cppeditor/cppeditoractionhandler.h b/src/plugins/cppeditor/cppeditoractionhandler.h
index 12428c3343e7147c600e19ffbfa910f49991a469..d98d7f765882be50a3e1d46bcf6ed04ac1238573 100644
--- a/src/plugins/cppeditor/cppeditoractionhandler.h
+++ b/src/plugins/cppeditor/cppeditoractionhandler.h
@@ -44,8 +44,7 @@ class CPPEditorActionHandler : public TextEditor::TextEditorActionHandler
     Q_OBJECT
 
 public:
-    CPPEditorActionHandler(Core::ICore *core,
-                           const QString &context,
+    CPPEditorActionHandler(const QString &context,
                            uint optionalActions = None);
     virtual ~CPPEditorActionHandler();
 
diff --git a/src/plugins/cppeditor/cppfilewizard.cpp b/src/plugins/cppeditor/cppfilewizard.cpp
index d65fed176691080ab0b2c8f577459da6057e578c..795d9248c126465dc4ae3e447dbff5a957434218 100644
--- a/src/plugins/cppeditor/cppfilewizard.cpp
+++ b/src/plugins/cppeditor/cppfilewizard.cpp
@@ -46,9 +46,8 @@ enum { debugWizard = 0 };
 
 CppFileWizard::CppFileWizard(const BaseFileWizardParameters &parameters,
                              FileType type,
-                             Core::ICore *core,
                              QObject *parent) :
-    Core::StandardFileWizard(parameters, core, parent),
+    Core::StandardFileWizard(parameters, parent),
     m_type(type)
 {
 }
diff --git a/src/plugins/cppeditor/cppfilewizard.h b/src/plugins/cppeditor/cppfilewizard.h
index 51c91d9465ce1c13dfa8d8956ac5de5eb70cccb3..e6328f2d32d0ff039fead7cef927ec9384b61292 100644
--- a/src/plugins/cppeditor/cppfilewizard.h
+++ b/src/plugins/cppeditor/cppfilewizard.h
@@ -48,9 +48,9 @@ class CppFileWizard : public Core::StandardFileWizard
 public:
     typedef Core::BaseFileWizardParameters BaseFileWizardParameters;
 
-    explicit CppFileWizard(const BaseFileWizardParameters &parameters,
-                           FileType type,
-                           Core::ICore *core, QObject *parent = 0);
+    CppFileWizard(const BaseFileWizardParameters &parameters,
+                  FileType type,
+                  QObject *parent = 0);
 
 protected:
     static QString toAlphaNum(const QString &s);
diff --git a/src/plugins/cppeditor/cpphoverhandler.cpp b/src/plugins/cppeditor/cpphoverhandler.cpp
index febf86f6510624f69cf3a45b6a14f65b27741ef1..5059a92d8b1d290aacc69d462dff93b3d0ef9216 100644
--- a/src/plugins/cppeditor/cpphoverhandler.cpp
+++ b/src/plugins/cppeditor/cpphoverhandler.cpp
@@ -39,6 +39,7 @@
 #include <coreplugin/uniqueidmanager.h>
 #include <coreplugin/editormanager/editormanager.h>
 #include <cpptools/cppmodelmanagerinterface.h>
+#include <extensionsystem/pluginmanager.h>
 #include <texteditor/itexteditor.h>
 #include <texteditor/basetexteditor.h>
 #include <debugger/debuggerconstants.h>
@@ -55,23 +56,27 @@
 #include <cplusplus/TypeOfExpression.h>
 #include <cplusplus/SimpleLexer.h>
 
+#include <QtCore/QDebug>
+#include <QtCore/QDir>
+#include <QtCore/QFileInfo>
+#include <QtCore/QSettings>
 #include <QtGui/QToolTip>
 #include <QtGui/QTextCursor>
 #include <QtGui/QTextBlock>
 #include <QtHelp/QHelpEngineCore>
-#include <QtCore/QtCore>
 
 using namespace CppEditor::Internal;
 using namespace CPlusPlus;
+using namespace Core;
 
 CppHoverHandler::CppHoverHandler(QObject *parent)
     : QObject(parent)
-    , m_core(CppPlugin::core())
     , m_helpEngineNeedsSetup(false)
 {
-    m_modelManager = m_core->pluginManager()->getObject<CppTools::CppModelManagerInterface>();
+    m_modelManager = ExtensionSystem::PluginManager::instance()->getObject<CppTools::CppModelManagerInterface>();
 
-    QFileInfo fi(ExtensionSystem::PluginManager::instance()->getObject<Core::ICore>()->settings()->fileName());
+    ICore *core = ICore::instance();
+    QFileInfo fi(core->settings()->fileName());
     // FIXME shouldn't the help engine create the directory if it doesn't exist?
     QDir directory(fi.absolutePath()+"/qtcreator");
     if (!directory.exists())
@@ -86,7 +91,7 @@ CppHoverHandler::CppHoverHandler(QObject *parent)
     m_helpEngineNeedsSetup = m_helpEngine->registeredDocumentations().count() == 0;
 
     // Listen for editor opened events in order to connect to tooltip/helpid requests
-    connect(m_core->editorManager(), SIGNAL(editorOpened(Core::IEditor *)),
+    connect(core->editorManager(), SIGNAL(editorOpened(Core::IEditor *)),
             this, SLOT(editorOpened(Core::IEditor *)));
 }
 
@@ -95,7 +100,7 @@ void CppHoverHandler::updateContextHelpId(TextEditor::ITextEditor *editor, int p
     updateHelpIdAndTooltip(editor, pos);
 }
 
-void CppHoverHandler::editorOpened(Core::IEditor *editor)
+void CppHoverHandler::editorOpened(IEditor *editor)
 {
     CPPEditorEditable *cppEditor = qobject_cast<CPPEditorEditable *>(editor);
     if (!cppEditor)
@@ -113,9 +118,10 @@ void CppHoverHandler::showToolTip(TextEditor::ITextEditor *editor, const QPoint
     if (!editor)
         return;
 
-    const int dbgcontext = m_core->uniqueIDManager()->uniqueIdentifier(Debugger::Constants::C_GDBDEBUGGER);
+    ICore *core = ICore::instance();
+    const int dbgcontext = core->uniqueIDManager()->uniqueIdentifier(Debugger::Constants::C_GDBDEBUGGER);
 
-    if (m_core->hasContext(dbgcontext))
+    if (core->hasContext(dbgcontext))
         return;
 
     updateHelpIdAndTooltip(editor, pos);
diff --git a/src/plugins/cppeditor/cpphoverhandler.h b/src/plugins/cppeditor/cpphoverhandler.h
index 27daccc35d7e40c490842047408ac75e387a443f..6833c9f57430deab1fa243efed71e5f6ac151788 100644
--- a/src/plugins/cppeditor/cpphoverhandler.h
+++ b/src/plugins/cppeditor/cpphoverhandler.h
@@ -42,7 +42,6 @@ class QPoint;
 QT_END_NAMESPACE
 
 namespace Core {
-class ICore;
 class IEditor;
 }
 
@@ -74,7 +73,6 @@ private slots:
 private:
     void updateHelpIdAndTooltip(TextEditor::ITextEditor *editor, int pos);
 
-    Core::ICore *m_core;
     CppTools::CppModelManagerInterface *m_modelManager;
     QHelpEngineCore *m_helpEngine;
     QString m_helpId;
diff --git a/src/plugins/cppeditor/cppplugin.cpp b/src/plugins/cppeditor/cppplugin.cpp
index 077bea902745043c8ddf9ac5617891b27060779a..3d09e02fc026921ad1c71acc7fcbdbcdee3a7f93 100644
--- a/src/plugins/cppeditor/cppplugin.cpp
+++ b/src/plugins/cppeditor/cppplugin.cpp
@@ -40,6 +40,7 @@
 #include "cppfilewizard.h"
 #include "cpphoverhandler.h"
 
+#include <coreplugin/icore.h>
 #include <coreplugin/coreconstants.h>
 #include <coreplugin/mimedatabase.h>
 #include <coreplugin/uniqueidmanager.h>
@@ -63,7 +64,7 @@ static const char *sourceSuffixKeyC = "CppEditor/SourceSuffix";
 
 using namespace CppEditor::Internal;
 
-///////////////////////////////// CppPluginEditorFactory //////////////////////////////////
+//////////////////////////// CppPluginEditorFactory /////////////////////////////
 
 CppPluginEditorFactory::CppPluginEditorFactory(CppPlugin *owner) :
     m_kind(QLatin1String(CppEditor::Constants::CPPEDITOR_KIND)),
@@ -87,7 +88,7 @@ QString CppPluginEditorFactory::kind() const
 
 Core::IFile *CppPluginEditorFactory::open(const QString &fileName)
 {
-    Core::IEditor *iface = m_owner->m_core->editorManager()->openEditor(fileName, kind());
+    Core::IEditor *iface = Core::ICore::instance()->editorManager()->openEditor(fileName, kind());
     return iface ? iface->file() : 0;
 }
 
@@ -110,7 +111,6 @@ QStringList CppPluginEditorFactory::mimeTypes() const
 CppPlugin *CppPlugin::m_instance = 0;
 
 CppPlugin::CppPlugin() :
-    m_core(0),
     m_actionHandler(0),
     m_factory(0)
 {
@@ -130,11 +130,6 @@ CppPlugin *CppPlugin::instance()
     return m_instance;
 }
 
-Core::ICore *CppPlugin::core()
-{
-    return m_instance->m_core;
-}
-
 void CppPlugin::initializeEditor(CPPEditor *editor)
 {
     // common actions
@@ -159,14 +154,13 @@ void CppPlugin::initializeEditor(CPPEditor *editor)
 
     // auto completion
     connect(editor, SIGNAL(requestAutoCompletion(ITextEditable*, bool)),
-            TextEditor::Internal::CompletionSupport::instance(core()), SLOT(autoComplete(ITextEditable*, bool)));
+            TextEditor::Internal::CompletionSupport::instance(), SLOT(autoComplete(ITextEditable*, bool)));
 }
 
 bool CppPlugin::initialize(const QStringList & /*arguments*/, QString *errorMessage)
 {
-    typedef TextEditor::TextEditorActionHandler TextEditorActionHandler;
-    m_core = ExtensionSystem::PluginManager::instance()->getObject<Core::ICore>();
-    if (!m_core->mimeDatabase()->addMimeTypes(QLatin1String(":/cppeditor/CppEditor.mimetypes.xml"), errorMessage))
+    Core::ICore *core = Core::ICore::instance();
+    if (!core->mimeDatabase()->addMimeTypes(QLatin1String(":/cppeditor/CppEditor.mimetypes.xml"), errorMessage))
         return false;
 
     m_factory = new CppPluginEditorFactory(this);
@@ -180,21 +174,21 @@ bool CppPlugin::initialize(const QStringList & /*arguments*/, QString *errorMess
     wizardParameters.setTrCategory(tr("C++"));
     wizardParameters.setDescription(tr("Creates a new C++ header file."));
     wizardParameters.setName(tr("C++ Header File"));
-    addAutoReleasedObject(new CppFileWizard(wizardParameters, Header, m_core));
+    addAutoReleasedObject(new CppFileWizard(wizardParameters, Header, core));
 
     wizardParameters.setDescription(tr("Creates a new C++ source file."));
     wizardParameters.setName(tr("C++ Source File"));
-    addAutoReleasedObject(new CppFileWizard(wizardParameters, Source, m_core));
+    addAutoReleasedObject(new CppFileWizard(wizardParameters, Source, core));
 
     wizardParameters.setKind(Core::IWizard::ClassWizard);
     wizardParameters.setName(tr("C++ Class"));
     wizardParameters.setDescription(tr("Creates a header and a source file for a new class."));
-    addAutoReleasedObject(new CppClassWizard(wizardParameters, m_core));
+    addAutoReleasedObject(new CppClassWizard(wizardParameters, core));
 
     QList<int> context;
-    context << m_core->uniqueIDManager()->uniqueIdentifier(CppEditor::Constants::C_CPPEDITOR);
+    context << core->uniqueIDManager()->uniqueIdentifier(CppEditor::Constants::C_CPPEDITOR);
 
-    Core::ActionManager *am = m_core->actionManager();
+    Core::ActionManager *am = core->actionManager();
     am->createMenu(CppEditor::Constants::M_CONTEXT);
 
     Core::Command *cmd;
@@ -217,22 +211,21 @@ bool CppPlugin::initialize(const QStringList & /*arguments*/, QString *errorMess
     am->actionContainer(CppEditor::Constants::M_CONTEXT)->addAction(cmd);
     am->actionContainer(CppTools::Constants::M_TOOLS_CPP)->addAction(cmd);
 
-    m_actionHandler = new CPPEditorActionHandler(m_core,
-        CppEditor::Constants::C_CPPEDITOR,
+    m_actionHandler = new CPPEditorActionHandler(CppEditor::Constants::C_CPPEDITOR,
         TextEditor::TextEditorActionHandler::Format
         | TextEditor::TextEditorActionHandler::UnCommentSelection
         | TextEditor::TextEditorActionHandler::UnCollapseAll);
 
     // Check Suffixes
-    if (const QSettings *settings = m_core->settings()) {
+    if (const QSettings *settings = core->settings()) {
         const QString headerSuffixKey = QLatin1String(headerSuffixKeyC);
         if (settings->contains(headerSuffixKey)) {
             const QString headerSuffix = settings->value(headerSuffixKey, QString()).toString();
             if (!headerSuffix.isEmpty())
-                m_core->mimeDatabase()->setPreferredSuffix(QLatin1String(Constants::CPP_HEADER_MIMETYPE), headerSuffix);
+                core->mimeDatabase()->setPreferredSuffix(QLatin1String(Constants::CPP_HEADER_MIMETYPE), headerSuffix);
             const QString sourceSuffix = settings->value(QLatin1String(sourceSuffixKeyC), QString()).toString();
             if (!sourceSuffix.isEmpty())
-                m_core->mimeDatabase()->setPreferredSuffix(QLatin1String(Constants::CPP_SOURCE_MIMETYPE), sourceSuffix);
+                core->mimeDatabase()->setPreferredSuffix(QLatin1String(Constants::CPP_SOURCE_MIMETYPE), sourceSuffix);
         }
     }
     return true;
@@ -245,7 +238,8 @@ void CppPlugin::extensionsInitialized()
 
 void CppPlugin::switchDeclarationDefinition()
 {
-    CPPEditor *editor = qobject_cast<CPPEditor*>(m_core->editorManager()->currentEditor()->widget());
+    Core::ICore *core = Core::ICore::instance();
+    CPPEditor *editor = qobject_cast<CPPEditor*>(core->editorManager()->currentEditor()->widget());
     if (editor) {
         editor->switchDeclarationDefinition();
     }
@@ -253,7 +247,8 @@ void CppPlugin::switchDeclarationDefinition()
 
 void CppPlugin::jumpToDefinition()
 {
-    CPPEditor *editor = qobject_cast<CPPEditor*>(m_core->editorManager()->currentEditor()->widget());
+    Core::ICore *core = Core::ICore::instance();
+    CPPEditor *editor = qobject_cast<CPPEditor*>(core->editorManager()->currentEditor()->widget());
     if (editor) {
         editor->jumpToDefinition();
     }
diff --git a/src/plugins/cppeditor/cppplugin.h b/src/plugins/cppeditor/cppplugin.h
index 52655e6ae7060c40a46972c61e5afd5828949310..c653866e27128217d8c1c8ac5ab2bbf9dec0dec5 100644
--- a/src/plugins/cppeditor/cppplugin.h
+++ b/src/plugins/cppeditor/cppplugin.h
@@ -65,7 +65,6 @@ public:
     ~CppPlugin();
 
     static CppPlugin *instance();
-    static Core::ICore *core();
 
     bool initialize(const QStringList &arguments, QString *error_message = 0);
     void extensionsInitialized();
diff --git a/src/plugins/cpptools/cppmodelmanager.cpp b/src/plugins/cpptools/cppmodelmanager.cpp
index 49e7cbfc7dbc324c316ace319977ff99468406b1..75f64fea5da9db750abf37ff1de1652a31e7c13e 100644
--- a/src/plugins/cpptools/cppmodelmanager.cpp
+++ b/src/plugins/cpptools/cppmodelmanager.cpp
@@ -51,6 +51,7 @@
 #include <coreplugin/editormanager/editormanager.h>
 #include <coreplugin/progressmanager/progressmanager.h>
 
+#include <extensionsystem/pluginmanager.h>
 #include <utils/qtcassert.h>
 
 #include <TranslationUnit.h>
@@ -69,8 +70,6 @@
 #include <QtCore/QMutexLocker>
 #include <QtCore/QTime>
 
-//#include <QtGui/QPlainTextEdit>
-
 using namespace CppTools;
 using namespace CppTools::Internal;
 using namespace CPlusPlus;
@@ -434,10 +433,10 @@ Document::Ptr CppPreprocessor::switchDocument(Document::Ptr doc)
     modified within Workbench.
 */
 
-CppModelManager::CppModelManager(QObject *parent) :
-    CppModelManagerInterface(parent),
-    m_core(ExtensionSystem::PluginManager::instance()->getObject<Core::ICore>())
+CppModelManager::CppModelManager(QObject *parent)
+    : CppModelManagerInterface(parent)
 {
+    m_core = Core::ICore::instance(); // FIXME
     m_dirty = true;
 
     m_projectExplorer = ExtensionSystem::PluginManager::instance()
diff --git a/src/plugins/cpptools/cppmodelmanagerinterface.h b/src/plugins/cpptools/cppmodelmanagerinterface.h
index ca1c57f86355a185a042a7bd4b4ef1828c79a7e5..849c3c691fd5c99da94186f497089b4939e7629c 100644
--- a/src/plugins/cpptools/cppmodelmanagerinterface.h
+++ b/src/plugins/cpptools/cppmodelmanagerinterface.h
@@ -46,7 +46,7 @@ namespace ProjectExplorer {
 
 namespace CppTools {
 
-class CPPTOOLS_EXPORT CppModelManagerInterface: public QObject
+class CPPTOOLS_EXPORT CppModelManagerInterface : public QObject
 {
     Q_OBJECT
 
diff --git a/src/plugins/cpptools/cpptoolsplugin.cpp b/src/plugins/cpptools/cpptoolsplugin.cpp
index 5ec67bf4a35fcfbb01341044b29c075e82dd457c..c28c4a8127d499a39005520b4c7e31cb5d520993 100644
--- a/src/plugins/cpptools/cpptoolsplugin.cpp
+++ b/src/plugins/cpptools/cpptoolsplugin.cpp
@@ -48,8 +48,9 @@
 #include <coreplugin/actionmanager/actionmanager.h>
 #include <coreplugin/editormanager/editormanager.h>
 #include <cppeditor/cppeditorconstants.h>
+#include <extensionsystem/pluginmanager.h>
 
-#include <QtCore/qplugin.h>
+#include <QtCore/QtPlugin>
 #include <QtCore/QFileInfo>
 #include <QtCore/QDir>
 #include <QtCore/QDebug>
@@ -64,10 +65,8 @@ enum { debug = 0 };
 
 CppToolsPlugin *CppToolsPlugin::m_instance = 0;
 
-CppToolsPlugin::CppToolsPlugin() :
-    m_core(0),
-    m_context(-1),
-    m_modelManager(0)
+CppToolsPlugin::CppToolsPlugin()
+    : m_context(-1), m_modelManager(0)
 {
     m_instance = this;
 }
@@ -78,21 +77,23 @@ CppToolsPlugin::~CppToolsPlugin()
     m_modelManager = 0; // deleted automatically
 }
 
-bool CppToolsPlugin::initialize(const QStringList & /*arguments*/, QString *)
+bool CppToolsPlugin::initialize(const QStringList &arguments, QString *error)
 {
-    m_core = ExtensionSystem::PluginManager::instance()->getObject<Core::ICore>();
-    Core::ActionManager *am = m_core->actionManager();
+    Q_UNUSED(arguments);
+    Q_UNUSED(error);
+    Core::ICore *core = Core::ICore::instance();
+    Core::ActionManager *am = core->actionManager();
 
     // Objects
     m_modelManager = new CppModelManager(this);
     addAutoReleasedObject(m_modelManager);
-    m_completion = new CppCodeCompletion(m_modelManager, m_core);
+    m_completion = new CppCodeCompletion(m_modelManager, core);
     addAutoReleasedObject(m_completion);
     CppQuickOpenFilter *quickOpenFilter = new CppQuickOpenFilter(m_modelManager,
-                                                                 m_core->editorManager());
+                                                                 core->editorManager());
     addAutoReleasedObject(quickOpenFilter);
-    addAutoReleasedObject(new CppClassesFilter(m_modelManager, m_core->editorManager()));
-    addAutoReleasedObject(new CppFunctionsFilter(m_modelManager, m_core->editorManager()));
+    addAutoReleasedObject(new CppClassesFilter(m_modelManager, core->editorManager()));
+    addAutoReleasedObject(new CppFunctionsFilter(m_modelManager, core->editorManager()));
     addAutoReleasedObject(new CompletionSettingsPage(m_completion));
 
     // Menus
@@ -104,7 +105,7 @@ bool CppToolsPlugin::initialize(const QStringList & /*arguments*/, QString *)
     mtools->addMenu(mcpptools);
 
     // Actions
-    m_context = m_core->uniqueIDManager()->uniqueIdentifier(CppEditor::Constants::C_CPPEDITOR);
+    m_context = core->uniqueIDManager()->uniqueIdentifier(CppEditor::Constants::C_CPPEDITOR);
     QList<int> context = QList<int>() << m_context;
 
     QAction *switchAction = new QAction(tr("Switch Header/Source"), this);
@@ -114,7 +115,7 @@ bool CppToolsPlugin::initialize(const QStringList & /*arguments*/, QString *)
     connect(switchAction, SIGNAL(triggered()), this, SLOT(switchHeaderSource()));
 
     // Restore settings
-    QSettings *settings = m_core->settings();
+    QSettings *settings = Core::ICore::instance()->settings();
     settings->beginGroup(QLatin1String("CppTools"));
     settings->beginGroup(QLatin1String("Completion"));
     const bool caseSensitive = settings->value(QLatin1String("CaseSensitive"), true).toBool();
@@ -134,7 +135,7 @@ void CppToolsPlugin::extensionsInitialized()
 void CppToolsPlugin::shutdown()
 {
     // Save settings
-    QSettings *settings = m_core->settings();
+    QSettings *settings = Core::ICore::instance()->settings();
     settings->beginGroup(QLatin1String("CppTools"));
     settings->beginGroup(QLatin1String("Completion"));
     settings->setValue(QLatin1String("CaseSensitive"), m_completion->caseSensitivity() == Qt::CaseSensitive);
@@ -146,14 +147,12 @@ void CppToolsPlugin::shutdown()
 
 void CppToolsPlugin::switchHeaderSource()
 {
-    if (!m_core)
-        return;
-
-    Core::IEditor *editor = m_core->editorManager()->currentEditor();
+    Core::EditorManager *editorManager = Core::ICore::instance()->editorManager();
+    Core::IEditor *editor = editorManager->currentEditor();
     QString otherFile = correspondingHeaderOrSource(editor->file()->fileName());
     if (!otherFile.isEmpty()) {
-        m_core->editorManager()->openEditor(otherFile);
-        m_core->editorManager()->ensureEditorManagerVisible();
+        editorManager->openEditor(otherFile);
+        editorManager->ensureEditorManagerVisible();
     }
 }
 
@@ -221,7 +220,7 @@ static QStringList matchingCandidateSuffixes(const Core::MimeDatabase *mimeDatas
 
 QString CppToolsPlugin::correspondingHeaderOrSourceI(const QString &fileName) const
 {
-    const Core::ICore *core = ExtensionSystem::PluginManager::instance()->getObject<Core::ICore>();
+    const Core::ICore *core = Core::ICore::instance();
     const Core::MimeDatabase *mimeDatase = core->mimeDatabase();
     ProjectExplorer::ProjectExplorerPlugin *explorer =
         ExtensionSystem::PluginManager::instance()->getObject<ProjectExplorer::ProjectExplorerPlugin>();
diff --git a/src/plugins/cpptools/cpptoolsplugin.h b/src/plugins/cpptools/cpptoolsplugin.h
index a55630e6c04072dce00aa3c5fd83096b042e9f6f..281fe1f708d2829656eb10ae7ba18f1381910e9e 100644
--- a/src/plugins/cpptools/cpptoolsplugin.h
+++ b/src/plugins/cpptools/cpptoolsplugin.h
@@ -35,17 +35,13 @@
 #define CPPTOOLS_H
 
 #include <extensionsystem/iplugin.h>
-#include <projectexplorer/ProjectExplorerInterfaces>
+#include <projectexplorer/projectexplorer.h>
 
 QT_BEGIN_NAMESPACE
 class QFileInfo;
 class QDir;
 QT_END_NAMESPACE
 
-namespace Core {
-class ICore;
-}
-
 namespace CppTools {
 namespace Internal {
 
@@ -75,7 +71,6 @@ private:
     QString correspondingHeaderOrSourceI(const QString &fileName) const;
     QFileInfo findFile(const QDir &dir, const QString &name, const ProjectExplorer::Project *project) const;
 
-    Core::ICore *m_core;
     int m_context;
     CppModelManager *m_modelManager;
     CppCodeCompletion *m_completion;
diff --git a/src/plugins/debugger/debugger.pro b/src/plugins/debugger/debugger.pro
index c9256caaa5fc9ae7efe4d9ffdda918999f44131a..469ea3460112218d7cec8eb0cfa7b2f5d836494b 100644
--- a/src/plugins/debugger/debugger.pro
+++ b/src/plugins/debugger/debugger.pro
@@ -26,11 +26,11 @@ HEADERS += attachexternaldialog.h \
     disassemblerwindow.h \
     gdbengine.h \
     gdbmi.h \
-    gdboptionpage.h \
     idebuggerengine.h \
     imports.h \
     moduleshandler.h \
     moduleswindow.h \
+    outputcollector.h \
     procinterrupt.h \
     registerhandler.h \
     registerwindow.h \
@@ -41,7 +41,7 @@ HEADERS += attachexternaldialog.h \
     threadswindow.h \
     watchhandler.h \
     watchwindow.h
-    
+
 SOURCES += attachexternaldialog.cpp \
     attachremotedialog.cpp \
     breakhandler.cpp \
@@ -55,10 +55,9 @@ SOURCES += attachexternaldialog.cpp \
     disassemblerwindow.cpp \
     gdbengine.cpp \
     gdbmi.cpp \
-    gdboptionpage.cpp \
-    gdbengine.h \
     moduleshandler.cpp \
     moduleswindow.cpp \
+    outputcollector.cpp \
     procinterrupt.cpp \
     registerhandler.cpp \
     registerwindow.cpp \
diff --git a/src/plugins/debugger/debuggermanager.cpp b/src/plugins/debugger/debuggermanager.cpp
index f268fbb3dda787ac4341b42d0fde49cb762ade8d..7b0e6c24273b37bf50216f8b1d113fa56396dec0 100644
--- a/src/plugins/debugger/debuggermanager.cpp
+++ b/src/plugins/debugger/debuggermanager.cpp
@@ -86,6 +86,18 @@ using namespace Debugger::Constants;
 
 static const QString tooltipIName = "tooltip";
 
+
+DebuggerSettings::DebuggerSettings()
+{
+    m_autoRun = false;
+    m_autoQuit = false;
+    m_skipKnownFrames = false;
+    m_debugDumpers = false;
+    m_useToolTips = false;
+    m_useTerminal = false;
+    m_useCustomDumpers = true;
+}
+
 ///////////////////////////////////////////////////////////////////////
 //
 // BreakByFunctionDialog
@@ -322,56 +334,6 @@ void DebuggerManager::init()
     m_breakAtMainAction = new QAction(this);
     m_breakAtMainAction->setText(tr("Set Breakpoint at Function 'main'"));
 
-    m_debugDumpersAction = new QAction(this);
-    m_debugDumpersAction->setText(tr("Debug Custom Dumpers"));
-    m_debugDumpersAction->setToolTip(tr("This is an internal tool to "
-        "make debugging the Custom Data Dumper code easier. "
-        "Using this action is in general not needed unless you "
-        "want do debug Qt Creator itself."));
-    m_debugDumpersAction->setCheckable(true);
-
-    m_skipKnownFramesAction = new QAction(this);
-    m_skipKnownFramesAction->setText(tr("Skip Known Frames When Stepping"));
-    m_skipKnownFramesAction->setToolTip(tr("After checking this option"
-        "'Step Into' combines in certain situations several steps, "
-        "leading to 'less noisy' debugging. So will, e.g., the atomic "
-        "reference counting code be skipped, and a single 'Step Into' "
-        "for a signal emission will end up directly in the slot connected "
-        "to it"));
-    m_skipKnownFramesAction->setCheckable(true);
-
-    m_useCustomDumpersAction = new QAction(this);
-    m_useCustomDumpersAction->setText(tr("Use Custom Display for Qt Objects"));
-    m_useCustomDumpersAction->setToolTip(tr("Checking this will make the debugger "
-        "try to use code to format certain data (QObject, QString, ...) nicely. "));
-    m_useCustomDumpersAction->setCheckable(true);
-    m_useCustomDumpersAction->setChecked(true);
-
-    m_useFastStartAction = new QAction(this);
-    m_useFastStartAction->setText(tr("Fast Debugger Start"));
-    m_useFastStartAction->setToolTip(tr("Checking this will make the debugger "
-        "start fast by loading only very few debug symbols on start up. This "
-        "might lead to situations where breakpoints can not be set properly. "
-        "So uncheck this option if you experience breakpoint related problems."));
-    m_useFastStartAction->setCheckable(true);
-    m_useFastStartAction->setChecked(true);
-
-    m_useToolTipsAction = new QAction(this);
-    m_useToolTipsAction->setText(tr("Use Tooltips While Debugging"));
-    m_useToolTipsAction->setToolTip(tr("Checking this will make enable "
-        "tooltips for variable values during debugging. Since this can slow "
-        "down debugging and does not provide reliable information as it does "
-        "not use scope information, it is switched off by default."));
-    m_useToolTipsAction->setCheckable(true);
-    m_useToolTipsAction->setChecked(false);
-
-    // FIXME
-    m_useFastStartAction->setChecked(false);
-    m_useFastStartAction->setEnabled(false);
-
-    m_dumpLogAction = new QAction(this);
-    m_dumpLogAction->setText(tr("Dump Log File for Debugging Purposes"));
-
     m_watchAction = new QAction(this);
     m_watchAction->setText(tr("Add to Watch Window"));
 
@@ -416,14 +378,6 @@ void DebuggerManager::init()
     connect(m_breakAtMainAction, SIGNAL(triggered()),
         this, SLOT(breakAtMain()));
 
-    connect(m_useFastStartAction, SIGNAL(triggered()),
-        this, SLOT(saveSessionData()));
-    connect(m_useCustomDumpersAction, SIGNAL(triggered()),
-        this, SLOT(saveSessionData()));
-    connect(m_skipKnownFramesAction, SIGNAL(triggered()),
-        this, SLOT(saveSessionData()));
-    connect(m_dumpLogAction, SIGNAL(triggered()),
-        this, SLOT(dumpLog()));
     connect(m_statusTimer, SIGNAL(timeout()),
         this, SLOT(clearStatusMessage()));
 
@@ -636,9 +590,9 @@ void DebuggerManager::notifyInferiorPidChanged(int pid)
     emit inferiorPidChanged(pid);
 }
 
-void DebuggerManager::showApplicationOutput(const QString &prefix, const QString &str)
+void DebuggerManager::showApplicationOutput(const QString &str)
 {
-     emit applicationOutputAvailable(prefix, str);
+     emit applicationOutputAvailable(str);
 }
 
 void DebuggerManager::shutdown()
@@ -947,16 +901,6 @@ void DebuggerManager::loadSessionData()
 {
     m_breakHandler->loadSessionData();
     m_watchHandler->loadSessionData();
-
-    QVariant value;
-    querySessionValue(QLatin1String("UseFastStart"), &value);
-    m_useFastStartAction->setChecked(value.toBool());
-    querySessionValue(QLatin1String("UseToolTips"), &value);
-    m_useToolTipsAction->setChecked(value.toBool());
-    querySessionValue(QLatin1String("UseCustomDumpers"), &value);
-    m_useCustomDumpersAction->setChecked(!value.isValid() || value.toBool());
-    querySessionValue(QLatin1String("SkipKnownFrames"), &value);
-    m_skipKnownFramesAction->setChecked(value.toBool());
     engine()->loadSessionData();
 }
 
@@ -964,15 +908,6 @@ void DebuggerManager::saveSessionData()
 {
     m_breakHandler->saveSessionData();
     m_watchHandler->saveSessionData();
-
-    setSessionValue(QLatin1String("UseFastStart"),
-        m_useFastStartAction->isChecked());
-    setSessionValue(QLatin1String("UseToolTips"),
-        m_useToolTipsAction->isChecked());
-    setSessionValue(QLatin1String("UseCustomDumpers"),
-        m_useCustomDumpersAction->isChecked());
-    setSessionValue(QLatin1String("SkipKnownFrames"),
-        m_skipKnownFramesAction->isChecked());
     engine()->saveSessionData();
 }
 
@@ -1139,22 +1074,22 @@ void DebuggerManager::setBusyCursor(bool busy)
 
 bool DebuggerManager::skipKnownFrames() const
 {
-    return m_skipKnownFramesAction->isChecked();
+    return m_settings.m_skipKnownFrames;
 }
 
 bool DebuggerManager::debugDumpers() const
 {
-    return m_debugDumpersAction->isChecked();
+    return m_settings.m_debugDumpers;
 }
 
 bool DebuggerManager::useCustomDumpers() const
 {
-    return m_useCustomDumpersAction->isChecked();
+    return m_settings.m_useCustomDumpers;
 }
 
 bool DebuggerManager::useFastStart() const
 {
-    return 0; // && m_useFastStartAction->isChecked();
+    return 0; // && m_settings.m_useFastStart;
 }
 
 void DebuggerManager::queryCurrentTextEditor(QString *fileName, int *lineNumber,
diff --git a/src/plugins/debugger/debuggermanager.h b/src/plugins/debugger/debuggermanager.h
index bde8ce449b17d386beb670129bc487b5397a3bdf..5d5e7abd0da7f5e475fde605698004d4d4aa9cd0 100644
--- a/src/plugins/debugger/debuggermanager.h
+++ b/src/plugins/debugger/debuggermanager.h
@@ -166,9 +166,9 @@ private:
     virtual ThreadsHandler *threadsHandler() = 0;
     virtual WatchHandler *watchHandler() = 0;
 
-    virtual void showApplicationOutput(const QString &prefix, const QString &data) = 0;
-    virtual QAction *useCustomDumpersAction() const = 0;
-    virtual QAction *debugDumpersAction() const = 0;
+    virtual void showApplicationOutput(const QString &data) = 0;
+    //virtual QAction *useCustomDumpersAction() const = 0;
+    //virtual QAction *debugDumpersAction() const = 0;
     virtual bool skipKnownFrames() const = 0;
     virtual bool debugDumpers() const = 0;
     virtual bool useCustomDumpers() const = 0;
@@ -180,6 +180,31 @@ private:
 };
 
 
+//
+// DebuggerSettings
+//
+
+class DebuggerSettings
+{
+public:
+    DebuggerSettings();
+
+public:
+    QString m_gdbCmd;
+    QString m_gdbEnv;
+    bool m_autoRun;
+    bool m_autoQuit;
+
+    bool m_useCustomDumpers;
+    bool m_skipKnownFrames;
+    bool m_debugDumpers;
+    bool m_useFastStart;
+    bool m_useToolTips;
+    bool m_useTerminal;
+
+    QString m_scriptFile;
+};
+
 //
 // DebuggerManager
 //
@@ -196,6 +221,7 @@ public:
     IDebuggerManagerAccessForEngines *engineInterface();
     QMainWindow *mainWindow() const { return m_mainWindow; }
     QLabel *statusLabel() const { return m_statusLabel; }
+    DebuggerSettings *settings() { return &m_settings; }
 
     enum StartMode { startInternal, startExternal, attachExternal };
     enum DebuggerType { GdbDebugger, ScriptDebugger, WinDebugger };
@@ -260,7 +286,7 @@ public slots:
 private slots:
     void showDebuggerOutput(const QString &prefix, const QString &msg);
     void showDebuggerInput(const QString &prefix, const QString &msg);
-    void showApplicationOutput(const QString &prefix, const QString &msg);
+    void showApplicationOutput(const QString &data);
 
     void reloadDisassembler();
     void disassemblerDockToggled(bool on);
@@ -286,9 +312,9 @@ private:
     StackHandler *stackHandler() { return m_stackHandler; }
     ThreadsHandler *threadsHandler() { return m_threadsHandler; }
     WatchHandler *watchHandler() { return m_watchHandler; }
-    QAction *useCustomDumpersAction() const { return m_useCustomDumpersAction; }
-    QAction *useToolTipsAction() const { return m_useToolTipsAction; }
-    QAction *debugDumpersAction() const { return m_debugDumpersAction; }
+    //QAction *useCustomDumpersAction() const { return m_useCustomDumpersAction; }
+    //QAction *useToolTipsAction() const { return m_useToolTipsAction; }
+    //QAction *debugDumpersAction() const { return m_debugDumpersAction; }
     bool skipKnownFrames() const;
     bool debugDumpers() const;
     bool useCustomDumpers() const;
@@ -340,8 +366,7 @@ signals:
     void setSessionValueRequested(const QString &name, const QVariant &value);
     void configValueRequested(const QString &name, QVariant *value);
     void setConfigValueRequested(const QString &name, const QVariant &value);
-    void applicationOutputAvailable(const QString &prefix, const QString &msg);
-
+    void applicationOutputAvailable(const QString &output);
 
 public:
     // FIXME: make private
@@ -406,13 +431,6 @@ private:
     QAction *m_sepAction;
     QAction *m_stepIAction;
     QAction *m_nextIAction;
-    QAction *m_skipKnownFramesAction;
-
-    QAction *m_debugDumpersAction;
-    QAction *m_useCustomDumpersAction;
-    QAction *m_useFastStartAction;
-    QAction *m_useToolTipsAction;
-    QAction *m_dumpLogAction;
 
     QWidget *m_breakWindow;
     QWidget *m_disassemblerWindow;
@@ -432,9 +450,9 @@ private:
 
     IDebuggerEngine *engine();
     IDebuggerEngine *m_engine;
+    DebuggerSettings m_settings;
 };
 
-
 } // namespace Internal
 } // namespace Debugger
 
diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp
index 80acb59b92f2036dffcb3ad6a8dfaa940a00cd45..7fd564a3a0546f22019ad110bcd7e539132c24d3 100644
--- a/src/plugins/debugger/debuggerplugin.cpp
+++ b/src/plugins/debugger/debuggerplugin.cpp
@@ -36,12 +36,14 @@
 #include "debuggerconstants.h"
 #include "debuggermanager.h"
 #include "debuggerrunner.h"
-#include "gdboptionpage.h"
 #include "gdbengine.h"
 
+#include "ui_gdboptionpage.h"
+
 #include <coreplugin/actionmanager/actionmanager.h>
 #include <coreplugin/basemode.h>
 #include <coreplugin/coreconstants.h>
+#include <coreplugin/dialogs/ioptionspage.h>
 #include <coreplugin/editormanager/editormanager.h>
 #include <coreplugin/findplaceholder.h>
 #include <coreplugin/icore.h>
@@ -57,6 +59,8 @@
 
 #include <cppeditor/cppeditorconstants.h>
 
+#include <extensionsystem/pluginmanager.h>
+
 #include <projectexplorer/projectexplorerconstants.h>
 #include <projectexplorer/session.h>
 
@@ -73,6 +77,7 @@
 #include <QtCore/QSettings>
 #include <QtCore/QtPlugin>
 
+#include <QtGui/QLineEdit>
 #include <QtGui/QDockWidget>
 #include <QtGui/QMainWindow>
 #include <QtGui/QPlainTextEdit>
@@ -80,6 +85,8 @@
 #include <QtGui/QTextCursor>
 
 
+namespace ExtensionSystem { class PluginManager; }
+
 using namespace Core;
 using namespace Debugger::Constants;
 using namespace Debugger::Internal;
@@ -99,13 +106,7 @@ const char * const JUMP_TO_LINE         = "Debugger.JumpToLine";
 const char * const TOGGLE_BREAK         = "Debugger.ToggleBreak";
 const char * const BREAK_BY_FUNCTION    = "Debugger.BreakByFunction";
 const char * const BREAK_AT_MAIN        = "Debugger.BreakAtMain";
-const char * const DEBUG_DUMPERS        = "Debugger.DebugDumpers";
 const char * const ADD_TO_WATCH         = "Debugger.AddToWatch";
-const char * const USE_CUSTOM_DUMPERS   = "Debugger.UseCustomDumpers";
-const char * const USE_FAST_START       = "Debugger.UseFastStart";
-const char * const USE_TOOL_TIPS        = "Debugger.UseToolTips";
-const char * const SKIP_KNOWN_FRAMES    = "Debugger.SkipKnownFrames";
-const char * const DUMP_LOG             = "Debugger.DumpLog";
 
 #ifdef Q_OS_MAC
 const char * const INTERRUPT_KEY            = "Shift+F5";
@@ -143,6 +144,12 @@ const char * const ADD_TO_WATCH_KEY         = "Ctrl+Alt+Q";
 } // namespace Debugger
 
 
+///////////////////////////////////////////////////////////////////////
+//
+// DebugMode
+//
+///////////////////////////////////////////////////////////////////////
+
 namespace Debugger {
 namespace Internal {
 
@@ -159,9 +166,6 @@ public:
     void shutdown() {}
 };
 
-} // namespace Internal
-} // namespace Debugger
-
 DebugMode::DebugMode(QObject *parent)
   : BaseMode(parent)
 {
@@ -177,6 +181,9 @@ DebugMode::~DebugMode()
     EditorManager::instance()->setParent(0);
 }
 
+} // namespace Internal
+} // namespace Debugger
+
 
 ///////////////////////////////////////////////////////////////////////
 //
@@ -184,8 +191,10 @@ DebugMode::~DebugMode()
 //
 ///////////////////////////////////////////////////////////////////////
 
-class Debugger::Internal::LocationMark
-  : public TextEditor::BaseTextMark
+namespace Debugger {
+namespace Internal {
+
+class LocationMark : public TextEditor::BaseTextMark
 {
     Q_OBJECT
 
@@ -212,6 +221,110 @@ QIcon LocationMark::icon() const
     return icon;
 }
 
+} // namespace Internal
+} // namespace Debugger
+
+
+///////////////////////////////////////////////////////////////////////
+//
+// GdbOptionPage
+//
+///////////////////////////////////////////////////////////////////////
+
+namespace Debugger {
+namespace Internal {
+
+class GdbOptionPage : public Core::IOptionsPage
+{
+    Q_OBJECT
+
+public:
+    GdbOptionPage(DebuggerPlugin *plugin) : m_plugin(plugin) {}
+
+    // IOptionsPage
+    QString name() const { return tr("Gdb"); }
+    QString category() const { return "Debugger"; }
+    QString trCategory() const { return tr("Debugger"); }
+
+    QWidget *createPage(QWidget *parent);
+    void apply();
+    void finish() {} // automatically calls "apply"
+
+private:
+    Ui::GdbOptionPage m_ui;
+
+    DebuggerSettings m_settings;
+    DebuggerPlugin *m_plugin;
+};
+
+QWidget *GdbOptionPage::createPage(QWidget *parent)
+{
+    QWidget *w = new QWidget(parent);
+    m_settings = *m_plugin->m_manager->settings();
+    m_ui.setupUi(w);
+    m_ui.gdbLocationChooser->setExpectedKind(Core::Utils::PathChooser::Command);
+    m_ui.gdbLocationChooser->setPromptDialogTitle(tr("Choose Gdb Location"));
+    m_ui.gdbLocationChooser->setPath(m_settings.m_gdbCmd);
+    m_ui.scriptFileChooser->setExpectedKind(Core::Utils::PathChooser::File);
+    m_ui.scriptFileChooser->setPromptDialogTitle(tr("Choose Location of Startup Script File"));
+    m_ui.scriptFileChooser->setPath(m_settings.m_scriptFile);
+    m_ui.environmentEdit->setText(m_settings.m_gdbEnv);
+    m_ui.autoStartBox->setChecked(m_settings.m_autoRun);
+    m_ui.autoQuitBox->setChecked(m_settings.m_autoQuit);
+
+    m_ui.checkBoxSkipKnownFrames->setChecked(m_settings.m_skipKnownFrames);
+    m_ui.checkBoxDebugDumpers->setChecked(m_settings.m_debugDumpers);
+    m_ui.checkBoxUseCustomDumpers->setChecked(m_settings.m_useCustomDumpers);
+    m_ui.checkBoxFastStart->setChecked(m_settings.m_useFastStart);
+    m_ui.checkBoxUseToolTips->setChecked(m_settings.m_useToolTips);
+    m_ui.checkBoxUseTerminal->setChecked(m_settings.m_useTerminal);
+
+#ifndef QT_DEBUG
+#if 0
+    cmd = am->registerAction(m_manager->m_dumpLogAction,
+        Constants::DUMP_LOG, globalcontext);
+    //cmd->setDefaultKeySequence(QKeySequence(tr("Ctrl+D,Ctrl+L")));
+    cmd->setDefaultKeySequence(QKeySequence(tr("Ctrl+Shift+F11")));
+    mdebug->addAction(cmd);
+#endif
+#endif
+
+    // FIXME
+    m_ui.autoStartBox->hide();
+    m_ui.autoQuitBox->hide();
+    m_ui.environmentEdit->hide();
+    m_ui.labelEnvironment->hide();
+
+    m_ui.checkBoxFastStart->setChecked(false);
+    m_ui.checkBoxFastStart->hide();
+
+    //m_dumpLogAction = new QAction(this);
+    //m_dumpLogAction->setText(tr("Dump Log File for Debugging Purposes"));
+    return w;
+}
+
+void GdbOptionPage::apply()
+{
+    m_settings.m_gdbCmd   = m_ui.gdbLocationChooser->path();
+    m_settings.m_gdbEnv   = m_ui.environmentEdit->text();
+    m_settings.m_autoRun  = m_ui.autoStartBox->isChecked();
+    m_settings.m_autoQuit = m_ui.autoQuitBox->isChecked();
+    m_settings.m_scriptFile = m_ui.scriptFileChooser->path();
+
+    m_settings.m_skipKnownFrames = m_ui.checkBoxSkipKnownFrames->isChecked();
+    m_settings.m_debugDumpers = m_ui.checkBoxDebugDumpers->isChecked();
+    m_settings.m_useCustomDumpers = m_ui.checkBoxUseCustomDumpers->isChecked();
+    m_settings.m_useFastStart = m_ui.checkBoxFastStart->isChecked();
+    m_settings.m_useToolTips = m_ui.checkBoxUseToolTips->isChecked();
+    m_settings.m_useTerminal = m_ui.checkBoxUseTerminal->isChecked();
+
+    *m_plugin->m_manager->settings() = m_settings;
+    m_plugin->writeSettings();
+}
+
+} // namespace Internal
+} // namespace Debugger
+
 
 ///////////////////////////////////////////////////////////////////////
 //
@@ -233,7 +346,7 @@ DebuggerPlugin::~DebuggerPlugin()
 
 static QSettings *settings()
 {
-    return ExtensionSystem::PluginManager::instance()->getObject<ICore>()->settings();
+    return ICore::instance()->settings();
 }
 
 void DebuggerPlugin::shutdown()
@@ -274,7 +387,7 @@ bool DebuggerPlugin::initialize(const QStringList &arguments, QString *error_mes
 
     m_pm = ExtensionSystem::PluginManager::instance();
 
-    ICore *core = m_pm->getObject<Core::ICore>();
+    ICore *core = ICore::instance();
     QTC_ASSERT(core, return false);
 
     Core::ActionManager *am = core->actionManager();
@@ -409,34 +522,6 @@ bool DebuggerPlugin::initialize(const QStringList &arguments, QString *error_mes
     cmd = am->registerAction(sep, QLatin1String("Debugger.Sep2"), globalcontext);
     mdebug->addAction(cmd);
 
-    cmd = am->registerAction(m_manager->m_skipKnownFramesAction,
-        Constants::SKIP_KNOWN_FRAMES, globalcontext);
-    mdebug->addAction(cmd);
-
-    cmd = am->registerAction(m_manager->m_useCustomDumpersAction,
-        Constants::USE_CUSTOM_DUMPERS, globalcontext);
-    mdebug->addAction(cmd);
-
-    cmd = am->registerAction(m_manager->m_useFastStartAction,
-        Constants::USE_FAST_START, globalcontext);
-    mdebug->addAction(cmd);
-
-    cmd = am->registerAction(m_manager->m_useToolTipsAction,
-        Constants::USE_TOOL_TIPS, globalcontext);
-    mdebug->addAction(cmd);
-
-#ifdef QT_DEBUG
-    cmd = am->registerAction(m_manager->m_dumpLogAction,
-        Constants::DUMP_LOG, globalcontext);
-    //cmd->setDefaultKeySequence(QKeySequence(tr("Ctrl+D,Ctrl+L")));
-    cmd->setDefaultKeySequence(QKeySequence(tr("Ctrl+Shift+F11")));
-    mdebug->addAction(cmd);
-
-    cmd = am->registerAction(m_manager->m_debugDumpersAction,
-        Constants::DEBUG_DUMPERS, debuggercontext);
-    mdebug->addAction(cmd);
-#endif
-
     sep = new QAction(this);
     sep->setSeparator(true);
     cmd = am->registerAction(sep, QLatin1String("Debugger.Sep4"), globalcontext);
@@ -479,7 +564,7 @@ bool DebuggerPlugin::initialize(const QStringList &arguments, QString *error_mes
     m_generalOptionPage = 0;
 
     // FIXME:
-    m_generalOptionPage = new GdbOptionPage(&theGdbSettings());
+    m_generalOptionPage = new GdbOptionPage(this);
     addObject(m_generalOptionPage);
 
     m_locationMark = 0;
@@ -628,8 +713,7 @@ ProjectExplorer::ProjectExplorerPlugin *DebuggerPlugin::projectExplorer() const
 /*! Activates the previous mode when the current mode is the debug mode. */
 void DebuggerPlugin::activatePreviousMode()
 {
-    ICore *core = m_pm->getObject<Core::ICore>();
-    Core::ModeManager *const modeManager = core->modeManager();
+    Core::ModeManager *const modeManager = ICore::instance()->modeManager();
 
     if (modeManager->currentMode() == modeManager->mode(Constants::MODE_DEBUG)
             && !m_previousMode.isEmpty()) {
@@ -640,7 +724,7 @@ void DebuggerPlugin::activatePreviousMode()
 
 void DebuggerPlugin::activateDebugMode()
 {
-    ICore *core = m_pm->getObject<Core::ICore>();
+    ICore *core = ICore::instance();
     Core::ModeManager *modeManager = core->modeManager();
     m_previousMode = QLatin1String(modeManager->currentMode()->uniqueModeName());
     modeManager->activateMode(QLatin1String(MODE_DEBUG));
@@ -648,7 +732,7 @@ void DebuggerPlugin::activateDebugMode()
 
 void DebuggerPlugin::queryCurrentTextEditor(QString *fileName, int *lineNumber, QObject **object)
 {
-    ICore *core = m_pm->getObject<Core::ICore>();
+    ICore *core = ICore::instance();
     if (!core || !core->editorManager())
         return;
     Core::IEditor *editor = core->editorManager()->currentEditor();
@@ -711,7 +795,7 @@ void DebuggerPlugin::requestMark(TextEditor::ITextEditor *editor, int lineNumber
 void DebuggerPlugin::showToolTip(TextEditor::ITextEditor *editor,
     const QPoint &point, int pos)
 {
-    if (!m_manager->useToolTipsAction()->isChecked())
+    if (!m_manager->settings()->m_useToolTips)
         return;
 
     QPlainTextEdit *plaintext = qobject_cast<QPlainTextEdit*>(editor->widget());
@@ -787,7 +871,7 @@ void DebuggerPlugin::gotoLocation(const QString &fileName, int lineNumber,
 void DebuggerPlugin::changeStatus(int status)
 {
     bool startIsContinue = (status == DebuggerInferiorStopped);
-    ICore *core = m_pm->getObject<Core::ICore>();
+    ICore *core = ICore::instance();
     if (startIsContinue) {
         core->addAdditionalContext(m_gdbRunningContext);
         core->updateContext();
@@ -799,22 +883,59 @@ void DebuggerPlugin::changeStatus(int status)
 
 void DebuggerPlugin::writeSettings() const
 {
-    QSettings *s = settings();
     QTC_ASSERT(m_manager, return);
     QTC_ASSERT(m_manager->mainWindow(), return);
+
+    QSettings *s = settings();
+    DebuggerSettings *m = m_manager->settings();
     s->beginGroup(QLatin1String("DebugMode"));
-    s->setValue(QLatin1String("State"), m_manager->mainWindow()->saveState());
-    s->setValue(QLatin1String("Locked"), m_toggleLockedAction->isChecked());
+    s->setValue("State", m_manager->mainWindow()->saveState());
+    s->setValue("Locked", m_toggleLockedAction->isChecked());
+    s->setValue("Location", m->m_gdbCmd);
+    s->setValue("Environment", m->m_gdbEnv);
+    s->setValue("ScriptFile", m->m_scriptFile);
+    s->setValue("AutoRun", m->m_autoRun);
+    s->setValue("AutoQuit", m->m_autoQuit);
+
+    s->setValue("UseFastStart", m->m_useFastStart);
+    s->setValue("UseToolTips", m->m_useToolTips);
+    s->setValue("UseTerminal", m->m_useTerminal);
+    s->setValue("UseCustomDumpers", m->m_useCustomDumpers);
+    s->setValue("SkipKnowFrames", m->m_skipKnownFrames);
+    s->setValue("DebugDumpers", m->m_debugDumpers);
     s->endGroup();
 }
 
 void DebuggerPlugin::readSettings()
 {
     QSettings *s = settings();
+    DebuggerSettings *m = &m_manager->m_settings; 
+
+    QString defaultCommand("gdb");
+#if defined(Q_OS_WIN32)
+    defaultCommand.append(".exe");
+#endif
+    QString defaultScript = ICore::instance()->resourcePath() +
+        QLatin1String("/gdb/qt4macros");
+
     s->beginGroup(QLatin1String("DebugMode"));
-    m_manager->mainWindow()->restoreState(s->value(QLatin1String("State"), QByteArray()).toByteArray());
-    m_toggleLockedAction->setChecked(s->value(QLatin1String("Locked"), true).toBool());
+    QByteArray ba = s->value("State", QByteArray()).toByteArray();
+    m_toggleLockedAction->setChecked(s->value("Locked", true).toBool());
+    m->m_gdbCmd     = s->value("Location", defaultCommand).toString();
+    m->m_scriptFile = s->value("ScriptFile", defaultScript).toString();
+    m->m_gdbEnv     = s->value("Environment", "").toString();
+    m->m_autoRun    = s->value("AutoRun", true).toBool();
+    m->m_autoQuit   = s->value("AutoQuit", true).toBool();
+
+    m->m_skipKnownFrames  = s->value("SkipKnownFrames", false).toBool();
+    m->m_debugDumpers     = s->value("DebugDumpers", false).toBool();
+    m->m_useCustomDumpers = s->value("UseCustomDupers", false).toBool();
+    m->m_useFastStart     = s->value("UseFastStart", false).toBool();
+    m->m_useToolTips      = s->value("UseToolTips", false).toBool();
+    m->m_useTerminal      = s->value("UseTerminal", false).toBool();
     s->endGroup();
+
+    m_manager->mainWindow()->restoreState(ba);
 }
 
 void DebuggerPlugin::focusCurrentEditor(IMode *mode)
diff --git a/src/plugins/debugger/debuggerplugin.h b/src/plugins/debugger/debuggerplugin.h
index 53f8490cfc3562084f168f95569f45e633a4d0e4..4ab9c5b89f8fd5a5eeec673a539468386686d76e 100644
--- a/src/plugins/debugger/debuggerplugin.h
+++ b/src/plugins/debugger/debuggerplugin.h
@@ -78,7 +78,6 @@ private slots:
     void changeStatus(int status);
     void requestMark(TextEditor::ITextEditor *editor, int lineNumber);
     void showToolTip(TextEditor::ITextEditor *editor, const QPoint &pnt, int pos);
-
     void querySessionValue(const QString &name, QVariant *value);
     void setSessionValue(const QString &name, const QVariant &value);
     void queryConfigValue(const QString &name, QVariant *value);
@@ -97,6 +96,7 @@ private:
     void writeSettings() const;
 
     friend class DebuggerManager;
+    friend class GdbOptionPage;
     friend class DebugMode; // FIXME: Just a hack now so that it can access the views
 
     ProjectExplorer::ProjectExplorerPlugin *projectExplorer() const;
diff --git a/src/plugins/debugger/debuggerrunner.cpp b/src/plugins/debugger/debuggerrunner.cpp
index 45eecd6514e5919d3142043353c5bb721143d5bb..7f3e42f47fa122af31fd00454dbd7ca595c141ee 100644
--- a/src/plugins/debugger/debuggerrunner.cpp
+++ b/src/plugins/debugger/debuggerrunner.cpp
@@ -108,8 +108,8 @@ DebuggerRunControl::DebuggerRunControl(DebuggerManager *manager,
 {
     connect(m_manager, SIGNAL(debuggingFinished()),
             this, SLOT(debuggingFinished()));
-    connect(m_manager, SIGNAL(applicationOutputAvailable(QString, QString)),
-            this, SLOT(slotAddToOutputWindow(QString, QString)));
+    connect(m_manager, SIGNAL(applicationOutputAvailable(QString)),
+            this, SLOT(slotAddToOutputWindowInline(QString)));
     connect(m_manager, SIGNAL(inferiorPidChanged(qint64)),
             this, SLOT(bringApplicationToForeground(qint64)));
 }
@@ -138,12 +138,9 @@ void DebuggerRunControl::start()
         debuggingFinished();
 }
 
-void DebuggerRunControl::slotAddToOutputWindow(const QString &prefix, const QString &line)
+void DebuggerRunControl::slotAddToOutputWindowInline(const QString &data)
 {  
-    Q_UNUSED(prefix);
-    foreach (const QString &l, line.split('\n'))
-        emit addToOutputWindow(this, prefix + Qt::escape(l));
-    //emit addToOutputWindow(this, prefix + Qt::escape(line));
+    emit addToOutputWindowInline(this, data);
 }
 
 void DebuggerRunControl::stop()
diff --git a/src/plugins/debugger/debuggerrunner.h b/src/plugins/debugger/debuggerrunner.h
index c10a84e479513583acbc5c642f78edb7ff30f24e..0c6d979c0107f89e79ce196beb4511ac5e577abb 100644
--- a/src/plugins/debugger/debuggerrunner.h
+++ b/src/plugins/debugger/debuggerrunner.h
@@ -84,7 +84,7 @@ public:
 
 private slots:
     void debuggingFinished();
-    void slotAddToOutputWindow(const QString &prefix, const QString &line);
+    void slotAddToOutputWindowInline(const QString &output);
 
 private:
     DebuggerManager *m_manager;
diff --git a/src/plugins/debugger/gdbengine.cpp b/src/plugins/debugger/gdbengine.cpp
index 3190d1612a385fdd32b3ffdb300d5ddabfd4bd31..a6d426d21da96c0d0e29d0ed8fff85eeea6d6a6b 100644
--- a/src/plugins/debugger/gdbengine.cpp
+++ b/src/plugins/debugger/gdbengine.cpp
@@ -84,19 +84,6 @@ Q_DECLARE_METATYPE(Debugger::Internal::GdbMi);
 
 static const QString tooltipIName = "tooltip";
 
-///////////////////////////////////////////////////////////////////////
-//
-// GdbSettings
-//
-///////////////////////////////////////////////////////////////////////
-
-GdbSettings &Debugger::Internal::theGdbSettings()
-{
-    static GdbSettings settings;
-    return settings;
-}
-
-
 ///////////////////////////////////////////////////////////////////////
 //
 // GdbCommandType
@@ -265,7 +252,7 @@ void GdbEngine::init()
     m_pendingRequests = 0;
     m_gdbVersion = 100;
     m_shared = 0;
-    qq->debugDumpersAction()->setChecked(false);
+    m_outputCodec = QTextCodec::codecForLocale();
 
     m_oldestAcceptableToken = -1;
 
@@ -279,12 +266,9 @@ void GdbEngine::init()
     connect(&m_gdbProc, SIGNAL(finished(int, QProcess::ExitStatus)), q,
         SLOT(exitDebugger()));
 
-    connect(qq->debugDumpersAction(), SIGNAL(toggled(bool)),
-        this, SLOT(setDebugDumpers(bool)));
-    connect(qq->useCustomDumpersAction(), SIGNAL(toggled(bool)),
-        this, SLOT(setCustomDumpersWanted(bool)));
-
     // Output
+    connect(&m_outputCollector, SIGNAL(byteDelivery(QByteArray)),
+            SLOT(readDebugeeOutput(QByteArray)));
     connect(this, SIGNAL(gdbResponseAvailable()),
         this, SLOT(handleResponse()), Qt::QueuedConnection);
 
@@ -294,8 +278,8 @@ void GdbEngine::init()
     connect(this, SIGNAL(gdbInputAvailable(QString,QString)),
         q, SLOT(showDebuggerInput(QString,QString)),
         Qt::QueuedConnection);
-    connect(this, SIGNAL(applicationOutputAvailable(QString,QString)),
-        q, SLOT(showApplicationOutput(QString,QString)),
+    connect(this, SIGNAL(applicationOutputAvailable(QString)),
+        q, SLOT(showApplicationOutput(QString)),
         Qt::QueuedConnection);
 }
 
@@ -306,7 +290,7 @@ void GdbEngine::gdbProcError(QProcess::ProcessError error)
         case QProcess::FailedToStart:
             msg = QString(tr("The Gdb process failed to start. Either the "
                 "invoked program '%1' is missing, or you may have insufficient "
-                "permissions to invoke the program.")).arg(theGdbSettings().m_gdbCmd);
+                "permissions to invoke the program.")).arg(q->settings()->m_gdbCmd);
             break;
         case QProcess::Crashed:
             msg = tr("The Gdb process crashed some time after starting "
@@ -374,6 +358,12 @@ static void skipTerminator(const char *&from, const char *to)
     skipSpaces(from, to);
 }
 
+void GdbEngine::readDebugeeOutput(const QByteArray &data)
+{
+    emit applicationOutputAvailable(m_outputCodec->toUnicode(
+            data.constData(), data.length(), &m_outputCodecState));
+}
+
 // called asyncronously as response to Gdb stdout output in
 // gdbResponseAvailable()
 void GdbEngine::handleResponse()
@@ -426,22 +416,6 @@ void GdbEngine::handleResponse()
             break;
         }
 
-        if (token == -1 && *from != '&' && *from != '~' && *from != '*') {
-            // FIXME: On Linux the application's std::out is merged in here.
-            // High risk of falsely interpreting this as MI output.
-            // We assume that we _always_ use tokens, so not finding a token
-            // is a positive indication for the presence of application output.
-            QString s;
-            while (from != to && *from != '\n')
-                s += *from++;
-            //qDebug() << "UNREQUESTED DATA " << s << " TAKEN AS APPLICATION OUTPUT";
-            //s += '\n';
-
-            m_inbuffer = QByteArray(from, to - from);
-            emit applicationOutputAvailable("app-stdout: ", s);
-            continue;
-        }
-
         // next char decides kind of record
         const char c = *from++;
         //qDebug() << "CODE:" << c;
@@ -609,8 +583,7 @@ static void fixMac(QByteArray &out)
 
 void GdbEngine::readGdbStandardError()
 {
-    QByteArray err = m_gdbProc.readAllStandardError();
-    emit applicationOutputAvailable("app-stderr:", err);
+    qWarning() << "Unexpected gdb stderr:" << m_gdbProc.readAllStandardError();
 }
 
 void GdbEngine::readGdbStandardOutput()
@@ -723,7 +696,7 @@ void GdbEngine::sendCommand(const QString &command, int type,
 
     //qDebug() << "";
     if (!command.isEmpty()) {
-        //qDebug() << qPrintable(currentTime()) << "RUNNING  << cmd.command;
+        //qDebug() << qPrintable(currentTime()) << "RUNNING" << cmd.command;
         m_gdbProc.write(cmd.command.toLatin1() + "\r\n");
         //emit gdbInputAvailable(QString(), "         " +  currentTime());
         emit gdbInputAvailable(QString(), "[" + currentTime() + "]    " + cmd.command);
@@ -1097,7 +1070,7 @@ void GdbEngine::handleStreamOutput(const QString &data, char code)
             // On Windows, the contents seem to depend on the debugger
             // version and/or OS version used.
             if (data.startsWith("warning:"))
-                qq->showApplicationOutput(QString(), data);
+                qq->showApplicationOutput(data);
             break;
     }
 
@@ -1503,7 +1476,8 @@ void GdbEngine::exitDebugger()
     m_varToType.clear();
     m_dataDumperState = DataDumperUninitialized;
     m_shared = 0;
-    qq->debugDumpersAction()->setChecked(false);
+    m_outputCollector.shutdown();
+    //q->settings()->m_debugDumpers = false;
 }
 
 
@@ -1525,6 +1499,15 @@ bool GdbEngine::startDebugger()
         return false;
     }
 
+    if (!m_outputCollector.listen()) {
+        QMessageBox::critical(q->mainWindow(), tr("Debugger Startup Failure"),
+                              tr("Cannot set up communication with child process: %1")
+                              .arg(m_outputCollector.errorString()));
+        return false;
+    }
+
+    gdbArgs.prepend(QLatin1String("--tty=") + m_outputCollector.serverName());
+
     //gdbArgs.prepend(QLatin1String("--quiet"));
     gdbArgs.prepend(QLatin1String("mi"));
     gdbArgs.prepend(QLatin1String("-i"));
@@ -1535,8 +1518,9 @@ bool GdbEngine::startDebugger()
         m_gdbProc.setEnvironment(q->m_environment);
 
     #if 0
-    qDebug() << "Command: " << theGdbSettings().m_gdbCmd;
+    qDebug() << "Command: " << q->settings()->m_gdbCmd;
     qDebug() << "WorkingDirectory: " << m_gdbProc.workingDirectory();
+    qDebug() << "ScriptFile: " << q->settings()->m_scriptFile;
     qDebug() << "Environment: " << m_gdbProc.environment();
     qDebug() << "Arguments: " << gdbArgs;
     qDebug() << "BuildDir: " << q->m_buildDir;
@@ -1544,13 +1528,17 @@ bool GdbEngine::startDebugger()
     #endif
 
     q->showStatusMessage(tr("Starting Debugger"));
-    emit gdbInputAvailable(QString(), theGdbSettings().m_gdbCmd + ' ' + gdbArgs.join(" "));
+    emit gdbInputAvailable(QString(), q->settings()->m_gdbCmd + ' ' + gdbArgs.join(" "));
 
-    m_gdbProc.start(theGdbSettings().m_gdbCmd, gdbArgs);
+    m_gdbProc.start(q->settings()->m_gdbCmd, gdbArgs);
     m_gdbProc.waitForStarted();
 
-    if (m_gdbProc.state() != QProcess::Running)
+    if (m_gdbProc.state() != QProcess::Running) {
+        QMessageBox::critical(q->mainWindow(), tr("Debugger Startup Failure"),
+                              tr("Cannot start debugger: %1").arg(m_gdbProc.errorString()));
+        m_outputCollector.shutdown();
         return false;
+    }
 
     q->showStatusMessage(tr("Gdb Running"));
 
@@ -1612,6 +1600,22 @@ bool GdbEngine::startDebugger()
             "dyld \".*libobjc.*\" all "
             "dyld \".*CarbonDataFormatters.*\" all");
     #endif
+
+    QString scriptFileName = q->settings()->m_scriptFile;
+    if (!scriptFileName.isEmpty()) {
+        QFile scriptFile(scriptFileName);
+        if (scriptFile.open(QIODevice::ReadOnly)) {
+            sendCommand("source " + scriptFileName);
+        } else {
+            QMessageBox::warning(q->mainWindow(),
+            tr("Cannot find debugger initialization script"),
+            tr("The debugger settings point to a script file at '%1' "
+               "which is not accessible. If a script file is not needed, "
+               "consider clearing that entry to avoid this warning. "
+              ).arg(scriptFileName));
+        }
+    }
+
     if (q->startMode() == q->attachExternal) {
         sendCommand("attach " + QString::number(q->m_attachedPID));
     }
@@ -2589,7 +2593,7 @@ void GdbEngine::setToolTipExpression(const QPoint &pos, const QString &exp0)
         return;
     }
     
-    if (qq->debugDumpersAction()->isChecked()) {
+    if (q->settings()->m_debugDumpers) {
         // minimize interference
         return;
     }
@@ -2909,10 +2913,10 @@ void GdbEngine::setCustomDumpersWanted(bool on)
 
 bool GdbEngine::isCustomValueDumperAvailable(const QString &type) const
 {
-    if (!qq->useCustomDumpers())
+    DebuggerSettings *s = q->settings();
+    if (!s->m_useCustomDumpers)
         return false;
-    if (qq->debugDumpersAction()->isChecked()
-            && qq->stackHandler()->isDebuggingDumpers())
+    if (s->m_debugDumpers && qq->stackHandler()->isDebuggingDumpers())
         return false;
     if (m_dataDumperState != DataDumperAvailable)
         return false;
@@ -3001,6 +3005,12 @@ void GdbEngine::runCustomDumper(const WatchData & data0, bool dumpChildren)
             //extraArgs[extraArgCount++] = sizeofTypeExpression(data.type);
             //extraArgs[extraArgCount++] = "(size_t)&(('" + data.type + "'*)0)->value";
         }
+    } else if (outertype == "std::deque") {
+        // remove 'std::allocator<...>':
+        extraArgs[1] = "0";
+    } else if (outertype == "std::stack") {
+        // remove 'std::allocator<...>':
+        extraArgs[1] = "0";
     } else if (outertype == "std::map") {
         // We don't want the comparator and the allocator confuse gdb.
         // But we need the offset of the second item in the value pair.
@@ -3470,7 +3480,7 @@ void GdbEngine::handleDumpCustomValue1(const GdbResultRecord &record,
         //qDebug() << "CUSTOM DUMPER ERROR MESSAGE: " << msg;
 #ifdef QT_DEBUG
         // Make debugging of dumers easier
-        if (qq->debugDumpersAction()->isChecked()
+        if (q->settings()->m_debugDumpers
                 && msg.startsWith("The program being debugged stopped while")
                 && msg.contains("qDumpObjectData440")) {
             // Fake full stop
diff --git a/src/plugins/debugger/gdbengine.h b/src/plugins/debugger/gdbengine.h
index f5a7c658b762804edce91cf32cf5d87ccc54cb4e..60493a53e582233c19efbd7cd42e3b95f82cf17b 100644
--- a/src/plugins/debugger/gdbengine.h
+++ b/src/plugins/debugger/gdbengine.h
@@ -36,6 +36,7 @@
 
 #include "idebuggerengine.h"
 #include "gdbmi.h"
+#include "outputcollector.h"
 
 #include <QtCore/QByteArray>
 #include <QtCore/QHash>
@@ -43,6 +44,7 @@
 #include <QtCore/QObject>
 #include <QtCore/QProcess>
 #include <QtCore/QPoint>
+#include <QtCore/QTextCodec>
 #include <QtCore/QVariant>
 
 QT_BEGIN_NAMESPACE
@@ -81,23 +83,6 @@ enum DataDumperState
 };
 
 
-class GdbSettings
-{
-public:
-    GdbSettings() { m_autoRun = m_autoQuit = false; }
-
-public:
-    QString m_gdbCmd;
-    QString m_gdbEnv;
-    bool m_autoRun;
-    bool m_autoQuit;
-
-    QString m_scriptFile;
-    QMap<QString, QVariant> m_typeMacros;
-};
-
-GdbSettings &theGdbSettings();
-
 class GdbEngine : public IDebuggerEngine
 {
     Q_OBJECT
@@ -110,7 +95,7 @@ signals:
     void gdbResponseAvailable();
     void gdbInputAvailable(const QString &prefix, const QString &msg);
     void gdbOutputAvailable(const QString &prefix, const QString &msg);
-    void applicationOutputAvailable(const QString &prefix, const QString &msg);
+    void applicationOutputAvailable(const QString &output);
 
 private:
     //
@@ -190,6 +175,7 @@ private slots:
     void gdbProcError(QProcess::ProcessError error);
     void readGdbStandardOutput();
     void readGdbStandardError();
+    void readDebugeeOutput(const QByteArray &data);
 
 private:
     int terminationIndex(const QByteArray &buffer, int &length);
@@ -207,6 +193,10 @@ private:
     void handleQueryPwd(const GdbResultRecord &response);
     void handleQuerySources(const GdbResultRecord &response);
 
+    OutputCollector m_outputCollector;
+    QTextCodec *m_outputCodec;
+    QTextCodec::ConverterState m_outputCodecState;
+
     QByteArray m_inbuffer;
 
     QProcess m_gdbProc;
diff --git a/src/plugins/debugger/gdboptionpage.cpp b/src/plugins/debugger/gdboptionpage.cpp
deleted file mode 100644
index 7c7a2700b6a560db0b854ce1f8e3eefc95e14ae2..0000000000000000000000000000000000000000
--- a/src/plugins/debugger/gdboptionpage.cpp
+++ /dev/null
@@ -1,145 +0,0 @@
-/***************************************************************************
-**
-** This file is part of Qt Creator
-**
-** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
-**
-** Contact:  Qt Software Information (qt-info@nokia.com)
-**
-**
-** Non-Open Source Usage
-**
-** Licensees may use this file in accordance with the Qt Beta Version
-** License Agreement, Agreement version 2.2 provided with the Software or,
-** alternatively, in accordance with the terms contained in a written
-** agreement between you and Nokia.
-**
-** GNU General Public License Usage
-**
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License versions 2.0 or 3.0 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the packaging
-** of this file.  Please review the following information to ensure GNU
-** General Public Licensing requirements will be met:
-**
-** http://www.fsf.org/licensing/licenses/info/GPLv2.html and
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt GPL Exception
-** version 1.3, included in the file GPL_EXCEPTION.txt in this package.
-**
-***************************************************************************/
-
-#include "gdboptionpage.h"
-
-#include "gdbengine.h"
-
-#include <extensionsystem/pluginmanager.h>
-#include <coreplugin/icore.h>
-
-#include <QtCore/QSettings>
-#include <QtGui/QLineEdit>
-#include <QtGui/QFileDialog>
-
-using namespace Debugger::Internal;
-
-GdbOptionPage::GdbOptionPage(GdbSettings *settings)
-{
-    m_pm = ExtensionSystem::PluginManager::instance();
-    m_settings = settings;
-
-    Core::ICore *coreIFace = m_pm->getObject<Core::ICore>();
-    if (!coreIFace || !coreIFace->settings())
-        return;
-    QSettings *s = coreIFace->settings();
-    s->beginGroup("GdbOptions");
-    QString defaultCommand("gdb");
-#if defined(Q_OS_WIN32)
-    defaultCommand.append(".exe");
-#endif
-    QString defaultScript = coreIFace->resourcePath() +
-        QLatin1String("/gdb/qt4macros");
-
-    m_settings->m_gdbCmd   = s->value("Location", defaultCommand).toString();
-    m_settings->m_scriptFile= s->value("ScriptFile", defaultScript).toString();
-    m_settings->m_gdbEnv   = s->value("Environment", "").toString();
-    m_settings->m_autoRun  = s->value("AutoRun", true).toBool();
-    m_settings->m_autoQuit = s->value("AutoQuit", true).toBool();
-    s->endGroup();
-}
-
-QString GdbOptionPage::name() const
-{
-    return tr("Gdb");
-}
-
-QString GdbOptionPage::category() const
-{
-    return "Debugger";
-}
-
-QString GdbOptionPage::trCategory() const
-{
-    return tr("Debugger");
-}
-
-QWidget *GdbOptionPage::createPage(QWidget *parent)
-{
-    QWidget *w = new QWidget(parent);
-    m_ui.setupUi(w);
-    m_ui.gdbLocationChooser->setExpectedKind(Core::Utils::PathChooser::Command);
-    m_ui.gdbLocationChooser->setPromptDialogTitle(tr("Choose Gdb Location"));
-    m_ui.gdbLocationChooser->setPath(m_settings->m_gdbCmd);
-    m_ui.scriptFileChooser->setExpectedKind(Core::Utils::PathChooser::File);
-    m_ui.scriptFileChooser->setPromptDialogTitle(tr("Choose Location of Startup Script File"));
-    m_ui.scriptFileChooser->setPath(m_settings->m_scriptFile);
-    m_ui.environmentEdit->setText(m_settings->m_gdbEnv);
-    m_ui.autoStartBox->setChecked(m_settings->m_autoRun);
-    m_ui.autoQuitBox->setChecked(m_settings->m_autoQuit);
-
-    // FIXME
-    m_ui.autoStartBox->hide();
-    m_ui.autoQuitBox->hide();
-    m_ui.environmentEdit->hide();
-    m_ui.labelEnvironment->hide();
-
-    connect(m_ui.gdbLocationChooser, SIGNAL(changed()),
-        this, SLOT(onGdbLocationChanged()));
-    connect(m_ui.scriptFileChooser, SIGNAL(changed()),
-        this, SLOT(onScriptFileChanged()));
-
-    return w;
-}
-
-void GdbOptionPage::onGdbLocationChanged()
-{
-    m_settings->m_gdbCmd = m_ui.gdbLocationChooser->path();
-}
-
-void GdbOptionPage::onScriptFileChanged()
-{
-    m_settings->m_scriptFile = m_ui.scriptFileChooser->path();
-}
-
-void GdbOptionPage::apply()
-{
-    m_settings->m_gdbCmd   = m_ui.gdbLocationChooser->path();
-    m_settings->m_gdbEnv   = m_ui.environmentEdit->text();
-    m_settings->m_autoRun  = m_ui.autoStartBox->isChecked();
-    m_settings->m_autoQuit = m_ui.autoQuitBox->isChecked();
-    m_settings->m_scriptFile = m_ui.scriptFileChooser->path();
-
-    Core::ICore *coreIFace = m_pm->getObject<Core::ICore>();
-    if (!coreIFace || !coreIFace->settings())
-        return;
-
-    QSettings *s = coreIFace->settings();
-
-    s->beginGroup("GdbOptions");
-    s->setValue("Location", m_settings->m_gdbCmd);
-    s->setValue("Environment", m_settings->m_gdbEnv);
-    s->setValue("AutoRun", m_settings->m_autoRun);
-    s->setValue("AutoQuit", m_settings->m_autoQuit);
-    s->endGroup();
-}
diff --git a/src/plugins/debugger/gdboptionpage.ui b/src/plugins/debugger/gdboptionpage.ui
index 580f13c0d660ebce063942c822c4d357ec9c6ed3..dcd5744335028aed9ba39145733e2d222d153695 100644
--- a/src/plugins/debugger/gdboptionpage.ui
+++ b/src/plugins/debugger/gdboptionpage.ui
@@ -6,8 +6,8 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>433</width>
-    <height>233</height>
+    <width>465</width>
+    <height>372</height>
    </rect>
   </property>
   <property name="windowTitle">
@@ -36,7 +36,7 @@
        <widget class="QLineEdit" name="environmentEdit"/>
       </item>
       <item row="0" column="0">
-       <widget class="QLabel" name="labelGdbLocaltion">
+       <widget class="QLabel" name="labelGdbLocation">
         <property name="toolTip">
          <string>This is either a full abolute path leading to the gdb binary you intend to use or the name of a gdb binary that wiull be searched in your PATH.</string>
         </property>
@@ -74,6 +74,68 @@
      </layout>
     </widget>
    </item>
+   <item>
+    <widget class="QCheckBox" name="checkBoxUseCustomDumpers">
+     <property name="toolTip">
+      <string>Checking this will make the debugger try to use code to format certain data (QObject, QString, std::string etc.) nicely.</string>
+     </property>
+     <property name="text">
+      <string>Use custom display for Qt and Standard Library objects</string>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="QCheckBox" name="checkBoxUseTerminal">
+     <property name="toolTip">
+      <string>Start debugged process in a separte terminal.</string>
+     </property>
+     <property name="text">
+      <string>Start in terminal</string>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="QCheckBox" name="checkBoxFastStart">
+     <property name="toolTip">
+      <string>Checking this will make the debugger start fast by loading only very few debug symbols on start up. This might lead to situations where breakpoints can not be set properly. So uncheck this option if you experience breakpoint related problems.</string>
+     </property>
+     <property name="text">
+      <string>Fast debugger start</string>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="QCheckBox" name="checkBoxSkipKnownFrames">
+     <property name="toolTip">
+      <string>fter checking this option 'Step Into' combines in certain situations several steps, leading to 'less noisy' debugging. So will, e.g., the atomic 
+reference counting code be skipped, and a single 'Step Into' for a signal emission will end up directly in the slot connected to it.
+</string>
+     </property>
+     <property name="text">
+      <string>Skip known frames when stepping</string>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="QCheckBox" name="checkBoxUseToolTips">
+     <property name="toolTip">
+      <string>Checking this will make enable tooltips for variable values during debugging. Since this can slow down debugging and does not provide reliable information as it does not use scope information, it is switched off by default.</string>
+     </property>
+     <property name="text">
+      <string>Use tooltips while debugging</string>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="QCheckBox" name="checkBoxDebugDumpers">
+     <property name="toolTip">
+      <string notr="true">This is an internal tool to make debugging the Custom Data Dumper code easier. Using this action is in general not needed unless you want do debug Qt Creator itself.</string>
+     </property>
+     <property name="text">
+      <string>Debug Custom Dumpers</string>
+     </property>
+    </widget>
+   </item>
    <item>
     <widget class="QCheckBox" name="autoStartBox">
      <property name="text">
diff --git a/src/plugins/debugger/gdbtypemacros.cpp b/src/plugins/debugger/gdbtypemacros.cpp
index d392a836f0e82961c0f32bfcd997c1c7e159a607..c586e6c3027e5d284169385f372f023374df98b1 100644
--- a/src/plugins/debugger/gdbtypemacros.cpp
+++ b/src/plugins/debugger/gdbtypemacros.cpp
@@ -35,7 +35,6 @@
 #include "gdbengine.h"
 #include "imports.h"
 
-#include <extensionsystem/pluginmanager.h>
 #include <coreplugin/icore.h>
 
 #include <QtCore/QSettings>
@@ -49,9 +48,7 @@ TypeMacroPage::TypeMacroPage(GdbSettings *settings)
     m_pm = ExtensionSystem::PluginManager::instance();
     m_settings = settings;
 
-    Core::ICore *coreIFace = m_pm->getObject<Core::ICore>();
-    if (!coreIFace || !coreIFace->settings())
-        return;
+    Core::ICore *coreIFace = ICore::instance();
 
     QSettings *s = coreIFace->settings();
     s->beginGroup("GdbOptions");
@@ -164,14 +161,11 @@ void TypeMacroPage::finished(bool accepted)
         m_settings->m_typeMacros.insert(item->text(0), data);
     }
 
-    Core::ICore *coreIFace = m_pm->getObject<Core::ICore>();
-    if (coreIFace && coreIFace->settings()) {
-        QSettings *s = coreIFace->settings();
-        s->beginGroup("GdbOptions");
-        s->setValue("ScriptFile", m_settings->m_scriptFile);
-        s->setValue("TypeMacros", m_settings->m_typeMacros);
-        s->endGroup();
-    }
+    QSettings *s = ICore::instance()->settings();
+    s->beginGroup("GdbOptions");
+    s->setValue("ScriptFile", m_settings->m_scriptFile);
+    s->setValue("TypeMacros", m_settings->m_typeMacros);
+    s->endGroup();
 }
 
 void TypeMacroPage::onAddButton()
diff --git a/src/plugins/debugger/outputcollector.cpp b/src/plugins/debugger/outputcollector.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..f091ca9208409a73817d9d9fe241c8e87f181c9f
--- /dev/null
+++ b/src/plugins/debugger/outputcollector.cpp
@@ -0,0 +1,180 @@
+/***************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact:  Qt Software Information (qt-info@nokia.com)
+**
+**
+** Non-Open Source Usage
+**
+** Licensees may use this file in accordance with the Qt Beta Version
+** License Agreement, Agreement version 2.2 provided with the Software or,
+** alternatively, in accordance with the terms contained in a written
+** agreement between you and Nokia.
+**
+** GNU General Public License Usage
+**
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License versions 2.0 or 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the packaging
+** of this file.  Please review the following information to ensure GNU
+** General Public Licensing requirements will be met:
+**
+** http://www.fsf.org/licensing/licenses/info/GPLv2.html and
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt GPL Exception
+** version 1.3, included in the file GPL_EXCEPTION.txt in this package.
+**
+***************************************************************************/
+
+#include "outputcollector.h"
+
+#ifdef Q_OS_WIN
+
+#include <QtNetwork/QLocalServer>
+#include <QtNetwork/QLocalSocket>
+#include <QtCore/QCoreApplication>
+
+#else
+
+#include <QtCore/QFile>
+#include <QtCore/QSocketNotifier>
+#include <QtCore/QTemporaryFile>
+#include <QtCore/QVarLengthArray>
+
+#include <sys/ioctl.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <string.h>
+#include <unistd.h>
+
+#endif
+
+namespace Debugger {
+namespace Internal {
+
+OutputCollector::OutputCollector(QObject *parent)
+        : QObject(parent)
+{
+#ifdef Q_OS_WIN
+    m_server = 0;
+    m_socket = 0;
+#endif
+}
+
+OutputCollector::~OutputCollector()
+{
+    shutdown();
+}
+
+bool OutputCollector::listen()
+{
+#ifdef Q_OS_WIN
+    if (m_server)
+        return m_server->isListening();
+    m_server = new QLocalServer(this);
+    connect(m_server, SIGNAL(newConnection()), SLOT(newConnectionAvailable()));
+    return m_server->listen(QLatin1String("creator-") + QCoreApplication::applicationPid()); // XXX how to make that secure?
+#else
+    if (!m_serverPath.isEmpty())
+        return true;
+    QByteArray codedServerPath;
+    forever {
+        {
+            QTemporaryFile tf;
+            if (!tf.open()) {
+                m_errorString = tr("Cannot create temporary file: %2").arg(tf.errorString());
+                m_serverPath.clear();
+                return false;
+            }
+            m_serverPath = tf.fileName();
+        }
+        // By now the temp file was deleted again
+        codedServerPath = QFile::encodeName(m_serverPath);
+        if (!::mkfifo(codedServerPath.constData(), 0600))
+            break;
+        if (errno != EEXIST) {
+            m_errorString = tr("Cannot create FiFo %1: %2").arg(m_serverPath, strerror(errno));
+            m_serverPath.clear();
+            return false;
+        }
+    }
+    if ((m_serverFd = ::open(codedServerPath.constData(), O_RDONLY|O_NONBLOCK)) < 0) {
+        m_errorString = tr("Cannot open FiFo %1: %2").arg(m_serverPath, strerror(errno));
+        m_serverPath.clear();
+        return false;
+    }
+    m_serverNotifier = new QSocketNotifier(m_serverFd, QSocketNotifier::Read, this);
+    connect(m_serverNotifier, SIGNAL(activated(int)), SLOT(bytesAvailable()));
+    return true;
+#endif
+}
+
+void OutputCollector::shutdown()
+{
+#ifdef Q_OS_WIN
+    delete m_server; // Deletes socket as well (QObject parent)
+    m_server = 0;
+    m_socket = 0;
+#else
+    if (!m_serverPath.isEmpty()) {
+        ::close(m_serverFd);
+        ::unlink(QFile::encodeName(m_serverPath).constData());
+        delete m_serverNotifier;
+        m_serverPath.clear();
+    }
+#endif
+}
+
+QString OutputCollector::errorString() const
+{
+#ifdef Q_OS_WIN
+    return m_socket ? m_socket->errorString() : m_server->errorString();
+#else
+    return m_errorString;
+#endif
+}
+
+QString OutputCollector::serverName() const
+{
+#ifdef Q_OS_WIN
+    return m_server->fullServerName();
+#else
+    return m_serverPath;
+#endif
+}
+
+#ifdef Q_OS_WIN
+void OutputCollector::newConnectionAvailable()
+{
+    if (m_socket)
+        return;
+    m_socket = m_server->nextPendingConnection();
+    connect(m_socket, SIGNAL(bytesAvailable()), SLOT(bytesAvailable()));
+}
+#endif
+
+void OutputCollector::bytesAvailable()
+{
+#ifdef Q_OS_WIN
+    emit byteDelivery(m_socket->readAll());
+#else
+    size_t nbytes = 0;
+    if (::ioctl(m_serverFd, FIONREAD, (char *) &nbytes) < 0)
+        return;
+    QVarLengthArray<char, 8192> buff(nbytes);
+    if (::read(m_serverFd, buff.data(), nbytes) != (int)nbytes)
+        return;
+    if (nbytes) // Skip EOF notifications
+        emit byteDelivery(QByteArray::fromRawData(buff.data(), nbytes));
+#endif
+}
+
+} // namespace Internal
+} // namespace Debugger
diff --git a/src/plugins/debugger/gdboptionpage.h b/src/plugins/debugger/outputcollector.h
similarity index 51%
rename from src/plugins/debugger/gdboptionpage.h
rename to src/plugins/debugger/outputcollector.h
index c4c3ade9e31d60e881af9d2e6e091ad30decc674..b84a1b361001de100bedae5a1c6859139adaf4a2 100644
--- a/src/plugins/debugger/gdboptionpage.h
+++ b/src/plugins/debugger/outputcollector.h
@@ -2,7 +2,7 @@
 **
 ** This file is part of Qt Creator
 **
-** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 **
 ** Contact:  Qt Software Information (qt-info@nokia.com)
 **
@@ -31,79 +31,61 @@
 **
 ***************************************************************************/
 
-#ifndef GDBOPTIONPAGE_H
-#define GDBOPTIONPAGE_H
+#ifndef OUTPUT_COLLECTOR_H
+#define OUTPUT_COLLECTOR_H
 
-#include "ui_gdboptionpage.h"
+#include <QtCore/QByteArray>
+#include <QtCore/QObject>
 
-#include <coreplugin/dialogs/ioptionspage.h>
-
-#include <QtGui/QWidget>
-
-namespace ExtensionSystem { class PluginManager; }
+QT_BEGIN_NAMESPACE
+class QLocalServer;
+class QLocalSocket;
+class QSocketNotifier;
+QT_END_NAMESPACE
 
 namespace Debugger {
 namespace Internal {
 
-class GdbSettings;
+///////////////////////////////////////////////////////////////////////
+//
+// OutputCollector
+//
+///////////////////////////////////////////////////////////////////////
 
-class GdbOptionPage : public Core::IOptionsPage
+class OutputCollector : public QObject
 {
     Q_OBJECT
 
 public:
-    GdbOptionPage(GdbSettings *settings);
-
-    QString name() const;
-    QString category() const;
-    QString trCategory() const;
-
-    QWidget *createPage(QWidget *parent);
-    void apply();
-    void finish() { }
-
-public slots:
-    void onGdbLocationChanged();
-    void onScriptFileChanged();
+    OutputCollector(QObject *parent = 0);
+    ~OutputCollector();
+    bool listen();
+    void shutdown();
+    QString serverName() const;
+    QString errorString() const;
 
-private:
-    ExtensionSystem::PluginManager *m_pm;
-    Ui::GdbOptionPage m_ui;
-
-    GdbSettings *m_settings;
-};
-
-#if 0
-class TypeMacroPage : public Core::IOptionsPage
-{
-    Q_OBJECT
-
-public:
-    TypeMacroPage(GdbSettings *settings);
-
-    QString name() const;
-    QString category() const;
-    QString trCategory() const;
-
-    QWidget *createPage(QWidget *parent);
-    void finished(bool accepted);
+signals:
+    void byteDelivery(const QByteArray &data);
 
 private slots:
-    void onAddButton();
-    void onDelButton();
-    void currentItemChanged(QTreeWidgetItem *item);
-    void updateButtonState();
+    void bytesAvailable();
+#ifdef Q_OS_WIN
+    void newConnectionAvailable();
+#endif
 
 private:
-    ExtensionSystem::PluginManager *m_pm;
-    Ui::TypeMacroPage m_ui;
-
-    GdbSettings *m_settings;
-    QWidget *m_widget;
-};
+#ifdef Q_OS_WIN
+    QLocalServer *m_server;
+    QLocalSocket *m_socket;
+#else
+    QString m_serverPath;
+    int m_serverFd;
+    QSocketNotifier *m_serverNotifier;
+    QString m_errorString;
 #endif
+};
 
 } // namespace Internal
 } // namespace Debugger
 
-#endif // GDBOPTIONPAGE_H
+#endif // OUTPUT_COLLECTOR_H
diff --git a/src/plugins/designer/cpp/formclasswizard.cpp b/src/plugins/designer/cpp/formclasswizard.cpp
index b4e618490d40a4a2d869635894f1c3b67d5b55dc..77d002f2d723008bab2825ada3bfab45f1db1348 100644
--- a/src/plugins/designer/cpp/formclasswizard.cpp
+++ b/src/plugins/designer/cpp/formclasswizard.cpp
@@ -48,8 +48,8 @@ enum { debugFormClassWizard = 0 };
 using namespace Designer;
 using namespace Designer::Internal;
 
-FormClassWizard::FormClassWizard(const BaseFileWizardParameters &parameters, Core::ICore *core, QObject *parent) :
-    Core::BaseFileWizard(parameters, core, parent)
+FormClassWizard::FormClassWizard(const BaseFileWizardParameters &parameters,  QObject *parent)
+  : Core::BaseFileWizard(parameters, parent)
 {
 }
 
diff --git a/src/plugins/designer/cpp/formclasswizard.h b/src/plugins/designer/cpp/formclasswizard.h
index 39b99c92037d0e15ea3de360d377c5afde5b7776..f7b693440f327c354f20fbc1851fc1011e257c0f 100644
--- a/src/plugins/designer/cpp/formclasswizard.h
+++ b/src/plugins/designer/cpp/formclasswizard.h
@@ -38,10 +38,6 @@
 
 #include <coreplugin/basefilewizard.h>
 
-QT_BEGIN_NAMESPACE
-class QWizard;
-QT_END_NAMESPACE
-
 namespace Designer {
 namespace Internal {
 
@@ -55,7 +51,7 @@ class FormClassWizard : public Core::BaseFileWizard
 public:
     typedef Core::BaseFileWizardParameters BaseFileWizardParameters;
 
-    FormClassWizard(const BaseFileWizardParameters &parameters, Core::ICore *core, QObject *parent);
+    FormClassWizard(const BaseFileWizardParameters &parameters, QObject *parent);
 
     QString headerSuffix() const;
     QString sourceSuffix() const;
diff --git a/src/plugins/designer/cpp/formclasswizardpage.cpp b/src/plugins/designer/cpp/formclasswizardpage.cpp
index 6cc0ced4215266b741ae39fa2410c4066c4f99d1..389820750274ecb72d3e9c97e18911aeea441b50 100644
--- a/src/plugins/designer/cpp/formclasswizardpage.cpp
+++ b/src/plugins/designer/cpp/formclasswizardpage.cpp
@@ -42,8 +42,8 @@
 #include <QtCore/QDir>
 #include <QtCore/QSettings>
 
-#include <QtGui/QMessageBox>
 #include <QtGui/QAbstractButton>
+#include <QtGui/QMessageBox>
 
 static const char *formClassWizardPageGroupC = "FormClassWizardPage";
 static const char *translationKeyC = "RetranslationSupport";
@@ -175,7 +175,7 @@ bool FormClassWizardPage::validatePage()
 
 void FormClassWizardPage::saveSettings()
 {
-    Core::ICore *core = ExtensionSystem::PluginManager::instance()->getObject<Core::ICore>();
+    Core::ICore *core = Core::ICore::instance();
     if (QSettings *settings = core->settings()) {
         settings->beginGroup(QLatin1String(formClassWizardPageGroupC));
         settings->setValue(QLatin1String(translationKeyC), hasRetranslationSupport());
@@ -189,7 +189,7 @@ void FormClassWizardPage::restoreSettings()
     bool retranslationSupport = true;
     int embedding =  PointerAggregatedUiClass;
 
-    Core::ICore *core = ExtensionSystem::PluginManager::instance()->getObject<Core::ICore>();
+    Core::ICore *core = Core::ICore::instance();
     if (QSettings *settings = core->settings()) {
 
         QString key = QLatin1String(formClassWizardPageGroupC);
diff --git a/src/plugins/designer/formeditorfactory.h b/src/plugins/designer/formeditorfactory.h
index 02ad78fdb2d8c21bdd4d7657d11a7d324afb2474..5d13e45080a4fda240261dba166dd24d590389d5 100644
--- a/src/plugins/designer/formeditorfactory.h
+++ b/src/plugins/designer/formeditorfactory.h
@@ -34,7 +34,6 @@
 #ifndef FORMEDITORFACTORY_H
 #define FORMEDITORFACTORY_H
 
-#include <extensionsystem/ExtensionSystemInterfaces>
 #include <coreplugin/editormanager/ieditorfactory.h>
 
 #include <QtCore/QStringList>
diff --git a/src/plugins/designer/formeditorplugin.cpp b/src/plugins/designer/formeditorplugin.cpp
index bc9f6a23337dc82a3e46ee1552d9a9a8fae44b93..efd9a3b64effce4cc695806680a023d22a70fabf 100644
--- a/src/plugins/designer/formeditorplugin.cpp
+++ b/src/plugins/designer/formeditorplugin.cpp
@@ -51,7 +51,7 @@
 #include <coreplugin/coreconstants.h>
 #include <coreplugin/uniqueidmanager.h>
 
-#include <QtCore/qplugin.h>
+#include <QtCore/QtPlugin>
 #include <QtCore/QDebug>
 
 #ifdef CPP_ENABLED
@@ -89,13 +89,16 @@ FormEditorPlugin::~FormEditorPlugin()
 // INHERITED FROM ExtensionSystem::Plugin
 //
 ////////////////////////////////////////////////////
-bool FormEditorPlugin::initialize(const QStringList & /*arguments*/, QString *error_message/* = 0*/) // =0;
+bool FormEditorPlugin::initialize(const QStringList &arguments, QString *error)
 {
-    Core::ICore *core = ExtensionSystem::PluginManager::instance()->getObject<Core::ICore>();
-    if (!core->mimeDatabase()->addMimeTypes(QLatin1String(":/formeditor/Designer.mimetypes.xml"), error_message))
+    Q_UNUSED(arguments);
+    Q_UNUSED(error);
+
+    Core::ICore *core = Core::ICore::instance();
+    if (!core->mimeDatabase()->addMimeTypes(QLatin1String(":/formeditor/Designer.mimetypes.xml"), error))
         return false;
 
-    if (!initializeTemplates(error_message))
+    if (!initializeTemplates(error))
         return false;
 
     const int uid = core->uniqueIDManager()->uniqueIdentifier(QLatin1String(C_FORMEDITOR));
@@ -107,7 +110,7 @@ bool FormEditorPlugin::initialize(const QStringList & /*arguments*/, QString *er
     // Make sure settings pages and action shortcuts are registered
     FormEditorW::ensureInitStage(FormEditorW::RegisterPlugins);
 
-    error_message->clear();
+    error->clear();
     return true;
 }
 
@@ -121,24 +124,23 @@ void FormEditorPlugin::extensionsInitialized()
 //
 ////////////////////////////////////////////////////
 
-bool FormEditorPlugin::initializeTemplates(QString * /* error_message */)
+bool FormEditorPlugin::initializeTemplates(QString *error)
 {
-
-    Core::ICore *core = ExtensionSystem::PluginManager::instance()->getObject<Core::ICore>();
+    Q_UNUSED(error);
     FormWizard::BaseFileWizardParameters wizardParameters(Core::IWizard::FileWizard);
     wizardParameters.setCategory(QLatin1String("Qt"));
     wizardParameters.setTrCategory(tr("Qt"));
     const QString formFileType = QLatin1String(Constants::FORM_FILE_TYPE);
     wizardParameters.setName(tr("Qt Designer Form"));
     wizardParameters.setDescription(tr("This creates a new Qt Designer form file."));
-    m_formWizard = new FormWizard(wizardParameters, core, this);
+    m_formWizard = new FormWizard(wizardParameters, this);
     addObject(m_formWizard);
 
 #ifdef CPP_ENABLED
     wizardParameters.setKind(Core::IWizard::ClassWizard);
     wizardParameters.setName(tr("Qt Designer Form Class"));
     wizardParameters.setDescription(tr("This creates a new Qt Designer form class."));
-    m_formClassWizard = new FormClassWizard(wizardParameters, core, this);
+    m_formClassWizard = new FormClassWizard(wizardParameters, this);
     addObject(m_formClassWizard);
 #endif
     return true;
diff --git a/src/plugins/designer/formeditorw.cpp b/src/plugins/designer/formeditorw.cpp
index e302eabb3c154ad090156eff9d09f4dd2db95cb1..05a4001effb71fb436d067c218c08c8ce4038301 100644
--- a/src/plugins/designer/formeditorw.cpp
+++ b/src/plugins/designer/formeditorw.cpp
@@ -43,6 +43,7 @@
 #include <coreplugin/uniqueidmanager.h>
 #include <coreplugin/actionmanager/actionmanager.h>
 #include <coreplugin/editormanager/editormanager.h>
+#include <extensionsystem/pluginmanager.h>
 #include <utils/qtcassert.h>
 
 #include <QtDesigner/QDesignerFormEditorPluginInterface>
@@ -162,7 +163,7 @@ FormEditorW::FormEditorW() :
     m_formeditor(QDesignerComponents::createFormEditor(0)),
     m_integration(0),
     m_fwm(0),
-    m_core(ExtensionSystem::PluginManager::instance()->getObject<Core::ICore>()),
+    m_core(Core::ICore::instance()),
     m_initStage(RegisterPlugins),
     m_actionGroupEditMode(0),
     m_actionPrint(0),
diff --git a/src/plugins/designer/formeditorw.h b/src/plugins/designer/formeditorw.h
index 6aaca2c5924c35b7d034635efd7f71912a069c2e..f41d3554e2559818ce37d8b183d910421fa72200 100644
--- a/src/plugins/designer/formeditorw.h
+++ b/src/plugins/designer/formeditorw.h
@@ -34,12 +34,12 @@
 #ifndef FORMEDITORW_H
 #define FORMEDITORW_H
 
-#include <extensionsystem/ExtensionSystemInterfaces>
 #include <QtDesigner/QDesignerFormEditorInterface>
 
-#include <QtCore/QObject>
 #include <QtCore/QList>
+#include <QtCore/QObject>
 #include <QtCore/QPointer>
+#include <QtCore/QStringList>
 
 #include "designerconstants.h"
 
diff --git a/src/plugins/designer/formwizard.cpp b/src/plugins/designer/formwizard.cpp
index 4bb492ce354e49f8c7c50c97ae20cc4d416fb188..d69c2abbbbc7cb62784cfae46ee42bc61b867ecd 100644
--- a/src/plugins/designer/formwizard.cpp
+++ b/src/plugins/designer/formwizard.cpp
@@ -36,8 +36,6 @@
 #include "formwindoweditor.h"
 #include "designerconstants.h"
 
-#include <coreplugin/icore.h>
-
 #include <QtCore/QFile>
 #include <QtCore/QDebug>
 
@@ -46,8 +44,8 @@ enum { debugFormWizard = 0 };
 using namespace Designer;
 using namespace Designer::Internal;
 
-FormWizard::FormWizard(const BaseFileWizardParameters &parameters, Core::ICore *core, QObject *parent) :
-    Core::BaseFileWizard(parameters, core, parent)
+FormWizard::FormWizard(const BaseFileWizardParameters &parameters, QObject *parent)
+  : Core::BaseFileWizard(parameters, parent)
 {
 }
 
@@ -55,7 +53,7 @@ QWizard *FormWizard::createWizardDialog(QWidget *parent,
                                         const QString &defaultPath,
                                         const WizardPageList &extensionPages) const
 {
-    FormFileWizardDialog *wizardDialog = new FormFileWizardDialog(core(), extensionPages, parent);
+    FormFileWizardDialog *wizardDialog = new FormFileWizardDialog(extensionPages, parent);
     wizardDialog->setPath(defaultPath);
     return wizardDialog;
 }
diff --git a/src/plugins/designer/formwizard.h b/src/plugins/designer/formwizard.h
index b49fea1eb7a838ef12653a428e637b86ef609cb4..588189dbb64ef7fd0da6fb8593acdd633cd0f430 100644
--- a/src/plugins/designer/formwizard.h
+++ b/src/plugins/designer/formwizard.h
@@ -36,15 +36,9 @@
 
 #include <coreplugin/basefilewizard.h>
 
-QT_BEGIN_NAMESPACE
-class QWizard;
-QT_END_NAMESPACE
-
 namespace Designer {
 namespace Internal {
 
-class FormFileWizardDialog;
-
 class FormWizard : public Core::BaseFileWizard
 {
     Q_DISABLE_COPY(FormWizard)
@@ -53,7 +47,7 @@ class FormWizard : public Core::BaseFileWizard
 public:
     typedef Core::BaseFileWizardParameters BaseFileWizardParameters;
 
-    explicit FormWizard(const BaseFileWizardParameters &parameters, Core::ICore *core, QObject *parent);
+    FormWizard(const BaseFileWizardParameters &parameters, QObject *parent);
 
 protected:
     virtual QWizard *createWizardDialog(QWidget *parent,
diff --git a/src/plugins/designer/formwizarddialog.cpp b/src/plugins/designer/formwizarddialog.cpp
index 67ed81601988220364a2b0c5f220c27389e01de7..d7905a56545df2b4befdc75f7941bcae857f71fd 100644
--- a/src/plugins/designer/formwizarddialog.cpp
+++ b/src/plugins/designer/formwizarddialog.cpp
@@ -50,12 +50,10 @@ namespace Designer {
 namespace Internal {
 
 // ----------------- FormWizardDialog
-FormWizardDialog::FormWizardDialog(Core::ICore *core,
-                                   const WizardPageList &extensionPages,
-                                   QWidget *parent) :
-    QWizard(parent),
-    m_formPage(new FormTemplateWizardPagePage),
-    m_core(core)
+FormWizardDialog::FormWizardDialog(const WizardPageList &extensionPages,
+                                   QWidget *parent)
+  : QWizard(parent),
+    m_formPage(new FormTemplateWizardPagePage)
 {
     init(extensionPages);
 }
@@ -82,10 +80,9 @@ QString FormWizardDialog::templateContents() const
 }
 
 // ----------------- FormFileWizardDialog
-FormFileWizardDialog::FormFileWizardDialog(Core::ICore *core,
-                                           const WizardPageList &extensionPages,
-                                           QWidget *parent) :
-    FormWizardDialog(core, extensionPages, parent),
+FormFileWizardDialog::FormFileWizardDialog(const WizardPageList &extensionPages,
+                                           QWidget *parent)
+  : FormWizardDialog(extensionPages, parent),
     m_filePage(new Core::Utils::FileWizardPage)
 {
     setPage(FilePageId, m_filePage);
diff --git a/src/plugins/designer/formwizarddialog.h b/src/plugins/designer/formwizarddialog.h
index 52aaed4cd0226c8f420ef33e397ca573011799df..0ecd7274b1d1ce2fc7a3f49ff322e9a19e918f6b 100644
--- a/src/plugins/designer/formwizarddialog.h
+++ b/src/plugins/designer/formwizarddialog.h
@@ -37,10 +37,9 @@
 #include <QtGui/QWizard>
 
 namespace Core {
-    class ICore;
-    namespace Utils {
-        class FileWizardPage;
-    }
+namespace Utils {
+    class FileWizardPage;
+}
 }
 
 namespace Designer {
@@ -58,8 +57,7 @@ class FormWizardDialog : public QWizard
 
 public:
     typedef QList<QWizardPage *> WizardPageList;
-    explicit FormWizardDialog(Core::ICore *core,
-                              const WizardPageList &extensionPages,
+    explicit FormWizardDialog(const WizardPageList &extensionPages,
                               QWidget *parent = 0);
 
     QString templateContents() const;
@@ -68,7 +66,6 @@ private:
     void init(const WizardPageList &extensionPages);
 
     FormTemplateWizardPagePage *m_formPage;
-    Core::ICore *m_core;
     mutable QString m_templateContents;
 };
 
@@ -82,8 +79,7 @@ class FormFileWizardDialog : public FormWizardDialog
     Q_OBJECT
 
 public:
-    explicit FormFileWizardDialog(Core::ICore *core,
-                                  const WizardPageList &extensionPages,
+    explicit FormFileWizardDialog(const WizardPageList &extensionPages,
                                   QWidget *parent = 0);
 
     QString path() const;
diff --git a/src/plugins/designer/workbenchintegration.cpp b/src/plugins/designer/workbenchintegration.cpp
index 42043c3cd209e8e193fad67afb446ea23859c78b..9e25f80432a782eda98d7f8825f4be0262337cb6 100644
--- a/src/plugins/designer/workbenchintegration.cpp
+++ b/src/plugins/designer/workbenchintegration.cpp
@@ -48,6 +48,7 @@
 #include <cplusplus/LookupContext.h>
 #include <coreplugin/icore.h>
 #include <coreplugin/editormanager/editormanager.h>
+#include <extensionsystem/pluginmanager.h>
 #include <texteditor/basetexteditor.h>
 #include <texteditor/itexteditable.h>
 
@@ -78,8 +79,8 @@ static QString msgClassNotFound(const QString &uiClassName, const QList<Document
 
 static inline CppTools::CppModelManagerInterface *cppModelManagerInstance()
 {
-    Core::ICore *core = ExtensionSystem::PluginManager::instance()->getObject<Core::ICore>();
-    return core->pluginManager()->getObject<CppTools::CppModelManagerInterface>();
+    return ExtensionSystem::PluginManager::instance()
+        ->getObject<CppTools::CppModelManagerInterface>();
 }
 
 WorkbenchIntegration::WorkbenchIntegration(QDesignerFormEditorInterface *core, FormEditorW *parent) :
diff --git a/src/plugins/fakevim/fakevimhandler.cpp b/src/plugins/fakevim/fakevimhandler.cpp
index 4a69ff97ea67da35e9c7cdf6ce011a52869a3155..32663da298efff44ab69aaf9aa6371403fc7fd94 100644
--- a/src/plugins/fakevim/fakevimhandler.cpp
+++ b/src/plugins/fakevim/fakevimhandler.cpp
@@ -35,12 +35,20 @@
 
 #include "fakevimconstants.h"
 
+// Please do not add any direct dependencies to other Qt Creator code  here. 
+// Instead emit signals and let the FakeVimPlugin channel the information to
+// Qt Creator. The idea is to keep this file here in a "clean" state that
+// allows easy reuse with any QTextEdit or QPlainTextEdit derived class.
+
+//#include <indenter.h>
+
 #include <QtCore/QDebug>
 #include <QtCore/QFile>
 #include <QtCore/QObject>
 #include <QtCore/QProcess>
 #include <QtCore/QRegExp>
 #include <QtCore/QTextStream>
+#include <QtCore/QtAlgorithms>
 #include <QtCore/QStack>
 
 #include <QtGui/QApplication>
@@ -53,11 +61,6 @@
 #include <QtGui/QTextDocumentFragment>
 #include <QtGui/QTextEdit>
 
-//#include <texteditor/basetexteditor.h>
-//#include <texteditor/textblockiterator.h>
-//#include <cppeditor/cppeditor.h>
-
-//#include <indenter.h>
 
 using namespace FakeVim::Internal;
 using namespace FakeVim::Constants;
@@ -125,6 +128,13 @@ enum VisualMode
     VisualBlockMode,
 };
 
+enum MoveType
+{
+    MoveExclusive,
+    MoveInclusive,
+    MoveLineWise,
+};
+
 struct EditOperation
 {
     EditOperation() : m_position(-1), m_itemCount(0) {}
@@ -137,14 +147,20 @@ struct EditOperation
 QDebug &operator<<(QDebug &ts, const EditOperation &op)
 {
     if (op.m_itemCount > 0) {
-        ts << "EDIT BLOCK WITH" << op.m_itemCount << "ITEMS";
+        ts << "\n  EDIT BLOCK WITH " << op.m_itemCount << " ITEMS";
     } else {
-        ts << "EDIT AT " << op.m_position
-           << " FROM " << op.m_from << " TO " << op.m_to;
+        ts << "\n  EDIT AT " << op.m_position
+           << "\n      FROM " << op.m_from << "\n      TO " << op.m_to;
     }
     return ts;
 }
 
+int lineCount(const QString &text)
+{
+    //return text.count(QChar(ParagraphSeparator));
+    return text.count(QChar('\n'));
+}
+
 class FakeVimHandler::Private
 {
 public:
@@ -159,11 +175,11 @@ private:
     static int control(int key) { return key + 256; }
 
     void init();
-    bool handleKey(int key, const QString &text);
-    bool handleInsertMode(int key, const QString &text);
-    bool handleCommandMode(int key, const QString &text);
-    bool handleRegisterMode(int key, const QString &text);
-    bool handleMiniBufferModes(int key, const QString &text);
+    bool handleKey(int key, int unmodified, const QString &text);
+    bool handleInsertMode(int key, int unmodified, const QString &text);
+    bool handleCommandMode(int key, int unmodified, const QString &text);
+    bool handleRegisterMode(int key, int unmodified, const QString &text);
+    bool handleMiniBufferModes(int key, int unmodified, const QString &text);
     void finishMovement(const QString &text = QString());
     void search(const QString &needle, bool forward);
 
@@ -188,7 +204,8 @@ private:
     void scrollToLineInDocument(int line);
 
     // helper functions for indenting
-    bool isElectricCharacter(QChar c) const { return (c == '{' || c == '}' || c == '#'); }
+    bool isElectricCharacter(QChar c) const
+        { return (c == '{' || c == '}' || c == '#'); }
     int indentDist() const;
     void indentRegion(QTextBlock first, QTextBlock last, QChar typedChar=0);
     void indentCurrentLine(QChar typedChar);
@@ -198,17 +215,33 @@ private:
     void moveToNextWord(bool simple);
     void moveToMatchingParanthesis();
     void moveToWordBoundary(bool simple, bool forward);
+
+    // to reduce line noise
+    typedef QTextCursor::MoveOperation MoveOperation;
+    typedef QTextCursor::MoveMode MoveMode;
+    void moveToEndOfDocument() { m_tc.movePosition(EndOfDocument, MoveAnchor); }
+    void moveToStartOfLine() { m_tc.movePosition(StartOfLine, MoveAnchor); }
+    void moveToEndOfLine() { m_tc.movePosition(EndOfLine, MoveAnchor); }
+    void moveUp(int n = 1) { m_tc.movePosition(Up, MoveAnchor, n); }
+    void moveDown(int n = 1) { m_tc.movePosition(Down, MoveAnchor, n); }
+    void moveRight(int n = 1) { m_tc.movePosition(Right, MoveAnchor, n); }
+    void moveLeft(int n = 1) { m_tc.movePosition(Left, MoveAnchor, n); }
+    void setAnchor() { m_anchor = m_tc.position(); }
+
+    QString selectedText() const;
+
     void handleFfTt(int key);
 
     // helper function for handleCommand. return 1 based line index.
     int readLineCode(QString &cmd);
-    QTextCursor selectRange(int beginLine, int endLine);
+    void selectRange(int beginLine, int endLine);
 
     void setWidget(QWidget *ob);
     void enterInsertMode();
     void enterCommandMode();
     void showRedMessage(const QString &msg);
     void showBlackMessage(const QString &msg);
+    void notImplementedYet();
     void updateMiniBuffer();
     void updateSelection();
     void quit();
@@ -226,10 +259,12 @@ public:
     int m_subsubdata;
     QString m_input;
     QTextCursor m_tc;
+    int m_anchor; 
     QHash<int, QString> m_registers;
     int m_register;
     QString m_mvcount;
     QString m_opcount;
+    MoveType m_moveType;
 
     bool m_fakeEnd;
 
@@ -250,11 +285,20 @@ public:
     void recordRemove(int position, const QString &data);
     void recordRemove(int position, int length);
     void recordMove(int position, int nestedCount);
-    void removeSelectedText(QTextCursor &tc);
+
+    void recordRemoveNextChar();
+    void recordInsertText(const QString &data);
+    QString recordRemoveSelectedText();
+    void recordBeginGroup();
+    void recordEndGroup();
+    int anchor() const { return m_anchor; }
+    int position() const { return m_tc.position(); }
+
     void undo();
     void redo();
     QStack<EditOperation> m_undoStack;
     QStack<EditOperation> m_redoStack;
+    QStack<int> m_undoGroupStack;
 
     // extra data for '.'
     QString m_dotCount;
@@ -281,7 +325,7 @@ public:
     QHash<QString, QString> m_config;
 
     // for restoring cursor position
-    int m_savedPosition;
+    int m_savedYankPosition;
     int m_desiredColumn;
 };
 
@@ -300,6 +344,9 @@ FakeVimHandler::Private::Private(FakeVimHandler *parent)
     m_plaintextedit = 0;
     m_visualMode = NoVisualMode;
     m_desiredColumn = 0;
+    m_moveType = MoveInclusive;
+    m_anchor = 0;
+    m_savedYankPosition = 0;
 
     m_config[ConfigStartOfLine] = ConfigOn;
     m_config[ConfigTabStop]     = "8";
@@ -312,6 +359,7 @@ FakeVimHandler::Private::Private(FakeVimHandler *parent)
 bool FakeVimHandler::Private::handleEvent(QKeyEvent *ev)
 {
     int key = ev->key();
+    const int um = key; // keep unmodified key around
 
     // FIXME
     if (m_mode == PassingMode && key != Qt::Key_Control && key != Qt::Key_Shift) {
@@ -331,7 +379,7 @@ bool FakeVimHandler::Private::handleEvent(QKeyEvent *ev)
     m_tc.setVisualNavigation(true);
 
     if (m_fakeEnd)
-        m_tc.movePosition(Right, MoveAnchor, 1);
+        moveRight();
 
     if ((ev->modifiers() & Qt::ControlModifier) != 0) {
         key += 256;
@@ -340,40 +388,39 @@ bool FakeVimHandler::Private::handleEvent(QKeyEvent *ev)
         && (ev->modifiers() & Qt::ShiftModifier) == 0) {
         key += 32;
     }
-    bool handled = handleKey(key, ev->text());
+    bool handled = handleKey(key, um, ev->text());
 
     // We fake vi-style end-of-line behaviour
     m_fakeEnd = (atEol() && m_mode == CommandMode);
 
     if (m_fakeEnd)
-        m_tc.movePosition(Left, MoveAnchor, 1);
+        moveLeft();
 
     EDITOR(setTextCursor(m_tc));
     EDITOR(ensureCursorVisible());
     return handled;
 }
 
-bool FakeVimHandler::Private::handleKey(int key, const QString &text)
+bool FakeVimHandler::Private::handleKey(int key, int unmodified, const QString &text)
 {
     //qDebug() << "KEY: " << key << text << "POS: " << m_tc.position();
     //qDebug() << "\nUNDO: " << m_undoStack << "\nREDO: " << m_redoStack;
-    m_savedPosition = m_tc.position();
     if (m_mode == InsertMode)
-        return handleInsertMode(key, text);
+        return handleInsertMode(key, unmodified, text);
     if (m_mode == CommandMode)
-        return handleCommandMode(key, text);
+        return handleCommandMode(key, unmodified, text);
     if (m_mode == ExMode || m_mode == SearchForwardMode
             || m_mode == SearchBackwardMode)
-        return handleMiniBufferModes(key, text);
+        return handleMiniBufferModes(key, unmodified, text);
     return false;
 }
 
 void FakeVimHandler::Private::finishMovement(const QString &dotCommand)
 {
     if (m_submode == FilterSubMode) {
-        int beginLine = lineForPosition(m_tc.anchor());
-        int endLine = lineForPosition(m_tc.position());
-        m_tc.setPosition(qMin(m_tc.anchor(), m_tc.position()), MoveAnchor);
+        int beginLine = lineForPosition(anchor());
+        int endLine = lineForPosition(position());
+        m_tc.setPosition(qMin(anchor(), position()));
         m_mode = ExMode;
         m_commandBuffer = QString(".,+%1!").arg(qAbs(endLine - beginLine));
         m_commandHistory.append(QString());
@@ -382,25 +429,28 @@ void FakeVimHandler::Private::finishMovement(const QString &dotCommand)
         return;
     }
 
+    if (m_visualMode != NoVisualMode)
+        m_marks['>'] = m_tc.position();
+
     if (m_submode == ChangeSubMode) {
         if (!dotCommand.isEmpty())
             m_dotCommand = "c" + dotCommand;
-        m_registers[m_register] = m_tc.selectedText();
-        removeSelectedText(m_tc);
+        QString text = recordRemoveSelectedText();
+        qDebug() << "CHANGING TO INSERT MODE" << text;
+        m_registers[m_register] = text;
         m_mode = InsertMode;
         m_submode = NoSubMode;
     } else if (m_submode == DeleteSubMode) {
         if (!dotCommand.isEmpty())
             m_dotCommand = "d" + dotCommand;
-        recordRemove(qMin(m_tc.position(), m_tc.anchor()), m_tc.selectedText());
-        m_registers[m_register] = m_tc.selectedText();
-        removeSelectedText(m_tc);
+        m_registers[m_register] = recordRemoveSelectedText();
+        recordEndGroup();
         m_submode = NoSubMode;
         if (atEol())
-            m_tc.movePosition(Left, MoveAnchor, 1);
+            moveLeft();
     } else if (m_submode == YankSubMode) {
-        m_registers[m_register] = m_tc.selectedText();
-        m_tc.setPosition(m_savedPosition);
+        m_registers[m_register] = selectedText();
+        m_tc.setPosition(m_savedYankPosition);
         m_submode = NoSubMode;
     } else if (m_submode == ReplaceSubMode) {
         m_submode = NoSubMode;
@@ -409,12 +459,14 @@ void FakeVimHandler::Private::finishMovement(const QString &dotCommand)
         int start = m_tc.selectionStart();
         int end = m_tc.selectionEnd();
         if (start > end)
-            std::swap(start, end);
+            qSwap(start, end);
         QTextBlock startBlock = doc->findBlock(start);
         indentRegion(doc->findBlock(start), doc->findBlock(end).next());
         m_tc.setPosition(startBlock.position());
         moveToFirstNonBlankOnLine();
         m_submode = NoSubMode;
+    } else if (m_moveType == MoveExclusive) {
+        moveLeft(); // correct 
     }
     m_mvcount.clear();
     m_opcount.clear();
@@ -544,7 +596,14 @@ void FakeVimHandler::Private::showBlackMessage(const QString &msg)
     updateMiniBuffer();
 }
 
-bool FakeVimHandler::Private::handleCommandMode(int key, const QString &text)
+void FakeVimHandler::Private::notImplementedYet()
+{
+    showRedMessage("Not implemented in FakeVim");
+    updateMiniBuffer();
+}
+
+bool FakeVimHandler::Private::handleCommandMode(int key, int unmodified,
+    const QString &text)
 {
     bool handled = true;
 
@@ -552,26 +611,32 @@ bool FakeVimHandler::Private::handleCommandMode(int key, const QString &text)
         m_register = key;
         m_submode = NoSubMode;
     } else if (m_submode == ChangeSubMode && key == 'c') {
-        m_tc.movePosition(StartOfLine, MoveAnchor);
-        m_tc.movePosition(Down, KeepAnchor, count());
-        m_registers[m_register] = m_tc.selectedText();
+        moveToStartOfLine();
+        setAnchor();
+        moveDown(count());
+        moveLeft();
+        m_registers[m_register] = recordRemoveSelectedText();
+        m_submode = NoSubMode;
+        m_mode = InsertMode;
         finishMovement("c");
     } else if (m_submode == DeleteSubMode && key == 'd') {
-        m_tc.movePosition(StartOfLine, MoveAnchor);
-        m_tc.movePosition(Down, KeepAnchor, count());
-        m_registers[m_register] = m_tc.selectedText();
+        moveToStartOfLine();
+        setAnchor();
+        moveDown(count());
+        m_registers[m_register] = recordRemoveSelectedText();
         finishMovement("d");
     } else if (m_submode == YankSubMode && key == 'y') {
-        m_tc.movePosition(StartOfLine, MoveAnchor);
-        m_tc.movePosition(Down, KeepAnchor, count());
-        m_registers[m_register] = m_tc.selectedText();
-        finishMovement();
+        moveToStartOfLine();
+        setAnchor();
+        moveDown(count());
+        m_moveType = MoveLineWise;
+        finishMovement("y");
     } else if (m_submode == ReplaceSubMode) {
         if (atEol())
-            m_tc.movePosition(Left, KeepAnchor, 1);
+            moveLeft(KeepAnchor);
         else
             m_tc.deleteChar();
-        m_tc.insertText(text);
+        recordInsertText(text);
     } else if (m_submode == IndentSubMode && key == '=') {
         indentRegion(m_tc.block(), m_tc.block().next());
         finishMovement();
@@ -582,7 +647,7 @@ bool FakeVimHandler::Private::handleCommandMode(int key, const QString &text)
             moveToFirstNonBlankOnLine();
             finishMovement();
         } else {
-            qDebug() << "Ignored z + " << key << text;
+            qDebug() << "IGNORED Z_MODE " << key << text;
         }
         m_submode = NoSubMode;
     } else if (m_subsubmode == FtSubSubMode) {
@@ -595,7 +660,7 @@ bool FakeVimHandler::Private::handleCommandMode(int key, const QString &text)
     } else if (m_subsubmode == BackTickSubSubMode
             || m_subsubmode == TickSubSubMode) {
         if (m_marks.contains(key)) {
-            m_tc.setPosition(m_marks[key], MoveAnchor);
+            m_tc.setPosition(m_marks[key]);
             if (m_subsubmode == TickSubSubMode)
                 moveToFirstNonBlankOnLine();
             finishMovement();
@@ -613,10 +678,8 @@ bool FakeVimHandler::Private::handleCommandMode(int key, const QString &text)
     } else if (key == ':') {
         m_mode = ExMode;
         m_commandBuffer.clear();
-        if (m_visualMode != NoVisualMode) {
+        if (m_visualMode != NoVisualMode)
             m_commandBuffer = "'<,'>";
-            leaveVisualMode();
-        }
         m_commandHistory.append(QString());
         m_commandHistoryIndex = m_commandHistory.size() - 1;
         updateMiniBuffer();
@@ -628,33 +691,42 @@ bool FakeVimHandler::Private::handleCommandMode(int key, const QString &text)
         updateMiniBuffer();
     } else if (key == '`') {
         m_subsubmode = BackTickSubSubMode;
+    } else if (key == '#' || key == '*') {
+        // FIXME: That's not proper vim behaviour
+        m_tc.select(QTextCursor::WordUnderCursor);
+        QString needle = "\\<" + m_tc.selection().toPlainText() + "\\>";
+        m_searchHistory.append(needle);
+        m_lastSearchForward = (key == '*');
+        updateMiniBuffer();
+        search(needle, m_lastSearchForward);
     } else if (key == '\'') {
         m_subsubmode = TickSubSubMode;
     } else if (key == '|') {
-        m_tc.movePosition(StartOfLine, KeepAnchor);
-        m_tc.movePosition(Right, KeepAnchor, qMin(count(), rightDist()) - 1);
+        setAnchor();
+        moveToStartOfLine();
+        moveRight(qMin(count(), rightDist()) - 1);
         finishMovement();
     } else if (key == '!' && m_visualMode == NoVisualMode) {
         m_submode = FilterSubMode;
     } else if (key == '!' && m_visualMode == VisualLineMode) {
         m_mode = ExMode;
-        m_marks['>'] = m_tc.position();
         m_commandBuffer = "'<,'>!";
         m_commandHistory.append(QString());
         m_commandHistoryIndex = m_commandHistory.size() - 1;
         updateMiniBuffer();
     } else if (key == '"') {
         m_submode = RegisterSubMode;
-    } else if (key == Key_Return) {
-        m_tc.movePosition(StartOfLine);
-        m_tc.movePosition(Down);
+    } else if (unmodified == Key_Return) {
+        moveToStartOfLine();
+        moveDown();
+        moveToFirstNonBlankOnLine();
         finishMovement();
     } else if (key == Key_Home) {
-        m_tc.movePosition(StartOfLine, KeepAnchor);
+        moveToStartOfLine();
         finishMovement();
     } else if (key == '$' || key == Key_End) {
         int submode = m_submode;
-        m_tc.movePosition(EndOfLine, KeepAnchor);
+        moveToEndOfLine();
         finishMovement();
         if (submode == NoSubMode)
             m_desiredColumn = -1;
@@ -666,7 +738,7 @@ bool FakeVimHandler::Private::handleCommandMode(int key, const QString &text)
         qDebug() << "REPEATING" << m_dotCommand;
         for (int i = count(); --i >= 0; )
             foreach (QChar c, m_dotCommand)
-                handleKey(c.unicode(), QString(c));
+                handleKey(c.unicode(), c.unicode(), QString(c));
     } else if (key == '=') {
         m_submode = IndentSubMode;
     } else if (key == '%') {
@@ -674,12 +746,14 @@ bool FakeVimHandler::Private::handleCommandMode(int key, const QString &text)
         finishMovement();
     } else if (key == 'a') {
         m_mode = InsertMode;
+        recordBeginGroup();
         m_lastInsertion.clear();
-        m_tc.movePosition(Right, MoveAnchor, 1);
+        moveRight();
         updateMiniBuffer();
     } else if (key == 'A') {
         m_mode = InsertMode;
-        m_tc.movePosition(EndOfLine, MoveAnchor);
+        moveToEndOfLine();
+        recordBeginGroup();
         m_lastInsertion.clear();
     } else if (key == 'b') {
         moveToWordBoundary(false, false);
@@ -688,30 +762,41 @@ bool FakeVimHandler::Private::handleCommandMode(int key, const QString &text)
         moveToWordBoundary(true, false);
         finishMovement();
     } else if (key == 'c') {
+        setAnchor();
+        recordBeginGroup();
         m_submode = ChangeSubMode;
     } else if (key == 'C') {
-        m_submode = ChangeSubMode;
-        m_tc.movePosition(EndOfLine, KeepAnchor);
+        setAnchor();
+        recordBeginGroup();
+        moveToEndOfLine();
+        m_registers[m_register] = recordRemoveSelectedText();
+        m_mode = InsertMode;
         finishMovement();
     } else if (key == 'd' && m_visualMode == NoVisualMode) {
         if (atEol())
-            m_tc.movePosition(Left, MoveAnchor, 1);
+            moveLeft();
+        setAnchor();
+        recordBeginGroup();
         m_opcount = m_mvcount;
         m_mvcount.clear();
         m_submode = DeleteSubMode;
     } else if (key == 'd') {
+        setAnchor();
         leaveVisualMode();
         int beginLine = lineForPosition(m_marks['<']);
         int endLine = lineForPosition(m_marks['>']);
-        m_tc = selectRange(beginLine, endLine);
-        removeSelectedText(m_tc);
+        selectRange(beginLine, endLine);
+        recordRemoveSelectedText();
     } else if (key == 'D') {
+        setAnchor();
+        recordBeginGroup();
         m_submode = DeleteSubMode;
-        m_tc.movePosition(Down, KeepAnchor, qMax(count() - 1, 0));
-        m_tc.movePosition(Right, KeepAnchor, rightDist());
+        moveDown(qMax(count() - 1, 0));
+        moveRight(rightDist());
         finishMovement();
     } else if (key == 'e') {
         moveToWordBoundary(false, true);
+        m_moveType = MoveExclusive;
         finishMovement();
     } else if (key == 'E') {
         moveToWordBoundary(true, true);
@@ -724,72 +809,77 @@ bool FakeVimHandler::Private::handleCommandMode(int key, const QString &text)
     } else if (key == 'G') {
         int n = m_mvcount.isEmpty() ? linesInDocument() : count();
         m_tc.setPosition(positionForLine(n), KeepAnchor);
-        if (m_config.contains(ConfigStartOfLine))
+        if (m_config[ConfigStartOfLine] == ConfigOn)
             moveToFirstNonBlankOnLine();
         finishMovement();
-    } else if (key == 'h' || key == Key_Left) {
+    } else if (key == 'h' || key == Key_Left
+            || key == Key_Backspace || key == control('h')) {
         int n = qMin(count(), leftDist());
         if (m_fakeEnd && m_tc.block().length() > 1)
             ++n;
-        m_tc.movePosition(Left, KeepAnchor, n);
+        moveLeft(n);
         finishMovement();
     } else if (key == 'H') {
         m_tc = EDITOR(cursorForPosition(QPoint(0, 0)));
-        m_tc.movePosition(Down, KeepAnchor, qMax(count() - 1, 0));
+        moveDown(qMax(count() - 1, 0));
         moveToFirstNonBlankOnLine();
         finishMovement();
     } else if (key == 'i') {
         enterInsertMode();
         updateMiniBuffer();
         if (atEol())
-            m_tc.movePosition(Left, MoveAnchor, 1);
+            moveLeft();
     } else if (key == 'I') {
+        setAnchor();
         enterInsertMode();
         if (m_gflag)
-            m_tc.movePosition(StartOfLine, KeepAnchor);
+            moveToStartOfLine();
         else
             moveToFirstNonBlankOnLine();
     } else if (key == 'j' || key == Key_Down) {
         int savedColumn = m_desiredColumn;
-        if (m_submode == NoSubMode || m_submode == ZSubMode || m_submode == RegisterSubMode) {
-            m_tc.movePosition(Down, KeepAnchor, count());
+        if (m_submode == NoSubMode || m_submode == ZSubMode
+                || m_submode == RegisterSubMode) {
+            moveDown(count());
             moveToDesiredColumn();
         } else {
-            m_tc.movePosition(StartOfLine, MoveAnchor);
-            m_tc.movePosition(Down, KeepAnchor, count()+1);
+            moveToStartOfLine();
+            moveDown(count() + 1);
         }
         finishMovement();
         m_desiredColumn = savedColumn;
     } else if (key == 'J') {
-        EditOperation op;
+        recordBeginGroup();
         if (m_submode == NoSubMode) {
             for (int i = qMax(count(), 2) - 1; --i >= 0; ) {
-                m_tc.movePosition(EndOfLine);
-                m_tc.deleteChar();
+                moveToEndOfLine();
+                recordRemoveNextChar();
                 if (!m_gflag)
-                    m_tc.insertText(" ");
+                    recordInsertText(" ");
             }
             if (!m_gflag)
-                m_tc.movePosition(Left, MoveAnchor, 1);
+                moveLeft();
         }
+        recordEndGroup();
     } else if (key == 'k' || key == Key_Up) {
         int savedColumn = m_desiredColumn;
-        if (m_submode == NoSubMode || m_submode == ZSubMode || m_submode == RegisterSubMode) {
-            m_tc.movePosition(Up, KeepAnchor, count());
+        if (m_submode == NoSubMode || m_submode == ZSubMode
+                || m_submode == RegisterSubMode) {
+            moveUp(count());
             moveToDesiredColumn();
         } else {
-            m_tc.movePosition(StartOfLine, MoveAnchor);
-            m_tc.movePosition(Down, MoveAnchor);
-            m_tc.movePosition(Up, KeepAnchor, count()+1);
+            moveToStartOfLine();
+            moveDown();
+            moveUp(count() + 1);
         }
         finishMovement();
         m_desiredColumn = savedColumn;
     } else if (key == 'l' || key == Key_Right) {
-        m_tc.movePosition(Right, KeepAnchor, qMin(count(), rightDist()));
+        moveRight(qMin(count(), rightDist()));
         finishMovement();
     } else if (key == 'L') {
         m_tc = EDITOR(cursorForPosition(QPoint(0, EDITOR(height()))));
-        m_tc.movePosition(Up, KeepAnchor, qMax(count(), 1));
+        moveUp(qMax(count(), 1));
         moveToFirstNonBlankOnLine();
         finishMovement();
     } else if (key == 'm') {
@@ -805,45 +895,54 @@ bool FakeVimHandler::Private::handleCommandMode(int key, const QString &text)
     } else if (key == 'o' || key == 'O') {
         enterInsertMode();
         moveToFirstNonBlankOnLine();
+        recordBeginGroup();
         int numSpaces = leftDist();
-        m_tc.movePosition(Up, MoveAnchor, 1);
+        moveUp();
         if (key == 'o')
-            m_tc.movePosition(Down, MoveAnchor, 1);
-        m_tc.movePosition(EndOfLine, MoveAnchor);
-        m_tc.insertText("\n");
-        m_tc.movePosition(StartOfLine, MoveAnchor);
+            moveDown();
+        moveToEndOfLine();
+        recordInsertText("\n");
+        moveToStartOfLine();
         if (m_config[ConfigAutoIndent] == ConfigOn)
-            m_tc.insertText(QString(indentDist(), ' '));
+            recordInsertText(QString(indentDist(), ' '));
         else
-            m_tc.insertText(QString(numSpaces, ' '));
+            recordInsertText(QString(numSpaces, ' '));
+        recordEndGroup();
     } else if (key == 'p' || key == 'P') {
+        recordBeginGroup();
         QString text = m_registers[m_register];
-        int n = text.count(QChar(ParagraphSeparator));
+        int n = lineCount(text);
+        //qDebug() << "REGISTERS: " << m_registers << "MOVE: " << m_moveType;
+        //qDebug() << "LINES: " << n << text << m_register;
         if (n > 0) {
-            m_tc.movePosition(StartOfLine);
+            moveToStartOfLine();
             if (key == 'p')
-                m_tc.movePosition(Down);
-            m_tc.insertText(text);
-            m_tc.movePosition(Up, MoveAnchor, n);
+                moveDown();
+            recordInsertText(text);
+            moveUp(n);
         } else {
             if (key == 'p')
-                m_tc.movePosition(Right);
-            m_tc.insertText(text);
-            m_tc.movePosition(Left);
+                moveRight();
+            recordInsertText(text);
+            moveLeft();
         }
+        recordEndGroup();
         m_dotCommand = "p";
     } else if (key == 'r') {
+        recordBeginGroup();
         m_submode = ReplaceSubMode;
         m_dotCommand = "r";
     } else if (key == 'R') {
+        recordBeginGroup();
         m_mode = InsertMode;
         m_submode = ReplaceSubMode;
         m_dotCommand = "R";
     } else if (key == control('r')) {
         redo();
     } else if (key == 's') {
+        recordBeginGroup();
         m_submode = ChangeSubMode;
-        m_tc.movePosition(Right, KeepAnchor, qMin(count(), rightDist()));
+        moveRight(qMin(count(), rightDist()));
     } else if (key == 't' || key == 'T') {
         m_subsubmode = FtSubSubMode;
         m_subsubdata = key;
@@ -860,53 +959,71 @@ bool FakeVimHandler::Private::handleCommandMode(int key, const QString &text)
     } else if (key == control('v')) {
         enterVisualMode(VisualBlockMode);
     } else if (key == 'w') {
-        moveToNextWord(false);
+        // Special case: "cw" and "cW" work the same as "ce" and "cE" if the
+        // cursor is on a non-blank.
+        if (m_submode == ChangeSubMode)
+            moveToWordBoundary(false, true);
+        else
+            moveToNextWord(false);
+        m_moveType = MoveExclusive;
         finishMovement("w");
     } else if (key == 'W') {
         moveToNextWord(true);
         finishMovement("W");
     } else if (key == 'x') { // = "dl"
         if (atEol())
-            m_tc.movePosition(Left, MoveAnchor, 1);
+            moveLeft();
+        recordBeginGroup();
         m_submode = DeleteSubMode;
-        m_tc.movePosition(Right, KeepAnchor, qMin(count(), rightDist()));
+        moveRight(qMin(count(), rightDist()));
         finishMovement("l");
     } else if (key == 'X') {
         if (leftDist() > 0) {
-            m_tc.movePosition(Left, KeepAnchor, qMin(count(), leftDist()));
-            m_tc.deleteChar();
+            setAnchor();
+            moveLeft(qMin(count(), leftDist()));
+            recordRemoveSelectedText();
         }
         finishMovement();
     } else if (key == 'y') {
+        m_savedYankPosition = m_tc.position();
         if (atEol())
-            m_tc.movePosition(Left, MoveAnchor, 1);
+            moveLeft();
+        recordBeginGroup();
+        setAnchor();
         m_submode = YankSubMode;
+    } else if (key == 'Y') {
+        moveToStartOfLine();
+        setAnchor();
+        moveDown(count());
+        m_moveType = MoveLineWise;
+        finishMovement();
     } else if (key == 'z') {
+        recordBeginGroup();
         m_submode = ZSubMode;
     } else if (key == '~' && !atEol()) {
-        m_tc.movePosition(Right, KeepAnchor, qMin(count(), rightDist()));
-        QString str = m_tc.selectedText();
+        recordBeginGroup();
+        setAnchor();
+        moveRight(qMin(count(), rightDist()));
+        QString str = recordRemoveSelectedText();
         for (int i = str.size(); --i >= 0; ) {
             QChar c = str.at(i);
             str[i] = c.isUpper() ? c.toLower() : c.toUpper();
         }
-        m_tc.deleteChar();
-        m_tc.insertText(str);
+        recordInsertText(str);
+        recordEndGroup();
     } else if (key == Key_PageDown || key == control('f')) {
-        m_tc.movePosition(Down, KeepAnchor, count() * (linesOnScreen() - 2));
+        moveDown(count() * (linesOnScreen() - 2));
         finishMovement();
     } else if (key == Key_PageUp || key == control('b')) {
-        m_tc.movePosition(Up, KeepAnchor, count() * (linesOnScreen() - 2));
+        moveUp(count() * (linesOnScreen() - 2));
         finishMovement();
-    } else if (key == Key_Backspace || key == control('h')) {
-        m_tc.deletePreviousChar();
     } else if (key == Key_Delete) {
         m_tc.deleteChar();
     } else if (key == Key_Escape) {
         if (m_visualMode != NoVisualMode)
             leaveVisualMode();
     } else {
-        qDebug() << "Ignored in command mode: " << key << text;
+        qDebug() << "IGNORED IN COMMAND MODE: " << key << text;
         if (text.isEmpty())
             handled = false;
     }
@@ -914,7 +1031,7 @@ bool FakeVimHandler::Private::handleCommandMode(int key, const QString &text)
     return handled;
 }
 
-bool FakeVimHandler::Private::handleInsertMode(int key, const QString &text)
+bool FakeVimHandler::Private::handleInsertMode(int key, int, const QString &text)
 {
     if (key == Key_Escape) {
         // start with '1', as one instance was already physically inserted
@@ -925,21 +1042,23 @@ bool FakeVimHandler::Private::handleInsertMode(int key, const QString &text)
             data += m_lastInsertion;
         }
         recordInsert(m_tc.position() - m_lastInsertion.size(), data);
-        m_tc.movePosition(Left, MoveAnchor, qMin(1, leftDist()));
+        recordEndGroup();
+        //qDebug() << "UNDO: " << m_undoStack;
+        moveLeft(qMin(1, leftDist()));
         enterCommandMode();
     } else if (key == Key_Left) {
-        m_tc.movePosition(Left, MoveAnchor, 1);
+        moveLeft(count());
         m_lastInsertion.clear();
     } else if (key == Key_Down) {
         m_submode = NoSubMode;
-        m_tc.movePosition(Down, MoveAnchor, 1);
+        moveDown(count());
         m_lastInsertion.clear();
     } else if (key == Key_Up) {
         m_submode = NoSubMode;
-        m_tc.movePosition(Up, MoveAnchor, 1);
+        moveUp(count());
         m_lastInsertion.clear();
     } else if (key == Key_Right) {
-        m_tc.movePosition(Right, MoveAnchor, 1);
+        moveRight(count());
         m_lastInsertion.clear();
     } else if (key == Key_Return) {
         m_submode = NoSubMode;
@@ -953,10 +1072,10 @@ bool FakeVimHandler::Private::handleInsertMode(int key, const QString &text)
         m_tc.deleteChar();
         m_lastInsertion.clear();
     } else if (key == Key_PageDown || key == control('f')) {
-        m_tc.movePosition(Down, KeepAnchor, count() * (linesOnScreen() - 2));
+        moveDown(count() * (linesOnScreen() - 2));
         m_lastInsertion.clear();
     } else if (key == Key_PageUp || key == control('b')) {
-        m_tc.movePosition(Up, KeepAnchor, count() * (linesOnScreen() - 2));
+        moveUp(count() * (linesOnScreen() - 2));
         m_lastInsertion.clear();
     } else if (key == Key_Tab && m_config[ConfigExpandTab] == ConfigOn) {
         QString str = QString(m_config[ConfigTabStop].toInt(), ' ');
@@ -995,7 +1114,8 @@ bool FakeVimHandler::Private::handleInsertMode(int key, const QString &text)
     return true;
 }
 
-bool FakeVimHandler::Private::handleMiniBufferModes(int key, const QString &text)
+bool FakeVimHandler::Private::handleMiniBufferModes(int key, int unmodified,
+    const QString &text)
 {
     Q_UNUSED(text)
 
@@ -1014,13 +1134,14 @@ bool FakeVimHandler::Private::handleMiniBufferModes(int key, const QString &text
         if (!m_commandBuffer.isEmpty())
             m_commandBuffer.chop(1);
         updateMiniBuffer();
-    } else if (key == Key_Return && m_mode == ExMode) {
+    } else if (unmodified == Key_Return && m_mode == ExMode) {
         if (!m_commandBuffer.isEmpty()) {
             m_commandHistory.takeLast();
             m_commandHistory.append(m_commandBuffer);
             handleExCommand(m_commandBuffer);
+            leaveVisualMode();
         }
-    } else if (key == Key_Return && isSearchMode()) {
+    } else if (unmodified == Key_Return && isSearchMode()) {
         if (!m_commandBuffer.isEmpty()) {
             m_searchHistory.takeLast();
             m_searchHistory.append(m_commandBuffer);
@@ -1077,6 +1198,7 @@ int FakeVimHandler::Private::readLineCode(QString &cmd)
         int mark = m_marks.value(cmd.at(0).unicode());
         if (!mark) { 
             showRedMessage(tr("E20: Mark '%1' not set").arg(cmd.at(0)));
+            cmd = cmd.mid(1);
             return -1;
         }
         cmd = cmd.mid(1);
@@ -1096,8 +1218,9 @@ int FakeVimHandler::Private::readLineCode(QString &cmd)
         int pos = m_marks.value(cmd.at(0).unicode(), -1);
         //qDebug() << " MARK: " << cmd.at(0) << pos << lineForPosition(pos);
         if (pos == -1) {
-             showRedMessage(tr("E20: Mark '%1' not set").arg(cmd.at(0)));
-             return -1;
+            showRedMessage(tr("E20: Mark '%1' not set").arg(cmd.at(0)));
+            cmd = cmd.mid(1);
+            return -1;
         }
         cmd = cmd.mid(1);
         return lineForPosition(pos);
@@ -1119,17 +1242,15 @@ int FakeVimHandler::Private::readLineCode(QString &cmd)
     return -1;
 }
 
-QTextCursor FakeVimHandler::Private::selectRange(int beginLine, int endLine)
+void FakeVimHandler::Private::selectRange(int beginLine, int endLine)
 {
-    QTextCursor tc = m_tc;
-    tc.setPosition(positionForLine(beginLine), MoveAnchor);
+    m_tc.setPosition(positionForLine(beginLine), MoveAnchor);
     if (endLine == linesInDocument()) {
-        tc.setPosition(positionForLine(endLine), KeepAnchor);
-        tc.movePosition(EndOfLine, KeepAnchor);
+        m_tc.setPosition(positionForLine(endLine), KeepAnchor);
+        m_tc.movePosition(EndOfLine, KeepAnchor);
     } else {
-        tc.setPosition(positionForLine(endLine + 1), KeepAnchor);
+        m_tc.setPosition(positionForLine(endLine + 1), KeepAnchor);
     }
-    return tc;
 }
 
 void FakeVimHandler::Private::handleExCommand(const QString &cmd0)
@@ -1138,7 +1259,6 @@ void FakeVimHandler::Private::handleExCommand(const QString &cmd0)
     if (cmd.startsWith("%"))
         cmd = "1,$" + cmd.mid(1);
     
-    m_marks['>'] = m_tc.position();
     int beginLine = -1;
     int endLine = -1;
 
@@ -1153,11 +1273,12 @@ void FakeVimHandler::Private::handleExCommand(const QString &cmd0)
             endLine = line;
     }
 
-    //qDebug() << "RANGE: " << beginLine << endLine << cmd << cmd0;
+    //qDebug() << "RANGE: " << beginLine << endLine << cmd << cmd0 << m_marks;
 
     static QRegExp reWrite("^w!?( (.*))?$");
     static QRegExp reDelete("^d( (.*))?$");
     static QRegExp reSet("^set?( (.*))?$");
+    static QRegExp reHistory("^his(tory)?( (.*))?$");
 
     if (cmd.isEmpty()) {
         m_tc.setPosition(positionForLine(beginLine));
@@ -1169,11 +1290,11 @@ void FakeVimHandler::Private::handleExCommand(const QString &cmd0)
             beginLine = cursorLineInDocument();
         if (endLine == -1)
             endLine = cursorLineInDocument();
-        QTextCursor tc = selectRange(beginLine, endLine);
+        selectRange(beginLine, endLine);
         QString reg = reDelete.cap(2);
+        QString text = recordRemoveSelectedText(); 
         if (!reg.isEmpty())
-            m_registers[reg.at(0).unicode()] = tc.selection().toPlainText();
-        tc.removeSelectedText();
+            m_registers[reg.at(0).unicode()] = text;
     } else if (reWrite.indexIn(cmd) != -1) { // :w
         enterCommandMode();
         bool noArgs = (beginLine == -1);
@@ -1181,7 +1302,7 @@ void FakeVimHandler::Private::handleExCommand(const QString &cmd0)
             beginLine = 0;
         if (endLine == -1)
             endLine = linesInDocument();
-        qDebug() << "LINES: " << beginLine << endLine;
+        //qDebug() << "LINES: " << beginLine << endLine;
         bool forced = cmd.startsWith("w!");
         QString fileName = reWrite.cap(2);
         if (fileName.isEmpty())
@@ -1191,11 +1312,9 @@ void FakeVimHandler::Private::handleExCommand(const QString &cmd0)
         if (exists && !forced && !noArgs) {
             showRedMessage(tr("File '%1' exists (add ! to override)").arg(fileName));
         } else if (file.open(QIODevice::ReadWrite)) {
-            QTextCursor tc = selectRange(beginLine, endLine);
-            qDebug() << "ANCHOR: " << tc.position() << tc.anchor()
-                << tc.selection().toPlainText();
-            { QTextStream ts(&file); ts << tc.selection().toPlainText(); }
-            file.close();
+            selectRange(beginLine, endLine);
+            emit q->writeFile(fileName, selectedText());
+            // check by reading back
             file.open(QIODevice::ReadOnly);
             QByteArray ba = file.readAll();
             showBlackMessage(tr("\"%1\" %2 %3L, %4C written")
@@ -1219,10 +1338,10 @@ void FakeVimHandler::Private::handleExCommand(const QString &cmd0)
             beginLine = cursorLineInDocument();
         if (endLine == -1)
             endLine = cursorLineInDocument();
-        QTextCursor tc = selectRange(beginLine, endLine);
-        QString text = tc.selection().toPlainText();
-        tc.removeSelectedText();
+        selectRange(beginLine, endLine);
         QString command = cmd.mid(1).trimmed();
+        recordBeginGroup();
+        QString text = recordRemoveSelectedText();
         QProcess proc;
         proc.start(cmd.mid(1));
         proc.waitForStarted();
@@ -1230,7 +1349,8 @@ void FakeVimHandler::Private::handleExCommand(const QString &cmd0)
         proc.closeWriteChannel();
         proc.waitForFinished();
         QString result = QString::fromUtf8(proc.readAllStandardOutput());
-        m_tc.insertText(result);
+        recordInsertText(result);
+        recordEndGroup();
         leaveVisualMode();
 
         m_tc.setPosition(positionForLine(beginLine));
@@ -1242,6 +1362,7 @@ void FakeVimHandler::Private::handleExCommand(const QString &cmd0)
         recordOperation(op);
 
         enterCommandMode();
+        //qDebug() << "FILTER: " << command;
         showBlackMessage(tr("%1 lines filtered").arg(text.count('\n')));
     } else if (cmd == "red" || cmd == "redo") { // :redo
         redo();
@@ -1253,7 +1374,25 @@ void FakeVimHandler::Private::handleExCommand(const QString &cmd0)
             QString info;
             foreach (const QString &key, m_config.keys())
                 info += key + ": " + m_config.value(key) + "\n";
-            emit q->extraInformationChanged(info);
+            emit q->extraInformationChanged(editor(), info);
+        } else {
+            notImplementedYet();
+        }
+        enterCommandMode();
+        updateMiniBuffer();
+    } else if (reHistory.indexIn(cmd) != -1) { // :history
+        QString arg = reSet.cap(3);
+        if (arg.isEmpty()) {
+            QString info;
+            info += "#  command history\n";
+            int i = 0;
+            foreach (const QString &item, m_commandHistory) {
+                ++i;
+                info += QString("%1 %2\n").arg(i, -8).arg(item);
+            }
+            emit q->extraInformationChanged(editor(), info);
+        } else {
+            notImplementedYet();
         }
         enterCommandMode();
         updateMiniBuffer();
@@ -1262,13 +1401,22 @@ void FakeVimHandler::Private::handleExCommand(const QString &cmd0)
     }
 }
 
-void FakeVimHandler::Private::search(const QString &needle, bool forward)
+void FakeVimHandler::Private::search(const QString &needle0, bool forward)
 {
-    //qDebug() << "NEEDLE " << needle << "BACKWARDS" << backwards;
+    showBlackMessage((forward ? '/' : '?') + needle0);
     QTextCursor orig = m_tc;
     QTextDocument::FindFlags flags = QTextDocument::FindCaseSensitively;
     if (!forward)
-        flags = QTextDocument::FindBackward;
+        flags |= QTextDocument::FindBackward;
+
+    // FIXME: Rough mapping of a common case
+    QString needle = needle0;
+    if (needle.startsWith("\\<") && needle.endsWith("\\>"))
+        flags |= QTextDocument::FindWholeWords;
+    needle.replace("\\<", ""); // start of word
+    needle.replace("\\>", ""); // end of word
+
+    //qDebug() << "NEEDLE " << needle0 << needle << "FORWARD" << forward << flags;
 
     if (forward)
         m_tc.movePosition(Right, MoveAnchor, 1);
@@ -1276,8 +1424,7 @@ void FakeVimHandler::Private::search(const QString &needle, bool forward)
     EDITOR(setTextCursor(m_tc));
     if (EDITOR(find(needle, flags))) {
         m_tc = EDITOR(textCursor());
-        // the qMax seems to be needed for QPlainTextEdit only
-        m_tc.movePosition(Left, MoveAnchor, qMax(1, needle.size() - 1));
+        m_tc.setPosition(m_tc.anchor());
         return;
     }
 
@@ -1285,8 +1432,7 @@ void FakeVimHandler::Private::search(const QString &needle, bool forward)
     EDITOR(setTextCursor(m_tc));
     if (EDITOR(find(needle, flags))) {
         m_tc = EDITOR(textCursor());
-        // the qMax seems to be needed for QPlainTextEdit only
-        m_tc.movePosition(Left, MoveAnchor, qMax(1, needle.size() - 1));
+        m_tc.setPosition(m_tc.anchor());
         if (forward)
             showRedMessage("search hit BOTTOM, continuing at TOP");
         else
@@ -1391,17 +1537,15 @@ void FakeVimHandler::Private::moveToWordBoundary(bool simple, bool forward)
     int repeat = count();
     QTextDocument *doc = m_tc.document();
     int n = forward ? lastPositionInDocument() - 1 : 0;
-    int lastClass = 0;
+    int lastClass = -1;
     while (true) {
-        m_tc.movePosition(forward ? Right : Left, KeepAnchor, 1);
+        forward ? moveRight() : moveLeft();
         QChar c = doc->characterAt(m_tc.position());
         int thisClass = charClass(c, simple);
         if (thisClass != lastClass && lastClass != 0)
             --repeat;
-        if (repeat == -1) {
-            m_tc.movePosition(forward ? Left : Right, KeepAnchor, 1);
+        if (repeat == -1)
             break;
-        }
         lastClass = thisClass;
         if (m_tc.position() == n)
             break;
@@ -1464,7 +1608,7 @@ void FakeVimHandler::Private::moveToNextWord(bool simple)
         if (repeat == 0)
             break;
         lastClass = thisClass;
-        m_tc.movePosition(Right, KeepAnchor, 1);
+        moveRight();
         if (m_tc.position() == n)
             break;
     }
@@ -1560,6 +1704,13 @@ QString FakeVimHandler::Private::lastSearchString() const
      return m_searchHistory.empty() ? QString() : m_searchHistory.back();
 }
 
+QString FakeVimHandler::Private::selectedText() const
+{
+    QTextCursor tc = m_tc;
+    tc.setPosition(m_anchor, KeepAnchor);
+    return tc.selection().toPlainText();
+}
+
 int FakeVimHandler::Private::positionForLine(int line) const
 {
     return m_tc.block().document()->findBlockByNumber(line - 1).position();
@@ -1576,6 +1727,7 @@ void FakeVimHandler::Private::enterVisualMode(VisualMode visualMode)
 {
     m_visualMode = visualMode;
     m_marks['<'] = m_tc.position();
+    m_marks['>'] = m_tc.position();
     updateMiniBuffer();
     updateSelection();
 }
@@ -1583,7 +1735,6 @@ void FakeVimHandler::Private::enterVisualMode(VisualMode visualMode)
 void FakeVimHandler::Private::leaveVisualMode()
 {
     m_visualMode = NoVisualMode;
-    m_marks['>'] = m_tc.position();
     updateMiniBuffer();
     updateSelection();
 }
@@ -1653,17 +1804,55 @@ void FakeVimHandler::Private::redo()
 #endif
 }
 
-void FakeVimHandler::Private::removeSelectedText(QTextCursor &tc)
+void FakeVimHandler::Private::recordBeginGroup()
+{
+    //qDebug() << "PUSH";
+    m_undoGroupStack.push(m_undoStack.size());
+    EditOperation op;
+    op.m_position = m_tc.position();
+    recordOperation(op);
+}
+
+void FakeVimHandler::Private::recordEndGroup()
+{
+    EditOperation op;
+    op.m_itemCount = m_undoStack.size() - m_undoGroupStack.pop();
+    //qDebug() << "POP " << op.m_itemCount;
+    recordOperation(op);
+}
+
+QString FakeVimHandler::Private::recordRemoveSelectedText()
 {
     EditOperation op;
-    op.m_position = qMin(tc.position(), tc.anchor());
-    op.m_from = tc.selection().toPlainText();
+    //qDebug() << "1 POS: " << position() << " ANCHOR: " << anchor() << m_tc.anchor();
+    m_tc.setPosition(anchor(), KeepAnchor);
+    op.m_position = qMin(position(), anchor());
+    //qDebug() << "2 POS: " << position() << " ANCHOR: " << anchor() << m_tc.anchor();
+    op.m_from = m_tc.selection().toPlainText();
     recordOperation(op);
-    tc.removeSelectedText();
+    m_tc.deleteChar();
+    return op.m_from;
+}
+
+void FakeVimHandler::Private::recordRemoveNextChar()
+{
+    m_anchor = position(); 
+    moveRight();
+    recordRemoveSelectedText();
+}
+
+void FakeVimHandler::Private::recordInsertText(const QString &data)
+{
+    EditOperation op;
+    op.m_position = m_tc.position();
+    op.m_to = data;
+    recordOperation(op);
+    m_tc.insertText(data);
 }
 
 void FakeVimHandler::Private::recordOperation(const EditOperation &op)
 {
+    //qDebug() << "OP: " << op;
     m_undoStack.push(op);
     m_redoStack.clear();
 }
@@ -1813,3 +2002,8 @@ void FakeVimHandler::quit()
 {
     d->quit();
 }
+
+void FakeVimHandler::setCurrentFileName(const QString &fileName)
+{
+   d->m_currentFileName = fileName;
+}
diff --git a/src/plugins/fakevim/fakevimhandler.h b/src/plugins/fakevim/fakevimhandler.h
index 08df6d21b12a526f307b34346e3517cd2c662673..bbd58781e7f88344649b7fec1b9a5445fbb117b9 100644
--- a/src/plugins/fakevim/fakevimhandler.h
+++ b/src/plugins/fakevim/fakevimhandler.h
@@ -58,6 +58,7 @@ public slots:
     // FIXME: good idea?
     void addWidget(QWidget *widget);
     void removeWidget(QWidget *widget);
+    void setCurrentFileName(const QString &fileName);
 
     // This executes an "ex" style command taking context
     // information from \p widget;
@@ -68,10 +69,11 @@ public slots:
 signals:
     void commandBufferChanged(const QString &msg);
     void statusDataChanged(const QString &msg);
-    void extraInformationChanged(const QString &msg);
-    void quitRequested(QWidget *);
+    void extraInformationChanged(QWidget *widget, const QString &msg);
+    void quitRequested(QWidget *widget);
     void selectionChanged(QWidget *widget,
         const QList<QTextEdit::ExtraSelection> &selection);
+    void writeFile(const QString &fileName, const QString &contents);
 
 private:
     bool eventFilter(QObject *ob, QEvent *ev);
diff --git a/src/plugins/fakevim/fakevimplugin.cpp b/src/plugins/fakevim/fakevimplugin.cpp
index 0a06fe7c112700e3fc54a8b108b10c25218d0c85..a00e3878e8e795b825649b3c7e95ac03b14a4037 100644
--- a/src/plugins/fakevim/fakevimplugin.cpp
+++ b/src/plugins/fakevim/fakevimplugin.cpp
@@ -39,7 +39,9 @@
 #include <coreplugin/actionmanager/actionmanager.h>
 #include <coreplugin/coreconstants.h>
 #include <coreplugin/editormanager/editormanager.h>
+#include <coreplugin/filemanager.h>
 #include <coreplugin/icore.h>
+#include <coreplugin/ifile.h>
 #include <coreplugin/messagemanager.h>
 #include <coreplugin/modemanager.h>
 #include <coreplugin/uniqueidmanager.h>
@@ -112,17 +114,19 @@ private slots:
     void installHandler(QWidget *widget);
     void removeHandler(QWidget *widget);
     void showCommandBuffer(const QString &contents);
-    void showExtraInformation(const QString &msg);
+    void showExtraInformation(QWidget *, const QString &msg);
     void editorOpened(Core::IEditor *);
     void editorAboutToClose(Core::IEditor *);
     void changeSelection(QWidget *widget,
         const QList<QTextEdit::ExtraSelection> &selections);
+    void writeFile(const QString &fileName, const QString &contents);
 
 private:
     FakeVimPlugin *q;
     FakeVimHandler *m_handler;
     QAction *m_installHandlerAction; 
     Core::ICore *m_core;
+    Core::IFile *m_currentFile;
 };
 
 } // namespace Internal
@@ -134,6 +138,7 @@ FakeVimPluginPrivate::FakeVimPluginPrivate(FakeVimPlugin *plugin)
     m_handler = 0;
     m_installHandlerAction = 0;
     m_core = 0;
+    m_currentFile = 0;
 }
 
 FakeVimPluginPrivate::~FakeVimPluginPrivate()
@@ -153,7 +158,7 @@ bool FakeVimPluginPrivate::initialize(const QStringList &arguments, QString *err
 
     m_handler = new FakeVimHandler;
 
-    m_core = ExtensionSystem::PluginManager::instance()->getObject<Core::ICore>();
+    m_core = Core::ICore::instance();
     QTC_ASSERT(m_core, return false);
 
     Core::ActionManager *actionManager = m_core->actionManager();
@@ -172,7 +177,7 @@ bool FakeVimPluginPrivate::initialize(const QStringList &arguments, QString *err
 
     ActionContainer *advancedMenu =
         actionManager->actionContainer(Core::Constants::M_EDIT_ADVANCED);
-    advancedMenu->addAction(cmd);
+    advancedMenu->addAction(cmd, Core::Constants::G_EDIT_EDITOR);
 
     connect(m_installHandlerAction, SIGNAL(triggered()),
         this, SLOT(installHandler()));
@@ -195,8 +200,8 @@ void FakeVimPluginPrivate::installHandler()
 
 void FakeVimPluginPrivate::installHandler(QWidget *widget)
 {
-    connect(m_handler, SIGNAL(extraInformationChanged(QString)),
-        this, SLOT(showExtraInformation(QString)));
+    connect(m_handler, SIGNAL(extraInformationChanged(QWidget *, QString)),
+        this, SLOT(showExtraInformation(QWidget *, QString)));
     connect(m_handler, SIGNAL(commandBufferChanged(QString)),
         this, SLOT(showCommandBuffer(QString)));
     connect(m_handler, SIGNAL(quitRequested(QWidget *)),
@@ -206,6 +211,12 @@ void FakeVimPluginPrivate::installHandler(QWidget *widget)
         this, SLOT(changeSelection(QWidget*,QList<QTextEdit::ExtraSelection>)));
 
     m_handler->addWidget(widget);
+    TextEditor::BaseTextEditor* editor =
+        qobject_cast<TextEditor::BaseTextEditor*>(widget);
+    if (editor) {
+        m_currentFile = editor->file();
+        m_handler->setCurrentFileName(editor->file()->fileName());
+    }
 
     BaseTextEditor *bt = qobject_cast<BaseTextEditor *>(widget);
     if (bt) {
@@ -225,12 +236,29 @@ void FakeVimPluginPrivate::installHandler(QWidget *widget)
     }
 }
 
+void FakeVimPluginPrivate::writeFile(const QString &fileName,
+    const QString &contents)
+{
+    if (m_currentFile && fileName == m_currentFile->fileName()) {
+        // Handle that as a special case for nicer interaction with core
+        m_core->fileManager()->blockFileChange(m_currentFile);
+        m_currentFile->save(fileName);
+        m_core->fileManager()->unblockFileChange(m_currentFile);
+    } else {
+        QFile file(fileName);
+        file.open(QIODevice::ReadWrite);
+        { QTextStream ts(&file); ts << contents; }
+        file.close();
+    }
+}
+
 void FakeVimPluginPrivate::removeHandler(QWidget *widget)
 {
     Q_UNUSED(widget);
     m_handler->removeWidget(widget);
     Core::EditorManager::instance()->hideEditorInfoBar(
         QLatin1String(Constants::MINI_BUFFER));
+    m_currentFile = 0;
 }
 
 void FakeVimPluginPrivate::editorOpened(Core::IEditor *editor)
@@ -253,9 +281,9 @@ void FakeVimPluginPrivate::showCommandBuffer(const QString &contents)
         tr("Quit FakeVim"), m_handler, SLOT(quit()));
 }
 
-void FakeVimPluginPrivate::showExtraInformation(const QString &text)
+void FakeVimPluginPrivate::showExtraInformation(QWidget *widget, const QString &text)
 {
-    QMessageBox::information(0, tr("FakeVim Information"), text);
+    QMessageBox::information(widget, tr("FakeVim Information"), text);
 }
 
 void FakeVimPluginPrivate::changeSelection(QWidget *widget,
diff --git a/src/plugins/find/findplugin.cpp b/src/plugins/find/findplugin.cpp
index b3c417debd303d27add21fc4a84be0730e1aa182..fb6c9c53b71477ff47b1420520f19f8c4063aa01 100644
--- a/src/plugins/find/findplugin.cpp
+++ b/src/plugins/find/findplugin.cpp
@@ -43,9 +43,11 @@
 #include <coreplugin/actionmanager/command.h>
 #include <coreplugin/coreconstants.h>
 
+#include <extensionsystem/pluginmanager.h>
+
 #include <utils/qtcassert.h>
 
-#include <QtCore/qplugin.h>
+#include <QtCore/QtPlugin>
 #include <QtCore/QSettings>
 
 Q_DECLARE_METATYPE(Find::IFindFilter*)
@@ -58,8 +60,7 @@ using namespace Find;
 using namespace Find::Internal;
 
 FindPlugin::FindPlugin()
-    : m_core(0),
-    m_currentDocumentFind(0),
+  : m_currentDocumentFind(0),
     m_findToolBar(0),
     m_findDialog(0),
     m_findCompletionModel(new QStringListModel(this)),
@@ -76,14 +77,14 @@ FindPlugin::~FindPlugin()
 
 bool FindPlugin::initialize(const QStringList &, QString *)
 {
-    m_core = ExtensionSystem::PluginManager::instance()->getObject<Core::ICore>();
+    Core::ICore *core = Core::ICore::instance();
     setupMenu();
 
-    m_currentDocumentFind = new CurrentDocumentFind(m_core);
+    m_currentDocumentFind = new CurrentDocumentFind(core);
 
     m_findToolBar = new FindToolBar(this, m_currentDocumentFind);
     m_findDialog = new FindToolWindow(this);
-    SearchResultWindow *searchResultWindow = new SearchResultWindow(m_core);
+    SearchResultWindow *searchResultWindow = new SearchResultWindow(core);
     addAutoReleasedObject(searchResultWindow);
     return true;
 }
@@ -123,10 +124,10 @@ void FindPlugin::openFindFilter()
     m_findDialog->open(filter);
 }
 
-
 void FindPlugin::setupMenu()
 {
-    Core::ActionManager *am = m_core->actionManager();
+    Core::ICore *core = Core::ICore::instance();
+    Core::ActionManager *am = core->actionManager();
     Core::ActionContainer *medit = am->actionContainer(Core::Constants::M_EDIT);
     Core::ActionContainer *mfind = am->createMenu(Constants::M_FIND);
     medit->addMenu(mfind, Core::Constants::G_EDIT_FIND);
@@ -149,7 +150,8 @@ void FindPlugin::setupMenu()
 
 void FindPlugin::setupFilterMenuItems()
 {
-    Core::ActionManager *am = m_core->actionManager();
+    Core::ICore *core = Core::ICore::instance();
+    Core::ActionManager *am = core->actionManager();
     QList<IFindFilter*> findInterfaces =
         ExtensionSystem::PluginManager::instance()->getObjects<IFindFilter>();
     Core::Command *cmd;
@@ -171,11 +173,6 @@ void FindPlugin::setupFilterMenuItems()
     m_findDialog->setFindFilters(findInterfaces);
 }
 
-Core::ICore *FindPlugin::core()
-{
-    return m_core;
-}
-
 QTextDocument::FindFlags FindPlugin::findFlags() const
 {
     return m_findFlags;
@@ -216,7 +213,7 @@ bool FindPlugin::hasFindFlag(QTextDocument::FindFlag flag)
 
 void FindPlugin::writeSettings()
 {
-    QSettings *settings = ExtensionSystem::PluginManager::instance()->getObject<Core::ICore>()->settings();
+    QSettings *settings = Core::ICore::instance()->settings();
     settings->beginGroup("Find");
     settings->setValue("Backward", QVariant((m_findFlags & QTextDocument::FindBackward) != 0));
     settings->setValue("CaseSensitively", QVariant((m_findFlags & QTextDocument::FindCaseSensitively) != 0));
@@ -229,7 +226,7 @@ void FindPlugin::writeSettings()
 
 void FindPlugin::readSettings()
 {
-    QSettings *settings = ExtensionSystem::PluginManager::instance()->getObject<Core::ICore>()->settings();
+    QSettings *settings = Core::ICore::instance()->settings();
     settings->beginGroup("Find");
     bool block = blockSignals(true);
     setBackward(settings->value("Backward", false).toBool());
diff --git a/src/plugins/find/findplugin.h b/src/plugins/find/findplugin.h
index caad6daa0cc3be4d52181a4a9f630a9a43c48208..9b2ac1f4aa637e40a4afa9163195ee076a40a4a6 100644
--- a/src/plugins/find/findplugin.h
+++ b/src/plugins/find/findplugin.h
@@ -64,7 +64,6 @@ public:
     void extensionsInitialized();
     void shutdown();
 
-    Core::ICore *core();
     QTextDocument::FindFlags findFlags() const;
     void updateFindCompletion(const QString &text);
     void updateReplaceCompletion(const QString &text);
@@ -93,7 +92,6 @@ private:
     void readSettings();
 
     //variables
-    Core::ICore *m_core;
     QHash<IFindFilter *, QAction *> m_filterActions;
 
     CurrentDocumentFind *m_currentDocumentFind;
diff --git a/src/plugins/find/findtoolbar.cpp b/src/plugins/find/findtoolbar.cpp
index 323fdbac58cbca395ba34409b204e22ae8d45c24..5af25e496d4509fd09f968c93401d103ee885173 100644
--- a/src/plugins/find/findtoolbar.cpp
+++ b/src/plugins/find/findtoolbar.cpp
@@ -41,16 +41,19 @@
 #include <coreplugin/actionmanager/actioncontainer.h>
 #include <coreplugin/actionmanager/command.h>
 
+#include <extensionsystem/pluginmanager.h>
+
+#include <QtCore/QDebug>
 #include <QtCore/QSettings>
-#include <QtGui/QPushButton>
-#include <QtGui/QMenu>
-#include <QtGui/QToolButton>
-#include <QtGui/QLineEdit>
-#include <QtGui/QKeyEvent>
+
 #include <QtGui/QClipboard>
-#include <QtGui/QPainter>
 #include <QtGui/QCompleter>
-#include <QDebug>
+#include <QtGui/QKeyEvent>
+#include <QtGui/QLineEdit>
+#include <QtGui/QMenu>
+#include <QtGui/QPainter>
+#include <QtGui/QPushButton>
+#include <QtGui/QToolButton>
 
 Q_DECLARE_METATYPE(QStringList)
 Q_DECLARE_METATYPE(Find::IFindFilter*)
@@ -138,7 +141,7 @@ FindToolBar::FindToolBar(FindPlugin *plugin, CurrentDocumentFind *currentDocumen
     QList<int> globalcontext;
     globalcontext << Core::Constants::C_GLOBAL_ID;
 
-    Core::ActionManager *am = ExtensionSystem::PluginManager::instance()->getObject<Core::ICore>()->actionManager();
+    Core::ActionManager *am = Core::ICore::instance()->actionManager();
     Core::ActionContainer *mfind = am->actionContainer(Constants::M_FIND);
     Core::Command *cmd;
 
diff --git a/src/plugins/find/findtoolwindow.cpp b/src/plugins/find/findtoolwindow.cpp
index f45c99b2aa313e963ff0d11d4b98d4a18bb0d42c..f9f23d0668f3094d6e8c893ac821542f120f1011 100644
--- a/src/plugins/find/findtoolwindow.cpp
+++ b/src/plugins/find/findtoolwindow.cpp
@@ -42,7 +42,7 @@ using namespace Find;
 using namespace Find::Internal;
 
 FindToolWindow::FindToolWindow(FindPlugin *plugin)
-    : QDialog(plugin->core()->mainWindow()),
+    : QDialog(Core::ICore::instance()->mainWindow()),
     m_plugin(plugin),
     m_findCompleter(new QCompleter(this))
 {
@@ -124,7 +124,7 @@ void FindToolWindow::search()
 
 void FindToolWindow::writeSettings()
 {
-    QSettings *settings = m_plugin->core()->settings();
+    QSettings *settings = Core::ICore::instance()->settings();
     settings->beginGroup("Find");
     foreach (IFindFilter *filter, m_filters)
         filter->writeSettings(settings);
@@ -133,7 +133,7 @@ void FindToolWindow::writeSettings()
 
 void FindToolWindow::readSettings()
 {
-    QSettings *settings = m_plugin->core()->settings();
+    QSettings *settings = Core::ICore::instance()->settings();
     settings->beginGroup("Find");
     foreach (IFindFilter *filter, m_filters)
         filter->readSettings(settings);
diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp
index 44ee65bce0f014c41c5009a9d5893457586a32ee..e20ee11f9657d6b6613fbc3eea9eef2623a17728 100644
--- a/src/plugins/git/gitclient.cpp
+++ b/src/plugins/git/gitclient.cpp
@@ -97,10 +97,10 @@ static QString formatCommand(const QString &binary, const QStringList &args)
 }
 
 // ---------------- GitClient
-GitClient::GitClient(GitPlugin* plugin, Core::ICore *core) :
-    m_msgWait(tr("Waiting for data...")),
+GitClient::GitClient(GitPlugin* plugin)
+  : m_msgWait(tr("Waiting for data...")),
     m_plugin(plugin),
-    m_core(core)
+    m_core(Core::ICore::instance())
 {
     if (QSettings *s = m_core->settings())
         m_settings.fromSettings(s);
@@ -178,7 +178,7 @@ VCSBase::VCSBaseEditor
         QTC_ASSERT(rc, return 0);
         rc->setSource(source);
         if (setSourceCodec)
-            rc->setCodec(VCSBase::VCSBaseEditor::getCodec(m_core, source));
+            rc->setCodec(VCSBase::VCSBaseEditor::getCodec(source));
     }
     return rc;
 }
diff --git a/src/plugins/git/gitclient.h b/src/plugins/git/gitclient.h
index aa4ad97015ae3c2360fb5c460dd047a0bb9ae26c..c920ffc1b32f2e6626789553c520ac004faa8974 100644
--- a/src/plugins/git/gitclient.h
+++ b/src/plugins/git/gitclient.h
@@ -68,7 +68,7 @@ class GitClient : public QObject
     Q_OBJECT
 
 public:
-    explicit GitClient(GitPlugin *plugin, Core::ICore *core);
+    explicit GitClient(GitPlugin *plugin);
     ~GitClient();
 
     bool managesDirectory(const QString &) const { return false; }
diff --git a/src/plugins/git/gitcommand.cpp b/src/plugins/git/gitcommand.cpp
index 703e42a8668520b083ac0c92f98bd176b22e08f6..fa62401b0119c1d22f789935af2b9a7ab2d3ec74 100644
--- a/src/plugins/git/gitcommand.cpp
+++ b/src/plugins/git/gitcommand.cpp
@@ -36,6 +36,7 @@
 
 #include <coreplugin/icore.h>
 #include <coreplugin/progressmanager/progressmanager.h>
+#include <extensionsystem/pluginmanager.h>
 
 #include <QtCore/QDebug>
 #include <QtCore/QProcess>
@@ -83,8 +84,7 @@ void GitCommand::execute()
     QFuture<void> task = QtConcurrent::run(this, &GitCommand::run);
     const QString taskName = QLatin1String("Git ") + m_jobs.front().arguments.at(0);
 
-    Core::ICore *core = ExtensionSystem::PluginManager::instance()->getObject<Core::ICore>();
-    core->progressManager()->addTask(task, taskName,
+    Core::ICore::instance()->progressManager()->addTask(task, taskName,
                                      QLatin1String("Git.action"),
                                      Core::ProgressManager::CloseOnSuccess);
 }
diff --git a/src/plugins/git/gitplugin.cpp b/src/plugins/git/gitplugin.cpp
index e71ccfea45e7b1cda9cfcf4b9b0141d83f14e18a..f00f6d711eff9781c50c2ea50a588eb1bb60e234 100644
--- a/src/plugins/git/gitplugin.cpp
+++ b/src/plugins/git/gitplugin.cpp
@@ -49,6 +49,7 @@
 #include <coreplugin/uniqueidmanager.h>
 #include <coreplugin/actionmanager/actionmanager.h>
 #include <coreplugin/editormanager/editormanager.h>
+#include <extensionsystem/pluginmanager.h>
 
 #include <utils/qtcassert.h>
 
@@ -56,11 +57,11 @@
 #include <vcsbase/vcsbaseeditor.h>
 #include <vcsbase/basevcssubmiteditorfactory.h>
 
-#include <QtCore/qplugin.h>
 #include <QtCore/QDebug>
 #include <QtCore/QDir>
 #include <QtCore/QFileInfo>
 #include <QtCore/QTemporaryFile>
+#include <QtCore/QtPlugin>
 
 #include <QtGui/QAction>
 #include <QtGui/QFileDialog>
@@ -231,8 +232,8 @@ bool GitPlugin::initialize(const QStringList &arguments, QString *error_message)
     Q_UNUSED(arguments);
     Q_UNUSED(error_message);
 
-    m_core = ExtensionSystem::PluginManager::instance()->getObject<Core::ICore>();
-    m_gitClient = new GitClient(this, m_core);
+    m_core = Core::ICore::instance();
+    m_gitClient = new GitClient(this);
     // Create the globalcontext list to register actions accordingly
     QList<int> globalcontext;
     globalcontext << m_core->uniqueIDManager()->
@@ -249,7 +250,7 @@ bool GitPlugin::initialize(const QStringList &arguments, QString *error_message)
     static const char *describeSlot = SLOT(show(QString,QString));
     const int editorCount = sizeof(editorParameters)/sizeof(VCSBase::VCSBaseEditorParameters);
     for (int i = 0; i < editorCount; i++) {
-        m_editorFactories.push_back(new GitEditorFactory(editorParameters + i, m_core, m_gitClient, describeSlot));
+        m_editorFactories.push_back(new GitEditorFactory(editorParameters + i, m_gitClient, describeSlot));
         addObject(m_editorFactories.back());
     }
 
@@ -621,7 +622,7 @@ void GitPlugin::startCommit()
 
 Core::IEditor *GitPlugin::openSubmitEditor(const QString &fileName, const CommitData &cd)
 {
-    Core::IEditor *editor =  m_core->editorManager()->openEditor(fileName, QLatin1String(Constants::GITSUBMITEDITOR_KIND));
+    Core::IEditor *editor = m_core->editorManager()->openEditor(fileName, QLatin1String(Constants::GITSUBMITEDITOR_KIND));
     if (Git::Constants::debug)
         qDebug() << Q_FUNC_INFO << fileName << editor;
     m_core->editorManager()->ensureEditorManagerVisible();
diff --git a/src/plugins/git/gitplugin.h b/src/plugins/git/gitplugin.h
index 22fcea7c0111aea490c3051b786cd367d49b3f5b..19c61db291a9db684650acfda673534f16f275cf 100644
--- a/src/plugins/git/gitplugin.h
+++ b/src/plugins/git/gitplugin.h
@@ -39,8 +39,8 @@
 
 #include <coreplugin/editormanager/ieditorfactory.h>
 #include <coreplugin/icorelistener.h>
-#include <projectexplorer/ProjectExplorerInterfaces>
 #include <extensionsystem/iplugin.h>
+#include <projectexplorer/projectexplorer.h>
 
 #include <QtCore/QObject>
 #include <QtCore/QProcess>
@@ -53,20 +53,20 @@ class QTemporaryFile;
 QT_END_NAMESPACE
 
 namespace Core {
-    class IEditorFactory;
-    class ICore;
-    class IVersionControl;
-}
+class IEditorFactory;
+class ICore;
+class IVersionControl;
+} // namespace Core
 
 namespace Git {
 namespace Internal {
 
-    class GitPlugin;
-    class GitClient;
-    class ChangeSelectionDialog;
-    class GitSubmitEditor;
-    struct CommitData;
-    struct GitSettings;
+class GitPlugin;
+class GitClient;
+class ChangeSelectionDialog;
+class GitSubmitEditor;
+struct CommitData;
+struct GitSettings;
 
 // Just a proxy for GitPlugin
 class CoreListener : public Core::ICoreListener
@@ -85,83 +85,83 @@ class GitPlugin : public ExtensionSystem::IPlugin
     Q_OBJECT
 
 public:
-                                GitPlugin();
-                                ~GitPlugin();
+    GitPlugin();
+    ~GitPlugin();
+
     static GitPlugin *instance();
 
-    bool                        initialize(const QStringList &arguments
-                                           , QString *error_message);
-    void                        extensionsInitialized();
+    bool initialize(const QStringList &arguments, QString *error_message);
+    void extensionsInitialized();
 
-    QString                     getWorkingDirectory();
+    QString getWorkingDirectory();
 
-    GitOutputWindow             *outputWindow() const;
+    GitOutputWindow *outputWindow() const;
 
 
-    GitSettings  settings() const;
+    GitSettings settings() const;
     void setSettings(const GitSettings &s);
 
 public slots:
-    void                        updateActions();
-    bool                        editorAboutToClose(Core::IEditor *editor);
+    void updateActions();
+    bool editorAboutToClose(Core::IEditor *editor);
 
 private slots:
-    void                        diffCurrentFile();
-    void                        diffCurrentProject();
-    void                        submitEditorDiff(const QStringList &unstaged, const QStringList &staged);
-    void                        submitCurrentLog();
-    void                        statusFile();
-    void                        statusProject();
-    void                        logFile();
-    void                        blameFile();
-    void                        logProject();
-    void                        undoFileChanges();
-    void                        undoProjectChanges();
-    void                        stageFile();
-    void                        unstageFile();
-    void                        revertFile();
-
-    void                        showCommit();
-    void                        startCommit();
-    void                        stash();
-    void                        stashPop();
-    void                        branchList();
-    void                        stashList();
-    void                        pull();
-    void                        push();
+    void diffCurrentFile();
+    void diffCurrentProject();
+    void submitEditorDiff(const QStringList &unstaged, const QStringList &staged);
+    void submitCurrentLog();
+    void statusFile();
+    void statusProject();
+    void logFile();
+    void blameFile();
+    void logProject();
+    void undoFileChanges();
+    void undoProjectChanges();
+    void stageFile();
+    void unstageFile();
+    void revertFile();
+
+    void showCommit();
+    void startCommit();
+    void stash();
+    void stashPop();
+    void branchList();
+    void stashList();
+    void pull();
+    void push();
 
 private:
-    QFileInfo                   currentFile() const;
-    Core::IEditor               *openSubmitEditor(const QString &fileName, const CommitData &cd);
-    void                        cleanChangeTmpFile();
-
-    static GitPlugin            *m_instance;
-    Core::ICore                 *m_core;
-    QAction                     *m_diffAction;
-    QAction                     *m_diffProjectAction;
-    QAction                     *m_statusAction;
-    QAction                     *m_statusProjectAction;
-    QAction                     *m_logAction;
-    QAction                     *m_blameAction;
-    QAction                     *m_logProjectAction;
-    QAction                     *m_undoFileAction;
-    QAction                     *m_undoProjectAction;
-    QAction                     *m_showAction;
-    QAction                     *m_stageAction;
-    QAction                     *m_unstageAction;
-    QAction                     *m_revertAction;
-    QAction                     *m_commitAction;
-    QAction                     *m_pullAction;
-    QAction                     *m_pushAction;
-
-    QAction                     *m_submitCurrentAction;
-    QAction                     *m_diffSelectedFilesAction;
-    QAction                     *m_undoAction;
-    QAction                     *m_redoAction;
-    QAction                     *m_stashAction;
-    QAction                     *m_stashPopAction;
-    QAction                     *m_stashListAction;
-    QAction                     *m_branchListAction;
+    QFileInfo currentFile() const;
+    Core::IEditor *openSubmitEditor(const QString &fileName, const CommitData &cd);
+    void cleanChangeTmpFile();
+
+    static GitPlugin *m_instance;
+    Core::ICore *m_core;
+    QAction *m_diffAction;
+    QAction *m_diffProjectAction;
+    QAction *m_statusAction;
+    QAction *m_statusProjectAction;
+    QAction *m_logAction;
+    QAction *m_blameAction;
+    QAction *m_logProjectAction;
+    QAction *m_undoFileAction;
+    QAction *m_undoProjectAction;
+    QAction *m_showAction;
+    QAction *m_stageAction;
+    QAction *m_unstageAction;
+    QAction *m_revertAction;
+    QAction *m_commitAction;
+    QAction *m_pullAction;
+    QAction *m_pushAction;
+
+    QAction *m_submitCurrentAction;
+    QAction *m_diffSelectedFilesAction;
+    QAction *m_undoAction;
+    QAction *m_redoAction;
+    QAction *m_stashAction;
+    QAction *m_stashPopAction;
+    QAction *m_stashListAction;
+    QAction *m_branchListAction;
 
     ProjectExplorer::ProjectExplorerPlugin *m_projectExplorer;
     GitClient                   *m_gitClient;
diff --git a/src/plugins/helloworld/helloworldplugin.cpp b/src/plugins/helloworld/helloworldplugin.cpp
index 6dd0bc9c63f9feb9d65e007fa9789008f8dd0197..522984a9814c7de6b7379a22d17200eb2c9510dd 100644
--- a/src/plugins/helloworld/helloworldplugin.cpp
+++ b/src/plugins/helloworld/helloworldplugin.cpp
@@ -39,7 +39,6 @@
 #include <coreplugin/icore.h>
 #include <coreplugin/modemanager.h>
 #include <coreplugin/uniqueidmanager.h>
-#include <extensionsystem/pluginmanager.h>
 
 #include <QtCore/QDebug>
 #include <QtCore/QtPlugin>
@@ -78,7 +77,7 @@ bool HelloWorldPlugin::initialize(const QStringList &arguments, QString *error_m
     Q_UNUSED(error_message)
 
     // Get the primary access point to the workbench.
-    Core::ICore *core = ExtensionSystem::PluginManager::instance()->getObject<Core::ICore>();
+    Core::ICore *core = Core::ICore::instance();
 
     // Create a unique context id for our own view, that will be used for the
     // menu entry later.
diff --git a/src/plugins/helloworld/helloworldplugin.h b/src/plugins/helloworld/helloworldplugin.h
index 8aa2a9aa127cef0aa00a6d571be54bba05da1fec..36c60165a326dd54993d7b624d08dca2384f2dcd 100644
--- a/src/plugins/helloworld/helloworldplugin.h
+++ b/src/plugins/helloworld/helloworldplugin.h
@@ -36,8 +36,6 @@
 
 #include <extensionsystem/iplugin.h>
 
-#include <QtCore/QObject>
-
 namespace HelloWorld {
 namespace Internal {
 
diff --git a/src/plugins/help/helpplugin.cpp b/src/plugins/help/helpplugin.cpp
index 74900b6acee27f50eef532f6f56d10060f3d183c..a22cc1f5105850a96bbde8088458938e069e67ee 100644
--- a/src/plugins/help/helpplugin.cpp
+++ b/src/plugins/help/helpplugin.cpp
@@ -123,9 +123,11 @@ HelpPlugin::~HelpPlugin()
 {
 }
 
-bool HelpPlugin::initialize(const QStringList & /*arguments*/, QString *)
+bool HelpPlugin::initialize(const QStringList &arguments, QString *error)
 {
-    m_core = ExtensionSystem::PluginManager::instance()->getObject<Core::ICore>();
+    Q_UNUSED(arguments);
+    Q_UNUSED(error);
+    m_core = Core::ICore::instance();
     QList<int> globalcontext;
     globalcontext << Core::Constants::C_GLOBAL_ID;
     QList<int> modecontext;
diff --git a/src/plugins/perforce/perforceplugin.cpp b/src/plugins/perforce/perforceplugin.cpp
index 3120f341ee8882aabde873358772289fd3a2bc2e..547ea00f92b2fef4ec19be420b2eb623d358e95d 100644
--- a/src/plugins/perforce/perforceplugin.cpp
+++ b/src/plugins/perforce/perforceplugin.cpp
@@ -51,6 +51,7 @@
 #include <coreplugin/messagemanager.h>
 #include <coreplugin/mimedatabase.h>
 #include <coreplugin/uniqueidmanager.h>
+#include <extensionsystem/pluginmanager.h>
 #include <utils/qtcassert.h>
 #include <utils/synchronousprocess.h>
 #include <vcsbase/basevcseditorfactory.h>
@@ -144,7 +145,6 @@ bool CoreListener::editorAboutToClose(Core::IEditor *editor)
 // PerforcePlugin
 ////
 
-Core::ICore *PerforcePlugin::m_coreInstance = NULL;
 PerforcePlugin *PerforcePlugin::m_perforcePluginInstance = NULL;
 
 PerforcePlugin::PerforcePlugin() :
@@ -182,17 +182,20 @@ static const VCSBase::VCSBaseSubmitEditorParameters submitParameters = {
     Perforce::Constants::C_PERFORCESUBMITEDITOR
 };
 
-bool PerforcePlugin::initialize(const QStringList & /*arguments*/, QString *errorMessage)
+bool PerforcePlugin::initialize(const QStringList &arguments, QString *errorMessage)
 {
+    Q_UNUSED(arguments);
+    Q_UNUSED(errorMessage);
+
     typedef VCSBase::VCSEditorFactory<PerforceEditor> PerforceEditorFactory;
     typedef VCSBase::VCSSubmitEditorFactory<PerforceSubmitEditor> PerforceSubmitEditorFactory;
 
-    m_coreInstance = ExtensionSystem::PluginManager::instance()->getObject<Core::ICore>();
-    if (!m_coreInstance->mimeDatabase()->addMimeTypes(QLatin1String(":/trolltech.perforce/Perforce.mimetypes.xml"), errorMessage))
+    Core::ICore *core = Core::ICore::instance();
+    if (!core->mimeDatabase()->addMimeTypes(QLatin1String(":/trolltech.perforce/Perforce.mimetypes.xml"), errorMessage))
         return false;
     m_perforcePluginInstance = this;
 
-    if (QSettings *settings = m_coreInstance->settings())
+    if (QSettings *settings = core->settings())
         m_settings.fromSettings(settings);
 
     m_perforceOutputWindow = new PerforceOutputWindow(this);
@@ -208,24 +211,19 @@ bool PerforcePlugin::initialize(const QStringList & /*arguments*/, QString *erro
     static const char *describeSlot = SLOT(describe(QString,QString));
     const int editorCount = sizeof(editorParameters)/sizeof(VCSBase::VCSBaseEditorParameters);
     for (int i = 0; i < editorCount; i++) {
-        m_editorFactories.push_back(new PerforceEditorFactory(editorParameters + i, m_coreInstance, this, describeSlot));
+        m_editorFactories.push_back(new PerforceEditorFactory(editorParameters + i, this, describeSlot));
         addObject(m_editorFactories.back());
     }
 
     m_versionControl = new PerforceVersionControl(this);
     addObject(m_versionControl);
 
-#ifdef USE_P4_API
-    m_workbenchClientUser = new WorkbenchClientUser(m_perforceOutputWindow, this);
-    m_enableP4APIActions = true;
-#endif
-
     m_coreListener = new CoreListener(this);
     addObject(m_coreListener);
 
 
     //register actions
-    Core::ActionManager *am = m_coreInstance->actionManager();
+    Core::ActionManager *am = Core::ICore::instance()->actionManager();
 
     Core::ActionContainer *mtools =
         am->actionContainer(Core::Constants::M_TOOLS);
@@ -244,7 +242,7 @@ bool PerforcePlugin::initialize(const QStringList & /*arguments*/, QString *erro
 
     QList<int> perforcesubmitcontext;
     perforcesubmitcontext <<
-            m_coreInstance->uniqueIDManager()->uniqueIdentifier(Constants::C_PERFORCESUBMITEDITOR);
+            Core::ICore::instance()->uniqueIDManager()->uniqueIdentifier(Constants::C_PERFORCESUBMITEDITOR);
 
     Core::Command *command;
     QAction *tmpaction;
@@ -382,10 +380,10 @@ bool PerforcePlugin::initialize(const QStringList & /*arguments*/, QString *erro
     m_redoAction = new QAction(tr("&Redo"), this);
     command = am->registerAction(m_redoAction, Core::Constants::REDO, perforcesubmitcontext);
 
-    connect(m_coreInstance, SIGNAL(contextChanged(Core::IContext *)),
+    connect(core, SIGNAL(contextChanged(Core::IContext *)),
         this, SLOT(updateActions()));
 
-    connect(m_coreInstance->fileManager(), SIGNAL(currentFileChanged(const QString &)),
+    connect(core->fileManager(), SIGNAL(currentFileChanged(const QString &)),
         this, SLOT(updateActions()));
 
     return true;
@@ -419,10 +417,8 @@ void PerforcePlugin::deleteCurrentFile()
 
 void PerforcePlugin::revertCurrentFile()
 {
-    QTC_ASSERT(m_coreInstance, return);
-
     const QString fileName = currentFileName();
-    QTextCodec *codec = VCSBase::VCSBaseEditor::getCodec(m_coreInstance, fileName);
+    QTextCodec *codec = VCSBase::VCSBaseEditor::getCodec(fileName);
     QStringList args;
     args << QLatin1String("diff") << QLatin1String("-sa");
     PerforceResponse result = runP4Cmd(args, QStringList(), CommandToWindow|StdErrToWindow|ErrorToWindow, codec);
@@ -438,7 +434,7 @@ void PerforcePlugin::revertCurrentFile()
             return;
     }
 
-    Core::FileManager *fm = m_coreInstance->fileManager();
+    Core::FileManager *fm = Core::ICore::instance()->fileManager();
     QList<Core::IFile *> files = fm->managedFiles(fileName);
     foreach (Core::IFile *file, files) {
         fm->blockFileChange(file);
@@ -471,7 +467,7 @@ void PerforcePlugin::diffAllOpened()
 
 void PerforcePlugin::printOpenedFileList()
 {
-    Core::IEditor *e = m_coreInstance->editorManager()->currentEditor();
+    Core::IEditor *e = Core::ICore::instance()->editorManager()->currentEditor();
     if (e)
         e->widget()->setFocus();
     PerforceResponse result = runP4Cmd(QStringList() << QLatin1String("opened"), QStringList(), CommandToWindow|StdOutToWindow|StdErrToWindow|ErrorToWindow);
@@ -487,8 +483,6 @@ void PerforcePlugin::resolve()
 
 void PerforcePlugin::submit()
 {
-    QTC_ASSERT(m_coreInstance, return);
-
     if (!checkP4Command()) {
         showOutput(tr("No p4 executable specified!"), true);
         return;
@@ -549,8 +543,8 @@ void PerforcePlugin::submit()
 Core::IEditor *PerforcePlugin::openPerforceSubmitEditor(const QString &fileName, const QStringList &depotFileNames)
 {
     Core::IEditor *editor =
-            m_coreInstance->editorManager()->openEditor(fileName, Constants::PERFORCESUBMITEDITOR_KIND);
-    m_coreInstance->editorManager()->ensureEditorManagerVisible();
+            Core::ICore::instance()->editorManager()->openEditor(fileName, Constants::PERFORCESUBMITEDITOR_KIND);
+    Core::ICore::instance()->editorManager()->ensureEditorManagerVisible();
     PerforceSubmitEditor *submitEditor = dynamic_cast<PerforceSubmitEditor*>(editor);
     QTC_ASSERT(submitEditor, return 0);
     submitEditor->restrictToProjectFiles(depotFileNames);
@@ -562,7 +556,7 @@ Core::IEditor *PerforcePlugin::openPerforceSubmitEditor(const QString &fileName,
 void PerforcePlugin::printPendingChanges()
 {
     qApp->setOverrideCursor(Qt::WaitCursor);
-    PendingChangesDialog dia(pendingChangesData(), m_coreInstance->mainWindow());
+    PendingChangesDialog dia(pendingChangesData(), Core::ICore::instance()->mainWindow());
     qApp->restoreOverrideCursor();
     if (dia.exec() == QDialog::Accepted) {
         const int i = dia.changeNumber();
@@ -595,14 +589,15 @@ void PerforcePlugin::annotate()
 
 void PerforcePlugin::annotate(const QString &fileName)
 {
-    QTextCodec *codec = VCSBase::VCSBaseEditor::getCodec(m_coreInstance, fileName);
+    QTextCodec *codec = VCSBase::VCSBaseEditor::getCodec(fileName);
     QStringList args;
     args << QLatin1String("annotate") << QLatin1String("-cqi") << fileName;
     const PerforceResponse result = runP4Cmd(args, QStringList(),
                                              CommandToWindow|StdErrToWindow|ErrorToWindow, codec);
     if (!result.error) {
         const QFileInfo fi(fileName);
-        showOutputInEditor(tr("p4 annotate %1").arg(fi.fileName()), result.stdOut, VCSBase::AnnotateOutput, codec);
+        showOutputInEditor(tr("p4 annotate %1").arg(fi.fileName()),
+            result.stdOut, VCSBase::AnnotateOutput, codec);
     }
 }
 
@@ -622,14 +617,15 @@ void PerforcePlugin::filelog()
 
 void PerforcePlugin::filelog(const QString &fileName)
 {
-    QTextCodec *codec = VCSBase::VCSBaseEditor::getCodec(m_coreInstance, fileName);
+    QTextCodec *codec = VCSBase::VCSBaseEditor::getCodec(fileName);
     QStringList args;
     args << QLatin1String("filelog") << QLatin1String("-li") << fileName;
     const PerforceResponse result = runP4Cmd(args, QStringList(),
                                              CommandToWindow|StdErrToWindow|ErrorToWindow, codec);
     if (!result.error) {
         const QFileInfo fi(fileName);
-        showOutputInEditor(tr("p4 filelog %1").arg(fi.fileName()), result.stdOut, VCSBase::LogOutput, codec);
+        showOutputInEditor(tr("p4 filelog %1").arg(fi.fileName()),
+            result.stdOut, VCSBase::LogOutput, codec);
     }
 }
 
@@ -751,7 +747,6 @@ PerforceResponse PerforcePlugin::runP4Cmd(const QStringList &args,
         qDebug() << "PerforcePlugin::runP4Cmd" << args << extraArgs << debugCodec(outputCodec);
     PerforceResponse response;
     response.error = true;
-    QTC_ASSERT(m_coreInstance, return response);
     if (!checkP4Command()) {
         response.message = tr("No p4 executable specified!");
         m_perforceOutputWindow->append(response.message, true);
@@ -846,7 +841,7 @@ Core::IEditor * PerforcePlugin::showOutputInEditor(const QString& title, const Q
     if (Perforce::Constants::debug)
         qDebug() << "PerforcePlugin::showOutputInEditor" << title << kind <<  "Size= " << output.size() <<  " Type=" << editorType << debugCodec(codec);
     QString s = title;
-    Core::IEditor *ediface = m_coreInstance->editorManager()->
+    Core::IEditor *ediface = Core::ICore::instance()->editorManager()->
         newFile(kind, &s, output.toLocal8Bit());
     PerforceEditor *e = qobject_cast<PerforceEditor*>(ediface->widget());
     if (!e)
@@ -881,7 +876,7 @@ void PerforcePlugin::p4Diff(const QStringList &files, QString diffname)
     Core::IEditor *editor = 0;
     bool displayInEditor = true;
     Core::IEditor *existingEditor = 0;
-    QTextCodec *codec = files.empty() ? static_cast<QTextCodec *>(0) : VCSBase::VCSBaseEditor::getCodec(m_coreInstance, files.front());
+    QTextCodec *codec = files.empty() ? static_cast<QTextCodec *>(0) : VCSBase::VCSBaseEditor::getCodec(files.front());
     if (Perforce::Constants::debug)
         qDebug() << Q_FUNC_INFO << files << debugCodec(codec);
 
@@ -894,7 +889,7 @@ void PerforcePlugin::p4Diff(const QStringList &files, QString diffname)
             diffname = fi.fileName();
         }
 
-        foreach (Core::IEditor *ed, m_coreInstance->editorManager()->openedEditors()) {
+        foreach (Core::IEditor *ed, Core::ICore::instance()->editorManager()->openedEditors()) {
             if (ed->file()->property("originalFileName").toString() == fileName) {
                 existingEditor = ed;
                 displayInEditor = false;
@@ -917,7 +912,7 @@ void PerforcePlugin::p4Diff(const QStringList &files, QString diffname)
         } else if (!displayInEditor && existingEditor) {
             if (existingEditor) {
                 existingEditor->createNew(result.stdOut);
-                m_coreInstance->editorManager()->setCurrentEditor(existingEditor);
+                Core::ICore::instance()->editorManager()->setCurrentEditor(existingEditor);
             }
         }
     }
@@ -925,7 +920,7 @@ void PerforcePlugin::p4Diff(const QStringList &files, QString diffname)
 
 void PerforcePlugin::describe(const QString & source, const QString &n)
 {
-    QTextCodec *codec = source.isEmpty() ? static_cast<QTextCodec *>(0) : VCSBase::VCSBaseEditor::getCodec(m_coreInstance, source);
+    QTextCodec *codec = source.isEmpty() ? static_cast<QTextCodec *>(0) : VCSBase::VCSBaseEditor::getCodec(source);
     QStringList args;
     args << QLatin1String("describe") << QLatin1String("-du") << n;
     const PerforceResponse result = runP4Cmd(args, QStringList(), CommandToWindow|StdErrToWindow|ErrorToWindow, codec);
@@ -935,29 +930,32 @@ void PerforcePlugin::describe(const QString & source, const QString &n)
 
 void PerforcePlugin::submitCurrentLog()
 {
-    m_coreInstance->editorManager()->closeEditors(QList<Core::IEditor*>()
-        << m_coreInstance->editorManager()->currentEditor());
+    Core::EditorManager *em = Core::ICore::instance()->editorManager();
+    em->closeEditors(QList<Core::IEditor*>() << em->currentEditor());
 }
 
 bool PerforcePlugin::editorAboutToClose(Core::IEditor *editor)
 {
     if (!m_changeTmpFile || !editor)
         return true;
+    Core::ICore *core = Core::ICore::instance();
     Core::IFile *fileIFace = editor->file();
     if (!fileIFace)
         return true;
     QFileInfo editorFile(fileIFace->fileName());
     QFileInfo changeFile(m_changeTmpFile->fileName());
     if (editorFile.absoluteFilePath() == changeFile.absoluteFilePath()) {
-        const QMessageBox::StandardButton answer = QMessageBox::question(m_coreInstance->mainWindow(), tr("Closing p4 Editor"),  tr("Do you want to submit this change list?"),
-                                                                         QMessageBox::Yes|QMessageBox::No|QMessageBox::Cancel, QMessageBox::Yes);
-        if (answer == QMessageBox::Cancel) {
+        const QMessageBox::StandardButton answer =
+            QMessageBox::question(core->mainWindow(),
+                tr("Closing p4 Editor"),
+                tr("Do you want to submit this change list?"),
+                QMessageBox::Yes|QMessageBox::No|QMessageBox::Cancel, QMessageBox::Yes);
+        if (answer == QMessageBox::Cancel)
             return false;
-        }
 
-        m_coreInstance->fileManager()->blockFileChange(fileIFace);
+        core->fileManager()->blockFileChange(fileIFace);
         fileIFace->save();
-        m_coreInstance->fileManager()->unblockFileChange(fileIFace);
+        core->fileManager()->unblockFileChange(fileIFace);
         if (answer == QMessageBox::Yes) {
             QByteArray change = m_changeTmpFile->readAll();
             m_changeTmpFile->close();
@@ -1006,15 +1004,14 @@ bool PerforcePlugin::editorAboutToClose(Core::IEditor *editor)
 
 void PerforcePlugin::openFiles(const QStringList &files)
 {
-    foreach (QString s, files) {
-        m_coreInstance->editorManager()->openEditor(clientFilePath(s));
-    }
-    m_coreInstance->editorManager()->ensureEditorManagerVisible();
+    Core::EditorManager *em = Core::ICore::instance()->editorManager();
+    foreach (QString s, files)
+        em->openEditor(clientFilePath(s));
+    em->ensureEditorManagerVisible();
 }
 
 QString PerforcePlugin::clientFilePath(const QString &serverFilePath)
 {
-    QTC_ASSERT(m_coreInstance, return QString());
     if (!checkP4Command())
         return QString();
 
@@ -1040,7 +1037,7 @@ QString PerforcePlugin::clientFilePath(const QString &serverFilePath)
 
 QString PerforcePlugin::currentFileName()
 {
-    QString fileName = m_coreInstance->fileManager()->currentFile();
+    QString fileName = Core::ICore::instance()->fileManager()->currentFile();
 
     // TODO: Use FileManager::fixPath
     const QFileInfo fileInfo(fileName);
@@ -1068,67 +1065,9 @@ bool PerforcePlugin::checkP4Command() const
     return true;
 }
 
-#ifdef USE_P4_API
-void PerforcePlugin::runP4APICmd(const QString &cmd, const QStringList &args)
-{
-    m_enableP4APIActions = false;
-    updateActions();
-
-    ClientApi client;
-    if (!m_settings.defaultEnv) {
-        client.SetClient(m_settings.p4Client.toLatin1().constData());
-        client.SetPort(m_settings.p4Port.toLatin1().constData());
-        client.SetUser(m_settings.p4User.toLatin1().constData());
-    }
-
-    Error err;
-    m_coreInstance->messageManager()->displayStatusBarMessage(tr("Connecting to p4 server..."));
-    client.SetProtocol("api", "56");
-    client.Init(&err);
-    if (err.Test()) {
-        StrBuf msg;
-        err.Fmt(&msg);
-        QMessageBox::critical(m_coreInstance->mainWindow(), tr("Perforce Plugin"), tr("Failed to connect to p4 server <b>%1</b>!").arg(msg.Text()));
-        client.Final(&err);
-        m_coreInstance->messageManager()->displayStatusBarMessage(tr("Connection to p4 server failed!"), 3000);
-        return;
-    }
-    m_coreInstance->messageManager()->displayStatusBarMessage(tr("Connection to p4 server established."), 3000);
-
-    // ????
-    //client.SetCwd("c:\\depot\\research\\qworkbench\\src");
-
-    int argc = args.count();
-    char **argv = (char**)malloc(argc*sizeof(char*));
-    int i = 0;
-    foreach (QString s, args)
-        argv[i++] = qstrdup(s.toLatin1().constData());
-
-    client.SetArgv( argc, argv );
-    try {
-        client.Run(cmd.toLatin1().constData(), m_workbenchClientUser);
-    } catch (...) {
-        QMessageBox::critical(m_coreInstance->mainWindow(), tr("Perforce Plugin"), tr("Failed to run command <b>%1</b>!").arg(cmd));
-    }
-    client.Final(&err);
-    i = 0;
-    while (i<argc)
-        free(argv[i++]);
-    free(argv);
-
-    m_enableP4APIActions = true;
-    updateActions();
-
-    Core::IEditor *edt = m_coreInstance->editorManager()->currentEditor();
-    if (edt && edt->widget())
-        edt->widget()->setFocus();
-}
-#endif
-
 QString PerforcePlugin::pendingChangesData()
 {
     QString data;
-    Q_ASSERT(m_coreInstance);
     if (!checkP4Command())
         return data;
 
@@ -1168,22 +1107,18 @@ PerforcePlugin::~PerforcePlugin()
         m_settingsPage = 0;
     }
 
-#ifdef USE_P4_API
-    if (m_workbenchClientUser) {
-        delete m_workbenchClientUser;
-        m_workbenchClientUser = 0;
-    }
-#endif
     if (m_perforceOutputWindow) {
         removeObject(m_perforceOutputWindow);
         delete  m_perforceOutputWindow;
         m_perforceOutputWindow = 0;
     }
+
     if (m_submitEditorFactory) {
         removeObject(m_submitEditorFactory);
         delete m_submitEditorFactory;
         m_submitEditorFactory = 0;
     }
+
     if (m_versionControl) {
         removeObject(m_versionControl);
         delete m_versionControl;
@@ -1213,7 +1148,7 @@ void PerforcePlugin::setSettings(const PerforceSettings &s)
 {
     if (s != m_settings) {
         m_settings = s;
-        if (QSettings *settings = m_coreInstance->settings())
+        if (QSettings *settings = Core::ICore::instance()->settings())
             m_settings.toSettings(settings);
     }
 }
@@ -1251,12 +1186,6 @@ QString PerforcePlugin::fileNameFromPerforceName(const QString& perforceName,
     return rc;
 }
 
-Core::ICore *PerforcePlugin::coreInstance()
-{       
-    QTC_ASSERT(m_coreInstance, return 0);
-    return m_coreInstance;
-}
-
 PerforcePlugin *PerforcePlugin::perforcePluginInstance()
 {
     QTC_ASSERT(m_perforcePluginInstance, return 0);
diff --git a/src/plugins/perforce/perforceplugin.h b/src/plugins/perforce/perforceplugin.h
index a5e52ba6b03f5a1dacbca938b73ebcc1bbddbbdb..e5985a28ab5bcce0067f57652d42a05babba3545 100644
--- a/src/plugins/perforce/perforceplugin.h
+++ b/src/plugins/perforce/perforceplugin.h
@@ -39,14 +39,8 @@
 #include <coreplugin/editormanager/ieditorfactory.h>
 #include <coreplugin/iversioncontrol.h>
 #include <coreplugin/icorelistener.h>
-#include <projectexplorer/ProjectExplorerInterfaces>
 #include <extensionsystem/iplugin.h>
-
-#ifdef USE_P4_API
-#include "workbenchclientuser.h"
-#else
-
-#endif
+#include <projectexplorer/projectexplorer.h>
 
 #include <QtCore/QObject>
 #include <QtCore/QProcess>
@@ -117,7 +111,6 @@ public:
 
     Core::IEditor *openPerforceSubmitEditor(const QString &fileName, const QStringList &depotFileNames);
 
-    static Core::ICore *coreInstance();
     static PerforcePlugin *perforcePluginInstance();
 
     PerforceSettings settings() const;
@@ -230,7 +223,6 @@ private:
     static const char * const SEPARATOR2;
     static const char * const SEPARATOR3;
 
-    static Core::ICore *m_coreInstance;
     static PerforcePlugin *m_perforcePluginInstance;
     QString pendingChangesData();
 
diff --git a/src/plugins/projectexplorer/ProjectExplorerInterfaces b/src/plugins/projectexplorer/ProjectExplorerInterfaces
deleted file mode 100644
index b6eb45c7ac5516f9b815c98265487ad4e744ab3b..0000000000000000000000000000000000000000
--- a/src/plugins/projectexplorer/ProjectExplorerInterfaces
+++ /dev/null
@@ -1,44 +0,0 @@
-/***************************************************************************
-**
-** This file is part of Qt Creator
-**
-** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
-**
-** Contact:  Qt Software Information (qt-info@nokia.com)
-**
-**
-** Non-Open Source Usage
-**
-** Licensees may use this file in accordance with the Qt Beta Version
-** License Agreement, Agreement version 2.2 provided with the Software or,
-** alternatively, in accordance with the terms contained in a written
-** agreement between you and Nokia.
-**
-** GNU General Public License Usage
-**
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License versions 2.0 or 3.0 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the packaging
-** of this file.  Please review the following information to ensure GNU
-** General Public Licensing requirements will be met:
-**
-** http://www.fsf.org/licensing/licenses/info/GPLv2.html and
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt GPL Exception
-** version 1.3, included in the file GPL_EXCEPTION.txt in this package.
-**
-***************************************************************************/
-
-#include "projectexplorer/buildparserinterface.h"
-#include "projectexplorer/projectexplorerconstants.h"
-#include "projectexplorer/project.h"
-#include "projectexplorer/buildstep.h"
-#include "projectexplorer/buildconfiguration.h"
-#include "projectexplorer/buildmanager.h"
-#include "projectexplorer/projectexplorer.h"
-#include "projectexplorer/persistentsettings.h"
-#include "projectexplorer/environment.h"
-#include "projectexplorer/environmenteditmodel.h"
-#include "projectexplorer/abstractprocessstep.h"
diff --git a/src/plugins/projectexplorer/allprojectsfilter.cpp b/src/plugins/projectexplorer/allprojectsfilter.cpp
index 07e34399b0bef30b2c9c9b3de3b40981887fdd78..cb1457f83663a38205419a25da1d745d22fd2165 100644
--- a/src/plugins/projectexplorer/allprojectsfilter.cpp
+++ b/src/plugins/projectexplorer/allprojectsfilter.cpp
@@ -43,8 +43,7 @@ using namespace QuickOpen;
 using namespace ProjectExplorer;
 using namespace ProjectExplorer::Internal;
 
-AllProjectsFilter::AllProjectsFilter(ProjectExplorerPlugin *pe, ICore *core)
-    : BaseFileFilter(core)
+AllProjectsFilter::AllProjectsFilter(ProjectExplorerPlugin *pe)
 {
     m_projectExplorer = pe;
     connect(m_projectExplorer, SIGNAL(fileListChanged()),
diff --git a/src/plugins/projectexplorer/allprojectsfilter.h b/src/plugins/projectexplorer/allprojectsfilter.h
index 8de2de425e60bad3dbb102b141d845c6bcb97043..f94d51ea1bb7cf860af7d14f2a19e03a1e7edcbb 100644
--- a/src/plugins/projectexplorer/allprojectsfilter.h
+++ b/src/plugins/projectexplorer/allprojectsfilter.h
@@ -36,13 +36,10 @@
 
 #include <quickopen/basefilefilter.h>
 
-#include <QtCore/QString>
-#include <QtCore/QList>
-#include <QtCore/QByteArray>
 #include <QtCore/QFutureInterface>
+#include <QtCore/QString>
 #include <QtGui/QWidget>
 
-
 namespace ProjectExplorer {
 
 class ProjectExplorerPlugin;
@@ -54,7 +51,7 @@ class AllProjectsFilter : public QuickOpen::BaseFileFilter
     Q_OBJECT
 
 public:
-    AllProjectsFilter(ProjectExplorerPlugin *pe, Core::ICore *core);
+    explicit AllProjectsFilter(ProjectExplorerPlugin *pe);
     QString trName() const { return tr("Files in any project"); }
     QString name() const { return "Files in any project"; }
     QuickOpen::IQuickOpenFilter::Priority priority() const { return QuickOpen::IQuickOpenFilter::Low; }
diff --git a/src/plugins/projectexplorer/allprojectsfind.cpp b/src/plugins/projectexplorer/allprojectsfind.cpp
index 26998982614bbfaf40d29d6844eeab25e8a816e0..84af045f050779e4218f953e551d8bc0e1f33c32 100644
--- a/src/plugins/projectexplorer/allprojectsfind.cpp
+++ b/src/plugins/projectexplorer/allprojectsfind.cpp
@@ -47,8 +47,8 @@ using namespace ProjectExplorer;
 using namespace ProjectExplorer::Internal;
 using namespace TextEditor;
 
-AllProjectsFind::AllProjectsFind(ProjectExplorerPlugin *plugin, Core::ICore *core, SearchResultWindow *resultWindow)
-    : BaseFileFind(core, resultWindow),
+AllProjectsFind::AllProjectsFind(ProjectExplorerPlugin *plugin, SearchResultWindow *resultWindow)
+    : BaseFileFind(resultWindow),
     m_plugin(plugin),
     m_configWidget(0)
 {
diff --git a/src/plugins/projectexplorer/allprojectsfind.h b/src/plugins/projectexplorer/allprojectsfind.h
index 48d1457b546a6a931f2ac6c51f17660255980a35..1b93842c691363e34fcdba5108787ca90d84ef88 100644
--- a/src/plugins/projectexplorer/allprojectsfind.h
+++ b/src/plugins/projectexplorer/allprojectsfind.h
@@ -34,15 +34,11 @@
 #ifndef ALLPROJECTSFIND_H
 #define ALLPROJECTSFIND_H
 
-#include <coreplugin/icore.h>
 #include <find/ifindfilter.h>
 #include <find/searchresultwindow.h>
 #include <texteditor/basefilefind.h>
 
 #include <QtCore/QPointer>
-#include <QtGui/QLabel>
-#include <QtGui/QComboBox>
-#include <QtGui/QStringListModel>
 
 
 namespace ProjectExplorer {
@@ -56,7 +52,7 @@ class AllProjectsFind : public TextEditor::BaseFileFind
     Q_OBJECT
 
 public:
-    AllProjectsFind(ProjectExplorerPlugin *plugin, Core::ICore *core, Find::SearchResultWindow *resultWindow);
+    AllProjectsFind(ProjectExplorerPlugin *plugin, Find::SearchResultWindow *resultWindow);
 
     QString name() const;
 
diff --git a/src/plugins/projectexplorer/applicationlauncher.h b/src/plugins/projectexplorer/applicationlauncher.h
index ead2799453e5722472b2508577c62fb1ed7869c3..82876e61f76b372da90ea9694331e3ee953069af 100644
--- a/src/plugins/projectexplorer/applicationlauncher.h
+++ b/src/plugins/projectexplorer/applicationlauncher.h
@@ -37,6 +37,9 @@
 #include <QtCore/QObject>
 #include <QtCore/QStringList>
 #include <QtCore/QProcess>
+#ifndef Q_OS_WIN
+#include <QtCore/QTextCodec>
+#endif
 
 namespace ProjectExplorer {
 namespace Internal {
@@ -88,7 +91,12 @@ private:
     ConsoleProcess *m_consoleProcess;
     Mode m_currentMode;
 
+#ifdef Q_OS_WIN
     WinGuiProcess *m_winGuiProcess;
+#else
+    QTextCodec *m_outputCodec;
+    QTextCodec::ConverterState m_outputCodecState;
+#endif
 };
 
 } // namespace Internal
diff --git a/src/plugins/projectexplorer/applicationlauncher_win.cpp b/src/plugins/projectexplorer/applicationlauncher_win.cpp
index 09e0ee73c6c81e89bde73c83f6d182f83885158f..374d26c97b15ea52280e047ba0d59070ea058710 100644
--- a/src/plugins/projectexplorer/applicationlauncher_win.cpp
+++ b/src/plugins/projectexplorer/applicationlauncher_win.cpp
@@ -34,7 +34,6 @@
 #include "applicationlauncher.h"
 #include "consoleprocess.h"
 #include "winguiprocess.h"
-#include <projectexplorer/ProjectExplorerInterfaces>
 
 #include <QDebug>
 
@@ -117,10 +116,7 @@ qint64 ApplicationLauncher::applicationPID() const
 
 void ApplicationLauncher::readWinDebugOutput(const QString &output)
 {
-    QString s = output;
-    if (s.endsWith(QLatin1Char('\n')))
-            s.chop(1);
-    emit appendOutput(s);
+    emit appendOutput(output);
 }
 
 void ApplicationLauncher::processStopped()
diff --git a/src/plugins/projectexplorer/applicationlauncher_x11.cpp b/src/plugins/projectexplorer/applicationlauncher_x11.cpp
index 9a1c4c3d737b03c066fe2dd7cc2d16535e5a7321..78214746a2ee8d0f7de68978a7c29b5c5a57cf6e 100644
--- a/src/plugins/projectexplorer/applicationlauncher_x11.cpp
+++ b/src/plugins/projectexplorer/applicationlauncher_x11.cpp
@@ -34,16 +34,14 @@
 #include "applicationlauncher.h"
 #include "consoleprocess.h"
 
-#include <projectexplorer/ProjectExplorerInterfaces>
-
 #include <QtCore/QTimer>
-#include <QtDebug>
 
 using namespace ProjectExplorer::Internal;
 
 ApplicationLauncher::ApplicationLauncher(QObject *parent)
     : QObject(parent)
 {
+    m_outputCodec = QTextCodec::codecForLocale();
     m_currentMode = Gui;
     m_guiProcess = new QProcess(this);
     m_guiProcess->setReadChannelMode(QProcess::MergedChannels);
@@ -135,13 +133,9 @@ void ApplicationLauncher::guiProcessError()
 
 void ApplicationLauncher::readStandardOutput()
 {
-    m_guiProcess->setReadChannel(QProcess::StandardOutput);
-    while (m_guiProcess->canReadLine()) {
-        QString line = QString::fromLocal8Bit(m_guiProcess->readLine());
-        if (line.endsWith(QLatin1Char('\n')))
-            line.chop(1);
-        emit appendOutput(line);
-    }
+    QByteArray data = m_guiProcess->readAllStandardOutput();
+    emit appendOutput(m_outputCodec->toUnicode(
+            data.constData(), data.length(), &m_outputCodecState));
 }
 
 void ApplicationLauncher::processStopped()
diff --git a/src/plugins/projectexplorer/applicationrunconfiguration.cpp b/src/plugins/projectexplorer/applicationrunconfiguration.cpp
index fc936d2c4311abe7911f03e6af8e20bc3baa42f2..0eeae6e8eef955d0a5dc30ee3710e03d847c6900 100644
--- a/src/plugins/projectexplorer/applicationrunconfiguration.cpp
+++ b/src/plugins/projectexplorer/applicationrunconfiguration.cpp
@@ -141,7 +141,7 @@ void ApplicationRunControl::start()
                                 m_executable, rc->commandLineArguments());
     emit started();
 
-    emit addToOutputWindow(this, tr("Starting %1").arg(m_executable));
+    emit addToOutputWindow(this, tr("Starting %1...").arg(m_executable));
 }
 
 void ApplicationRunControl::stop()
@@ -162,7 +162,7 @@ void ApplicationRunControl::slotError(const QString & err)
 
 void ApplicationRunControl::slotAddToOutputWindow(const QString &line)
 {
-    emit addToOutputWindow(this, Qt::escape(line));
+    emit addToOutputWindowInline(this, line);
 }
 
 void ApplicationRunControl::processExited(int exitCode)
diff --git a/src/plugins/projectexplorer/buildmanager.cpp b/src/plugins/projectexplorer/buildmanager.cpp
index ff426805c2eedb072a40820fbb12e947f3aa6db3..a7e7286a30f6b18acfa823a3a9d98be333737107 100644
--- a/src/plugins/projectexplorer/buildmanager.cpp
+++ b/src/plugins/projectexplorer/buildmanager.cpp
@@ -178,8 +178,7 @@ void BuildManager::startBuildQueue()
 {
     if (!m_running) {
         // Progress Reporting
-        Core::ProgressManager *progressManager =
-                ExtensionSystem::PluginManager::instance()->getObject<Core::ICore>()->progressManager();
+        Core::ProgressManager *progressManager = Core::ICore::instance()->progressManager();
         m_progressFutureInterface = new QFutureInterface<void>;
         m_progressWatcher.setFuture(m_progressFutureInterface->future());
         Core::FutureProgress *progress = progressManager->addTask(m_progressFutureInterface->future(),
diff --git a/src/plugins/projectexplorer/buildparserinterface.h b/src/plugins/projectexplorer/buildparserinterface.h
index 6dba4dfec00199f5cec6be02780764073be88cad..2857926e18dfc4d3abe39d14cb6b41fd20874bef 100644
--- a/src/plugins/projectexplorer/buildparserinterface.h
+++ b/src/plugins/projectexplorer/buildparserinterface.h
@@ -66,7 +66,7 @@ class PROJECTEXPLORER_EXPORT IBuildParserFactory
     Q_OBJECT
 
 public:
-    IBuildParserFactory() {};
+    IBuildParserFactory() {}
     virtual ~IBuildParserFactory();
     virtual bool canCreate(const QString & name) const = 0;
     virtual BuildParserInterface * create(const QString & name) const = 0;
diff --git a/src/plugins/projectexplorer/currentprojectfilter.cpp b/src/plugins/projectexplorer/currentprojectfilter.cpp
index 4b9e585cc130196e3aa9d4b56c3884364fd693a9..496aeb326c02e1c9ef2e97466f2f70ad82098017 100644
--- a/src/plugins/projectexplorer/currentprojectfilter.cpp
+++ b/src/plugins/projectexplorer/currentprojectfilter.cpp
@@ -36,20 +36,18 @@
 #include "project.h"
 #include "session.h"
 
-#include <QtCore/QVariant>
-#include <QtCore/QTimer>
+#include <QtCore/QtDebug>
 #include <QtCore/QThread>
-#include <QtDebug>
+#include <QtCore/QTimer>
+#include <QtCore/QVariant>
 
 using namespace Core;
 using namespace QuickOpen;
 using namespace ProjectExplorer;
 using namespace ProjectExplorer::Internal;
 
-CurrentProjectFilter::CurrentProjectFilter(ProjectExplorerPlugin *pe,
-                                     ICore *core)
-    : BaseFileFilter(core),
-      m_project(0)
+CurrentProjectFilter::CurrentProjectFilter(ProjectExplorerPlugin *pe)
+  : BaseFileFilter(), m_project(0)
 {
     m_projectExplorer = pe;
 
@@ -73,12 +71,12 @@ void CurrentProjectFilter::currentProjectChanged(ProjectExplorer::Project *proje
 {
     if (project == m_project)
         return;
-    if (m_project) {
+    if (m_project)
         disconnect(m_project, SIGNAL(fileListChanged()), this, SLOT(refreshInternally()));
-    }
-    if (project) {
+
+    if (project)
         connect(project, SIGNAL(fileListChanged()), this, SLOT(refreshInternally()));
-    }
+
     m_project = project;
     refreshInternally();
 }
diff --git a/src/plugins/projectexplorer/currentprojectfilter.h b/src/plugins/projectexplorer/currentprojectfilter.h
index 92ae4b6863538839b2f2687a1e7555d700f4c27e..25b2a12f57696990af4045223337de1ea169521c 100644
--- a/src/plugins/projectexplorer/currentprojectfilter.h
+++ b/src/plugins/projectexplorer/currentprojectfilter.h
@@ -54,7 +54,7 @@ class CurrentProjectFilter : public QuickOpen::BaseFileFilter
     Q_OBJECT
 
 public:
-    CurrentProjectFilter(ProjectExplorerPlugin *pe, Core::ICore *core);
+    CurrentProjectFilter(ProjectExplorerPlugin *pe);
     QString trName() const { return tr("Files in current project"); }
     QString name() const { return "Files in current project"; }
     QuickOpen::IQuickOpenFilter::Priority priority() const { return QuickOpen::IQuickOpenFilter::Low; }
diff --git a/src/plugins/projectexplorer/currentprojectfind.cpp b/src/plugins/projectexplorer/currentprojectfind.cpp
index cf1d81c3bc7e591050d1e8bd9bf2b73530f244b7..e453d0c6a49d5a03afcfe76fd383f8471757a8a8 100644
--- a/src/plugins/projectexplorer/currentprojectfind.cpp
+++ b/src/plugins/projectexplorer/currentprojectfind.cpp
@@ -47,8 +47,8 @@ using namespace ProjectExplorer;
 using namespace ProjectExplorer::Internal;
 using namespace TextEditor;
 
-CurrentProjectFind::CurrentProjectFind(ProjectExplorerPlugin *plugin, Core::ICore *core, SearchResultWindow *resultWindow)
-    : BaseFileFind(core, resultWindow),
+CurrentProjectFind::CurrentProjectFind(ProjectExplorerPlugin *plugin, SearchResultWindow *resultWindow)
+  : BaseFileFind(resultWindow),
     m_plugin(plugin),
     m_configWidget(0)
 {
diff --git a/src/plugins/projectexplorer/currentprojectfind.h b/src/plugins/projectexplorer/currentprojectfind.h
index 5c08be0f2fc70d0a91982a27133446e5b41f231c..8690911277a2e3ad1073e1376b5fe501a6376235 100644
--- a/src/plugins/projectexplorer/currentprojectfind.h
+++ b/src/plugins/projectexplorer/currentprojectfind.h
@@ -34,7 +34,6 @@
 #ifndef CURRENTPROJECTFIND_H
 #define CURRENTPROJECTFIND_H
 
-#include <coreplugin/icore.h>
 #include <find/ifindfilter.h>
 #include <find/searchresultwindow.h>
 #include <texteditor/basefilefind.h>
@@ -51,7 +50,7 @@ namespace Internal {
 class CurrentProjectFind : public TextEditor::BaseFileFind
 {
 public:
-    CurrentProjectFind(ProjectExplorerPlugin *plugin, Core::ICore *core, Find::SearchResultWindow *resultWindow);
+    CurrentProjectFind(ProjectExplorerPlugin *plugin, Find::SearchResultWindow *resultWindow);
 
     QString name() const;
 
diff --git a/src/plugins/projectexplorer/dependenciesdialog.cpp b/src/plugins/projectexplorer/dependenciesdialog.cpp
deleted file mode 100644
index 9c78de543ad66f862ccf3865edf58b00a2a4fd26..0000000000000000000000000000000000000000
--- a/src/plugins/projectexplorer/dependenciesdialog.cpp
+++ /dev/null
@@ -1,245 +0,0 @@
-/***************************************************************************
-**
-** This file is part of Qt Creator
-**
-** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
-**
-** Contact:  Qt Software Information (qt-info@nokia.com)
-**
-**
-** Non-Open Source Usage
-**
-** Licensees may use this file in accordance with the Qt Beta Version
-** License Agreement, Agreement version 2.2 provided with the Software or,
-** alternatively, in accordance with the terms contained in a written
-** agreement between you and Nokia.
-**
-** GNU General Public License Usage
-**
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License versions 2.0 or 3.0 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the packaging
-** of this file.  Please review the following information to ensure GNU
-** General Public Licensing requirements will be met:
-**
-** http://www.fsf.org/licensing/licenses/info/GPLv2.html and
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt GPL Exception
-** version 1.3, included in the file GPL_EXCEPTION.txt in this package.
-**
-***************************************************************************/
-
-#include "dependenciesdialog.h"
-#include "project.h"
-#include "session.h"
-
-#include <QtCore/QVector>
-#include <QtCore/QDebug>
-#include <QtCore/QAbstractTableModel>
-#include <QtGui/QPushButton>
-#include <QtGui/QHeaderView>
-
-namespace ProjectExplorer {
-namespace Internal {
-
-// ------ DependencyModel
-
-class DependencyModel : public QAbstractTableModel {
-public:
-    typedef  ProjectExplorer::Project Project;
-    typedef  DependenciesDialog::ProjectList ProjectList;
-
-    DependencyModel(SessionManager *sln, const ProjectList &projectList, QObject * parent = 0);
-
-    virtual int rowCount(const QModelIndex&) const { return m_projects.size(); }
-    virtual int columnCount(const QModelIndex&) const { return m_projects.size(); }
-
-    virtual QVariant data ( const QModelIndex & index, int role = Qt::DisplayRole ) const;
-    bool setData ( const QModelIndex & index, const QVariant & value, int role = Qt::EditRole);
-
-    virtual Qt::ItemFlags flags ( const QModelIndex & index ) const;
-
-    QVariant headerData ( int section, Qt::Orientation orientation, int role = Qt::DisplayRole ) const;
-
-    // Apply changed items
-    unsigned apply(SessionManager *sln) const;
-
-    void resetDependencies();
-
-private:
-
-    struct Entry {
-        Entry(SessionManager *sln, Project *rootProject, Project *dependentProject);
-        Entry() : m_dependentProject(0), m_dependent(false), m_defaultValue(false), m_canAddDependency(false) {}
-        Project* m_dependentProject;
-        bool m_dependent;
-        bool m_defaultValue;
-        bool m_canAddDependency;
-    };
-
-    // column
-    typedef QVector<Entry> ProjectDependencies;
-    typedef  QList<ProjectDependencies> Projects;
-    Projects m_projects;
-    ProjectList m_projectList;
-};
-
-DependencyModel::Entry::Entry(SessionManager *sln,
-                              Project *rootProject,
-                              Project *dependentProject) :
-    m_dependentProject(dependentProject),
-    m_dependent(sln->hasDependency(rootProject, dependentProject)),
-    m_defaultValue(m_dependent),
-    m_canAddDependency(sln->canAddDependency(rootProject, dependentProject))
-{
-}
-
-DependencyModel::DependencyModel(SessionManager *sln,
-                                 const ProjectList &projectList,
-                                 QObject * parent) :
-    QAbstractTableModel(parent),
-    m_projectList(projectList)
-{
-    const int count = projectList.size();
-    for (int p = 0; p < count; p++) {
-        Project *rootProject = projectList.at(p);
-        ProjectDependencies dependencies;
-        dependencies.reserve(count);
-        for (int d = 0; d < count ; d++)
-            dependencies.push_back(p == d ? Entry() : Entry(sln, rootProject, projectList.at(d)));
-
-        m_projects += dependencies;
-    }
-}
-
-QVariant DependencyModel::data ( const QModelIndex & index, int role  ) const
-{
-    static const QVariant empty = QVariant(QString());
-    // TO DO: find a checked icon
-    static const QVariant checked = QVariant(QString(QLatin1Char('x')));
-
-    const int p = index.column();
-    const int d = index.row();
-    switch (role) {
-    case Qt::EditRole:
-        return QVariant(m_projects[p][d].m_dependent);
-    case Qt::DisplayRole:
-        return m_projects[p][d].m_dependent ?  checked : empty;
-    default:
-        break;
-    }
-    return QVariant();
-}
-
-bool DependencyModel::setData ( const QModelIndex & index, const QVariant & value, int role)
-{
-  switch (role) {
-    case Qt::EditRole: {
-        const int p = index.column();
-        const int d = index.row();
-        if (d == p)
-            return false;
-        Entry &e(m_projects[p][d]);
-        e.m_dependent = value.toBool();
-        emit dataChanged(index, index);
-    }
-        return true;
-    default:
-        break;
-    }
-    return false;
-}
-
-Qt::ItemFlags DependencyModel::flags ( const QModelIndex & index ) const
-{
-    const int p = index.column();
-    const int d = index.row();
-
-    if (d == p)
-        return 0;
-
-    const Entry &e(m_projects[p][d]);
-    Qt::ItemFlags rc = Qt::ItemIsEnabled|Qt::ItemIsUserCheckable | Qt::ItemIsSelectable;
-    if (e.m_canAddDependency)
-        rc |= Qt::ItemIsEditable;
-    return rc;
-}
-
-QVariant DependencyModel::headerData ( int section, Qt::Orientation , int role ) const
-{
-    switch (role) {
-    case Qt::DisplayRole:
-        return QVariant(m_projectList.at(section)->name());
-    default:
-        break;
-    }
-    return QVariant();
-}
-
-void DependencyModel::resetDependencies()
-{
-    if (const int count = m_projectList.size()) {
-        for (int p = 0; p < count; p++)
-            for (int d = 0; d < count; d++)
-                m_projects[p][d].m_dependent = false;
-        reset();
-    }
-}
-
-unsigned DependencyModel::apply(SessionManager *sln) const
-{
-    unsigned rc = 0;
-    const int count = m_projectList.size();
-    for (int p = 0; p < count; p++) {
-        Project *rootProject = m_projectList.at(p);
-        for (int d = 0; d < count; d++) {
-            if (d != p) {
-                const  Entry &e(m_projects[p][d]);
-                if (e.m_dependent != e. m_defaultValue) {
-                    rc++;
-                    if (e.m_dependent) {
-                        sln->addDependency(rootProject, e.m_dependentProject);
-                    } else {
-                        sln->removeDependency(rootProject, e.m_dependentProject);
-                    }
-                }
-            }
-        }
-    }
-    return rc;
-}
-
-// ------ DependenciesDialog
-DependenciesDialog::DependenciesDialog(QWidget *parent, SessionManager *sln) :
-    QDialog(parent),
-    m_sln(sln),
-    m_projectList(m_sln->projects()),
-    m_model(new DependencyModel(sln, m_projectList))
-{
-    m_ui.setupUi(this);
-    m_ui.buttonBox->button(QDialogButtonBox::Ok)->setDefault(true);
-    QPushButton *resetButton = m_ui.buttonBox->addButton (QDialogButtonBox::Reset);
-    connect(resetButton, SIGNAL(clicked()), this, SLOT(reset()));
-
-    m_ui.dependencyTable->setModel(m_model);
-}
-
-void DependenciesDialog::accept()
-{
-    m_model->apply(m_sln);
-    QDialog::accept();
-}
-
-void DependenciesDialog::reset()
-{
-    m_model->resetDependencies();
-}
-
-DependenciesDialog::~DependenciesDialog()
-{
-}
-
-}
-}
diff --git a/src/plugins/projectexplorer/dependenciesdialog.ui b/src/plugins/projectexplorer/dependenciesdialog.ui
deleted file mode 100644
index 31a70dae9832c5d27b5eac73cbfe44665201aac8..0000000000000000000000000000000000000000
--- a/src/plugins/projectexplorer/dependenciesdialog.ui
+++ /dev/null
@@ -1,84 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>ProjectExplorer::Internal::DependenciesDialog</class>
- <widget class="QDialog" name="ProjectExplorer::Internal::DependenciesDialog">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>492</width>
-    <height>435</height>
-   </rect>
-  </property>
-  <property name="windowTitle">
-   <string>Project Dependencies</string>
-  </property>
-  <layout class="QVBoxLayout">
-   <property name="spacing">
-    <number>6</number>
-   </property>
-   <property name="margin">
-    <number>9</number>
-   </property>
-   <item>
-    <widget class="QTableView" name="dependencyTable">
-     <property name="selectionMode">
-      <enum>QAbstractItemView::SingleSelection</enum>
-     </property>
-    </widget>
-   </item>
-   <item>
-    <widget class="Line" name="line">
-     <property name="orientation">
-      <enum>Qt::Horizontal</enum>
-     </property>
-    </widget>
-   </item>
-   <item>
-    <widget class="QDialogButtonBox" name="buttonBox">
-     <property name="orientation">
-      <enum>Qt::Horizontal</enum>
-     </property>
-     <property name="standardButtons">
-      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
-     </property>
-    </widget>
-   </item>
-  </layout>
- </widget>
- <resources/>
- <connections>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>accepted()</signal>
-   <receiver>ProjectExplorer::Internal::DependenciesDialog</receiver>
-   <slot>accept()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>142</x>
-     <y>285</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>142</x>
-     <y>155</y>
-    </hint>
-   </hints>
-  </connection>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>rejected()</signal>
-   <receiver>ProjectExplorer::Internal::DependenciesDialog</receiver>
-   <slot>reject()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>142</x>
-     <y>285</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>142</x>
-     <y>155</y>
-    </hint>
-   </hints>
-  </connection>
- </connections>
-</ui>
diff --git a/src/plugins/projectexplorer/dependenciespanel.cpp b/src/plugins/projectexplorer/dependenciespanel.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..bc83f7408a46c6253efacbb6399a96aee01fa3e7
--- /dev/null
+++ b/src/plugins/projectexplorer/dependenciespanel.cpp
@@ -0,0 +1,217 @@
+/***************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact:  Qt Software Information (qt-info@nokia.com)
+**
+**
+** Non-Open Source Usage
+**
+** Licensees may use this file in accordance with the Qt Beta Version
+** License Agreement, Agreement version 2.2 provided with the Software or,
+** alternatively, in accordance with the terms contained in a written
+** agreement between you and Nokia.
+**
+** GNU General Public License Usage
+**
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License versions 2.0 or 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the packaging
+** of this file.  Please review the following information to ensure GNU
+** General Public Licensing requirements will be met:
+**
+** http://www.fsf.org/licensing/licenses/info/GPLv2.html and
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt GPL Exception
+** version 1.3, included in the file GPL_EXCEPTION.txt in this package.
+**
+***************************************************************************/
+
+#include "dependenciespanel.h"
+#include "project.h"
+#include "session.h"
+
+#include <coreplugin/fileiconprovider.h>
+
+#include <QtCore/QVector>
+#include <QtCore/QDebug>
+#include <QtCore/QAbstractListModel>
+#include <QtGui/QHeaderView>
+#include <QtGui/QMessageBox>
+#include <QtGui/QPushButton>
+
+namespace ProjectExplorer {
+namespace Internal {
+
+///
+/// DependenciesModel
+///
+
+class DependenciesModel : public QAbstractListModel
+{
+public:
+    DependenciesModel(SessionManager *session, Project *project, QObject *parent = 0);
+
+    int rowCount(const QModelIndex &index) const;
+    int columnCount(const QModelIndex &index) const;
+    QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
+    bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);
+    Qt::ItemFlags flags(const QModelIndex &index) const;
+
+private:
+    SessionManager *m_session;
+    Project *m_project;
+    QList<Project *> m_projects;
+};
+
+DependenciesModel::DependenciesModel(SessionManager *session,
+                                     Project *project,
+                                     QObject *parent)
+    : QAbstractListModel(parent)
+    , m_session(session)
+    , m_project(project)
+    , m_projects(session->projects())
+{
+    // We can't select ourselves as a dependency
+    m_projects.removeAll(m_project);
+}
+
+int DependenciesModel::rowCount(const QModelIndex &index) const
+{
+    return index.isValid() ? 0 : m_projects.size();
+}
+
+int DependenciesModel::columnCount(const QModelIndex &index) const
+{
+    return index.isValid() ? 0 : 1;
+}
+
+QVariant DependenciesModel::data(const QModelIndex &index, int role) const
+{
+    const Project *p = m_projects.at(index.row());
+
+    switch (role) {
+    case Qt::DisplayRole:
+        return p->name();
+    case Qt::CheckStateRole:
+        return m_session->hasDependency(m_project, p) ? Qt::Checked : Qt::Unchecked;
+    case Qt::DecorationRole:
+        return Core::FileIconProvider::instance()->icon(QFileInfo(p->file()->fileName()));
+    default:
+        return QVariant();
+    }
+}
+
+bool DependenciesModel::setData(const QModelIndex &index, const QVariant &value, int role)
+{
+    qDebug() << index << value << role << value.toBool();
+
+    if (role == Qt::CheckStateRole) {
+        const Project *p = m_projects.at(index.row());
+        const Qt::CheckState c = static_cast<Qt::CheckState>(value.toInt());
+
+        if (c == Qt::Checked) {
+            if (m_session->addDependency(m_project, p)) {
+                emit dataChanged(index, index);
+                return true;
+            } else {
+                QMessageBox::warning(0, tr("Unable to add dependency"),
+                                     tr("This would create a circular dependency."));
+            }
+        } else if (c == Qt::Unchecked) {
+            if (m_session->hasDependency(m_project, p)) {
+                m_session->removeDependency(m_project, p);
+                emit dataChanged(index, index);
+                return true;
+            }
+        }
+    }
+    return false;
+}
+
+Qt::ItemFlags DependenciesModel::flags(const QModelIndex &index) const
+{
+    Qt::ItemFlags rc = QAbstractListModel::flags(index);
+    if (index.column() == 0)
+        rc |= Qt::ItemIsUserCheckable | Qt::ItemIsEditable;
+    return rc;
+}
+
+///
+/// DependenciesWidget
+///
+
+class DependenciesWidget : public QWidget
+{
+public:
+    DependenciesWidget(SessionManager *session, Project *project,
+                       QWidget *parent = 0);
+
+private:
+    Ui::DependenciesWidget m_ui;
+    SessionManager *m_session;
+    DependenciesModel *m_model;
+};
+
+DependenciesWidget::DependenciesWidget(SessionManager *session,
+                                       Project *project,
+                                       QWidget *parent)
+    : QWidget(parent)
+    , m_session(session)
+    , m_model(new DependenciesModel(session, project, this))
+{
+    m_ui.setupUi(this);
+    m_ui.dependenciesView->setModel(m_model);
+    m_ui.dependenciesView->setHeaderHidden(true);
+}
+
+///
+/// DependenciesPanel
+///
+
+DependenciesPanel::DependenciesPanel(SessionManager *session, Project *project)
+    : PropertiesPanel()
+    , m_widget(new DependenciesWidget(session, project))
+{
+}
+
+DependenciesPanel::~DependenciesPanel()
+{
+    delete m_widget;
+}
+
+QString DependenciesPanel::name() const
+{
+    return tr("Dependencies");
+}
+
+QWidget *DependenciesPanel::widget()
+{
+    return m_widget;
+}
+
+///
+/// DependenciesPanelFactory
+///
+
+DependenciesPanelFactory::DependenciesPanelFactory(SessionManager *session)
+    : m_session(session)
+{
+}
+
+bool DependenciesPanelFactory::supports(Project * /* project */)
+{
+    return true;
+}
+
+PropertiesPanel *DependenciesPanelFactory::createPanel(Project *project)
+{
+    return new DependenciesPanel(m_session, project);
+}
+
+} // namespace Internal
+} // namespace ProjectExplorer
diff --git a/src/plugins/projectexplorer/dependenciesdialog.h b/src/plugins/projectexplorer/dependenciespanel.h
similarity index 73%
rename from src/plugins/projectexplorer/dependenciesdialog.h
rename to src/plugins/projectexplorer/dependenciespanel.h
index 1dd8621a1ed6ddf77c0885128f9bdff4ddd94e6d..73c7755620c8f89ae708ab1a0f24ece196d902e7 100644
--- a/src/plugins/projectexplorer/dependenciesdialog.h
+++ b/src/plugins/projectexplorer/dependenciespanel.h
@@ -34,9 +34,10 @@
 #ifndef DEPENDENCIESDIALOG_H
 #define DEPENDENCIESDIALOG_H
 
-#include "ui_dependenciesdialog.h"
+#include "iprojectproperties.h"
+#include "ui_dependenciespanel.h"
 
-#include <QtGui/QDialog>
+#include <QtGui/QWidget>
 
 namespace ProjectExplorer {
 
@@ -45,27 +46,32 @@ class SessionManager;
 
 namespace Internal {
 
-class DependencyModel;
+class DependenciesWidget;
 
-// NBS kill DependenciesDialog?
-class DependenciesDialog : public QDialog
+class DependenciesPanelFactory : public IPanelFactory
 {
-    Q_OBJECT
 public:
-    typedef QList<ProjectExplorer::Project *> ProjectList;
+    DependenciesPanelFactory(SessionManager *session);
+
+    bool supports(Project *project);
+    PropertiesPanel *createPanel(Project *project);
+
+private:
+    SessionManager *m_session;
+};
 
-    DependenciesDialog(QWidget *parent, SessionManager *sln);
-    virtual ~DependenciesDialog();
 
-public slots:
-    virtual void accept();
-    void reset();
+class DependenciesPanel : public PropertiesPanel
+{
+    Q_OBJECT
+public:
+    DependenciesPanel(SessionManager *session, Project *project);
+    ~DependenciesPanel();
+    QString name() const;
+    QWidget *widget();
 
 private:
-    Ui::DependenciesDialog m_ui;
-    SessionManager *m_sln;
-    ProjectList m_projectList;
-    DependencyModel *m_model;
+    DependenciesWidget *m_widget;
 };
 
 } // namespace Internal
diff --git a/src/plugins/projectexplorer/dependenciespanel.ui b/src/plugins/projectexplorer/dependenciespanel.ui
new file mode 100644
index 0000000000000000000000000000000000000000..83fc95b1a3bde674cd6fca9c4cb168370dc5a969
--- /dev/null
+++ b/src/plugins/projectexplorer/dependenciespanel.ui
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>ProjectExplorer::Internal::DependenciesWidget</class>
+ <widget class="QWidget" name="ProjectExplorer::Internal::DependenciesWidget">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>502</width>
+    <height>375</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Project Dependencies</string>
+  </property>
+  <layout class="QGridLayout" name="gridLayout">
+   <item row="1" column="0">
+    <widget class="QTreeView" name="dependenciesView"/>
+   </item>
+   <item row="1" column="1">
+    <spacer name="horizontalSpacer">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>40</width>
+       <height>20</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item row="0" column="0" colspan="2">
+    <widget class="QLabel" name="label">
+     <property name="text">
+      <string>Project Dependencies:</string>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/src/plugins/projectexplorer/editorsettingspropertiespage.h b/src/plugins/projectexplorer/editorsettingspropertiespage.h
index 3be9f229c4f6a0697beec86a6b7c349379463721..45da481767592c1997084a0e69d0c18f30647bec 100644
--- a/src/plugins/projectexplorer/editorsettingspropertiespage.h
+++ b/src/plugins/projectexplorer/editorsettingspropertiespage.h
@@ -73,7 +73,6 @@ private slots:
     void currentEncodingChanged(int index);
 
 private:
-
     Ui::EditorSettingsPropertiesPage m_ui;
     Project *m_project;
     QList<QTextCodec *> m_codecs;
diff --git a/src/plugins/projectexplorer/images/filtericon.png b/src/plugins/projectexplorer/images/filtericon.png
index 7e46d2267581c60330a6b948a86d47ed8f9711a0..0915b5e5f6167dfb71799f637ac2ba67f3be7deb 100644
Binary files a/src/plugins/projectexplorer/images/filtericon.png and b/src/plugins/projectexplorer/images/filtericon.png differ
diff --git a/src/plugins/projectexplorer/iprojectproperties.h b/src/plugins/projectexplorer/iprojectproperties.h
index aab3b5043315a47a3cceb202296e6f34bb14794b..aa823f49010bddeff7b8ebba90b5c36d3f96ff36 100644
--- a/src/plugins/projectexplorer/iprojectproperties.h
+++ b/src/plugins/projectexplorer/iprojectproperties.h
@@ -39,8 +39,6 @@
 
 #include <coreplugin/icontext.h>
 
-#include <QtGui/QWidget>
-
 namespace ProjectExplorer {
 
 class PropertiesPanel;
@@ -57,7 +55,7 @@ class PROJECTEXPLORER_EXPORT PropertiesPanel : public Core::IContext
 {
     Q_OBJECT
 public:
-    virtual void finish() {};
+    virtual void finish() {}
     virtual QString name() const = 0;
 
     // IContext
diff --git a/src/plugins/projectexplorer/outputwindow.cpp b/src/plugins/projectexplorer/outputwindow.cpp
index c02f21ff34b32bc597edbf25fc8e3ae669e93ae3..d34c3f2bb0e3645d0928731c72c6b1587d3e5916 100644
--- a/src/plugins/projectexplorer/outputwindow.cpp
+++ b/src/plugins/projectexplorer/outputwindow.cpp
@@ -215,6 +215,12 @@ void OutputPane::appendOutput(RunControl *rc, const QString &out)
     ow->appendOutput(out);
 }
 
+void OutputPane::appendOutputInline(RunControl *rc, const QString &out)
+{
+    OutputWindow *ow = m_outputWindows.value(rc);
+    ow->appendOutputInline(out);
+}
+
 void OutputPane::showTabFor(RunControl *rc)
 {
     OutputWindow *ow = m_outputWindows.value(rc);
@@ -318,7 +324,16 @@ OutputWindow::~OutputWindow()
 
 void OutputWindow::appendOutput(const QString &out)
 {
-    appendPlainText(out);
+    if (out.endsWith('\n'))
+        appendPlainText(out);
+    else
+        appendPlainText(out + '\n');
+}
+
+void OutputWindow::appendOutputInline(const QString &out)
+{
+    moveCursor(QTextCursor::End);
+    insertPlainText(out);
 }
 
 void OutputWindow::insertLine()
diff --git a/src/plugins/projectexplorer/outputwindow.h b/src/plugins/projectexplorer/outputwindow.h
index 6bda6121af66f36e9b81ccc80ea60f1469f2ac8b..674f25cd51d728f41fd45b216e3faa73ee7e6fa4 100644
--- a/src/plugins/projectexplorer/outputwindow.h
+++ b/src/plugins/projectexplorer/outputwindow.h
@@ -83,6 +83,7 @@ public:
     // ApplicationOutputspecifics
     void createNewOutputWindow(RunControl *rc);
     void appendOutput(RunControl *rc, const QString &out);
+    void appendOutputInline(RunControl *rc, const QString &out);
     void showTabFor(RunControl *rc);
     
 public slots:
@@ -119,6 +120,7 @@ public:
     ~OutputWindow();
 
     void appendOutput(const QString &out);
+    void appendOutputInline(const QString &out);
     void insertLine();
 };
 
diff --git a/src/plugins/projectexplorer/pluginfilefactory.cpp b/src/plugins/projectexplorer/pluginfilefactory.cpp
index de7153c4015feb342d75f49f12f06a2c63e366e3..55b38f681bf3da05dee732c0d5f8d22235f50ce2 100644
--- a/src/plugins/projectexplorer/pluginfilefactory.cpp
+++ b/src/plugins/projectexplorer/pluginfilefactory.cpp
@@ -46,10 +46,9 @@
 using namespace ProjectExplorer;
 using namespace ProjectExplorer::Internal;
 
-ProjectFileFactory::ProjectFileFactory(const Core::ICore* core, IProjectManager *manager) :
-    m_mimeTypes(manager->mimeType()),
+ProjectFileFactory::ProjectFileFactory(IProjectManager *manager)
+  : m_mimeTypes(manager->mimeType()),
     m_kind(Constants::FILE_FACTORY_KIND),
-    m_core(core),
     m_manager(manager)
 {
 }
@@ -70,7 +69,7 @@ Core::IFile *ProjectFileFactory::open(const QString &fileName)
 
     ProjectExplorerPlugin *pe = ProjectExplorerPlugin::instance();
     if (!pe->openProject(fileName)) {
-        m_core->messageManager()->printToOutputPane(tr("Could not open the following project: '%1'").arg(fileName));
+        Core::ICore::instance()->messageManager()->printToOutputPane(tr("Could not open the following project: '%1'").arg(fileName));
     } else if (pe->session()) {
         SessionManager *session = pe->session();
         if (session->projects().count() == 1)
@@ -81,21 +80,21 @@ Core::IFile *ProjectFileFactory::open(const QString &fileName)
     return fIFace;
 }
 
-QList<ProjectFileFactory*> ProjectFileFactory::createFactories(const Core::ICore* core,
-                                                               QString *filterString)
+QList<ProjectFileFactory *> ProjectFileFactory::createFactories(QString *filterString)
 {
     // Register factories for all project managers
     QList<Internal::ProjectFileFactory*> rc;
-    QList<IProjectManager*> projectManagers = core->pluginManager()->getObjects<IProjectManager>();
+    QList<IProjectManager*> projectManagers =
+        ExtensionSystem::PluginManager::instance()->getObjects<IProjectManager>();
 
     const QString filterSeparator = QLatin1String(";;");
     filterString->clear();
     foreach (IProjectManager *manager, projectManagers) {
-        rc.push_back(new ProjectFileFactory(core, manager));
+        rc.push_back(new ProjectFileFactory(manager));
         if (!filterString->isEmpty())
             *filterString += filterSeparator;
         const QString mimeType = manager->mimeType();
-        const QString pFilterString = core->mimeDatabase()->findByType(mimeType).filterString();
+        const QString pFilterString = Core::ICore::instance()->mimeDatabase()->findByType(mimeType).filterString();
         *filterString += pFilterString;
     }
     return rc;
diff --git a/src/plugins/projectexplorer/pluginfilefactory.h b/src/plugins/projectexplorer/pluginfilefactory.h
index 035eb50e665ea72f4143a99f9004b54ff9e58c55..e23be0e9f9f33350be692bd1dfaa78fd423f3dc4 100644
--- a/src/plugins/projectexplorer/pluginfilefactory.h
+++ b/src/plugins/projectexplorer/pluginfilefactory.h
@@ -35,16 +35,14 @@
 #define PLUGINFILEFACTORY_H
 
 #include <coreplugin/ifilefactory.h>
+
 #include <QtCore/QObject>
 #include <QtCore/QStringList>
 
-namespace Core {
-    class ICore;
-}
-
 namespace ProjectExplorer {
-    class IProjectManager;
-    class ProjectExplorerPlugin;
+
+class IProjectManager;
+class ProjectExplorerPlugin;
 
 namespace Internal {
 
@@ -53,20 +51,20 @@ namespace Internal {
 class ProjectFileFactory : public Core::IFileFactory
 {
     Q_OBJECT
-    explicit ProjectFileFactory(const Core::ICore* core, ProjectExplorer::IProjectManager *manager);
-public:
 
+    explicit ProjectFileFactory(ProjectExplorer::IProjectManager *manager);
+
+public:
     virtual QStringList mimeTypes() const;
     bool canOpen(const QString &fileName);
     QString kind() const;
     Core::IFile *open(const QString &fileName);
 
-    static QList<ProjectFileFactory*> createFactories(const Core::ICore* core, QString *filterString);
+    static QList<ProjectFileFactory*> createFactories(QString *filterString);
 
 private:
     const QStringList m_mimeTypes;
     const QString m_kind;
-    const Core::ICore* m_core;
     ProjectExplorer::IProjectManager *m_manager;
 };
 
diff --git a/src/plugins/projectexplorer/project.cpp b/src/plugins/projectexplorer/project.cpp
index 3f377b52a11c9502a07efd56bfcb89d9850e68c3..961ad1a77084ef921f647688a70f0e73880e97e1 100644
--- a/src/plugins/projectexplorer/project.cpp
+++ b/src/plugins/projectexplorer/project.cpp
@@ -46,7 +46,6 @@
 #include <QtCore/QTextCodec>
 
 using namespace ProjectExplorer;
-using ExtensionSystem::PluginManager;
 
 Project::Project()
     : m_activeRunConfiguration(0),
@@ -54,6 +53,14 @@ Project::Project()
 {
 }
 
+Project::~Project()
+{
+    qDeleteAll(m_buildSteps);
+    qDeleteAll(m_cleanSteps);
+    qDeleteAll(m_buildConfigurationValues);
+    delete m_editorConfiguration;
+}
+
 void Project::insertBuildStep(int position, BuildStep *step)
 {
     m_buildSteps.insert(position, step);
@@ -508,14 +515,3 @@ void Project::setDisplayNameFor(const QString &buildConfiguration, const QString
     }
     emit buildConfigurationDisplayNameChanged(buildConfiguration);
 }
-
-
-Project::~Project()
-{
-    qDeleteAll(m_buildSteps);
-    qDeleteAll(m_cleanSteps);
-    qDeleteAll(m_buildConfigurationValues);
-    delete m_editorConfiguration;
-}
-
-
diff --git a/src/plugins/projectexplorer/project.h b/src/plugins/projectexplorer/project.h
index 2a30a0e20f3be4d7a546f3f7b349ef0328f9fa30..9a8c7bf0cbe962504176ec9e4c285428f422e11b 100644
--- a/src/plugins/projectexplorer/project.h
+++ b/src/plugins/projectexplorer/project.h
@@ -31,7 +31,6 @@
 **
 ***************************************************************************/
 
-
 #ifndef PROJECT_H
 #define PROJECT_H
 
@@ -50,7 +49,7 @@
 #include <QtGui/QIcon>
 
 namespace Core {
-    class IFile;
+class IFile;
 }
 
 namespace ProjectExplorer {
@@ -68,8 +67,7 @@ class PROJECTEXPLORER_EXPORT Project
     Q_OBJECT
 
 public:
-    // Roles to be implemented by all models that are exported
-    // via model()
+    // Roles to be implemented by all models that are exported via model()
     enum ModelRoles {
         // Absolute file path
         FilePathRole = QFileSystemModel::FilePathRole
@@ -82,12 +80,11 @@ public:
     virtual Core::IFile *file() const = 0;
     virtual IProjectManager *projectManager() const = 0;
 
-    virtual QList<Core::IFile *> dependencies() = 0; //NBS TODO remove
     virtual QList<Project *> dependsOn() = 0; //NBS TODO implement dependsOn
 
     virtual bool isApplication() const = 0;
 
-    //Build/Clean Step functions
+    // Build/Clean Step functions
     QList<BuildStep *> buildSteps() const;
     void insertBuildStep(int position, BuildStep *step);
     void removeBuildStep(int position);
@@ -97,7 +94,7 @@ public:
     void insertCleanStep(int position, BuildStep *step);
     void removeCleanStep(int position);
 
-    //Build configuration
+    // Build configuration
     void addBuildConfiguration(const QString &name);
     void removeBuildConfiguration(const QString  &name);
     void copyBuildConfiguration(const QString &source, const QString &dest);
@@ -133,8 +130,9 @@ public:
     virtual BuildStepConfigWidget *createConfigWidget() = 0;
     virtual QList<BuildStepConfigWidget*> subConfigWidgets();
 
-    // This method is called for new build configurations
-    // You should probably set some default values in this method
+    /* This method is called for new build configurations. You should probably
+     * set some default values in this method.
+     */
     virtual void newBuildConfiguration(const QString &buildConfiguration) = 0;
 
     virtual ProjectNode *rootProjectNode() const = 0;
@@ -150,19 +148,22 @@ signals:
     void buildConfigurationDisplayNameChanged(const QString &buildConfiguraiton);
 
 protected:
-    // This method is called when the project .user file is saved.
-    // Simply call writer.saveValue() for each value you want to save
-    // Make sure to always call your base class implementation
-    // Note: All the values from the project/buildsteps and buildconfigurations
-    // are automatically stored.
+    /* This method is called when the project .user file is saved. Simply call
+     * writer.saveValue() for each value you want to save. Make sure to always
+     * call your base class implementation.
+     *
+     * Note: All the values from the project/buildsteps and buildconfigurations
+     * are automatically stored.
+     */
     virtual void saveSettingsImpl(PersistentSettingsWriter &writer);
-    // This method is called when the project is opened
-    // You can retrieve all the values you saved in saveSettingsImpl()
-    // in this method.
 
-    // Note: This function is also called if there is no .user file
-    // You should probably add some default build and run settings to the project
-    // so that it can be build and run
+    /* This method is called when the project is opened. You can retrieve all
+     * the values you saved in saveSettingsImpl() in this method.
+     *
+     * Note: This function is also called if there is no .user file. You should
+     * probably add some default build and run settings to the project so that
+     * it can be build and run.
+     */
     virtual void restoreSettingsImpl(PersistentSettingsReader &reader);
 
 private:
@@ -181,4 +182,4 @@ private:
 
 } // namespace ProjectExplorer
 
-#endif // PROJECTINTERFACE_H
+#endif // PROJECT_H
diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp
index dad5c4b7dba20ff2c041b8247e6b1698e8d08cef..82dc4a249d9969ab5a512d892f4ee5a3464f1f69 100644
--- a/src/plugins/projectexplorer/projectexplorer.cpp
+++ b/src/plugins/projectexplorer/projectexplorer.cpp
@@ -34,12 +34,13 @@
 #include "applicationrunconfiguration.h"
 #include "allprojectsfilter.h"
 #include "allprojectsfind.h"
-#include "currentprojectfind.h"
 #include "buildmanager.h"
 #include "buildsettingspropertiespage.h"
-#include "editorsettingspropertiespage.h"
+#include "currentprojectfind.h"
 #include "currentprojectfilter.h"
 #include "customexecutablerunconfiguration.h"
+#include "editorsettingspropertiespage.h"
+#include "dependenciespanel.h"
 #include "foldernavigationwidget.h"
 #include "iprojectmanager.h"
 #include "metatypedeclarations.h"
@@ -77,25 +78,20 @@
 #include <coreplugin/vcsmanager.h>
 #include <coreplugin/iversioncontrol.h>
 #include <coreplugin/vcsmanager.h>
+#include <extensionsystem/pluginmanager.h>
 #include <utils/listutils.h>
 #include <utils/qtcassert.h>
 
-#include <QtCore/qplugin.h>
+#include <QtCore/QtPlugin>
 #include <QtCore/QDateTime>
 #include <QtCore/QDebug>
 #include <QtCore/QSettings>
 
 #include <QtGui/QAction>
 #include <QtGui/QApplication>
-#include <QtGui/QContextMenuEvent>
 #include <QtGui/QFileDialog>
-#include <QtGui/QFileSystemModel>
-#include <QtGui/QHeaderView>
-#include <QtGui/QInputDialog>
-#include <QtGui/QMainWindow>
 #include <QtGui/QMenu>
 #include <QtGui/QMessageBox>
-#include <QtGui/QToolBar>
 
 Q_DECLARE_METATYPE(QSharedPointer<ProjectExplorer::RunConfiguration>);
 Q_DECLARE_METATYPE(Core::IEditorFactory *);
@@ -151,18 +147,20 @@ ProjectExplorerPlugin *ProjectExplorerPlugin::instance()
     return m_instance;
 }
 
-bool ProjectExplorerPlugin::initialize(const QStringList & /*arguments*/, QString *)
+bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *error)
 {
-    ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
-    m_core = pm->getObject<Core::ICore>();
-    Core::ActionManager *am = m_core->actionManager();
+    Q_UNUSED(arguments);
+    Q_UNUSED(error);
+
+    Core::ICore *core = Core::ICore::instance();
+    Core::ActionManager *am = core->actionManager();
 
     addObject(this);
 
-    connect(m_core->fileManager(), SIGNAL(currentFileChanged(const QString&)),
+    connect(core->fileManager(), SIGNAL(currentFileChanged(const QString&)),
             this, SLOT(setCurrentFile(const QString&)));
 
-    m_session = new SessionManager(m_core, this);
+    m_session = new SessionManager(core, this);
 
     connect(m_session, SIGNAL(projectAdded(ProjectExplorer::Project *)),
             this, SIGNAL(fileListChanged()));
@@ -173,13 +171,13 @@ bool ProjectExplorerPlugin::initialize(const QStringList & /*arguments*/, QStrin
     connect(m_session, SIGNAL(startupProjectChanged(ProjectExplorer::Project *)),
             this, SLOT(startupProjectChanged()));
 
-    m_proWindow = new ProjectWindow(m_core);
+    m_proWindow = new ProjectWindow;
 
     QList<int> globalcontext;
     globalcontext.append(Core::Constants::C_GLOBAL_ID);
 
     QList<int> pecontext;
-    pecontext << m_core->uniqueIDManager()->uniqueIdentifier(Constants::C_PROJECTEXPLORER);
+    pecontext << core->uniqueIDManager()->uniqueIdentifier(Constants::C_PROJECTEXPLORER);
 
     Core::BaseMode *mode = new Core::BaseMode;
     mode->setName(tr("Projects"));
@@ -201,36 +199,38 @@ bool ProjectExplorerPlugin::initialize(const QStringList & /*arguments*/, QStrin
 
     addAutoReleasedObject(new CoreListenerCheckingForRunningBuild(m_buildManager));
 
-    m_outputPane = new OutputPane(m_core);
+    m_outputPane = new OutputPane(core);
     addAutoReleasedObject(m_outputPane);
     connect(m_session, SIGNAL(projectRemoved(ProjectExplorer::Project *)),
             m_outputPane, SLOT(projectRemoved()));
 
-    AllProjectsFilter *allProjectsFilter = new AllProjectsFilter(this, m_core);
+    AllProjectsFilter *allProjectsFilter = new AllProjectsFilter(this);
     addAutoReleasedObject(allProjectsFilter);
 
-    CurrentProjectFilter *currentProjectFilter = new CurrentProjectFilter(this, m_core);
+    CurrentProjectFilter *currentProjectFilter = new CurrentProjectFilter(this);
     addAutoReleasedObject(currentProjectFilter);
 
     addAutoReleasedObject(new BuildSettingsPanelFactory);
     addAutoReleasedObject(new RunSettingsPanelFactory);
     addAutoReleasedObject(new EditorSettingsPanelFactory);
+    addAutoReleasedObject(new DependenciesPanelFactory(m_session));
 
     ProcessStepFactory *processStepFactory = new ProcessStepFactory;
     addAutoReleasedObject(processStepFactory);
 
-    AllProjectsFind *allProjectsFind = new AllProjectsFind(this, m_core,
-        m_core->pluginManager()->getObject<Find::SearchResultWindow>());
+    ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
+    AllProjectsFind *allProjectsFind = new AllProjectsFind(this,
+        pm->getObject<Find::SearchResultWindow>());
     addAutoReleasedObject(allProjectsFind);
 
-    CurrentProjectFind *currentProjectFind = new CurrentProjectFind(this, m_core,
-        m_core->pluginManager()->getObject<Find::SearchResultWindow>());
+    CurrentProjectFind *currentProjectFind = new CurrentProjectFind(this,
+        pm->getObject<Find::SearchResultWindow>());
     addAutoReleasedObject(currentProjectFind);
 
     addAutoReleasedObject(new ApplicationRunConfigurationRunner);
     addAutoReleasedObject(new CustomExecutableRunConfigurationFactory);
 
-    addAutoReleasedObject(new ProjectFileWizardExtension(m_core));
+    addAutoReleasedObject(new ProjectFileWizardExtension);
 
     // context menus
     Core::ActionContainer *msessionContextMenu =
@@ -256,7 +256,7 @@ bool ProjectExplorerPlugin::initialize(const QStringList & /*arguments*/, QStrin
         am->actionContainer(Core::Constants::MENU_BAR);
 
     // mode manager (for fancy actions)
-    Core::ModeManager *modeManager = m_core->modeManager();
+    Core::ModeManager *modeManager = core->modeManager();
 
     // build menu
     Core::ActionContainer *mbuild =
@@ -485,11 +485,6 @@ bool ProjectExplorerPlugin::initialize(const QStringList & /*arguments*/, QStrin
     mbuild->addAction(cmd, Constants::G_BUILD_SESSION);
     msessionContextMenu->addAction(cmd, Constants::G_SESSION_BUILD);
 
-    // dependencies action
-    m_dependenciesAction = new QAction(tr("Edit Dependencies..."), this);
-    cmd = am->registerAction(m_dependenciesAction, Constants::DEPENDENCIES, globalcontext);
-    mbuild->addAction(cmd, Constants::G_BUILD_SESSION);
-
     // build action
     m_buildAction = new QAction(tr("Build Project"), this);
     cmd = am->registerAction(m_buildAction, Constants::BUILD, globalcontext);
@@ -522,6 +517,9 @@ bool ProjectExplorerPlugin::initialize(const QStringList & /*arguments*/, QStrin
     cmd = am->registerAction(m_runAction, Constants::RUN, globalcontext);
     cmd->setDefaultKeySequence(QKeySequence(tr("Ctrl+R")));
     mbuild->addAction(cmd, Constants::G_BUILD_RUN);
+
+    m_runActionContextMenu = new QAction(runIcon, tr("Run"), this);
+    cmd = am->registerAction(m_runActionContextMenu, Constants::RUNCONTEXTMENU, globalcontext);
     mproject->addAction(cmd, Constants::G_PROJECT_RUN);
 
     Core::ActionContainer *mrc = am->createMenu(Constants::RUNCONFIGURATIONMENU);
@@ -589,13 +587,13 @@ bool ProjectExplorerPlugin::initialize(const QStringList & /*arguments*/, QStrin
     m_renameFileAction->setEnabled(false);
     m_renameFileAction->setVisible(false);
 
-    connect(m_core, SIGNAL(saveSettingsRequested()),
+    connect(core, SIGNAL(saveSettingsRequested()),
         this, SLOT(savePersistentSettings()));
 
-    addAutoReleasedObject(new ProjectTreeWidgetFactory(m_core));
-    addAutoReleasedObject(new FolderNavigationWidgetFactory(m_core));
+    addAutoReleasedObject(new ProjectTreeWidgetFactory(core));
+    addAutoReleasedObject(new FolderNavigationWidgetFactory(core));
 
-    if (QSettings *s = m_core->settings())
+    if (QSettings *s = core->settings())
         m_recentProjects = s->value("ProjectExplorer/RecentProjects/Files", QStringList()).toStringList();
     for (QStringList::iterator it = m_recentProjects.begin(); it != m_recentProjects.end(); ) {
         if (QFileInfo(*it).isFile()) {
@@ -617,9 +615,9 @@ bool ProjectExplorerPlugin::initialize(const QStringList & /*arguments*/, QStrin
     connect(m_cleanAction, SIGNAL(triggered()), this, SLOT(cleanProject()));
     connect(m_cleanSessionAction, SIGNAL(triggered()), this, SLOT(cleanSession()));
     connect(m_runAction, SIGNAL(triggered()), this, SLOT(runProject()));
+    connect(m_runActionContextMenu, SIGNAL(triggered()), this, SLOT(runProjectContextMenu()));
     connect(m_cancelBuildAction, SIGNAL(triggered()), this, SLOT(cancelBuild()));
     connect(m_debugAction, SIGNAL(triggered()), this, SLOT(debugProject()));
-    connect(m_dependenciesAction, SIGNAL(triggered()), this, SLOT(editDependencies()));
     connect(m_unloadAction, SIGNAL(triggered()), this, SLOT(unloadProject()));
     connect(m_clearSession, SIGNAL(triggered()), this, SLOT(clearSession()));
     connect(m_taskAction, SIGNAL(triggered()), this, SLOT(goToTaskWindow()));
@@ -631,7 +629,7 @@ bool ProjectExplorerPlugin::initialize(const QStringList & /*arguments*/, QStrin
 
     updateActions();
 
-    connect(m_core, SIGNAL(coreOpened()), this, SLOT(restoreSession()));
+    connect(Core::ICore::instance(), SIGNAL(coreOpened()), this, SLOT(restoreSession()));
 
     return true;
 }
@@ -651,7 +649,7 @@ template <class Factory, class Iterator>
 ProjectFileFactory * ProjectExplorerPlugin::findProjectFileFactory(const QString &filename) const
 {
     // Find factory
-    if (const Core::MimeType mt = m_core->mimeDatabase()->findByFile(QFileInfo(filename)))
+    if (const Core::MimeType mt = Core::ICore::instance()->mimeDatabase()->findByFile(QFileInfo(filename)))
         if (ProjectFileFactory *pf = findFactory<ProjectFileFactory>(mt.type(), m_fileFactories.constBegin(), m_fileFactories.constEnd()))
             return pf;
     qWarning("Unable to find project file factory for '%s'", filename.toUtf8().constData());
@@ -698,7 +696,7 @@ void ProjectExplorerPlugin::unloadProject()
 
     QList<Core::IFile*> filesToSave;
     filesToSave << fi;
-    filesToSave << m_currentProject->dependencies();
+    // FIXME: What we want here is to check whether we need to safe any of the pro/pri files in this project
 
     // check the number of modified files
     int readonlycount = 0;
@@ -709,9 +707,9 @@ void ProjectExplorerPlugin::unloadProject()
 
     bool success = false;
     if (readonlycount > 0)
-        success = m_core->fileManager()->saveModifiedFiles(filesToSave).isEmpty();
+        success = Core::ICore::instance()->fileManager()->saveModifiedFiles(filesToSave).isEmpty();
     else
-        success = m_core->fileManager()->saveModifiedFilesSilently(filesToSave).isEmpty();
+        success = Core::ICore::instance()->fileManager()->saveModifiedFilesSilently(filesToSave).isEmpty();
 
     if (!success)
         return;
@@ -733,7 +731,7 @@ void ProjectExplorerPlugin::clearSession()
 
 void ProjectExplorerPlugin::extensionsInitialized()
 {
-    m_fileFactories = ProjectFileFactory::createFactories(m_core, &m_projectFilterString);
+    m_fileFactories = ProjectFileFactory::createFactories(&m_projectFilterString);
     foreach (ProjectFileFactory *pf, m_fileFactories) {
         m_profileMimeTypes += pf->mimeTypes();
         addAutoReleasedObject(pf);
@@ -759,7 +757,7 @@ void ProjectExplorerPlugin::newProject()
         defaultLocation = dir.absolutePath();
     }
 
-    m_core->showNewItemDialog(tr("New Project", "Title of dialog"),
+    Core::ICore::instance()->showNewItemDialog(tr("New Project", "Title of dialog"),
                               Core::BaseFileWizard::findWizardsOfKind(Core::IWizard::ProjectWizard),
                               defaultLocation);
     updateActions();
@@ -809,7 +807,7 @@ void ProjectExplorerPlugin::savePersistentSettings()
         m_session->save();
     }
 
-    QSettings *s = m_core->settings();
+    QSettings *s = Core::ICore::instance()->settings();
     if (s) {
         s->setValue("ProjectExplorer/StartupSession", m_session->file()->fileName());
         s->setValue("ProjectExplorer/RecentProjects/Files", m_recentProjects);
@@ -833,14 +831,14 @@ bool ProjectExplorerPlugin::openProjects(const QStringList &fileNames)
     if (debug)
         qDebug() << "ProjectExplorerPlugin - opening projects " << fileNames;
 
-    QList<IProjectManager*> projectManagers =
-        m_core->pluginManager()->getObjects<IProjectManager>();
+    ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
+    QList<IProjectManager*> projectManagers = pm->getObjects<IProjectManager>();
 
     //QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
    // bool blocked = blockSignals(true);
     QList<Project*> openedPro;
-    foreach (QString fileName, fileNames)
-        if (const Core::MimeType mt = m_core->mimeDatabase()->findByFile(QFileInfo(fileName))) {
+    foreach (const QString &fileName, fileNames) {
+        if (const Core::MimeType mt = Core::ICore::instance()->mimeDatabase()->findByFile(QFileInfo(fileName))) {
             foreach (IProjectManager *manager, projectManagers)
                 if (manager->mimeType() == mt.type()) {
                     if (Project *pro = manager->openProject(fileName))
@@ -849,6 +847,7 @@ bool ProjectExplorerPlugin::openProjects(const QStringList &fileNames)
                     break;
                 }
         }
+    }
     //blockSignals(blocked);
 
     if (openedPro.isEmpty()) {
@@ -872,7 +871,7 @@ bool ProjectExplorerPlugin::openProjects(const QStringList &fileNames)
 
     updateActions();
 
-    m_core->modeManager()->activateMode(Core::Constants::MODE_EDIT);
+    Core::ICore::instance()->modeManager()->activateMode(Core::Constants::MODE_EDIT);
     QApplication::restoreOverrideCursor();
 
     return true;
@@ -988,7 +987,7 @@ void ProjectExplorerPlugin::restoreSession()
     }
 
     // update welcome page
-    Core::ModeManager *modeManager = m_core->modeManager();
+    Core::ModeManager *modeManager = Core::ICore::instance()->modeManager();
     connect(modeManager, SIGNAL(currentModeChanged(Core::IMode*)), this, SLOT(currentModeChanged(Core::IMode*)));
     if (Core::Internal::WelcomeMode *welcomeMode = qobject_cast<Core::Internal::WelcomeMode*>(modeManager->mode(Core::Constants::MODE_WELCOME))) {
         updateWelcomePage(welcomeMode);
@@ -996,7 +995,7 @@ void ProjectExplorerPlugin::restoreSession()
         connect(welcomeMode, SIGNAL(requestProject(QString)), this, SLOT(loadProject(QString)));
     }
 
-    m_core->openFiles(arguments);
+    Core::ICore::instance()->openFiles(arguments);
     updateActions();
 
 }
@@ -1085,6 +1084,8 @@ void ProjectExplorerPlugin::buildQueueFinished(bool success)
 
             connect(control, SIGNAL(addToOutputWindow(RunControl *, const QString &)),
                     this, SLOT(addToApplicationOutputWindow(RunControl *, const QString &)));
+            connect(control, SIGNAL(addToOutputWindowInline(RunControl *, const QString &)),
+                    this, SLOT(addToApplicationOutputWindowInline(RunControl *, const QString &)));
             connect(control, SIGNAL(error(RunControl *, const QString &)),
                     this, SLOT(addErrorToApplicationOutputWindow(RunControl *, const QString &)));
             connect(control, SIGNAL(finished()),
@@ -1121,6 +1122,8 @@ void ProjectExplorerPlugin::setCurrent(Project *project, QString filePath, Node
     else
         node = m_session->nodeForFile(filePath);
 
+    Core::ICore *core = Core::ICore::instance();
+
     bool projectChanged = false;
     if (m_currentProject != project) {
         int oldContext = -1;
@@ -1135,11 +1138,11 @@ void ProjectExplorerPlugin::setCurrent(Project *project, QString filePath, Node
             newContext = project->projectManager()->projectContext();
             newLanguageID = project->projectManager()->projectLanguage();
         }
-        m_core->removeAdditionalContext(oldContext);
-        m_core->removeAdditionalContext(oldLanguageID);
-        m_core->addAdditionalContext(newContext);
-        m_core->addAdditionalContext(newLanguageID);
-        m_core->updateContext();
+        core->removeAdditionalContext(oldContext);
+        core->removeAdditionalContext(oldLanguageID);
+        core->addAdditionalContext(newContext);
+        core->addAdditionalContext(newLanguageID);
+        core->updateContext();
 
         m_currentProject = project;
 
@@ -1157,16 +1160,16 @@ void ProjectExplorerPlugin::setCurrent(Project *project, QString filePath, Node
             qDebug() << "ProjectExplorer - currentProjectChanged(" << (project ? project->name() : "0") << ")";
         // Enable the right VCS
         if (const Core::IFile *projectFile = project ? project->file() : static_cast<const Core::IFile *>(0)) {
-            m_core->vcsManager()->setVCSEnabled(QFileInfo(projectFile->fileName()).absolutePath());
+            core->vcsManager()->setVCSEnabled(QFileInfo(projectFile->fileName()).absolutePath());
         } else {
-            m_core->vcsManager()->setAllVCSEnabled();
+            core->vcsManager()->setAllVCSEnabled();
         }
 
         emit currentProjectChanged(project);
         updateActions();
     }
 
-    m_core->fileManager()->setCurrentFile(filePath);
+    core->fileManager()->setCurrentFile(filePath);
 }
 
 void ProjectExplorerPlugin::updateActions()
@@ -1198,13 +1201,13 @@ void ProjectExplorerPlugin::updateActions()
     m_rebuildSessionAction->setEnabled(hasProjects && !building);
     m_cleanSessionAction->setEnabled(hasProjects && !building);
     m_cancelBuildAction->setEnabled(building);
-    m_dependenciesAction->setEnabled(hasProjects && !building);
 
     updateRunAction();
 
     updateTaskActions();
 }
 
+
 // NBS TODO check projectOrder()
 // what we want here is all the projects pro depends on
 QStringList ProjectExplorerPlugin::allFilesWithDependencies(Project *pro)
@@ -1227,7 +1230,7 @@ bool ProjectExplorerPlugin::saveModifiedFiles(const QList<Project *> & projects)
     if (debug)
         qDebug() << "ProjectExplorerPlugin::saveModifiedFiles";
 
-    QList<Core::IFile *> modifiedFi = m_core->fileManager()->modifiedFiles();
+    QList<Core::IFile *> modifiedFi = Core::ICore::instance()->fileManager()->modifiedFiles();
     QMap<QString, Core::IFile *> modified;
 
     QStringList allFiles;
@@ -1258,7 +1261,7 @@ bool ProjectExplorerPlugin::saveModifiedFiles(const QList<Project *> & projects)
 
     if (!filesToSave.isEmpty()) {
         bool cancelled;
-        m_core->fileManager()->saveModifiedFiles(filesToSave, &cancelled,
+        Core::ICore::instance()->fileManager()->saveModifiedFiles(filesToSave, &cancelled,
             tr("The following dependencies are modified, do you want to save them?"));
         if (cancelled) {
             return false;
@@ -1347,7 +1350,16 @@ void ProjectExplorerPlugin::cleanSession()
 
 void ProjectExplorerPlugin::runProject()
 {
-    Project *pro = startupProject();
+    runProjectImpl(startupProject());
+}
+
+void ProjectExplorerPlugin::runProjectContextMenu()
+{
+    runProjectImpl(m_currentProject);
+}
+
+void ProjectExplorerPlugin::runProjectImpl(Project *pro)
+{
     if (!pro)
         return;
 
@@ -1380,6 +1392,11 @@ void ProjectExplorerPlugin::addToApplicationOutputWindow(RunControl *rc, const Q
     m_outputPane->appendOutput(rc, line);
 }
 
+void ProjectExplorerPlugin::addToApplicationOutputWindowInline(RunControl *rc, const QString &line)
+{
+    m_outputPane->appendOutputInline(rc, line);
+}
+
 void ProjectExplorerPlugin::addErrorToApplicationOutputWindow(RunControl *rc, const QString &error)
 {
     m_outputPane->appendOutput(rc, error);
@@ -1418,7 +1435,8 @@ void ProjectExplorerPlugin::startupProjectChanged()
 // NBS TODO implement more than one runner
 IRunConfigurationRunner *ProjectExplorerPlugin::findRunner(QSharedPointer<RunConfiguration> config, const QString &mode)
 {
-    const QList<IRunConfigurationRunner *> runners = m_core->pluginManager()->getObjects<IRunConfigurationRunner>();
+    ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
+    const QList<IRunConfigurationRunner *> runners = pm->getObjects<IRunConfigurationRunner>();
     foreach (IRunConfigurationRunner *runner, runners)
         if (runner->canRun(config, mode))
             return runner;
@@ -1428,10 +1446,14 @@ IRunConfigurationRunner *ProjectExplorerPlugin::findRunner(QSharedPointer<RunCon
 void ProjectExplorerPlugin::updateRunAction()
 {
     const Project *project = startupProject();
-    const bool canRun = project && findRunner(project->activeRunConfiguration(), ProjectExplorer::Constants::RUNMODE);
+    bool canRun = project && findRunner(project->activeRunConfiguration(), ProjectExplorer::Constants::RUNMODE);
     const bool canDebug = project && !m_debuggingRunControl && findRunner(project->activeRunConfiguration(), ProjectExplorer::Constants::DEBUGMODE);
     const bool building = m_buildManager->isBuilding();
     m_runAction->setEnabled(canRun && !building);
+
+    canRun = m_currentProject && findRunner(m_currentProject->activeRunConfiguration(), ProjectExplorer::Constants::RUNMODE);
+    m_runActionContextMenu->setEnabled(canRun && !building);
+
     m_debugAction->setEnabled(canDebug && !building);
 }
 
@@ -1444,14 +1466,6 @@ void ProjectExplorerPlugin::cancelBuild()
         m_buildManager->cancel();
 }
 
-void ProjectExplorerPlugin::editDependencies()
-{
-    if (debug)
-        qDebug() << "ProjectExplorerPlugin::editDependencies";
-
-    m_session->editDependencies();
-}
-
 void ProjectExplorerPlugin::addToRecentProjects(const QString &fileName)
 {
     if (debug)
@@ -1474,7 +1488,7 @@ void ProjectExplorerPlugin::updateRecentProjectMenu()
         qDebug() << "ProjectExplorerPlugin::updateRecentProjectMenu";
 
     Core::ActionContainer *aci =
-        m_core->actionManager()->actionContainer(Constants::M_RECENTPROJECTS);
+        Core::ICore::instance()->actionManager()->actionContainer(Constants::M_RECENTPROJECTS);
     QMenu *menu = aci->menu();
     menu->clear();
     m_recentProjectsActions.clear();
@@ -1541,7 +1555,7 @@ void ProjectExplorerPlugin::addNewFile()
     if (!m_currentNode && m_currentNode->nodeType() == ProjectNodeType)
         return;
     const QString location = QFileInfo(m_currentNode->path()).dir().absolutePath();
-    m_core->showNewItemDialog(tr("New File", "Title of dialog"),
+    Core::ICore::instance()->showNewItemDialog(tr("New File", "Title of dialog"),
                               Core::BaseFileWizard::findWizardsOfKind(Core::IWizard::FileWizard)
                               + Core::BaseFileWizard::findWizardsOfKind(Core::IWizard::ClassWizard),
                               location);
@@ -1552,14 +1566,15 @@ void ProjectExplorerPlugin::addExistingFiles()
     if (!m_currentNode && m_currentNode->nodeType() == ProjectNodeType)
         return;
     ProjectNode *projectNode = qobject_cast<ProjectNode*>(m_currentNode);
+    Core::ICore *core = Core::ICore::instance();
     const QString dir = QFileInfo(m_currentNode->path()).dir().absolutePath();
-    QStringList fileNames = QFileDialog::getOpenFileNames(m_core->mainWindow(), tr("Add Existing Files"), dir);
+    QStringList fileNames = QFileDialog::getOpenFileNames(core->mainWindow(), tr("Add Existing Files"), dir);
     if (fileNames.isEmpty())
         return;
 
     QHash<FileType, QString> fileTypeToFiles;
     foreach (const QString &fileName, fileNames) {
-        FileType fileType = typeForFileName(m_core->mimeDatabase(), QFileInfo(fileName));
+        FileType fileType = typeForFileName(core->mimeDatabase(), QFileInfo(fileName));
         fileTypeToFiles.insertMulti(fileType, fileName);
     }
 
@@ -1570,17 +1585,17 @@ void ProjectExplorerPlugin::addExistingFiles()
     if (!notAdded.isEmpty()) {
         QString message = tr("Could not add following files to project %1:\n").arg(projectNode->name());
         QString files = notAdded.join("\n");
-        QMessageBox::warning(m_core->mainWindow(), tr("Add files to project failed"),
+        QMessageBox::warning(core->mainWindow(), tr("Add files to project failed"),
                              message + files);
         foreach (const QString &file, notAdded)
             fileNames.removeOne(file);
     }
 
-    if (Core::IVersionControl *vcManager = m_core->vcsManager()->findVersionControlForDirectory(dir))
+    if (Core::IVersionControl *vcManager = core->vcsManager()->findVersionControlForDirectory(dir))
         if (vcManager->supportsOperation(Core::IVersionControl::AddOperation)) {
             const QString files = fileNames.join(QString(QLatin1Char('\n')));
             QMessageBox::StandardButton button =
-                QMessageBox::question(m_core->mainWindow(), tr("Add to Version Control"),
+                QMessageBox::question(core->mainWindow(), tr("Add to Version Control"),
                                       tr("Add files\n%1\nto version control (%2)?").arg(files, vcManager->name()),
                                       QMessageBox::Yes | QMessageBox::No);
             if (button == QMessageBox::Yes) {
@@ -1593,7 +1608,7 @@ void ProjectExplorerPlugin::addExistingFiles()
                 if (!notAddedToVc.isEmpty()) {
                     const QString message = tr("Could not add following files to version control (%1)\n").arg(vcManager->name());
                     const QString filesNotAdded = notAddedToVc.join(QString(QLatin1Char('\n')));
-                    QMessageBox::warning(m_core->mainWindow(), tr("Add files to version control failed"),
+                    QMessageBox::warning(core->mainWindow(), tr("Add files to version control failed"),
                                          message + filesNotAdded);
                 }
             }
@@ -1604,19 +1619,22 @@ void ProjectExplorerPlugin::openFile()
 {
     if (m_currentNode)
         return;
-    m_core->editorManager()->openEditor(m_currentNode->path());
-    m_core->editorManager()->ensureEditorManagerVisible();
+    Core::ICore *core = Core::ICore::instance();
+    core->editorManager()->openEditor(m_currentNode->path());
+    core->editorManager()->ensureEditorManagerVisible();
 }
 
 void ProjectExplorerPlugin::removeFile()
 {
     if (!m_currentNode && m_currentNode->nodeType() == FileNodeType)
         return;
+
     FileNode *fileNode = qobject_cast<FileNode*>(m_currentNode);
+    Core::ICore *core = Core::ICore::instance();
 
     const QString filePath = m_currentNode->path();
     const QString fileDir = QFileInfo(filePath).dir().absolutePath();
-    RemoveFileDialog removeFileDialog(filePath, m_core->mainWindow());
+    RemoveFileDialog removeFileDialog(filePath, core->mainWindow());
 
     if (removeFileDialog.exec() == QDialog::Accepted) {
         const bool deleteFile = removeFileDialog.isDeleteFileChecked();
@@ -1626,13 +1644,13 @@ void ProjectExplorerPlugin::removeFile()
         Q_ASSERT(projectNode);
 
         if (!projectNode->removeFiles(fileNode->fileType(), QStringList(filePath))) {
-            QMessageBox::warning(m_core->mainWindow(), tr("Remove file failed"),
+            QMessageBox::warning(core->mainWindow(), tr("Remove file failed"),
                                  tr("Could not remove file %1 from project %2.").arg(filePath).arg(projectNode->name()));
             return;
         }
 
         // remove from version control
-        m_core->vcsManager()->showDeleteDialog(filePath);
+        core->vcsManager()->showDeleteDialog(filePath);
 
         // remove from file system
         if (deleteFile) {
@@ -1641,7 +1659,7 @@ void ProjectExplorerPlugin::removeFile()
             if (file.exists()) {
                 // could have been deleted by vc
                 if (!file.remove())
-                    QMessageBox::warning(m_core->mainWindow(), tr("Delete file failed"),
+                    QMessageBox::warning(core->mainWindow(), tr("Delete file failed"),
                                          tr("Could not delete file %1.").arg(filePath));
             }
         }
@@ -1745,11 +1763,12 @@ void ProjectExplorerPlugin::populateOpenWithMenu()
     bool anyMatches = false;
     const QString fileName = currentNode()->path();
 
-    if (const Core::MimeType mt = m_core->mimeDatabase()->findByFile(QFileInfo(fileName))) {
-        const EditorFactoryList factories = m_core->editorManager()->editorFactories(mt, false);
+    Core::ICore *core = Core::ICore::instance();
+    if (const Core::MimeType mt = core->mimeDatabase()->findByFile(QFileInfo(fileName))) {
+        const EditorFactoryList factories = core->editorManager()->editorFactories(mt, false);
         anyMatches = !factories.empty();
         if (anyMatches) {
-            const QList<Core::IEditor *> editorsOpenForFile = m_core->editorManager()->editorsForFileName(fileName);
+            const QList<Core::IEditor *> editorsOpenForFile = core->editorManager()->editorsForFileName(fileName);
             // Add all suitable editors
             foreach (Core::IEditorFactory *editorFactory, factories) {
                 // Add action to open with this very editor factory
@@ -1784,8 +1803,9 @@ void ProjectExplorerPlugin::openWithMenuTriggered(QAction *action)
         qWarning() << "Editor Factory not attached to action, can't happen"<<editorFactory;
         return;
     }
-    m_core->editorManager()->openEditor(currentNode()->path(), editorFactory->kind());
-    m_core->editorManager()->ensureEditorManagerVisible();
+    Core::EditorManager *em = Core::ICore::instance()->editorManager();
+    em->openEditor(currentNode()->path(), editorFactory->kind());
+    em->ensureEditorManagerVisible();
 }
 
 void ProjectExplorerPlugin::updateSessionMenu()
diff --git a/src/plugins/projectexplorer/projectexplorer.h b/src/plugins/projectexplorer/projectexplorer.h
index 2c1127ff5c63b06ef201db6f6a41d4359bace26e..d21adb8abda09a5404ccbd6866f32986737542c0 100644
--- a/src/plugins/projectexplorer/projectexplorer.h
+++ b/src/plugins/projectexplorer/projectexplorer.h
@@ -54,7 +54,6 @@
 
 namespace Core {
 class IContext;
-class ICore;
 class IMode;
 class IFileFactory;
 namespace Internal {
@@ -138,7 +137,6 @@ private slots:
     void cleanSession();
     void cancelBuild();
     void debugProject();
-    void editDependencies();
     void loadAction();
     void unloadProject();
     void clearSession();
@@ -156,6 +154,7 @@ private slots:
     void restoreSession();
     void loadSession(const QString &session);
     void runProject();
+    void runProjectContextMenu();
     void savePersistentSettings();
     void goToTaskWindow();
 
@@ -180,6 +179,7 @@ private slots:
     void updateRunAction();
 
     void addToApplicationOutputWindow(RunControl *, const QString &line);
+    void addToApplicationOutputWindowInline(RunControl *, const QString &line);
     void addErrorToApplicationOutputWindow(RunControl *, const QString &error);
     void updateTaskActions();
 
@@ -187,6 +187,7 @@ private slots:
     void currentModeChanged(Core::IMode *mode);
 
 private:
+    void runProjectImpl(Project *pro);
     void setCurrent(Project *project, QString filePath, Node *node);
 
     QStringList allFilesWithDependencies(Project *pro);
@@ -222,9 +223,9 @@ private:
     QAction *m_cleanAction;
     QAction *m_cleanSessionAction;
     QAction *m_runAction;
+    QAction *m_runActionContextMenu;
     QAction *m_cancelBuildAction;
     QAction *m_debugAction;
-    QAction *m_dependenciesAction;
     QAction *m_taskAction;
     QAction *m_addNewFileAction;
     QAction *m_addExistingFilesAction;
@@ -237,7 +238,6 @@ private:
     QMenu *m_runConfigurationMenu;
     QActionGroup *m_runConfigurationActionGroup;
 
-    Core::ICore *m_core;
     Internal::ProjectWindow *m_proWindow;
     SessionManager *m_session;
 
@@ -262,6 +262,7 @@ private:
 };
 
 namespace Internal {
+
 class CoreListenerCheckingForRunningBuild : public Core::ICoreListener
 {
     Q_OBJECT
@@ -273,7 +274,8 @@ public:
 private:
     BuildManager *m_manager;
 };
-}
+
+} // namespace Internal
 
 } // namespace ProjectExplorer
 
diff --git a/src/plugins/projectexplorer/projectexplorer.pro b/src/plugins/projectexplorer/projectexplorer.pro
index bbb8a4c74d9304ee40bf1f9c47141bbd4eb349ef..e345ff1c1cea37f8884e4b1843cdf2d9e80b5adc 100644
--- a/src/plugins/projectexplorer/projectexplorer.pro
+++ b/src/plugins/projectexplorer/projectexplorer.pro
@@ -15,7 +15,7 @@ HEADERS += projectexplorer.h \
     persistentsettings.h \
     projectfilewizardextension.h \
     session.h \
-    dependenciesdialog.h \
+    dependenciespanel.h \
     allprojectsfilter.h \
     buildparserinterface.h \
     projectexplorerconstants.h \
@@ -62,7 +62,7 @@ SOURCES += projectexplorer.cpp \
     persistentsettings.cpp \
     projectfilewizardextension.cpp \
     session.cpp \
-    dependenciesdialog.cpp \
+    dependenciespanel.cpp \
     allprojectsfilter.cpp \
     currentprojectfilter.cpp \
     scriptwrappers.cpp \
@@ -94,7 +94,7 @@ SOURCES += projectexplorer.cpp \
     nodesvisitor.cpp \
     projectmodels.cpp \
     currentprojectfind.cpp
-FORMS += dependenciesdialog.ui \
+FORMS += dependenciespanel.ui \
     buildsettingspropertiespage.ui \
     processstep.ui \
     editorsettingspropertiespage.ui \
diff --git a/src/plugins/projectexplorer/projectexplorerconstants.h b/src/plugins/projectexplorer/projectexplorerconstants.h
index ef745e69c908961666a8dc1815e2fafdf4099cca..e65ca54d099524d1f114829786d46f61f58a523b 100644
--- a/src/plugins/projectexplorer/projectexplorerconstants.h
+++ b/src/plugins/projectexplorer/projectexplorerconstants.h
@@ -57,6 +57,7 @@ const char * const BUILDCONFIGURATIONMENU = "ProjectExplorer.BuildConfigurationM
 const char * const CANCELBUILD          = "ProjectExplorer.CancelBuild";
 const char * const RUNCONFIGURATIONMENU = "ProjectExplorer.RunConfigurationMenu";
 const char * const RUN                  = "ProjectExplorer.Run";
+const char * const RUNCONTEXTMENU       = "ProjectExplorer.RunContextMenu";
 const char * const STOP                 = "ProjectExplorer.Stop";
 const char * const DEBUG                = "ProjectExplorer.Debug";
 const char * const DEPENDENCIES         = "ProjectExplorer.Dependencies";
diff --git a/src/plugins/projectexplorer/projectfilewizardextension.cpp b/src/plugins/projectexplorer/projectfilewizardextension.cpp
index 6b928db16b553ca39369ac295180aff76420b8bc..b897dd44ff91082fb7704fa870d1376bd7043398 100644
--- a/src/plugins/projectexplorer/projectfilewizardextension.cpp
+++ b/src/plugins/projectexplorer/projectfilewizardextension.cpp
@@ -87,16 +87,16 @@ void AllProjectNodesVisitor::visitProjectNode(ProjectNode *node)
 }
 
 // --------- ProjectWizardContext
-struct ProjectWizardContext {
+struct ProjectWizardContext
+{
     Core::IVersionControl *versionControl;
     ProjectNodeList projects;
     ProjectWizardPage *page;
 };
 
 // ---- ProjectFileWizardExtension
-ProjectFileWizardExtension::ProjectFileWizardExtension(Core::ICore *core) :
-    m_core(core),
-    m_context(0)
+ProjectFileWizardExtension::ProjectFileWizardExtension()
+  : m_context(0)
 {
 }
 
@@ -115,7 +115,7 @@ void ProjectFileWizardExtension::firstExtensionPageShown(const QList<Core::Gener
         fileNames.push_back(f.path());
 
     const QString directory = QFileInfo(fileNames.front()).absolutePath();
-    m_context->versionControl = m_core->vcsManager()->findVersionControlForDirectory(directory);
+    m_context->versionControl = Core::ICore::instance()->vcsManager()->findVersionControlForDirectory(directory);
 
     m_context->page->setFilesDisplay(fileNames);
 
@@ -175,7 +175,7 @@ bool ProjectFileWizardExtension::process(const QList<Core::GeneratedFile> &files
         TypeFileMap typeFileMap;
         foreach (const Core::GeneratedFile &generatedFile, files) {
             const QString path = generatedFile.path();
-            typeFileMap.insert(typeForFileName(m_core->mimeDatabase(), path), path);
+            typeFileMap.insert(typeForFileName(Core::ICore::instance()->mimeDatabase(), path), path);
         }
         foreach (FileType type, typeFileMap.uniqueKeys()) {
             const QStringList files = typeFileMap.values(type);
diff --git a/src/plugins/projectexplorer/projectfilewizardextension.h b/src/plugins/projectexplorer/projectfilewizardextension.h
index 3008b0772e69f80d04bdde553f55c0f7483278f1..e4930e9ff0945c13e27ee7103c5d8ab76a2e8931 100644
--- a/src/plugins/projectexplorer/projectfilewizardextension.h
+++ b/src/plugins/projectexplorer/projectfilewizardextension.h
@@ -36,10 +36,6 @@
 
 #include <coreplugin/ifilewizardextension.h>
 
-namespace Core {
-    class ICore;
-}
-
 namespace ProjectExplorer {
 
 namespace Internal {
@@ -54,7 +50,7 @@ class ProjectFileWizardExtension : public Core::IFileWizardExtension
 {
     Q_OBJECT
 public:
-    explicit ProjectFileWizardExtension(Core::ICore *core);
+    explicit ProjectFileWizardExtension();
     virtual ~ProjectFileWizardExtension();
 
     virtual QList<QWizardPage *> extensionPages(const Core::IWizard *wizard);
@@ -64,7 +60,6 @@ public slots:
     virtual void firstExtensionPageShown(const QList<Core::GeneratedFile> &);
 
 private:
-    Core::ICore *m_core;
     ProjectWizardContext *m_context;
 };
 
diff --git a/src/plugins/projectexplorer/projectwindow.cpp b/src/plugins/projectexplorer/projectwindow.cpp
index afeb3c3469aaed0ad94cd56970988111a4660a36..594b57c2c1ea0344d752479561f1af3b8b558997 100644
--- a/src/plugins/projectexplorer/projectwindow.cpp
+++ b/src/plugins/projectexplorer/projectwindow.cpp
@@ -43,6 +43,7 @@
 #include <coreplugin/minisplitter.h>
 #include <coreplugin/fileiconprovider.h>
 #include <coreplugin/icore.h>
+#include <extensionsystem/pluginmanager.h>
 
 #include <QtCore/QDebug>
 #include <QtGui/QApplication>
@@ -60,15 +61,12 @@ namespace {
 bool debug = false;
 }
 
-ProjectWindow::ProjectWindow(Core::ICore *core,
-                             QWidget *parent) :
-    QWidget(parent),
-    m_core(core)
+ProjectWindow::ProjectWindow(QWidget *parent) : QWidget(parent)
 {
     setWindowTitle(tr("Project Explorer"));
     setWindowIcon(QIcon(":/projectexplorer/images/projectexplorer.png"));
 
-    ExtensionSystem::PluginManager *pm = m_core->pluginManager();
+    ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
     ProjectExplorerPlugin *projectExplorer = m_projectExplorer = pm->getObject<ProjectExplorerPlugin>();
     m_session = projectExplorer->session();
 
diff --git a/src/plugins/projectexplorer/projectwindow.h b/src/plugins/projectexplorer/projectwindow.h
index c9b387ceaa29e0c7d9cde7742c78b254e001624a..b7ea0b6005f41c3623caeb4e5b199aa7039fd164 100644
--- a/src/plugins/projectexplorer/projectwindow.h
+++ b/src/plugins/projectexplorer/projectwindow.h
@@ -43,10 +43,6 @@ class QTreeWidget;
 class QTreeWidgetItem;
 QT_END_NAMESPACE
 
-namespace Core {
-class ICore;
-}
-
 namespace ProjectExplorer {
 
 class Project;
@@ -56,13 +52,12 @@ class SessionManager;
 
 namespace Internal {
 
-
 class ProjectWindow : public QWidget
 {
     Q_OBJECT
 
 public:
-    ProjectWindow(Core::ICore *core, QWidget *parent = 0);
+    explicit ProjectWindow(QWidget *parent = 0);
     ~ProjectWindow();
 
 private slots:
@@ -75,7 +70,6 @@ private slots:
     void handleCurrentItemChanged(QTreeWidgetItem *);
 
 private:
-    Core::ICore *m_core;
     SessionManager *m_session;
     ProjectExplorerPlugin *m_projectExplorer;
 
diff --git a/src/plugins/projectexplorer/runconfiguration.h b/src/plugins/projectexplorer/runconfiguration.h
index acc11cd932ad0bdd68495d5287ddbc9968e8ea33..0bd593c20e24c40abd388252924694f234776908 100644
--- a/src/plugins/projectexplorer/runconfiguration.h
+++ b/src/plugins/projectexplorer/runconfiguration.h
@@ -143,6 +143,7 @@ public:
     QSharedPointer<RunConfiguration> runConfiguration();
 signals:
     void addToOutputWindow(RunControl *, const QString &line);
+    void addToOutputWindowInline(RunControl *, const QString &line);
     void error(RunControl *, const QString &error);
     void started();
     void finished();
diff --git a/src/plugins/projectexplorer/session.cpp b/src/plugins/projectexplorer/session.cpp
index ef848ff178b157c3458116a8fffd201d0df77883..f5b83d162cd2be7e07f2aacbd21dbf83a761fa5d 100644
--- a/src/plugins/projectexplorer/session.cpp
+++ b/src/plugins/projectexplorer/session.cpp
@@ -33,7 +33,6 @@
 
 #include "session.h"
 
-#include "dependenciesdialog.h"
 #include "project.h"
 #include "projectexplorer.h"
 #include "projectexplorerconstants.h"
@@ -59,6 +58,7 @@
 #include <QtCore/QFuture>
 #include <QtCore/QSettings>
 
+#include <QtGui/QApplication>
 #include <QtGui/QMainWindow>
 #include <QtGui/QMessageBox>
 
@@ -118,7 +118,6 @@ private:
 
 using namespace ProjectExplorer;
 using Internal::SessionFile;
-using Internal::DependenciesDialog;
 
 
 void SessionFile::sessionLoadingProgress()
@@ -452,7 +451,28 @@ bool SessionManager::recursiveDependencyCheck(const QString &newDep, const QStri
     return true;
 }
 
-bool SessionManager::hasDependency(Project *project, Project *depProject) const
+/*
+ * TODO: The dependency management exposes an interface based on projects, but
+ * is internally purely string based. This is suboptimal. Probably it would be
+ * nicer to map the filenames to projects on load and only map it back to
+ * filenames when saving.
+ */
+
+QList<Project *> SessionManager::dependencies(const Project *project) const
+{
+    const QString &proName = project->file()->fileName();
+    const QStringList &proDeps = m_file->m_depMap.value(proName);
+
+    QList<Project *> projects;
+    foreach (const QString &dep, proDeps) {
+        if (Project *pro = projectForFile(dep))
+            projects += pro;
+    }
+
+    return projects;
+}
+
+bool SessionManager::hasDependency(const Project *project, const Project *depProject) const
 {
     const QString &proName = project->file()->fileName();
     const QString &depName = depProject->file()->fileName();
@@ -461,7 +481,7 @@ bool SessionManager::hasDependency(Project *project, Project *depProject) const
     return proDeps.contains(depName);
 }
 
-bool SessionManager::canAddDependency(Project *project, Project *depProject) const
+bool SessionManager::canAddDependency(const Project *project, const Project *depProject) const
 {
     const QString &newDep = project->file()->fileName();
     const QString &checkDep = depProject->file()->fileName();
@@ -469,7 +489,7 @@ bool SessionManager::canAddDependency(Project *project, Project *depProject) con
     return recursiveDependencyCheck(newDep, checkDep);
 }
 
-bool SessionManager::addDependency(Project *project, Project *depProject)
+bool SessionManager::addDependency(const Project *project, const Project *depProject)
 {
     const QString &proName = project->file()->fileName();
     const QString &depName = depProject->file()->fileName();
@@ -487,6 +507,20 @@ bool SessionManager::addDependency(Project *project, Project *depProject)
     return true;
 }
 
+void SessionManager::removeDependency(const Project *project, const Project *depProject)
+{
+    const QString &proName = project->file()->fileName();
+    const QString &depName = depProject->file()->fileName();
+
+    QStringList proDeps = m_file->m_depMap.value(proName);
+    proDeps.removeAll(depName);
+    if (proDeps.isEmpty()) {
+        m_file->m_depMap.remove(proName);
+    } else {
+        m_file->m_depMap[proName] = proDeps;
+    }
+}
+
 void SessionManager::setStartupProject(Project *startupProject)
 {
     if (debug)
@@ -505,21 +539,6 @@ Project *SessionManager::startupProject() const
     return m_file->m_startupProject;
 }
 
-void SessionManager::removeDependency(Project *project,
-    Project *depProject)
-{
-    const QString &proName = project->file()->fileName();
-    const QString &depName = depProject->file()->fileName();
-
-    QStringList proDeps = m_file->m_depMap.value(proName);
-    proDeps.removeAll(depName);
-    if (proDeps.isEmpty()) {
-        m_file->m_depMap.remove(proName);
-    } else {
-        m_file->m_depMap[proName] = proDeps;
-    }
-}
-
 void SessionManager::addProject(Project *project)
 {
     addProjects(QList<Project*>() << project);
@@ -702,12 +721,6 @@ bool SessionManager::clear()
     return success;
 }
 
-void SessionManager::editDependencies()
-{
-    DependenciesDialog dlg(0, this);
-    dlg.exec();
-}
-
 const QList<Project *> &SessionManager::projects() const
 {
     return m_file->m_projects;
diff --git a/src/plugins/projectexplorer/session.h b/src/plugins/projectexplorer/session.h
index 49d15b7e8df43b52cc6eb99d5a03a4c9d48b4e41..f8768ab468bb57087f4edcd09626ffaf5169b4f6 100644
--- a/src/plugins/projectexplorer/session.h
+++ b/src/plugins/projectexplorer/session.h
@@ -123,16 +123,13 @@ public:
     void removeProject(Project *project);
     void removeProjects(QList<Project *> remove);
 
-    void editDependencies();
     void setStartupProject(Project *startupProject);
 
-    // NBS think about dependency management again.
-    // Probably kill these here
-    bool canAddDependency(Project *project, Project *depProject) const;
-    bool hasDependency(Project *project, Project *depProject) const;
-    // adds the 'requiredProject' as a dependency to 'project'
-    bool addDependency(Project *project, Project *depProject);
-    void removeDependency(Project *project, Project *depProject);
+    QList<Project *> dependencies(const Project *project) const;
+    bool hasDependency(const Project *project, const Project *depProject) const;
+    bool canAddDependency(const Project *project, const Project *depProject) const;
+    bool addDependency(const Project *project, const Project *depProject);
+    void removeDependency(const Project *project, const Project *depProject);
 
     Core::IFile *file() const;
     Project *startupProject() const;
diff --git a/src/plugins/projectexplorer/taskwindow.cpp b/src/plugins/projectexplorer/taskwindow.cpp
index 5421b9bbe63f7c1a3a61e89705a33c0f81931436..03243abb5ca1a9f74aff29e1ca388e59133a3539 100644
--- a/src/plugins/projectexplorer/taskwindow.cpp
+++ b/src/plugins/projectexplorer/taskwindow.cpp
@@ -38,6 +38,7 @@
 #include <coreplugin/editormanager/editormanager.h>
 #include <coreplugin/coreconstants.h>
 #include <coreplugin/uniqueidmanager.h>
+#include <extensionsystem/pluginmanager.h>
 #include <texteditor/itexteditor.h>
 #include <texteditor/basetexteditor.h>
 #include <projectexplorerconstants.h>
@@ -250,7 +251,7 @@ void TaskModel::setFileNotFound(const QModelIndex &idx, bool b)
 
 TaskWindow::TaskWindow()
 {
-    m_coreIFace = ExtensionSystem::PluginManager::instance()->getObject<Core::ICore>();
+    Core::ICore *core = Core::ICore::instance();
 
     m_model = new TaskModel;
     m_listview = new TaskView;
@@ -265,10 +266,10 @@ TaskWindow::TaskWindow()
     m_listview->setContextMenuPolicy(Qt::ActionsContextMenu);
 
     m_taskWindowContext = new TaskWindowContext(m_listview);
-    m_coreIFace->addContextObject(m_taskWindowContext);
+    core->addContextObject(m_taskWindowContext);
 
     m_copyAction = new QAction(QIcon(Core::Constants::ICON_COPY), tr("&Copy"), this);
-    m_coreIFace->actionManager()->
+    core->actionManager()->
             registerAction(m_copyAction, Core::Constants::COPY, m_taskWindowContext->context());
     m_listview->addAction(m_copyAction);
 
@@ -288,7 +289,7 @@ TaskWindow::TaskWindow()
 
 TaskWindow::~TaskWindow()
 {
-    m_coreIFace->removeContextObject(m_taskWindowContext);
+    Core::ICore::instance()->removeContextObject(m_taskWindowContext);
     delete m_listview;
     delete m_model;
 }
@@ -314,7 +315,6 @@ void TaskWindow::clearContents()
 
 void TaskWindow::visibilityChanged(bool /* b */)
 {
-
 }
 
 void TaskWindow::addItem(ProjectExplorer::BuildParserInterface::PatternType type,
@@ -578,7 +578,7 @@ void TaskDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option,
 TaskWindowContext::TaskWindowContext(QWidget *widget)
     : m_taskList(widget)
 {
-    Core::ICore *core = ExtensionSystem::PluginManager::instance()->getObject<Core::ICore>();
+    Core::ICore *core = Core::ICore::instance();
     m_context << core->uniqueIDManager()->uniqueIdentifier(Core::Constants::C_PROBLEM_PANE);
 }
 
diff --git a/src/plugins/projectexplorer/taskwindow.h b/src/plugins/projectexplorer/taskwindow.h
index 71875f9e84fb7ace6514fb2a50bde22462d7bc6b..269f6e3ce6201c8bed8c565631b957bde756a7d9 100644
--- a/src/plugins/projectexplorer/taskwindow.h
+++ b/src/plugins/projectexplorer/taskwindow.h
@@ -89,7 +89,6 @@ private slots:
 private:
     int sizeHintForColumn(int column) const;
 
-    Core::ICore *m_coreIFace;
     int m_errorCount;
     int m_currentTask;
 
diff --git a/src/plugins/qt4projectmanager/buildparserfactory.h b/src/plugins/qt4projectmanager/buildparserfactory.h
index 0e8495d5fb0f1a1970b6af59e37d23cf27cc5e50..a52c33f719323800d01e77cc7a47d694ca220e75 100644
--- a/src/plugins/qt4projectmanager/buildparserfactory.h
+++ b/src/plugins/qt4projectmanager/buildparserfactory.h
@@ -34,12 +34,8 @@
 #ifndef BUILDPARSERFACTORY_H
 #define BUILDPARSERFACTORY_H
 
-#include <projectexplorer/ProjectExplorerInterfaces>
+#include <projectexplorer/buildparserinterface.h>
 
-
-namespace ProjectExplorer {
-class BuildParserInterface;
-}
 namespace Qt4ProjectManager {
 namespace Internal {
 
@@ -66,5 +62,4 @@ public:
 } // namespace Internal
 } // namespace Qt4ProjectManager
 
-
 #endif // BUILDPARSERFACTORY_H
diff --git a/src/plugins/qt4projectmanager/cesdkhandler.h b/src/plugins/qt4projectmanager/cesdkhandler.h
index dd9c1d9b5e0e98e6d63fab95277a9926d30cd3cc..d46a65c2ab97433d24fcd8596365da5435963524 100644
--- a/src/plugins/qt4projectmanager/cesdkhandler.h
+++ b/src/plugins/qt4projectmanager/cesdkhandler.h
@@ -31,13 +31,13 @@
 **
 ***************************************************************************/
 
-#ifndef CE_SDK_HANDLER_INCL
-#define CE_SDK_HANDLER_INCL
+#ifndef CE_SDK_HANDLER_H
+#define CE_SDK_HANDLER_H
 
-#include <projectexplorer/ProjectExplorerInterfaces>
+#include <projectexplorer/projectexplorer.h>
 
-#include <QStringList>
-#include <QDir>
+#include <QtCore/QStringList>
+#include <QtCore/QDir>
 
 #define VCINSTALL_MACRO "$(VCInstallDir)"
 #define VSINSTALL_MACRO "$(VSInstallDir)"
@@ -105,4 +105,4 @@ inline QString CeSdkHandler::fixPaths(QString path) const
 } // namespace Internal
 } // namespace Qt4ProjectManager
 
-#endif // CE_SDK_HANDLER_INCL
+#endif // CE_SDK_HANDLER_H
diff --git a/src/plugins/qt4projectmanager/deployhelper.h b/src/plugins/qt4projectmanager/deployhelper.h
index 8462f05b05c1c88fcc21c1fbd73a148121a0a03c..b633ae343924b4d65a678948a5a28a4f023439e4 100644
--- a/src/plugins/qt4projectmanager/deployhelper.h
+++ b/src/plugins/qt4projectmanager/deployhelper.h
@@ -34,7 +34,7 @@
 #ifndef DEPLOYHELPER_H
 #define DEPLOYHELPER_H
 
-#include <projectexplorer/ProjectExplorerInterfaces>
+#include <projectexplorer/buildstep.h>
 
 #include <QtCore/QString>
 #include <QtCore/QStringList>
diff --git a/src/plugins/qt4projectmanager/directorywatcher.cpp b/src/plugins/qt4projectmanager/directorywatcher.cpp
index d20444098e0f1ae7084bc1a75d652fc5c615dee3..b054f1ff2913a891fe1a3d049d36b40540df4304 100644
--- a/src/plugins/qt4projectmanager/directorywatcher.cpp
+++ b/src/plugins/qt4projectmanager/directorywatcher.cpp
@@ -44,165 +44,6 @@ enum { debugWatcher = 0 };
 namespace Qt4ProjectManager {
 namespace Internal {
 
-int DirectoryWatcher::m_objectCount = 0;
-QHash<QString,int> DirectoryWatcher::m_directoryCount;
-QFileSystemWatcher *DirectoryWatcher::m_watcher = 0;
-
-/*
- \class DirectoryWatcher
-
-   A wrapper for QFileSystemWatcher that collects
-   consecutive changes to a registered directory and emits directoryChanged() and fileChanged().
-
-   Note that files added are only monitored if the parent directory is added, too.
-
-   All instances of DirectoryWatcher share one QFileSystemWatcher object.
-   That's because every QFileSystemWatcher object consumes a file descriptor,
-   even if no files are watched.
-*/
-DirectoryWatcher::DirectoryWatcher(QObject *parent) :
-    QObject(parent),
-    m_timer(0)
-{
-    if (!m_watcher)
-        m_watcher = new QFileSystemWatcher();
-    ++m_objectCount;
-    connect(m_watcher, SIGNAL(directoryChanged(QString)),
-            this, SLOT(slotDirectoryChanged(QString)));
-}
-
-DirectoryWatcher::~DirectoryWatcher()
-{
-    foreach (const QString &dir, m_directories)
-        removeDirectory(dir);
-    if (--m_objectCount == 0) {
-        delete m_watcher;
-        m_watcher = 0;
-    }
-}
-
-QStringList DirectoryWatcher::directories() const
-{
-    if (debugWatcher)
-        qDebug() << Q_FUNC_INFO << m_directories;
-    return m_directories;
-}
-
-void DirectoryWatcher::addDirectory(const QString &dir)
-{
-    if (debugWatcher)
-        qDebug() << Q_FUNC_INFO << dir;
-    if (m_directories.contains(dir))
-        return;
-    m_directories += dir;
-    if (m_directoryCount[dir] == 0)
-        m_watcher->addPath(dir);
-    m_directoryCount[dir] += 1;
-}
-
-void DirectoryWatcher::removeDirectory(const QString &dir)
-{
-    if (debugWatcher)
-        qDebug() << Q_FUNC_INFO << dir;
-    m_directories.removeOne(dir);
-    m_directoryCount[dir] -= 1;
-    if (m_directoryCount[dir] == 0)
-      m_watcher->removePath(dir);
-}
-
-QStringList DirectoryWatcher::files() const
-{
-    if (debugWatcher)
-        qDebug() << Q_FUNC_INFO << m_files.keys();
-    return m_files.keys();
-}
-
-void DirectoryWatcher::addFile(const QString &filePath)
-{
-    addFiles(QStringList() << filePath);
-}
-
-void DirectoryWatcher::addFiles(const QStringList &filePaths)
-{
-    foreach (const QString filePath, filePaths) {
-        QFileInfo file(filePath);
-        m_files.insert(file.absoluteFilePath(),file.lastModified());
-    }
-}
-
-void DirectoryWatcher::removeFile(const QString &filePath)
-{
-    m_files.remove(filePath);
-}
-
-void DirectoryWatcher::slotDirectoryChanged(const QString &path)
-{
-    if (debugWatcher)
-        qDebug() << Q_FUNC_INFO << path;
-    if (!m_directories.contains(path)
-        || m_pendingDirectories.contains(path))
-        return;
-
-    if (!m_timer) {
-        m_timer = new QTimer(this);
-        m_timer->setSingleShot(true);
-        m_timer->setInterval(500); // delay for 0.5 sec
-        connect(m_timer, SIGNAL(timeout()), this, SLOT(slotDelayedDirectoriesChanged()));
-    }
-    if (!m_timer->isActive())
-        m_timer->start();
-    m_pendingDirectories.push_back(path);
-}
-
-void DirectoryWatcher::slotDelayedDirectoriesChanged()
-{
-    if (debugWatcher)
-        qDebug() << Q_FUNC_INFO << " emitting " << m_pendingDirectories;
-    const QStringList::const_iterator cend = m_pendingDirectories.constEnd();
-    for (QStringList::const_iterator it = m_pendingDirectories.constBegin(); it != cend; ++it) {
-        const QString dir = *it;
-        if (!QFileInfo(dir).exists())
-            removeDirectory(*it);
-        emit directoryChanged(*it);
-        updateFileList(*it);
-    }
-    m_pendingDirectories.clear();
-}
-
-void DirectoryWatcher::updateFileList(const QString &dir)
-{
-    const QStringList monitoredFiles = m_files.keys();
-    QStringList removedFiles = monitoredFiles;
-    if (QFileInfo(dir).exists()) {
-        // Compare directory contents and emit signals
-        QFileInfoList entryInfoList
-                = QDir(dir).entryInfoList(QDir::Files|QDir::CaseSensitive);
-        // Loop over directory creating the new map of file->time, removing
-        // the existing entries from the old map
-        const QFileInfoList::const_iterator cend = entryInfoList.constEnd();
-        for (QFileInfoList::const_iterator filIt = entryInfoList.constBegin();
-            filIt != cend; ++filIt) {
-            const QString path = filIt->absoluteFilePath();
-            FileModificationTimeMap::iterator mapIt = m_files.find(path);
-            if (mapIt != m_files.end()) {
-                const QDateTime lastModified = filIt->lastModified();
-                if (lastModified > mapIt.value()) {
-                    if (debugWatcher)
-                        qDebug() << Q_FUNC_INFO << "emitting file changed" << path;
-                    emit fileChanged(path);
-                    m_files[path] = lastModified;
-                }
-                removedFiles.removeOne(path);
-            }
-        }
-    }
-
-    if (!removedFiles.isEmpty()) {
-        foreach (const QString &file, removedFiles)
-            removeFile(file);
-    }
-}
-
 int FileWatcher::m_objectCount = 0;
 QHash<QString,int> FileWatcher::m_fileCount;
 QFileSystemWatcher *FileWatcher::m_watcher = 0;
@@ -256,7 +97,5 @@ void FileWatcher::removeFile(const QString &file)
       m_watcher->removePath(file);
 }
 
-
-
 } // namespace Internal
 } // namespace Qt4ProjectManager
diff --git a/src/plugins/qt4projectmanager/directorywatcher.h b/src/plugins/qt4projectmanager/directorywatcher.h
index 57f015330a1d764e9333f7e42e657721866e9437..35ceaed91e1af7610f3347724c5b8be509c4c460 100644
--- a/src/plugins/qt4projectmanager/directorywatcher.h
+++ b/src/plugins/qt4projectmanager/directorywatcher.h
@@ -47,46 +47,6 @@ QT_END_NAMESPACE
 namespace Qt4ProjectManager {
 namespace Internal {
 
-class DirectoryWatcher : public QObject
-{
-    Q_DISABLE_COPY(DirectoryWatcher)
-    Q_OBJECT
-public:
-    explicit DirectoryWatcher(QObject *parent = 0);
-    virtual ~DirectoryWatcher();
-
-    QStringList directories() const;
-    void addDirectory(const QString &dir);
-    void removeDirectory(const QString &dir);
-
-    QStringList files() const;
-    void addFile(const QString &filePath);
-    void addFiles(const QStringList &filePaths);
-    void removeFile(const QString &filePath);
-
-signals:
-    void directoryChanged(const QString &path);
-    void fileChanged(const QString &path);
-
-private slots:
-    void slotDirectoryChanged(const QString &);
-    void slotDelayedDirectoriesChanged();
-
-private:
-    void updateFileList(const QString &dir);
-
-    static int m_objectCount;
-    static QHash<QString,int> m_directoryCount;
-    static QFileSystemWatcher *m_watcher;
-
-    QTimer *m_timer;
-    QStringList m_directories;
-    QStringList m_pendingDirectories;
-
-    typedef QHash<QString, QDateTime> FileModificationTimeMap;
-    FileModificationTimeMap m_files;
-};
-
 class FileWatcher : public QObject
 {
     Q_DISABLE_COPY(FileWatcher)
diff --git a/src/plugins/qt4projectmanager/gccparser.h b/src/plugins/qt4projectmanager/gccparser.h
index 1b556dd6755f18c22a330ad35da3de29440f21db..24b21cde6f3d8c7dac5d87f1c9afe5a3fb1d0e59 100644
--- a/src/plugins/qt4projectmanager/gccparser.h
+++ b/src/plugins/qt4projectmanager/gccparser.h
@@ -34,7 +34,7 @@
 #ifndef GCCPARSER_H
 #define GCCPARSER_H
 
-#include <projectexplorer/ProjectExplorerInterfaces>
+#include <projectexplorer/buildparserinterface.h>
 
 #include <QtCore/QRegExp>
 
diff --git a/src/plugins/qt4projectmanager/gdbmacrosbuildstep.cpp b/src/plugins/qt4projectmanager/gdbmacrosbuildstep.cpp
index 49d8ccd8a30b8fae206084f729fca3d942663e92..ea622415a2012fad7634659ca0a6cd24e7d70d61 100644
--- a/src/plugins/qt4projectmanager/gdbmacrosbuildstep.cpp
+++ b/src/plugins/qt4projectmanager/gdbmacrosbuildstep.cpp
@@ -38,6 +38,7 @@
 #include "qt4project.h"
 #include "qt4projectmanagerconstants.h"
 
+#include <coreplugin/icore.h>
 #include <utils/qtcassert.h>
 
 using namespace Qt4ProjectManager;
@@ -62,72 +63,104 @@ bool GdbMacrosBuildStep::init(const QString &buildConfiguration)
 
 void GdbMacrosBuildStep::run(QFutureInterface<bool> & fi)
 {
-    // TODO CONFIG handling
+    QVariant v = value("clean");
+    if (v.isNull() || v.toBool() == false) {
+        // Normal run
+        QString dumperPath = Core::ICore::instance()->resourcePath() + "/gdbmacros/";
+        QStringList files;
+        files << "gdbmacros.cpp"
+              << "gdbmacros.pro";
+
+
+        QString destDir = m_buildDirectory + "/qtc-gdbmacros/";
+        QDir dir;
+        dir.mkpath(destDir);
+        foreach (const QString &file, files) {
+            QFile destination(destDir + file);
+            if (destination.exists())
+                destination.remove();
+            QFile::copy(dumperPath + file, destDir + file);
+        }
 
-    QString dumperPath = ExtensionSystem::PluginManager::instance()->getObject<Core::ICore>()
-                ->resourcePath() + "/gdbmacros/";
-    QStringList files;
-    files << "gdbmacros.cpp"
-          << "gdbmacros.pro";
+        Qt4Project *qt4Project = static_cast<Qt4Project *>(project());
+
+        QProcess qmake;
+        qmake.setEnvironment(qt4Project->environment(m_buildConfiguration).toStringList());
+        qmake.setWorkingDirectory(destDir);
+        QStringList configarguments;
+        QStringList makeArguments;
+
+        // Find qmake step...
+        QMakeStep *qmakeStep = qt4Project->qmakeStep();
+        // Find out which configuration is used in this build configuration
+        // and what kind of CONFIG we need to pass to qmake for that
+        if (qmakeStep->value(m_buildConfiguration, "buildConfiguration").isValid()) {
+            QtVersion::QmakeBuildConfig defaultBuildConfiguration = qt4Project->qtVersion(m_buildConfiguration)->defaultBuildConfig();
+            QtVersion::QmakeBuildConfig projectBuildConfiguration = QtVersion::QmakeBuildConfig(qmakeStep->value(m_buildConfiguration, "buildConfiguration").toInt());
+            if ((defaultBuildConfiguration & QtVersion::BuildAll) && !(projectBuildConfiguration & QtVersion::BuildAll))
+                configarguments << "CONFIG-=debug_and_release";
+            if (!(defaultBuildConfiguration & QtVersion::BuildAll) && (projectBuildConfiguration & QtVersion::BuildAll))
+                configarguments << "CONFIG+=debug_and_release";
+            if ((defaultBuildConfiguration & QtVersion::DebugBuild) && !(projectBuildConfiguration & QtVersion::DebugBuild))
+                configarguments << "CONFIG+=release";
+            if (!(defaultBuildConfiguration & QtVersion::DebugBuild) && (projectBuildConfiguration & QtVersion::DebugBuild))
+                configarguments << "CONFIG+=debug";
+            if (projectBuildConfiguration & QtVersion::BuildAll)
+                makeArguments << (projectBuildConfiguration & QtVersion::DebugBuild ? "debug" : "release");
+
+        } else {
+            // Old style with CONFIG+=debug_and_release
+            configarguments << "CONFIG+=debug_and_release";
+            const MakeStep *ms = qt4Project->makeStep();
+            QStringList makeargs = ms->value(m_buildConfiguration, "makeargs").toStringList();
+            if (makeargs.contains("debug")) {
+                makeArguments <<  "debug";
+            } else if (makeargs.contains("release")) {
+                makeArguments << "release";
+            }
+        }
 
+        QString mkspec = qt4Project->qtVersion(m_buildConfiguration)->mkspec();
+        qmake.start(m_qmake, QStringList()<<"-spec"<<mkspec<<configarguments<<"gdbmacros.pro");
+        qmake.waitForFinished();
 
-    QString destDir = m_buildDirectory + "/qtc-gdbmacros/";
-    QDir dir;
-    dir.mkpath(destDir);
-    foreach (const QString &file, files) {
-        QFile destination(destDir + file);
-        if (destination.exists())
-            destination.remove();
-        QFile::copy(dumperPath + file, destDir + file);
-    }
 
-    Qt4Project *qt4Project = static_cast<Qt4Project *>(project());
-
-    QProcess qmake;
-    qmake.setEnvironment(qt4Project->environment(m_buildConfiguration).toStringList());
-    qmake.setWorkingDirectory(destDir);
-    QStringList configarguments;
-    QStringList makeArguments;
-
-    // Find qmake step...
-    QMakeStep *qmakeStep = qt4Project->qmakeStep();
-    // Find out which configuration is used in this build configuration
-    // and what kind of CONFIG we need to pass to qmake for that
-    if (qmakeStep->value(m_buildConfiguration, "buildConfiguration").isValid()) {
-        QtVersion::QmakeBuildConfig defaultBuildConfiguration = qt4Project->qtVersion(m_buildConfiguration)->defaultBuildConfig();
-        QtVersion::QmakeBuildConfig projectBuildConfiguration = QtVersion::QmakeBuildConfig(qmakeStep->value(m_buildConfiguration, "buildConfiguration").toInt());
-        if ((defaultBuildConfiguration & QtVersion::BuildAll) && !(projectBuildConfiguration & QtVersion::BuildAll))
-            configarguments << "CONFIG-=debug_and_release";
-        if (!(defaultBuildConfiguration & QtVersion::BuildAll) && (projectBuildConfiguration & QtVersion::BuildAll))
-            configarguments << "CONFIG+=debug_and_release";
-        if ((defaultBuildConfiguration & QtVersion::DebugBuild) && !(projectBuildConfiguration & QtVersion::DebugBuild))
-            configarguments << "CONFIG+=release";
-        if (!(defaultBuildConfiguration & QtVersion::DebugBuild) && (projectBuildConfiguration & QtVersion::DebugBuild))
-            configarguments << "CONFIG+=debug";
-        if (projectBuildConfiguration & QtVersion::BuildAll)
-            makeArguments << (projectBuildConfiguration & QtVersion::DebugBuild ? "debug" : "release");
+        qmake.start(qt4Project->qtVersion(m_buildConfiguration)->makeCommand(), makeArguments);
+        qmake.waitForFinished();
 
+        fi.reportResult(true);
     } else {
-        // Old style with CONFIG+=debug_and_release
-        configarguments << "CONFIG+=debug_and_release";
-        const MakeStep *ms = qt4Project->makeStep();
-        QStringList makeargs = ms->value(m_buildConfiguration, "makeargs").toStringList();
-        if (makeargs.contains("debug")) {
-            makeArguments <<  "debug";
-        } else if (makeargs.contains("release")) {
-            makeArguments << "release";
+        // Clean step, we want to remove the directory
+        QString destDir = m_buildDirectory + "/qtc-gdbmacros/";
+        Qt4Project *qt4Project = static_cast<Qt4Project *>(project());
+
+        QProcess make;
+        make.setEnvironment(qt4Project->environment(m_buildConfiguration).toStringList());
+        make.setWorkingDirectory(destDir);
+        make.start(qt4Project->qtVersion(m_buildConfiguration)->makeCommand(), QStringList()<<"distclean");
+        make.waitForFinished();
+
+        QStringList files;
+        files << "gdbmacros.cpp"
+              << "gdbmacros.pro";
+
+        QStringList directories;
+        directories << "debug"
+                    << "release";
+
+        foreach(const QString &file, files) {
+            QFile destination(destDir + file);
+            destination.remove();
         }
-    }
-
-    QString mkspec = qt4Project->qtVersion(m_buildConfiguration)->mkspec();
-    qmake.start(m_qmake, QStringList()<<"-spec"<<mkspec<<configarguments<<"gdbmacros.pro");
-    qmake.waitForFinished();
 
+        foreach(const QString &dir, directories) {
+            QDir destination(destDir + dir);
+            destination.rmdir(destDir + dir);
+        }
 
-    qmake.start(qt4Project->qtVersion(m_buildConfiguration)->makeCommand(), makeArguments);
-    qmake.waitForFinished();
-
-    fi.reportResult(true);
+        QDir(destDir).rmdir(destDir);
+        fi.reportResult(true);
+    }
 }
 
 QString GdbMacrosBuildStep::name()
diff --git a/src/plugins/qt4projectmanager/makestep.cpp b/src/plugins/qt4projectmanager/makestep.cpp
index 2a032e63fd7202c0d270904f625fabefff19ac10..34d4a7e881fa9302855cc9802209c4294f2981e5 100644
--- a/src/plugins/qt4projectmanager/makestep.cpp
+++ b/src/plugins/qt4projectmanager/makestep.cpp
@@ -36,7 +36,7 @@
 #include "qt4project.h"
 #include "qt4projectmanagerconstants.h"
 
-#include <extensionsystem/ExtensionSystemInterfaces>
+#include <extensionsystem/pluginmanager.h>
 #include <utils/qtcassert.h>
 
 #include <QtCore/QDir>
diff --git a/src/plugins/qt4projectmanager/makestep.h b/src/plugins/qt4projectmanager/makestep.h
index 6312f08a1e14de24b9e84c7e79d2136109c91ada..0f0f189bfda15a9eb33b13cc3ee4a14e00401bfd 100644
--- a/src/plugins/qt4projectmanager/makestep.h
+++ b/src/plugins/qt4projectmanager/makestep.h
@@ -37,14 +37,13 @@
 #include "qtversionmanager.h"
 #include "ui_makestep.h"
 
-#include <projectexplorer/ProjectExplorerInterfaces>
-#include <QDebug>
+#include <projectexplorer/abstractprocessstep.h>
+#include <projectexplorer/projectexplorer.h>
 
 namespace Qt4ProjectManager {
 
 class Qt4Project;
 
-
 // NBS move this class to an own plugin? So that there can be a make project at a future time
 class MakeStep : public ProjectExplorer::AbstractProcessStep
 {
diff --git a/src/plugins/qt4projectmanager/msvcenvironment.cpp b/src/plugins/qt4projectmanager/msvcenvironment.cpp
index 2ae9bbebdf7da58e71445a9eaddb208c432da600..ebe54104f8d9071c017824100ef8413c5a21a165 100644
--- a/src/plugins/qt4projectmanager/msvcenvironment.cpp
+++ b/src/plugins/qt4projectmanager/msvcenvironment.cpp
@@ -33,12 +33,13 @@
 
 #include "msvcenvironment.h"
 
-#include <QSettings>
-#include <QFile>
-#include <QDebug>
-#include <QStringList>
-#include <QRegExp>
-#include <QTemporaryFile>
+#include <QtCore/QDebug>
+#include <QtCore/QFile>
+#include <QtCore/QProcess>
+#include <QtCore/QRegExp>
+#include <QtCore/QSettings>
+#include <QtCore/QStringList>
+#include <QtCore/QTemporaryFile>
 
 using namespace Qt4ProjectManager::Internal;
 using ProjectExplorer::Environment;
diff --git a/src/plugins/qt4projectmanager/msvcenvironment.h b/src/plugins/qt4projectmanager/msvcenvironment.h
index b3b50718256b8057bb8babfe69bdee74552841f7..c7d7729a99c11868988bbade940a14b6ea577558 100644
--- a/src/plugins/qt4projectmanager/msvcenvironment.h
+++ b/src/plugins/qt4projectmanager/msvcenvironment.h
@@ -34,10 +34,10 @@
 #ifndef MSVCENVIRONMENT_H
 #define MSVCENVIRONMENT_H
 
-#include <QString>
-#include <QList>
+#include <QtCore/QString>
+#include <QtCore/QList>
 
-#include <projectexplorer/ProjectExplorerInterfaces>
+#include <projectexplorer/projectexplorer.h>
 
 namespace Qt4ProjectManager {
 namespace Internal {
diff --git a/src/plugins/qt4projectmanager/msvcparser.h b/src/plugins/qt4projectmanager/msvcparser.h
index 6eaee5c97e90e8ee54cb2d7c451c7800d9547049..06e0c3e6d612497e803c70ad15f6327642532d5e 100644
--- a/src/plugins/qt4projectmanager/msvcparser.h
+++ b/src/plugins/qt4projectmanager/msvcparser.h
@@ -34,7 +34,7 @@
 #ifndef MSVCPARSER_H
 #define MSVCPARSER_H
 
-#include <projectexplorer/ProjectExplorerInterfaces>
+#include <projectexplorer/buildparserinterface.h>
 
 #include <QtCore/QRegExp>
 
@@ -58,4 +58,4 @@ private:
 
 } // namespace ProjectExplorer
 
-#endif // MsvcParser
+#endif // MSVCPARSER_H
diff --git a/src/plugins/qt4projectmanager/profileeditor.cpp b/src/plugins/qt4projectmanager/profileeditor.cpp
index e173bff23160e49543b63b34d89371e94e06efaf..12750868c4b4a48c176def4bbb3de83b664e219e 100644
--- a/src/plugins/qt4projectmanager/profileeditor.cpp
+++ b/src/plugins/qt4projectmanager/profileeditor.cpp
@@ -47,10 +47,10 @@
 #include <texteditor/texteditorconstants.h>
 #include <texteditor/texteditorsettings.h>
 
+#include <QtCore/QDebug>
 #include <QtCore/QFileInfo>
-#include <QtGui/QTextEdit>
 #include <QtGui/QHeaderView>
-#include <QtCore/QDebug>
+#include <QtGui/QTextEdit>
 
 using namespace ExtensionSystem;
 using namespace Core;
@@ -59,9 +59,10 @@ using namespace Qt4ProjectManager::Internal;
 using namespace ProjectExplorer;
 
 
-ProFileEditorEditable::ProFileEditorEditable(ProFileEditor *editor, Core::ICore *core)
-    :BaseTextEditorEditable(editor)
+ProFileEditorEditable::ProFileEditorEditable(ProFileEditor *editor)
+    : BaseTextEditorEditable(editor)
 {
+    Core::ICore *core = Core::ICore::instance();
     m_context << core->uniqueIDManager()->
         uniqueIdentifier(Qt4ProjectManager::Constants::C_PROFILEEDITOR);
     m_context << core->uniqueIDManager()->
@@ -72,15 +73,13 @@ ProFileEditorEditable::ProFileEditorEditable(ProFileEditor *editor, Core::ICore
 
 TextEditor::BaseTextEditorEditable *ProFileEditor::createEditableInterface()
 {
-    return new ProFileEditorEditable(this, m_core);
+    return new ProFileEditorEditable(this);
 }
 
 ProFileEditor::ProFileEditor(QWidget *parent, ProFileEditorFactory *factory, TextEditor::TextEditorActionHandler *ah)
     : BaseTextEditor(parent), m_factory(factory), m_ah(ah)
 {
     Qt4Manager *manager = factory->qt4ProjectManager();
-    m_core = ExtensionSystem::PluginManager::instance()->getObject<Core::ICore>();
-
     ProFileDocument *doc = new ProFileDocument(manager);
     doc->setMimeType(QLatin1String(Qt4ProjectManager::Constants::PROFILE_MIMETYPE));
     setBaseTextDocument(doc);
diff --git a/src/plugins/qt4projectmanager/profileeditor.h b/src/plugins/qt4projectmanager/profileeditor.h
index e2c6c3be5c872ca5fe4b8f6a658462edb63010e4..256e9a9500801b5646724b1e01a09ff095214318 100644
--- a/src/plugins/qt4projectmanager/profileeditor.h
+++ b/src/plugins/qt4projectmanager/profileeditor.h
@@ -41,12 +41,6 @@
 
 namespace TextEditor {
 class FontSettings;
-class BaseEditorActionHandler;
-}
-
-namespace Core {
-class ICore;
-class IFile;
 }
 
 namespace Qt4ProjectManager {
@@ -66,7 +60,7 @@ class ProFileEditor;
 class ProFileEditorEditable : public TextEditor::BaseTextEditorEditable
 {
 public:
-    ProFileEditorEditable(ProFileEditor *, Core::ICore *core);
+    ProFileEditorEditable(ProFileEditor *);
     QList<int> context() const;
 
     bool duplicateSupported() const { return true; }
@@ -98,7 +92,6 @@ public slots:
     virtual void setFontSettings(const TextEditor::FontSettings &);
 
 private:
-    Core::ICore *m_core;
     ProFileEditorFactory *m_factory;
     TextEditor::TextEditorActionHandler *m_ah;
 };
diff --git a/src/plugins/qt4projectmanager/profileeditorfactory.cpp b/src/plugins/qt4projectmanager/profileeditorfactory.cpp
index dfe8c33232f29497cfdd1cb3d723ebe6385314df..b3d32a025e4862275f5eda96b52e349aaafa8eb5 100644
--- a/src/plugins/qt4projectmanager/profileeditorfactory.cpp
+++ b/src/plugins/qt4projectmanager/profileeditorfactory.cpp
@@ -74,7 +74,7 @@ QString ProFileEditorFactory::kind() const
 
 Core::IFile *ProFileEditorFactory::open(const QString &fileName)
 {
-    Core::ICore *core = ExtensionSystem::PluginManager::instance()->getObject<Core::ICore>();
+    Core::ICore *core = Core::ICore::instance();
     Core::IEditor *iface = core->editorManager()->openEditor(fileName, kind());
     return iface ? iface->file() : 0;
 }
diff --git a/src/plugins/qt4projectmanager/qmakestep.h b/src/plugins/qt4projectmanager/qmakestep.h
index 228aca7c2a396ac6ea8fb19737ebe54e4f85ae8c..d2d7980df0493e911991525d58f30fae903eb740 100644
--- a/src/plugins/qt4projectmanager/qmakestep.h
+++ b/src/plugins/qt4projectmanager/qmakestep.h
@@ -34,10 +34,12 @@
 #ifndef QMAKESTEP_H
 #define QMAKESTEP_H
 
-#include <projectexplorer/ProjectExplorerInterfaces>
+#include "ui_qmakestep.h"
+
+#include <projectexplorer/abstractprocessstep.h>
+
 #include <QStringList>
 
-#include "ui_qmakestep.h"
 
 namespace Qt4ProjectManager {
 
@@ -46,10 +48,11 @@ class Qt4Project;
 class QMakeStep : public ProjectExplorer::AbstractProcessStep
 {
     Q_OBJECT
+
 public:
     QMakeStep(Qt4Project * project);
     ~QMakeStep();
-    virtual bool init(const QString & name);
+    virtual bool init(const QString &name);
     virtual void run(QFutureInterface<bool> &);
     virtual QString name();
     virtual QString displayName();
@@ -58,6 +61,7 @@ public:
     QStringList arguments(const QString &buildConfiguration);
     void setForced(bool b);
     bool forced();
+
 protected:
     virtual void processStartupFailed();
     virtual bool processFinished(int exitCode, QProcess::ExitStatus status);
diff --git a/src/plugins/qt4projectmanager/qt4buildconfigwidget.cpp b/src/plugins/qt4projectmanager/qt4buildconfigwidget.cpp
index de7141b0794a2957808383ef6b7a5e725560cd07..46d5b106f5cf41bfad75b01cd39b06dc8b39e218 100644
--- a/src/plugins/qt4projectmanager/qt4buildconfigwidget.cpp
+++ b/src/plugins/qt4projectmanager/qt4buildconfigwidget.cpp
@@ -36,9 +36,12 @@
 #include "makestep.h"
 #include "qmakestep.h"
 #include "qt4project.h"
+#include "qt4projectmanagerconstants.h"
 #include "qt4projectmanager.h"
 #include "ui_qt4buildconfigwidget.h"
 
+#include <coreplugin/mainwindow.h>
+
 #include <QtGui/QFileDialog>
 
 namespace {
@@ -76,9 +79,11 @@ Qt4BuildConfigWidget::Qt4BuildConfigWidget(Qt4Project *project)
     connect(m_ui->importLabel, SIGNAL(linkActivated(QString)),
             this, SLOT(importLabelClicked()));
 
+    connect(m_ui->manageQtVersionPushButtons, SIGNAL(clicked()),
+            this, SLOT(manageQtVersions()));
+
     connect(m_pro->qt4ProjectManager()->versionManager(), SIGNAL(qtVersionsChanged()),
             this, SLOT(setupQtVersionsComboBox()));
-
 }
 
 Qt4BuildConfigWidget::~Qt4BuildConfigWidget()
@@ -86,6 +91,13 @@ Qt4BuildConfigWidget::~Qt4BuildConfigWidget()
     delete m_ui;
 }
 
+void Qt4BuildConfigWidget::manageQtVersions()
+{
+    Core::ICore *core = Core::ICore::instance();
+    core->showOptionsDialog(Constants::QT_CATEGORY, Constants::QTVERSION_PAGE);
+}
+
+
 QString Qt4BuildConfigWidget::displayName() const
 {
     return tr("General");
diff --git a/src/plugins/qt4projectmanager/qt4buildconfigwidget.h b/src/plugins/qt4projectmanager/qt4buildconfigwidget.h
index 5e584fa149f4f52b6c2c894ab6b75b51b6c3c298..47f19be95e4eb286a1ccaab8694b91efe62b6b8e 100644
--- a/src/plugins/qt4projectmanager/qt4buildconfigwidget.h
+++ b/src/plugins/qt4projectmanager/qt4buildconfigwidget.h
@@ -64,6 +64,7 @@ private slots:
     void shadowBuildLineEditTextChanged();
     void importLabelClicked();
     void qtVersionComboBoxCurrentIndexChanged(const QString &);
+    void manageQtVersions();
 
 private:
     Ui::Qt4BuildConfigWidget *m_ui;
diff --git a/src/plugins/qt4projectmanager/qt4buildconfigwidget.ui b/src/plugins/qt4projectmanager/qt4buildconfigwidget.ui
index ab5e8858611fa5ab5340d2d8bb897973169d3fe7..7ce0d1950d19a658dacb394fd61ab8a5d8a3830c 100644
--- a/src/plugins/qt4projectmanager/qt4buildconfigwidget.ui
+++ b/src/plugins/qt4projectmanager/qt4buildconfigwidget.ui
@@ -61,6 +61,13 @@
          </property>
         </widget>
        </item>
+       <item>
+        <widget class="QPushButton" name="manageQtVersionPushButtons">
+         <property name="text">
+          <string>Manage Qt Versions</string>
+         </property>
+        </widget>
+       </item>
        <item>
         <widget class="QLabel" name="invalidQtWarningLabel">
          <property name="text">
diff --git a/src/plugins/qt4projectmanager/qt4nodes.cpp b/src/plugins/qt4projectmanager/qt4nodes.cpp
index 8f836f649826dbb3e70a1c34880b3fc4427d8359..d7a1783feb52b39c810aa8f10d2f5195210a72ec 100644
--- a/src/plugins/qt4projectmanager/qt4nodes.cpp
+++ b/src/plugins/qt4projectmanager/qt4nodes.cpp
@@ -49,6 +49,8 @@
 #include <coreplugin/vcsmanager.h>
 
 #include <cpptools/cppmodelmanagerinterface.h>
+#include <cplusplus/CppDocument.h>
+#include <extensionsystem/pluginmanager.h>
 
 #include <utils/qtcassert.h>
 
@@ -260,7 +262,7 @@ bool Qt4PriFileNode::changeIncludes(ProFile *includeFile, const QStringList &pro
 bool Qt4PriFileNode::priFileWritable(const QString &path)
 {
     const QString dir = QFileInfo(path).dir().path();
-    Core::ICore *core = ExtensionSystem::PluginManager::instance()->getObject<Core::ICore>();
+    Core::ICore *core = Core::ICore::instance();
     Core::IVersionControl *versionControl = core->vcsManager()->findVersionControlForDirectory(dir);
     switch (Core::EditorManager::promptReadOnlyFile(path, versionControl, core->mainWindow(), false)) {
     case Core::EditorManager::RO_OpenVCS:
@@ -289,7 +291,7 @@ bool Qt4PriFileNode::saveModifiedEditors(const QString &path)
     QList<Core::IFile*> allFileHandles;
     QList<Core::IFile*> modifiedFileHandles;
 
-    Core::ICore *core = ExtensionSystem::PluginManager::instance()->getObject<Core::ICore>();
+    Core::ICore *core = Core::ICore::instance();
 
     foreach (Core::IFile *file, core->fileManager()->managedFiles(path)) {
         allFileHandles << file;
@@ -426,7 +428,7 @@ void Qt4PriFileNode::changeFiles(const FileType fileType,
 
 void Qt4PriFileNode::save(ProFile *includeFile)
 {
-    Core::ICore *core = ExtensionSystem::PluginManager::instance()->getObject<Core::ICore>();
+    Core::ICore *core = Core::ICore::instance();
     Core::FileManager *fileManager = core->fileManager();
     QList<Core::IFile *> allFileHandles = fileManager->managedFiles(includeFile->fileName());
     Core::IFile *modifiedFileHandle = 0;
@@ -488,6 +490,9 @@ QStringList Qt4PriFileNode::varNames(FileType type)
     return vars;
 }
 
+#include <projectexplorer/projectexplorer.h>
+#include <projectexplorer/buildmanager.h>
+
 /*!
   \class Qt4ProFileNode
   Implements abstract ProjectNode class
@@ -498,8 +503,7 @@ Qt4ProFileNode::Qt4ProFileNode(Qt4Project *project,
         : Qt4PriFileNode(project, this, filePath),
           // own stuff
           m_projectType(InvalidProject),
-          m_isQBuildProject(false),
-          m_dirWatcher(new DirectoryWatcher(this))
+          m_isQBuildProject(false)
 {
     if (parent)
         setParent(parent);
@@ -507,14 +511,13 @@ Qt4ProFileNode::Qt4ProFileNode(Qt4Project *project,
     m_updateTimer.setInterval(100);
     m_updateTimer.setSingleShot(true);
 
-    connect(m_dirWatcher, SIGNAL(directoryChanged(const QString&)),
-            this, SLOT(updateGeneratedFiles()));
-    connect(m_dirWatcher, SIGNAL(fileChanged(const QString&)),
-            this, SLOT(fileChanged(const QString&)));
     connect(m_project, SIGNAL(activeBuildConfigurationChanged()),
             this, SLOT(update()));
     connect(&m_updateTimer, SIGNAL(timeout()),
             this, SLOT(update()));
+
+    connect(ProjectExplorer::ProjectExplorerPlugin::instance()->buildManager(), SIGNAL(buildStateChanged(ProjectExplorer::Project*)),
+            this, SLOT(buildStateChanged(ProjectExplorer::Project*)));
 }
 
 Qt4ProFileNode::~Qt4ProFileNode()
@@ -522,6 +525,12 @@ Qt4ProFileNode::~Qt4ProFileNode()
 
 }
 
+void Qt4ProFileNode::buildStateChanged(ProjectExplorer::Project *project)
+{
+    if (project == m_project && !ProjectExplorer::ProjectExplorerPlugin::instance()->buildManager()->isBuilding(m_project))
+        updateUiFiles();
+}
+
 bool Qt4ProFileNode::hasTargets() const
 {
     return (projectType() == ApplicationTemplate) || (projectType() == LibraryTemplate);
@@ -689,7 +698,7 @@ void Qt4ProFileNode::update()
                 emit qt4Watcher->variablesChanged(this, m_varValues, newVarValues);
     }
 
-    updateGeneratedFiles();
+    updateUiFiles();
 
     foreach (NodesWatcher *watcher, watchers())
         if (Qt4NodesWatcher *qt4Watcher = qobject_cast<Qt4NodesWatcher*>(watcher))
@@ -698,15 +707,6 @@ void Qt4ProFileNode::update()
     delete reader;
 }
 
-void Qt4ProFileNode::fileChanged(const QString &filePath)
-{
-    CppTools::CppModelManagerInterface *modelManager =
-        ExtensionSystem::PluginManager::instance()->getObject<CppTools::CppModelManagerInterface>();
-
-    // TODO compress
-    modelManager->updateSourceFiles(QStringList() << filePath);
-}
-
 namespace {
     // find all ui files in project
     class FindUiFileNodesVisitor : public ProjectExplorer::NodesVisitor {
@@ -726,53 +726,52 @@ namespace {
     };
 }
 
-/*
-  Adds ui_xxx.h files to tree and monitors them / the UI_DIR directory for changes
-  */
-void Qt4ProFileNode::updateGeneratedFiles()
+// This function is triggered after a build, and updates the state ui files
+// That is it adds files that didn't exist yet to the project tree, and calls
+// updateSourceFiles() for files that changed
+// It does so by storing a modification time for each ui file we know about.
+
+// TODO this function should also be called if the build directory is changed
+void Qt4ProFileNode::updateUiFiles()
 {
+    // Only those two project types can have ui files for us
     if (m_projectType != ApplicationTemplate
         && m_projectType != LibraryTemplate)
         return;
 
+    // Find all ui files
     FindUiFileNodesVisitor uiFilesVisitor;
     this->accept(&uiFilesVisitor);
     const QList<FileNode*> uiFiles = uiFilesVisitor.uiFileNodes;
 
-    // monitor uic dir (only if there are .ui files)
-
-    QSet<QString> oldUiDirs = m_dirWatcher->directories().toSet();
-    QSet<QString> newUiDirs =
-            (!uiFiles.isEmpty()) ? m_varValues[UiDirVar].toSet() : QSet<QString>();
-    foreach (const QString &uiDir, oldUiDirs - newUiDirs)
-        m_dirWatcher->removeDirectory(uiDir);
-    foreach (const QString &uiDir, newUiDirs - oldUiDirs)
-        m_dirWatcher->addDirectory(uiDir);
+    // Find the UiDir, there can only ever be one
+    QString uiDir; // We should default to the build directory
+    QStringList tmp = m_varValues[UiDirVar];
+    if (tmp.size() != 0)
+        uiDir = tmp.first();
 
-    // update generated files
-
-    // Already existing FileNodes
+    // Collect all existing generated files
     QList<FileNode*> existingFileNodes;
     foreach (FileNode *file, fileNodes()) {
         if (file->isGenerated())
             existingFileNodes << file;
     }
 
-
     // Convert uiFile to uiHeaderFilePath, find all headers that correspond
-    // and try to find them in uicDirs
+    // and try to find them in uiDir
     QStringList newFilePaths;
-    foreach (const QString &uicDir, m_varValues[UiDirVar]) {
-        foreach (FileNode *uiFile, uiFiles) {
-            const QString uiHeaderFilePath
-                    = QString("%1/ui_%2.h").arg(uicDir, QFileInfo(uiFile->path()).baseName());
-            if (QFileInfo(uiHeaderFilePath).exists())
-                newFilePaths << uiHeaderFilePath;
-        }
+    foreach (FileNode *uiFile, uiFiles) {
+        const QString uiHeaderFilePath
+                = QString("%1/ui_%2.h").arg(uiDir, QFileInfo(uiFile->path()).baseName());
+        if (QFileInfo(uiHeaderFilePath).exists())
+            newFilePaths << uiHeaderFilePath;
     }
 
+    // Create a diff between those lists
     QList<FileNode*> toRemove;
     QList<FileNode*> toAdd;
+    // The list of files for which we call updateSourceFile
+    QStringList toUpdate;
 
     qSort(newFilePaths);
     qSort(existingFileNodes.begin(), existingFileNodes.end(), ProjectNode::sortNodesByPath);
@@ -788,6 +787,13 @@ void Qt4ProFileNode::updateGeneratedFiles()
             toAdd << new FileNode(*newPathIter, ProjectExplorer::HeaderType, true);
             ++newPathIter;
         } else { // *existingNodeIter->path() == *newPathIter
+            QString fileName = (*existingNodeIter)->path();
+            QMap<QString, QDateTime>::const_iterator it = m_uitimestamps.find(fileName);
+            QDateTime lastModified = QFileInfo(fileName).lastModified();
+            if (it == m_uitimestamps.constEnd() || it.value() < lastModified) {
+                toUpdate << fileName;
+                m_uitimestamps[fileName] = lastModified;
+            }
             ++existingNodeIter;
             ++newPathIter;
         }
@@ -801,32 +807,46 @@ void Qt4ProFileNode::updateGeneratedFiles()
         ++newPathIter;
     }
 
+    // Update project tree
     if (!toRemove.isEmpty()) {
         foreach (FileNode *file, toRemove)
-            m_dirWatcher->removeFile(file->path());
+            m_uitimestamps.remove(file->path());
         removeFileNodes(toRemove, this);
     }
+
+    CppTools::CppModelManagerInterface *modelManager =
+        ExtensionSystem::PluginManager::instance()->getObject<CppTools::CppModelManagerInterface>();
+
     if (!toAdd.isEmpty()) {
-        foreach (FileNode *file, toAdd)
-            m_dirWatcher->addFile(file->path());
+        foreach (FileNode *file, toAdd) {
+            m_uitimestamps.insert(file->path(), QFileInfo(file->path()).lastModified());
+            toUpdate << file->path();
+
+            // Also adding files depending on that.
+            QString fileName = QFileInfo(file->path()).fileName();
+            foreach (CPlusPlus::Document::Ptr doc, modelManager->snapshot()) {
+                if (doc->includedFiles().contains(fileName)) {
+                    if (!toUpdate.contains(doc->fileName()))
+                        toUpdate << doc->fileName();
+                }
+            }
+        }
         addFileNodes(toAdd, this);
     }
+    modelManager->updateSourceFiles(toUpdate);
 }
 
 ProFileReader *Qt4PriFileNode::createProFileReader() const
 {
     ProFileReader *reader = new ProFileReader();
-    connect(reader, SIGNAL(errorFound(const QString &)),
-            m_project, SLOT(proFileParseError(const QString &)));
+    connect(reader, SIGNAL(errorFound(QString)),
+            m_project, SLOT(proFileParseError(QString)));
 
     QtVersion *version = m_project->qtVersion(m_project->activeBuildConfiguration());
-    if (version->isValid()) {
+    if (version->isValid())
         reader->setQtVersion(version);
-    }
 
-    QHash<QString,QStringList> variables;
-    variables.insert(QLatin1String("OUT_PWD"), QStringList(m_qt4ProFileNode->buildDir()));
-    reader->addVariables(variables);
+    reader->setOutputDir(m_qt4ProFileNode->buildDir());
 
     return reader;
 }
@@ -957,13 +977,6 @@ void Qt4ProFileNode::invalidate()
 
     clear();
 
-    // remove monitored files/directories
-    foreach (const QString &file, m_dirWatcher->files())
-        m_dirWatcher->removeFile(file);
-    foreach (const QString &dir, m_dirWatcher->directories())
-        m_dirWatcher->removeDirectory(dir);
-
-
     // change project type
     Qt4ProjectType oldType = m_projectType;
     m_projectType = InvalidProject;
diff --git a/src/plugins/qt4projectmanager/qt4nodes.h b/src/plugins/qt4projectmanager/qt4nodes.h
index 9ea6b07c71cf1f3ac6dc2fcba405a216c1a99d90..5d428cc67202c94882de7061cf419cb37b8f6772 100644
--- a/src/plugins/qt4projectmanager/qt4nodes.h
+++ b/src/plugins/qt4projectmanager/qt4nodes.h
@@ -35,10 +35,13 @@
 #define QT4NODES_H
 
 #include <projectexplorer/projectnodes.h>
+#include <projectexplorer/project.h>
 
 #include <QtCore/QHash>
 #include <QtCore/QStringList>
 #include <QtCore/QTimer>
+#include <QtCore/QDateTime>
+#include <QtCore/QMap>
 
 // defined in proitems.h
 QT_BEGIN_NAMESPACE
@@ -184,8 +187,8 @@ public slots:
     void scheduleUpdate();
     void update();
 private slots:
-    void fileChanged(const QString &filePath);
-    void updateGeneratedFiles();
+    void updateUiFiles();
+    void buildStateChanged(ProjectExplorer::Project*);
 
 private:
     Qt4ProFileNode *createSubProFileNode(const QString &path);
@@ -205,7 +208,7 @@ private:
     bool m_isQBuildProject;
     QTimer m_updateTimer;
 
-    DirectoryWatcher *m_dirWatcher;
+    QMap<QString, QDateTime> m_uitimestamps;
     friend class Qt4NodeHierarchy;
 };
 
diff --git a/src/plugins/qt4projectmanager/qt4project.cpp b/src/plugins/qt4projectmanager/qt4project.cpp
index 7af448e233173f92f0ef9bd97459eef0f8dca814..a8fdc907cd0bb1a24a4fdb4fab2092a45f443310 100644
--- a/src/plugins/qt4projectmanager/qt4project.cpp
+++ b/src/plugins/qt4projectmanager/qt4project.cpp
@@ -48,21 +48,22 @@
 #include "projectloadwizard.h"
 #include "gdbmacrosbuildstep.h"
 
+#include <coreplugin/icore.h>
 #include <coreplugin/messagemanager.h>
 #include <coreplugin/coreconstants.h>
 #include <cpptools/cppmodelmanagerinterface.h>
+#include <extensionsystem/pluginmanager.h>
 #include <projectexplorer/nodesvisitor.h>
 #include <projectexplorer/project.h>
 #include <projectexplorer/customexecutablerunconfiguration.h>
 
-#include <QtGui/QFileDialog>
-#include <QtCore/QDir>
 #include <QtCore/QDebug>
+#include <QtCore/QDir>
+#include <QtGui/QFileDialog>
 
 using namespace Qt4ProjectManager;
 using namespace Qt4ProjectManager::Internal;
 using namespace ProjectExplorer;
-using Core::VariableManager;
 
 enum { debug = 0 };
 
@@ -380,9 +381,10 @@ void Qt4Project::updateCodeModel()
         qDebug()<<"Qt4Project::updateCodeModel()";
 
     CppTools::CppModelManagerInterface *modelmanager =
-        m_manager->pluginManager()->getObject<CppTools::CppModelManagerInterface>();
+        ExtensionSystem::PluginManager::instance()
+            ->getObject<CppTools::CppModelManagerInterface>();
 
-    if (! modelmanager)
+    if (!modelmanager)
         return;
 
     QStringList allIncludePaths;
@@ -569,17 +571,6 @@ QStringList Qt4Project::files(FilesMode fileMode) const
     return files;
 }
 
-QList<Core::IFile *> Qt4Project::dependencies()
-{
-    QList<Core::IFile *> result;
-    // TODO profile cache is no longer
-//    ProFileCache *cache = m_manager->proFileCache();
-//    foreach (const QString &file, cache->dependencies(m_rootProjectNode)) {
-//        result << cache->fileInterface(file);
-//    }
-    return result;
-}
-
 QList<ProjectExplorer::Project*> Qt4Project::dependsOn()
 {
     // NBS implement dependsOn
@@ -610,9 +601,13 @@ void Qt4Project::addDefaultBuild()
         makeStep = new MakeStep(this);
         insertBuildStep(2, makeStep);
 
+        GdbMacrosBuildStep *gdbmacrosCleanStep = new GdbMacrosBuildStep(this);
+        gdbmacrosCleanStep->setValue("clean", true);
+        insertCleanStep(0, gdbmacrosCleanStep);
+
         MakeStep* cleanStep = new MakeStep(this);
         cleanStep->setValue("clean", true);
-        insertCleanStep(0, cleanStep);
+        insertCleanStep(1, cleanStep);
 
         ProjectLoadWizard wizard(this);
         wizard.execDialog();
@@ -629,6 +624,10 @@ void Qt4Project::addDefaultBuild()
             if (v.isValid() && v.toBool()) {
                 GdbMacrosBuildStep *gdbmacrostep = new GdbMacrosBuildStep(this);
                 insertBuildStep(0, gdbmacrostep);
+
+                GdbMacrosBuildStep *gdbmacrosCleanStep = new GdbMacrosBuildStep(this);
+                gdbmacrosCleanStep ->setValue("clean", true);
+                insertCleanStep(0, gdbmacrosCleanStep );
                 break;
             }
         }
@@ -646,7 +645,7 @@ void Qt4Project::newBuildConfiguration(const QString &buildConfiguration)
 
 void Qt4Project::proFileParseError(const QString &errorMessage)
 {
-    m_manager->core()->messageManager()->printToOutputPane(errorMessage);
+    Core::ICore::instance()->messageManager()->printToOutputPane(errorMessage);
 }
 
 Qt4ProFileNode *Qt4Project::rootProjectNode() const
diff --git a/src/plugins/qt4projectmanager/qt4projectmanager.cpp b/src/plugins/qt4projectmanager/qt4projectmanager.cpp
index dd8413aec149abd1998a1d2e942917290cd0f1c2..8d44d81df20c0b9c3f0fee38eeab28ea44c03bf9 100644
--- a/src/plugins/qt4projectmanager/qt4projectmanager.cpp
+++ b/src/plugins/qt4projectmanager/qt4projectmanager.cpp
@@ -42,22 +42,25 @@
 #include "qmakestep.h"
 
 #include <extensionsystem/pluginmanager.h>
+#include <coreplugin/icore.h>
 #include <coreplugin/basefilewizard.h>
 #include <coreplugin/messagemanager.h>
 #include <coreplugin/uniqueidmanager.h>
 #include <coreplugin/editormanager/editormanager.h>
 #include <coreplugin/iversioncontrol.h>
 #include <coreplugin/vcsmanager.h>
+#include <projectexplorer/buildmanager.h>
 #include <projectexplorer/project.h>
+#include <projectexplorer/projectexplorerconstants.h>
 #include <utils/listutils.h>
 
-#include <QtCore/QVariant>
-#include <QtCore/QFileInfo>
-#include <QtCore/QDir>
 #include <QtCore/QCoreApplication>
+#include <QtCore/QDir>
+#include <QtCore/QFileInfo>
 #include <QtCore/QLinkedList>
-#include <QtGui/QMenu>
+#include <QtCore/QVariant>
 #include <QtGui/QFileDialog>
+#include <QtGui/QMenu>
 #include <QtGui/QMessageBox>
 
 using namespace Qt4ProjectManager;
@@ -72,17 +75,21 @@ using ProjectExplorer::ResourceType;
 using ProjectExplorer::UnknownFileType;
 
 // Known file types of a Qt 4 project
-static const char* qt4FileTypes[] = {"CppHeaderFiles", "CppSourceFiles", "Qt4FormFiles", "Qt4ResourceFiles" };
-
-Qt4Manager::Qt4Manager(Qt4ProjectManagerPlugin *plugin, Core::ICore *core) :
-    m_mimeType(QLatin1String(Qt4ProjectManager::Constants::PROFILE_MIMETYPE)),
+static const char* qt4FileTypes[] = {
+    "CppHeaderFiles",
+    "CppSourceFiles",
+    "Qt4FormFiles",
+    "Qt4ResourceFiles"
+};
+
+Qt4Manager::Qt4Manager(Qt4ProjectManagerPlugin *plugin)
+  : m_mimeType(QLatin1String(Qt4ProjectManager::Constants::PROFILE_MIMETYPE)),
     m_plugin(plugin),
-    m_core(core),
     m_projectExplorer(0),
     m_contextProject(0),
     m_languageID(0)
 {
-    m_languageID = m_core->uniqueIDManager()->
+    m_languageID = Core::ICore::instance()->uniqueIDManager()->
         uniqueIdentifier(ProjectExplorer::Constants::LANG_CXX);
 }
 
@@ -108,7 +115,8 @@ void Qt4Manager::notifyChanged(const QString &name)
 
 void Qt4Manager::init()
 {
-    m_projectExplorer = m_core->pluginManager()->getObject<ProjectExplorer::ProjectExplorerPlugin>();
+    m_projectExplorer = ExtensionSystem::PluginManager::instance()
+        ->getObject<ProjectExplorer::ProjectExplorerPlugin>();
 }
 
 int Qt4Manager::projectContext() const
@@ -135,7 +143,8 @@ ProjectExplorer::Project* Qt4Manager::openProject(const QString &fileName)
 
     QString errorMessage;
 
-    m_core->messageManager()->displayStatusBarMessage(tr("Loading project %1 ...").arg(fileName), 50000);
+    Core::MessageManager *messageManager = Core::ICore::instance()->messageManager();
+    messageManager->displayStatusBarMessage(tr("Loading project %1 ...").arg(fileName), 50000);
 
     // TODO Make all file paths relative & remove this hack
     // We convert the path to an absolute one here because qt4project.cpp
@@ -144,25 +153,25 @@ ProjectExplorer::Project* Qt4Manager::openProject(const QString &fileName)
     QString canonicalFilePath = QFileInfo(fileName).canonicalFilePath();
 
     if (canonicalFilePath.isEmpty()) {
-        m_core->messageManager()->printToOutputPane(tr("Failed opening project '%1': Project file does not exist").arg(canonicalFilePath));
-        m_core->messageManager()->displayStatusBarMessage(tr("Failed opening project"), 5000);
+        messageManager->printToOutputPane(tr("Failed opening project '%1': Project file does not exist").arg(canonicalFilePath));
+        messageManager->displayStatusBarMessage(tr("Failed opening project"), 5000);
         return 0;
     }
 
     foreach (ProjectExplorer::Project *pi, projectExplorer()->session()->projects()) {
         if (canonicalFilePath == pi->file()->fileName()) {
-            m_core->messageManager()->printToOutputPane(tr("Failed opening project '%1': Project already open").arg(canonicalFilePath));
-            m_core->messageManager()->displayStatusBarMessage(tr("Failed opening project"), 5000);
+            messageManager->printToOutputPane(tr("Failed opening project '%1': Project already open").arg(canonicalFilePath));
+            messageManager->displayStatusBarMessage(tr("Failed opening project"), 5000);
             return 0;
         }
     }
 
-    m_core->messageManager()->displayStatusBarMessage(tr("Opening %1 ...").arg(fileName));
+    messageManager->displayStatusBarMessage(tr("Opening %1 ...").arg(fileName));
     QCoreApplication::processEvents(QEventLoop::ExcludeUserInputEvents);
 
     Qt4Project *pro = new Qt4Project(this, canonicalFilePath);
 
-    m_core->messageManager()->displayStatusBarMessage(tr("Done opening project"), 5000);
+    messageManager->displayStatusBarMessage(tr("Done opening project"), 5000);
     return pro;
 }
 
@@ -171,16 +180,6 @@ ProjectExplorer::ProjectExplorerPlugin *Qt4Manager::projectExplorer() const
     return m_projectExplorer;
 }
 
-Core::ICore *Qt4Manager::core() const
-{
-    return m_core;
-}
-
-ExtensionSystem::PluginManager *Qt4Manager::pluginManager() const
-{
-    return m_core->pluginManager();
-}
-
 ProjectExplorer::Node *Qt4Manager::contextNode() const
 {
     return m_contextNode;
diff --git a/src/plugins/qt4projectmanager/qt4projectmanager.h b/src/plugins/qt4projectmanager/qt4projectmanager.h
index 4bb4d6eaf188bed1ed8683a276c4ea4e367cecff..b6fc317362e7dbf20950f3df9b1de7036b1c727f 100644
--- a/src/plugins/qt4projectmanager/qt4projectmanager.h
+++ b/src/plugins/qt4projectmanager/qt4projectmanager.h
@@ -44,10 +44,6 @@ namespace ExtensionSystem {
 class PluginManager;
 }
 
-namespace Core {
-class ICore;
-}
-
 namespace ProjectExplorer {
 class Project;
 class ProjectExplorerPlugin;
@@ -64,13 +60,12 @@ class QtVersionManager;
 
 class Qt4Project;
 
-class Qt4Manager
-  : public ProjectExplorer::IProjectManager
+class Qt4Manager : public ProjectExplorer::IProjectManager
 {
     Q_OBJECT
 
 public:
-    Qt4Manager(Internal::Qt4ProjectManagerPlugin *plugin, Core::ICore *core);
+    Qt4Manager(Internal::Qt4ProjectManagerPlugin *plugin);
     ~Qt4Manager();
 
     void init();
@@ -80,10 +75,8 @@ public:
     void notifyChanged(const QString &name);
 
     ProjectExplorer::ProjectExplorerPlugin *projectExplorer() const;
-    ExtensionSystem::PluginManager *pluginManager() const;
-    Core::ICore *core() const;
 
-    //ProjectExplorer::IProjectManager
+    // ProjectExplorer::IProjectManager
     int projectContext() const;
     int projectLanguage() const;
 
@@ -111,7 +104,6 @@ private:
 
     const QString m_mimeType;
     Internal::Qt4ProjectManagerPlugin *m_plugin;
-    Core::ICore *m_core;
     ProjectExplorer::ProjectExplorerPlugin *m_projectExplorer;
 
     ProjectExplorer::Node *m_contextNode;
diff --git a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp
index 01a0b91aae6bf9ec6b6723608e7910c099cdd23e..0d90983aa88f389999da2c8a909283490364ec23 100644
--- a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp
+++ b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp
@@ -48,20 +48,24 @@
 #include "profilereader.h"
 #include "gdbmacrosbuildstep.h"
 
+#include <coreplugin/icore.h>
+#include <extensionsystem/pluginmanager.h>
+#include <projectexplorer/buildmanager.h>
 #include <projectexplorer/project.h>
+#include <projectexplorer/projectexplorer.h>
+#include <projectexplorer/projectexplorerconstants.h>
 #include <projectexplorer/projectnodes.h>
 #include <coreplugin/uniqueidmanager.h>
 #include <coreplugin/mimedatabase.h>
 #include <coreplugin/actionmanager/actionmanager.h>
 #include <texteditor/texteditoractionhandler.h>
 
-#include <QtCore/qplugin.h>
+#include <QtCore/QDebug>
+#include <QtCore/QtPlugin>
 #include <QtGui/QMenu>
-#include <QDebug>
 
 #ifdef WITH_TESTS
 #include <QTest>
-#include <extensionsystem/pluginmanager.h>
 #endif
 
 using namespace Qt4ProjectManager::Internal;
@@ -92,33 +96,37 @@ static Core::Command *createSeparator(Core::ActionManager *am,
     return am->registerAction(tmpaction, name, context);
 }
 */
-bool Qt4ProjectManagerPlugin::initialize(const QStringList & /*arguments*/, QString *errorMessage)
+
+bool Qt4ProjectManagerPlugin::initialize(const QStringList &arguments, QString *errorMessage)
 {
-    m_core = ExtensionSystem::PluginManager::instance()->getObject<Core::ICore>();
-    if (!m_core->mimeDatabase()->addMimeTypes(QLatin1String(":qt4projectmanager/Qt4ProjectManager.mimetypes.xml"), errorMessage))
+    Q_UNUSED(arguments);
+ 
+    Core::ICore *core = Core::ICore::instance();
+    if (!core->mimeDatabase()->addMimeTypes(QLatin1String(":qt4projectmanager/Qt4ProjectManager.mimetypes.xml"), errorMessage))
         return false;
 
-    m_projectExplorer = m_core->pluginManager()->getObject<ProjectExplorer::ProjectExplorerPlugin>();
+    m_projectExplorer = ExtensionSystem::PluginManager::instance()
+        ->getObject<ProjectExplorer::ProjectExplorerPlugin>();
 
-    Core::ActionManager *am = m_core->actionManager();
+    Core::ActionManager *am = core->actionManager();
 
     //create and register objects
-    m_qt4ProjectManager = new Qt4Manager(this, m_core);
+    m_qt4ProjectManager = new Qt4Manager(this);
     addObject(m_qt4ProjectManager);
 
     TextEditor::TextEditorActionHandler *editorHandler
-            = new TextEditor::TextEditorActionHandler(m_core, Constants::C_PROFILEEDITOR);
+            = new TextEditor::TextEditorActionHandler(Constants::C_PROFILEEDITOR);
 
     m_proFileEditorFactory = new ProFileEditorFactory(m_qt4ProjectManager, editorHandler);
     addObject(m_proFileEditorFactory);
 
-    GuiAppWizard *guiWizard = new GuiAppWizard(m_core);
+    GuiAppWizard *guiWizard = new GuiAppWizard;
     addAutoReleasedObject(guiWizard);
 
-    ConsoleAppWizard *consoleWizard = new ConsoleAppWizard(m_core);
+    ConsoleAppWizard *consoleWizard = new ConsoleAppWizard;
     addAutoReleasedObject(consoleWizard);
 
-    LibraryWizard *libWizard = new LibraryWizard(m_core);
+    LibraryWizard *libWizard = new LibraryWizard;
     addAutoReleasedObject(libWizard);
 
     addAutoReleasedObject(new QMakeBuildStepFactory);
@@ -145,7 +153,7 @@ bool Qt4ProjectManagerPlugin::initialize(const QStringList & /*arguments*/, QStr
         am->actionContainer(ProjectExplorer::Constants::M_PROJECTCONTEXT);
 
     //register actions
-    m_projectContext = m_core->uniqueIDManager()->
+    m_projectContext = core->uniqueIDManager()->
         uniqueIdentifier(Qt4ProjectManager::Constants::PROJECT_KIND);
     QList<int> context = QList<int>() << m_projectContext;
     Core::Command *command;
diff --git a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.h b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.h
index 584a9bfca47472b6e44dcfca319eabe7fc64380d..374e8918345e49a1049e0c8418817e8ef0f156e8 100644
--- a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.h
+++ b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.h
@@ -36,7 +36,6 @@
 
 #include <projectexplorer/project.h>
 #include <projectexplorer/projectexplorer.h>
-#include <coreplugin/icore.h>
 
 namespace Qt4ProjectManager {
 
@@ -79,7 +78,6 @@ private slots:
 #endif
 
 private:
-    Core::ICore *m_core;
     ProjectExplorer::ProjectExplorerPlugin *m_projectExplorer;
     ProFileEditorFactory *m_proFileEditorFactory;
     Qt4Manager *m_qt4ProjectManager;
diff --git a/src/plugins/qt4projectmanager/qt4runconfiguration.cpp b/src/plugins/qt4projectmanager/qt4runconfiguration.cpp
index 99c19e3a7e9957aae6216fdadacb9a6f47123096..3ff03bcc28a305115a3828fed94b71f780f7b475 100644
--- a/src/plugins/qt4projectmanager/qt4runconfiguration.cpp
+++ b/src/plugins/qt4projectmanager/qt4runconfiguration.cpp
@@ -181,8 +181,7 @@ void Qt4RunConfiguration::updateCachedValues()
     ProFileReader *reader = static_cast<Qt4Project *>(project())->createProFileReader();
     if (!reader->readProFile(m_proFilePath)) {
         delete reader;
-        Core::ICore *core = ExtensionSystem::PluginManager::instance()->getObject<Core::ICore>();
-        core->messageManager()->printToOutputPane(QString("Could not parse %1. The Qt4 run configuration %2 can not be started.").arg(m_proFilePath).arg(name()));
+        Core::ICore::instance()->messageManager()->printToOutputPane(QString("Could not parse %1. The Qt4 run configuration %2 can not be started.").arg(m_proFilePath).arg(name()));
         return;
     }
 
@@ -232,7 +231,7 @@ QString Qt4RunConfiguration::resolveVariables(const QString &buildConfiguration,
     QString relSubDir = QFileInfo(project()->file()->fileName()).absoluteDir().relativeFilePath(m_srcDir);
     QString baseDir = QDir(project()->buildDirectory(buildConfiguration)).absoluteFilePath(relSubDir);
 
-    Core::VariableManager *vm = ExtensionSystem::PluginManager::instance()->getObject<Core::ICore>()->variableManager();
+    Core::VariableManager *vm = Core::ICore::instance()->variableManager();
     if (!vm)
         return QString();
     QString dest;
@@ -306,14 +305,10 @@ QString Qt4RunConfiguration::qmakeBuildConfigFromBuildConfiguration(const QStrin
     QVariant qmakeBuildConfiguration = qs->value(buildConfigurationName, "buildConfiguration");
     if (qmakeBuildConfiguration.isValid()) {
         QtVersion::QmakeBuildConfig projectBuildConfiguration = QtVersion::QmakeBuildConfig(qmakeBuildConfiguration.toInt());
-        if (projectBuildConfiguration & QtVersion::BuildAll) {
-            if (projectBuildConfiguration & QtVersion::DebugBuild)
-                return "debug";
-            else
-                return "release";
-        } else {
-            return "";
-        }
+        if (projectBuildConfiguration & QtVersion::DebugBuild)
+            return "debug";
+        else
+            return "release";
     } else {
         // Old sytle always CONFIG+=debug_and_release
         if (qobject_cast<Qt4Project *>(project())->qtVersion(buildConfigurationName)->defaultBuildConfig() & QtVersion::DebugBuild)
diff --git a/src/plugins/qt4projectmanager/qtversionmanager.cpp b/src/plugins/qt4projectmanager/qtversionmanager.cpp
index 2becf5465507bb1e79b2ae5fc74951c0d347df3c..6e67989158b6424f4da2f06c0bc1591016eb471e 100644
--- a/src/plugins/qt4projectmanager/qtversionmanager.cpp
+++ b/src/plugins/qt4projectmanager/qtversionmanager.cpp
@@ -37,7 +37,9 @@
 #include "msvcenvironment.h"
 #include "cesdkhandler.h"
 
+#include <coreplugin/icore.h>
 #include <coreplugin/coreconstants.h>
+#include <extensionsystem/pluginmanager.h>
 #include <help/helpplugin.h>
 #include <utils/qtcassert.h>
 
@@ -62,8 +64,7 @@ static const char *newQtVersionsKey = "NewQtVersions";
 QtVersionManager::QtVersionManager()
     : m_emptyVersion(new QtVersion)
 {
-    m_core = ExtensionSystem::PluginManager::instance()->getObject<Core::ICore>();
-    QSettings *s = m_core->settings();
+    QSettings *s = Core::ICore::instance()->settings();
     m_defaultVersion = s->value(defaultQtVersionKey, 0).toInt();
 
     m_idcount = 1;
@@ -115,7 +116,8 @@ void QtVersionManager::addVersion(QtVersion *version)
 
 void QtVersionManager::updateDocumentation()
 {
-    Help::HelpManager *helpManager = m_core->pluginManager()->getObject<Help::HelpManager>();
+    Help::HelpManager *helpManager
+        = ExtensionSystem::PluginManager::instance()->getObject<Help::HelpManager>();
     Q_ASSERT(helpManager);
     QStringList fileEndings = QStringList() << "/qch/qt.qch" << "/qch/qmake.qch" << "/qch/designer.qch";
     QStringList files;
@@ -195,7 +197,7 @@ void QtVersionManager::apply()
 
 void QtVersionManager::writeVersionsIntoSettings()
 {
-    QSettings *s = m_core->settings();
+    QSettings *s = Core::ICore::instance()->settings();
     s->setValue(defaultQtVersionKey, m_defaultVersion);
     s->beginWriteArray("QtVersions");
     for (int i = 0; i < m_versions.size(); ++i) {
@@ -234,7 +236,7 @@ void QtVersionManager::addNewVersionsFromInstaller()
     // NewQtVersions="qt 4.3.2=c:\\qt\\qt432;qt embedded=c:\\qtembedded;"
     // or NewQtVersions="qt 4.3.2=c:\\qt\\qt432=c:\\qtcreator\\mingw\\=prependToPath;
     // Duplicate entries are not added, the first new version is set as default.
-    QSettings *settings = m_core->settings();
+    QSettings *settings = Core::ICore::instance()->settings();
     if (!settings->contains(newQtVersionsKey))
         return;
 
diff --git a/src/plugins/qt4projectmanager/qtversionmanager.h b/src/plugins/qt4projectmanager/qtversionmanager.h
index a9a76066a33cc5dbb81dbdf721a1173f3abb5f7b..f6ccd017b67e7edd9cd16548e06cfd967d3604d1 100644
--- a/src/plugins/qt4projectmanager/qtversionmanager.h
+++ b/src/plugins/qt4projectmanager/qtversionmanager.h
@@ -37,8 +37,7 @@
 #include "ui_qtversionmanager.h"
 
 #include <coreplugin/dialogs/ioptionspage.h>
-#include <coreplugin/icore.h>
-#include <projectexplorer/ProjectExplorerInterfaces>
+#include <projectexplorer/projectexplorer.h>
 
 #include <QtCore/QDebug>
 #include <QtCore/QPointer>
@@ -208,7 +207,6 @@ private:
     static int indexOfVersionInList(const QtVersion * const version, const QList<QtVersion *> &list);
     void updateUniqueIdToIndexMap();
 
-    Core::ICore *m_core;
     QPointer<QtDirWidget> m_widget;
 
     QtVersion *m_emptyVersion;
diff --git a/src/plugins/qt4projectmanager/speinfo.cpp b/src/plugins/qt4projectmanager/speinfo.cpp
index 04df918bb518e1a877a620382cddcadabf0c5196..16fa58741275bfbace74948515f5dd36e805df75 100644
--- a/src/plugins/qt4projectmanager/speinfo.cpp
+++ b/src/plugins/qt4projectmanager/speinfo.cpp
@@ -491,7 +491,7 @@ public:
 class InfoItemModulesTest : public SPEInfoItem
 {
 public:
-    InfoItemModulesTest(): SPEInfoItem("qtestlib", QtModule)
+    InfoItemModulesTest(): SPEInfoItem("testlib", QtModule)
     {
         m_data.insert(keyIncludedByDefault, false);
     }
diff --git a/src/plugins/qt4projectmanager/wizards/consoleappwizard.cpp b/src/plugins/qt4projectmanager/wizards/consoleappwizard.cpp
index 73884791fe829f8b4e9f36482e28aa269869a3d1..402ba7a2ffa3ba80efcb03d5f6d46b80867502ed 100644
--- a/src/plugins/qt4projectmanager/wizards/consoleappwizard.cpp
+++ b/src/plugins/qt4projectmanager/wizards/consoleappwizard.cpp
@@ -58,8 +58,8 @@ static const char *mainSourceFileC = "main";
 namespace Qt4ProjectManager {
 namespace Internal {
 
-ConsoleAppWizard::ConsoleAppWizard(Core::ICore *core) :
-    QtWizard(core, tr("Qt4 Console Application"),
+ConsoleAppWizard::ConsoleAppWizard()
+  : QtWizard(tr("Qt4 Console Application"),
              tr("Creates a Qt4 console application."),
              QIcon(":/wizards/images/console.png"))
 {
diff --git a/src/plugins/qt4projectmanager/wizards/consoleappwizard.h b/src/plugins/qt4projectmanager/wizards/consoleappwizard.h
index 36fff218ddefd88be03bf18011f8b87b86ec02fe..be080c08507354388a9f2c41ac78b178519672f7 100644
--- a/src/plugins/qt4projectmanager/wizards/consoleappwizard.h
+++ b/src/plugins/qt4projectmanager/wizards/consoleappwizard.h
@@ -46,7 +46,7 @@ class ConsoleAppWizard : public QtWizard
     Q_OBJECT
 
 public:
-    explicit ConsoleAppWizard(Core::ICore *core);
+    ConsoleAppWizard();
 
 protected:
     virtual QWizard *createWizardDialog(QWidget *parent,
diff --git a/src/plugins/qt4projectmanager/wizards/guiappwizard.cpp b/src/plugins/qt4projectmanager/wizards/guiappwizard.cpp
index 14df3821ccddfebb610926f50f4cc36298dc2618..d0a626aecce96b2f97a840d4fc34d34e151ea9e0 100644
--- a/src/plugins/qt4projectmanager/wizards/guiappwizard.cpp
+++ b/src/plugins/qt4projectmanager/wizards/guiappwizard.cpp
@@ -70,12 +70,10 @@ static inline QStringList baseClasses()
 }
 
 namespace Qt4ProjectManager {
-
 namespace Internal {
 
-GuiAppWizard::GuiAppWizard(Core::ICore *core) :
-    QtWizard(core,
-             tr("Qt4 Gui Application"),
+GuiAppWizard::GuiAppWizard()
+  : QtWizard(tr("Qt4 Gui Application"),
              tr("Creates a Qt4 Gui Application with one form."),
              QIcon(":/wizards/images/gui.png"))
 {
diff --git a/src/plugins/qt4projectmanager/wizards/guiappwizard.h b/src/plugins/qt4projectmanager/wizards/guiappwizard.h
index dd7d7e7d02d3cb5e8f6c22981cefb204f93b39be..d3ce961b2f2b415e25f3c59984d060777218c302 100644
--- a/src/plugins/qt4projectmanager/wizards/guiappwizard.h
+++ b/src/plugins/qt4projectmanager/wizards/guiappwizard.h
@@ -47,7 +47,7 @@ class GuiAppWizard : public QtWizard
     Q_OBJECT
 
 public:
-    explicit GuiAppWizard(Core::ICore *core);
+    GuiAppWizard();
 
 protected:
     virtual QWizard *createWizardDialog(QWidget *parent,
diff --git a/src/plugins/qt4projectmanager/wizards/guiappwizarddialog.cpp b/src/plugins/qt4projectmanager/wizards/guiappwizarddialog.cpp
index 0bc379ecbeaf50e76741b4fa52175d8a67e84008..0c3c6513eb36a90e071bd1e69dec534e549439f7 100644
--- a/src/plugins/qt4projectmanager/wizards/guiappwizarddialog.cpp
+++ b/src/plugins/qt4projectmanager/wizards/guiappwizarddialog.cpp
@@ -91,7 +91,7 @@ void GuiAppWizardDialog::setBaseClasses(const QStringList &baseClasses)
         m_filesPage->setBaseClassName(baseClasses.front());
 }
 
-void GuiAppWizardDialog::setSuffixes(const QString &header, const QString &source,  const QString &form)
+void GuiAppWizardDialog::setSuffixes(const QString &header, const QString &source, const QString &form)
 {
     m_filesPage->setSuffixes(header, source, form);
 }
diff --git a/src/plugins/qt4projectmanager/wizards/guiappwizarddialog.h b/src/plugins/qt4projectmanager/wizards/guiappwizarddialog.h
index 080cf802c26c606561f97a1752c9e8164dccbb59..dbd2b69a421b3379bac229904617f71ba1a8be79 100644
--- a/src/plugins/qt4projectmanager/wizards/guiappwizarddialog.h
+++ b/src/plugins/qt4projectmanager/wizards/guiappwizarddialog.h
@@ -37,10 +37,12 @@
 #include <QtGui/QWizard>
 
 namespace Core {
-    namespace Utils {
-        class ProjectIntroPage;
-    }
-}
+namespace Utils {
+
+class ProjectIntroPage;
+
+} // namespace Utils
+} // namespace Core
 
 namespace Qt4ProjectManager {
 namespace Internal {
@@ -50,7 +52,8 @@ class ModulesPage;
 class FilesPage;
 
 // Additional parameters required besides QtProjectParameters
-struct GuiAppParameters {
+struct GuiAppParameters
+{
     GuiAppParameters();
     QString className;
     QString baseClassName;
diff --git a/src/plugins/qt4projectmanager/wizards/librarywizard.cpp b/src/plugins/qt4projectmanager/wizards/librarywizard.cpp
index e79cd1b6588f04b3eea9e7093a29401fcd59351f..788563f5cc3319edd46bdb3d084c38d05ecf7fc1 100644
--- a/src/plugins/qt4projectmanager/wizards/librarywizard.cpp
+++ b/src/plugins/qt4projectmanager/wizards/librarywizard.cpp
@@ -50,8 +50,8 @@ namespace Qt4ProjectManager {
 
 namespace Internal {
 
-LibraryWizard::LibraryWizard(Core::ICore *core) :
-    QtWizard(core, tr("C++ Library"),
+LibraryWizard::LibraryWizard()
+  : QtWizard(tr("C++ Library"),
              tr("Creates a C++ Library."),
              QIcon(":/wizards/images/lib.png"))
 {
@@ -69,8 +69,9 @@ QWizard *LibraryWizard::createWizardDialog(QWidget *parent,
 
 
 Core::GeneratedFiles LibraryWizard::generateFiles(const QWizard *w,
-                                                 QString * /*errorMessage*/) const
+                                                 QString *errorMessage) const
 {
+    Q_UNUSED(errorMessage);
     const LibraryWizardDialog *dialog = qobject_cast<const LibraryWizardDialog *>(w);
     const QtProjectParameters projectParams = dialog->parameters();
     const QString projectPath = projectParams.projectPath();
diff --git a/src/plugins/qt4projectmanager/wizards/librarywizard.h b/src/plugins/qt4projectmanager/wizards/librarywizard.h
index 203179d4c9114e72ad00698bf552def824c9d558..f5e6b2af845c377dd822a5771eade334b78fc62c 100644
--- a/src/plugins/qt4projectmanager/wizards/librarywizard.h
+++ b/src/plugins/qt4projectmanager/wizards/librarywizard.h
@@ -48,7 +48,7 @@ class LibraryWizard : public QtWizard
     Q_OBJECT
 
 public:
-    explicit LibraryWizard(Core::ICore *core);
+    LibraryWizard();
 
 protected:
     virtual QWizard *createWizardDialog(QWidget *parent,
diff --git a/src/plugins/qt4projectmanager/wizards/qtwizard.cpp b/src/plugins/qt4projectmanager/wizards/qtwizard.cpp
index 15f334cf2023008caf38b4d22a899fc940ec5ae2..a8fd467f80e40878b58148c7b18d11c7ddeb6f7b 100644
--- a/src/plugins/qt4projectmanager/wizards/qtwizard.cpp
+++ b/src/plugins/qt4projectmanager/wizards/qtwizard.cpp
@@ -35,6 +35,8 @@
 #include "qt4project.h"
 #include "qt4projectmanagerconstants.h"
 
+#include <coreplugin/icore.h>
+#include <extensionsystem/pluginmanager.h>
 #include <projectexplorer/projectexplorer.h>
 
 #include <QtCore/QByteArray>
@@ -61,9 +63,8 @@ static inline Core::BaseFileWizardParameters
 }
 
 // -------------------- QtWizard
-QtWizard::QtWizard(Core::ICore *core, const QString &name,
-                   const QString &description, const QIcon &icon) :
-    Core::BaseFileWizard(wizardParameters(name, description, icon), core),
+QtWizard::QtWizard(const QString &name, const QString &description, const QIcon &icon) :
+    Core::BaseFileWizard(wizardParameters(name, description, icon)),
     m_projectExplorer(ExtensionSystem::PluginManager::instance()->getObject<ProjectExplorer::ProjectExplorerPlugin>())
 {
 }
@@ -101,7 +102,7 @@ bool QtWizard::postGenerateFiles(const Core::GeneratedFiles &l, QString *errorMe
 
 QString QtWizard::templateDir() const
 {
-    QString rc = core()->resourcePath();
+    QString rc = Core::ICore::instance()->resourcePath();
     rc += QLatin1String("/templates/qt4project");
     return rc;
 }
diff --git a/src/plugins/qt4projectmanager/wizards/qtwizard.h b/src/plugins/qt4projectmanager/wizards/qtwizard.h
index 9858251a9dfd98f80383448d5518f58e7f527cf4..dd031ef7e013a97bda2f8c3bbd8ce8e64cc62e30 100644
--- a/src/plugins/qt4projectmanager/wizards/qtwizard.h
+++ b/src/plugins/qt4projectmanager/wizards/qtwizard.h
@@ -38,13 +38,8 @@
 
 #include <coreplugin/basefilewizard.h>
 
-QT_BEGIN_NAMESPACE
-class QTextStream;
-class QDir;
-QT_END_NAMESPACE
-
 namespace ProjectExplorer {
-    class ProjectExplorerPlugin;
+class ProjectExplorerPlugin;
 }
 
 namespace Qt4ProjectManager {
@@ -60,14 +55,11 @@ namespace Internal {
 
 class QtWizard : public Core::BaseFileWizard
 {
-    Q_DISABLE_COPY(QtWizard)
     Q_OBJECT
-
-public:
+    Q_DISABLE_COPY(QtWizard)
 
 protected:
-    explicit QtWizard(Core::ICore *core, const QString &name,
-                      const QString &description, const QIcon &icon);
+    QtWizard(const QString &name, const QString &description, const QIcon &icon);
 
     QString templateDir() const;
 
diff --git a/src/plugins/qtestlib/qtestlibplugin.cpp b/src/plugins/qtestlib/qtestlibplugin.cpp
index 5b38e05b33afee294bbfe334759bcf521f07050f..7d0cada5323c365aec704c9097973d40889dce7f 100644
--- a/src/plugins/qtestlib/qtestlibplugin.cpp
+++ b/src/plugins/qtestlib/qtestlibplugin.cpp
@@ -33,25 +33,26 @@
 
 #include "qtestlibplugin.h"
 
-#include <QtCore/qplugin.h>
-#include <QIcon>
-#include <QDebug>
-#include <QKeySequence>
-#include <QAction>
-#include <QHeaderView>
-#include <QDomDocument>
-#include <QTemporaryFile>
-#include <texteditor/TextEditorInterfaces>
 #include <Qt4IProjectManagers>
-#include <QFileInfo>
-#include <QDir>
-#include <QStandardItemModel>
-#include <QTreeView>
-#include <QTextEdit>
-#include <QSplitter>
-#include <QVBoxLayout>
-#include <QComboBox>
-#include <QLabel>
+#include <texteditor/TextEditorInterfaces>
+
+#include <QtCore/QAction>
+#include <QtCore/QDebug>
+#include <QtCore/QDir>
+#include <QtCore/QFileInfo>
+#include <QtCore/QIcon>
+#include <QtCore/QKeySequence>
+#include <QtCore/QTemporaryFile>
+#include <QtCore/QtPlugin>
+#include <QtGui/QComboBox>
+#include <QtGui/QHeaderView>
+#include <QtGui/QLabel>
+#include <QtGui/QSplitter>
+#include <QtGui/QStandardItemModel>
+#include <QtGui/QTextEdit>
+#include <QtGui/QTreeView>
+#include <QtGui/QVBoxLayout>
+#include <QtXml/QDomDocument>
 
 using namespace QTestLib::Internal;
 
diff --git a/src/plugins/qtscripteditor/qtscripteditor.cpp b/src/plugins/qtscripteditor/qtscripteditor.cpp
index 4062b69e5079a2a262ddb02ed2c8db86a76417d6..a7efcc0192c87e8924ae320290a3616f93f7d249 100644
--- a/src/plugins/qtscripteditor/qtscripteditor.cpp
+++ b/src/plugins/qtscripteditor/qtscripteditor.cpp
@@ -57,12 +57,10 @@ ScriptEditorEditable::ScriptEditorEditable(ScriptEditor *editor, const QList<int
 }
 
 ScriptEditor::ScriptEditor(const Context &context,
-                           Core::ICore *core,
                            TextEditor::TextEditorActionHandler *ah,
                            QWidget *parent) :
     TextEditor::BaseTextEditor(parent),
     m_context(context),
-    m_core(core),
     m_ah(ah)
 {
     setParenthesesMatchingEnabled(true);
@@ -84,7 +82,7 @@ Core::IEditor *ScriptEditorEditable::duplicate(QWidget *parent)
 
 ScriptEditor *ScriptEditor::duplicate(QWidget *parent)
 {
-    ScriptEditor *editor = new ScriptEditor(m_context, m_core, m_ah, parent);
+    ScriptEditor *editor = new ScriptEditor(m_context, m_ah, parent);
     editor->duplicateFrom(this);
     QtScriptEditorPlugin::initializeEditor(editor);
     return editor;
@@ -157,7 +155,7 @@ void ScriptEditor::contextMenuEvent(QContextMenuEvent *e)
 {
     QMenu *menu = createStandardContextMenu();
 
-    if (Core::ActionContainer *mcontext = m_core->actionManager()->actionContainer(QtScriptEditor::Constants::M_CONTEXT)) {
+    if (Core::ActionContainer *mcontext = Core::ICore::instance()->actionManager()->actionContainer(QtScriptEditor::Constants::M_CONTEXT)) {
         QMenu *contextMenu = mcontext->menu();
         foreach (QAction *action, contextMenu->actions())
             menu->addAction(action);
diff --git a/src/plugins/qtscripteditor/qtscripteditor.h b/src/plugins/qtscripteditor/qtscripteditor.h
index 1dda5a95e92677e97718a32346df491dab66aefa..d4f0ca94bb652dd95e7065cdd8fcec81cb7a3883 100644
--- a/src/plugins/qtscripteditor/qtscripteditor.h
+++ b/src/plugins/qtscripteditor/qtscripteditor.h
@@ -50,7 +50,7 @@ class ScriptEditor;
 class ScriptEditorEditable : public TextEditor::BaseTextEditorEditable
 {
 public:
-    ScriptEditorEditable(ScriptEditor *, const QList<int>&);
+    ScriptEditorEditable(ScriptEditor *, const QList<int> &);
     QList<int> context() const;
 
     bool duplicateSupported() const { return true; }
@@ -71,9 +71,8 @@ public:
     typedef QList<int> Context;
 
     ScriptEditor(const Context &context,
-                   Core::ICore *core,
-                   TextEditor::TextEditorActionHandler *ah,
-                   QWidget *parent = 0);
+                 TextEditor::TextEditorActionHandler *ah,
+                 QWidget *parent = 0);
     ~ScriptEditor();
 
     ScriptEditor *duplicate(QWidget *parent);
@@ -90,7 +89,6 @@ private:
     virtual void indentBlock(QTextDocument *doc, QTextBlock block, QChar typedChar);
 
     const Context m_context;
-    Core::ICore *m_core;
     TextEditor::TextEditorActionHandler *m_ah;
 };
 
diff --git a/src/plugins/qtscripteditor/qtscripteditoractionhandler.cpp b/src/plugins/qtscripteditor/qtscripteditoractionhandler.cpp
index bb306f1a3f2d724c913d45961c44f731b484a051..18d57a6a7b2394156658cf4ace54d0e168d58e76 100644
--- a/src/plugins/qtscripteditor/qtscripteditoractionhandler.cpp
+++ b/src/plugins/qtscripteditor/qtscripteditoractionhandler.cpp
@@ -35,17 +35,18 @@
 #include "qtscripteditorconstants.h"
 #include "qtscripteditor.h"
 
+#include <coreplugin/icore.h>
 #include <coreplugin/actionmanager/actionmanager.h>
 #include <coreplugin/scriptmanager/scriptmanager.h>
 
+#include <QtCore/QDebug>
 #include <QtGui/QAction>
-#include <QtGui/QMessageBox>
 #include <QtGui/QMainWindow>
-#include <QtCore/QDebug>
+#include <QtGui/QMessageBox>
 
-static QAction *actionFromId(Core::ICore *core, const QString &id)
+static QAction *actionFromId(const QString &id)
 {
-    Core::Command *cmd = core->actionManager()->command(id);
+    Core::Command *cmd = Core::ICore::instance()->actionManager()->command(id);
     if (!cmd)
         return 0;
     return cmd->action();
@@ -54,9 +55,8 @@ static QAction *actionFromId(Core::ICore *core, const QString &id)
 namespace QtScriptEditor {
 namespace Internal {
 
-QtScriptEditorActionHandler::QtScriptEditorActionHandler(Core::ICore *core) :
-    TextEditor::TextEditorActionHandler(core,
-                                        QLatin1String(QtScriptEditor::Constants::C_QTSCRIPTEDITOR),
+QtScriptEditorActionHandler::QtScriptEditorActionHandler()
+  : TextEditor::TextEditorActionHandler(QLatin1String(QtScriptEditor::Constants::C_QTSCRIPTEDITOR),
                                         Format),
     m_runAction(0)
 {
@@ -65,7 +65,7 @@ QtScriptEditorActionHandler::QtScriptEditorActionHandler(Core::ICore *core) :
 void QtScriptEditorActionHandler::createActions()
 {
     TextEditor::TextEditorActionHandler::createActions();
-    m_runAction = actionFromId(core(), QLatin1String(QtScriptEditor::Constants::RUN));
+    m_runAction = actionFromId(QLatin1String(QtScriptEditor::Constants::RUN));
     connect(m_runAction, SIGNAL(triggered()), this, SLOT(run()));
 }
 
@@ -88,7 +88,7 @@ void QtScriptEditorActionHandler::run()
     // run
     Stack errorStack;
     QString errorMessage;
-    if (core()->scriptManager()->runScript(script, &errorMessage, &errorStack))
+    if (Core::ICore::instance()->scriptManager()->runScript(script, &errorMessage, &errorStack))
         return;
 
     // try to find a suitable error line in the stack
@@ -104,7 +104,7 @@ void QtScriptEditorActionHandler::run()
     }
     if (errorLineNumber)
         currentEditor()->gotoLine(errorLineNumber);
-    QMessageBox::critical(core()->mainWindow(), tr("Qt Script Error"), errorMessage);
+    QMessageBox::critical(Core::ICore::instance()->mainWindow(), tr("Qt Script Error"), errorMessage);
 }
 
 } // namespace Internal
diff --git a/src/plugins/qtscripteditor/qtscripteditoractionhandler.h b/src/plugins/qtscripteditor/qtscripteditoractionhandler.h
index d18ee2d25ff454fa6bb5960015bcbc6d1b0b1b63..c4940cfa160495f43be885fa7cc82832ef9e2626 100644
--- a/src/plugins/qtscripteditor/qtscripteditoractionhandler.h
+++ b/src/plugins/qtscripteditor/qtscripteditoractionhandler.h
@@ -44,7 +44,7 @@ class QtScriptEditorActionHandler : public TextEditor::TextEditorActionHandler
     Q_OBJECT
 
 public:
-    QtScriptEditorActionHandler(Core::ICore *core);
+    QtScriptEditorActionHandler();
 
 private:
     virtual void createActions();
diff --git a/src/plugins/qtscripteditor/qtscripteditorfactory.cpp b/src/plugins/qtscripteditor/qtscripteditorfactory.cpp
index 392b627363a74eca6b1df14aa89d35c3c1ab579a..9e169648f128b92b55140fa3cb18825d6d7f832b 100644
--- a/src/plugins/qtscripteditor/qtscripteditorfactory.cpp
+++ b/src/plugins/qtscripteditor/qtscripteditorfactory.cpp
@@ -37,23 +37,21 @@
 #include "qtscripteditorconstants.h"
 #include "qtscripteditorplugin.h"
 
+#include <coreplugin/icore.h>
 #include <coreplugin/editormanager/editormanager.h>
 
 #include <QtCore/QFileInfo>
-#include <QtCore/qdebug.h>
+#include <QtCore/QDebug>
 
 using namespace QtScriptEditor::Internal;
 using namespace QtScriptEditor::Constants;
 
-QtScriptEditorFactory::QtScriptEditorFactory(Core::ICore *core,
-                                             const Context &context,
-                                             QObject *parent) :
-    Core::IEditorFactory(parent),
+QtScriptEditorFactory::QtScriptEditorFactory(const Context &context, QObject *parent)
+  : Core::IEditorFactory(parent),
     m_kind(QLatin1String(C_QTSCRIPTEDITOR)),
     m_mimeTypes(QLatin1String(QtScriptEditor::Constants::C_QTSCRIPTEDITOR_MIMETYPE)),
     m_context(context),
-    m_core(core),
-    m_actionHandler(new QtScriptEditorActionHandler(core))
+    m_actionHandler(new QtScriptEditorActionHandler)
 {
 }
 
@@ -69,7 +67,7 @@ QString QtScriptEditorFactory::kind() const
 
 Core::IFile *QtScriptEditorFactory::open(const QString &fileName)
 {
-    Core::IEditor *iface = m_core->editorManager()->openEditor(fileName, kind());
+    Core::IEditor *iface = Core::ICore::instance()->editorManager()->openEditor(fileName, kind());
     if (!iface) {
         qWarning() << "QtScriptEditorFactory::open: openEditor failed for " << fileName;
         return 0;
@@ -79,7 +77,7 @@ Core::IFile *QtScriptEditorFactory::open(const QString &fileName)
 
 Core::IEditor *QtScriptEditorFactory::createEditor(QWidget *parent)
 {
-    ScriptEditor *rc =  new ScriptEditor(m_context, m_core, m_actionHandler, parent);
+    ScriptEditor *rc = new ScriptEditor(m_context, m_actionHandler, parent);
     QtScriptEditorPlugin::initializeEditor(rc);
     return rc->editableInterface();
 }
diff --git a/src/plugins/qtscripteditor/qtscripteditorfactory.h b/src/plugins/qtscripteditor/qtscripteditorfactory.h
index f97cdab1eed2682c18dedcebd7d026bb1d09d106..8048f30053dabbbe6d5d1ca695dd00ad071a5bd3 100644
--- a/src/plugins/qtscripteditor/qtscripteditorfactory.h
+++ b/src/plugins/qtscripteditor/qtscripteditorfactory.h
@@ -34,15 +34,10 @@
 #ifndef RQTSCRIPTEDITORFACTORY_H
 #define RQTSCRIPTEDITORFACTORY_H
 
-#include <extensionsystem/ExtensionSystemInterfaces>
 #include <coreplugin/editormanager/ieditorfactory.h>
 
 #include <QtCore/QStringList>
 
-namespace  Core {
-class ICore;
-}
-
 namespace TextEditor {
 class TextEditorActionHandler;
 }
@@ -59,13 +54,11 @@ class QtScriptEditorFactory : public Core::IEditorFactory
 public:
     typedef QList<int> Context;
 
-    QtScriptEditorFactory(Core::ICore *core,
-                          const Context &context,
-                          QObject *parent);
+    QtScriptEditorFactory(const Context &context, QObject *parent);
     ~QtScriptEditorFactory();
 
     virtual QStringList mimeTypes() const;
-    //EditorFactory
+    // IEditorFactory
     QString kind() const;
     Core::IFile *open(const QString &fileName);
     Core::IEditor *createEditor(QWidget *parent);
@@ -75,7 +68,6 @@ private:
     const QStringList m_mimeTypes;
     const Context m_context;
 
-    Core::ICore *m_core;
     TextEditor::TextEditorActionHandler *m_actionHandler;
 };
 
diff --git a/src/plugins/qtscripteditor/qtscripteditorplugin.cpp b/src/plugins/qtscripteditor/qtscripteditorplugin.cpp
index 1bf230155b644efbd6c0cceec9803839941073fd..41a11d5a7af4f7d6201d72cf7a53b1123b65c295 100644
--- a/src/plugins/qtscripteditor/qtscripteditorplugin.cpp
+++ b/src/plugins/qtscripteditor/qtscripteditorplugin.cpp
@@ -43,6 +43,7 @@
 #include <coreplugin/mimedatabase.h>
 #include <coreplugin/uniqueidmanager.h>
 #include <coreplugin/actionmanager/actionmanager.h>
+#include <extensionsystem/pluginmanager.h>
 #include <texteditor/fontsettings.h>
 #include <texteditor/storagesettings.h>
 #include <texteditor/texteditorconstants.h>
@@ -50,7 +51,7 @@
 #include <texteditor/textfilewizard.h>
 #include <utils/qtcassert.h>
 
-#include <QtCore/qplugin.h>
+#include <QtCore/QtPlugin>
 #include <QtCore/QDebug>
 #include <QtGui/QAction>
 
@@ -77,7 +78,7 @@ bool QtScriptEditorPlugin::initialize(const QStringList & /*arguments*/, QString
 {
     typedef SharedTools::QScriptHighlighter QScriptHighlighter;
 
-    Core::ICore *core = ExtensionSystem::PluginManager::instance()->getObject<Core::ICore>();
+    Core::ICore *core = Core::ICore::instance();
     if (!core->mimeDatabase()->addMimeTypes(QLatin1String(":/qtscripteditor/QtScriptEditor.mimetypes.xml"), error_message))
         return false;
     m_scriptcontext << core->uniqueIDManager()->uniqueIdentifier(QtScriptEditor::Constants::C_QTSCRIPTEDITOR);
@@ -86,7 +87,7 @@ bool QtScriptEditorPlugin::initialize(const QStringList & /*arguments*/, QString
 
     registerActions(core);
 
-    m_editor = new QtScriptEditorFactory(core, m_context, this);
+    m_editor = new QtScriptEditorFactory(m_context, this);
     addObject(m_editor);
 
     Core::BaseFileWizardParameters wizardParameters(Core::IWizard::FileWizard);
@@ -97,7 +98,7 @@ bool QtScriptEditorPlugin::initialize(const QStringList & /*arguments*/, QString
     m_wizard = new TextEditor::TextFileWizard(QLatin1String(QtScriptEditor::Constants::C_QTSCRIPTEDITOR_MIMETYPE),
                                               QLatin1String(QtScriptEditor::Constants::C_QTSCRIPTEDITOR),
                                               QLatin1String("qtscript$"),
-                                              wizardParameters, core, this);
+                                              wizardParameters, this);
     addObject(m_wizard);
 
     error_message->clear();
diff --git a/src/plugins/quickopen/basefilefilter.cpp b/src/plugins/quickopen/basefilefilter.cpp
index 65aea6d25527f4baf54ea11a88e644e300db571f..147cd5b07d14b7b45209d2004775737f2cb176bf 100644
--- a/src/plugins/quickopen/basefilefilter.cpp
+++ b/src/plugins/quickopen/basefilefilter.cpp
@@ -33,6 +33,7 @@
 
 #include "basefilefilter.h"
 
+#include <coreplugin/icore.h>
 #include <coreplugin/editormanager/editormanager.h>
 
 #include <QtCore/QDir>
@@ -40,11 +41,8 @@
 using namespace Core;
 using namespace QuickOpen;
 
-BaseFileFilter::BaseFileFilter(ICore *core)
-        : m_core(core),
-          m_files(QStringList()),
-          m_fileNames(QStringList()),
-          m_forceNewSearchList(false)
+BaseFileFilter::BaseFileFilter()
+  : m_forceNewSearchList(false)
 {
 }
 
@@ -91,8 +89,9 @@ QList<FilterEntry> BaseFileFilter::matchesFor(const QString &origEntry)
 
 void BaseFileFilter::accept(QuickOpen::FilterEntry selection) const
 {
-    m_core->editorManager()->openEditor(selection.internalData.toString());
-    m_core->editorManager()->ensureEditorManagerVisible();
+    Core::EditorManager *em = Core::ICore::instance()->editorManager();
+    em->openEditor(selection.internalData.toString());
+    em->ensureEditorManagerVisible();
 }
 
 void BaseFileFilter::generateFileNames()
diff --git a/src/plugins/quickopen/basefilefilter.h b/src/plugins/quickopen/basefilefilter.h
index ee9d302be5cdc454bdffd75840cd43df91bb39ab..711b84c0bae8c191384c51f26dbb8e251d2ee69f 100644
--- a/src/plugins/quickopen/basefilefilter.h
+++ b/src/plugins/quickopen/basefilefilter.h
@@ -37,12 +37,8 @@
 #include "quickopen_global.h"
 #include "iquickopenfilter.h"
 
-#include <coreplugin/icore.h>
-
 #include <QtCore/QString>
 #include <QtCore/QList>
-#include <QtCore/QByteArray>
-#include <QtGui/QWidget>
 
 namespace QuickOpen {
 
@@ -51,14 +47,13 @@ class QUICKOPEN_EXPORT BaseFileFilter : public QuickOpen::IQuickOpenFilter
     Q_OBJECT
 
 public:
-    BaseFileFilter(Core::ICore *core);
+    BaseFileFilter();
     QList<QuickOpen::FilterEntry> matchesFor(const QString &entry);
     void accept(QuickOpen::FilterEntry selection) const;
 
 protected:
     void generateFileNames();
 
-    Core::ICore *m_core;
     QStringList m_files;
     QStringList m_fileNames;
     QStringList m_previousResultPaths;
diff --git a/src/plugins/quickopen/directoryfilter.cpp b/src/plugins/quickopen/directoryfilter.cpp
index 84c60dfa8c746260f088365f5b3b055310c068da..8b70cbd51e9c26f6cbbdac666136e16dfe3d1764 100644
--- a/src/plugins/quickopen/directoryfilter.cpp
+++ b/src/plugins/quickopen/directoryfilter.cpp
@@ -35,20 +35,18 @@
 
 #include <QtCore/QDir>
 #include <QtCore/QStack>
-#include <QtGui/QDirModel>
 #include <QtGui/QCompleter>
 #include <QtGui/QFileDialog>
 #include <QtGui/QMessageBox>
 
-using namespace Core;
+#include <qtconcurrent/QtConcurrentTools>
+
 using namespace QuickOpen;
 using namespace QuickOpen::Internal;
 
-DirectoryFilter::DirectoryFilter(ICore *core)
-        : BaseFileFilter(core),
-          m_name(tr("Generic Directory Filter")),
-          m_directories(QStringList()),
-          m_filters(QStringList() << "*.h" << "*.cpp" << "*.ui" << "*.qrc")
+DirectoryFilter::DirectoryFilter()
+  : m_name(tr("Generic Directory Filter")),
+    m_filters(QStringList() << "*.h" << "*.cpp" << "*.ui" << "*.qrc")
 {
     setIncludedByDefault(true);
 }
diff --git a/src/plugins/quickopen/directoryfilter.h b/src/plugins/quickopen/directoryfilter.h
index abe167d61d332f136dc711e434954d58d5df39a6..f156e01b45f29b7a4425defd3257620e97edf0cf 100644
--- a/src/plugins/quickopen/directoryfilter.h
+++ b/src/plugins/quickopen/directoryfilter.h
@@ -45,9 +45,6 @@
 #include <QtGui/QWidget>
 #include <QtGui/QDialog>
 
-#include <coreplugin/icore.h>
-#include <qtconcurrent/QtConcurrentTools>
-
 namespace QuickOpen {
 namespace Internal {
 
@@ -56,7 +53,7 @@ class DirectoryFilter : public BaseFileFilter
     Q_OBJECT
 
 public:
-    DirectoryFilter(Core::ICore *core);
+    DirectoryFilter();
     QString trName() const { return m_name; }
     QString name() const { return m_name; }
     QuickOpen::IQuickOpenFilter::Priority priority() const { return QuickOpen::IQuickOpenFilter::Medium; }
diff --git a/src/plugins/quickopen/quickopenplugin.cpp b/src/plugins/quickopen/quickopenplugin.cpp
index fe599b215a0dfdc9583e607cfc26c0c91f3b9cbc..3c080cd83840162a7789665d7d3c25228373eacf 100644
--- a/src/plugins/quickopen/quickopenplugin.cpp
+++ b/src/plugins/quickopen/quickopenplugin.cpp
@@ -40,7 +40,7 @@
 #include "directoryfilter.h"
 #include "settingspage.h"
 
-#include <QtCore/qplugin.h>
+#include <QtCore/QtPlugin>
 #include <QtCore/QSettings>
 #include <QtCore/QFuture>
 #include <QtCore/QFutureWatcher>
@@ -50,6 +50,7 @@
 #include <coreplugin/uniqueidmanager.h>
 #include <coreplugin/progressmanager/progressmanager.h>
 #include <coreplugin/actionmanager/actionmanager.h>
+#include <extensionsystem/pluginmanager.h>
 #include <qtconcurrent/QtConcurrentTools>
 
 using namespace QuickOpen;
@@ -81,8 +82,7 @@ QuickOpenPlugin::~QuickOpenPlugin()
 
 bool QuickOpenPlugin::initialize(const QStringList &, QString *)
 {
-    Core::ICore *core = ExtensionSystem::PluginManager::instance()->getObject<Core::ICore>();
-
+    Core::ICore *core = Core::ICore::instance();
     m_settingsPage = new SettingsPage(core, this);
     addObject(m_settingsPage);
 
@@ -136,7 +136,6 @@ void QuickOpenPlugin::startSettingsLoad()
 
 void QuickOpenPlugin::loadSettings()
 {
-    Core::ICore *core = ExtensionSystem::PluginManager::instance()->getObject<Core::ICore>();
     QSettings settings;
     settings.beginGroup("QuickOpen");
     m_refreshTimer.setInterval(settings.value("RefreshInterval", 60).toInt()*60000);
@@ -150,7 +149,7 @@ void QuickOpenPlugin::loadSettings()
     settings.beginGroup("CustomFilters");
     QList<IQuickOpenFilter *> customFilters;
     foreach (const QString &key, settings.childKeys()) {
-        IQuickOpenFilter *filter = new DirectoryFilter(core);
+        IQuickOpenFilter *filter = new DirectoryFilter;
         filter->restoreState(settings.value(key).toByteArray());
         m_filters.append(filter);
         customFilters.append(filter);
@@ -169,16 +168,15 @@ void QuickOpenPlugin::settingsLoaded()
 
 void QuickOpenPlugin::saveSettings()
 {
-    Core::ICore *core = ExtensionSystem::PluginManager::instance()->getObject<Core::ICore>();
+    Core::ICore *core = Core::ICore::instance();
     if (core && core->settings()) {
         QSettings *s = core->settings();
         s->beginGroup("QuickOpen");
-        s->setValue("Interval", m_refreshTimer.interval()/60000);
+        s->setValue("Interval", m_refreshTimer.interval() / 60000);
         s->remove("");
         foreach (IQuickOpenFilter *filter, m_filters) {
-            if (!m_customFilters.contains(filter)) {
+            if (!m_customFilters.contains(filter))
                 s->setValue(filter->name(), filter->saveState());
-            }
         }
         s->beginGroup("CustomFilters");
         int i = 0;
@@ -244,7 +242,7 @@ void QuickOpenPlugin::refresh(QList<IQuickOpenFilter*> filters)
     if (filters.isEmpty())
         filters = m_filters;
     QFuture<void> task = QtConcurrent::run(&IQuickOpenFilter::refresh, filters);
-    Core::FutureProgress *progress = ExtensionSystem::PluginManager::instance()->getObject<Core::ICore>()
+    Core::FutureProgress *progress = Core::ICore::instance()
             ->progressManager()->addTask(task, tr("Indexing"), Constants::TASK_INDEX, Core::ProgressManager::CloseOnSuccess);
     connect(progress, SIGNAL(finished()), this, SLOT(saveSettings()));
 }
diff --git a/src/plugins/quickopen/quickopentoolwindow.cpp b/src/plugins/quickopen/quickopentoolwindow.cpp
index 40cbeb7edcfde9f7958005af686a982f934a182b..d769313b58a1bbef5ce334571301c0129a4d925b 100644
--- a/src/plugins/quickopen/quickopentoolwindow.cpp
+++ b/src/plugins/quickopen/quickopentoolwindow.cpp
@@ -490,7 +490,6 @@ void QuickOpenToolWindow::showEvent(QShowEvent *event)
 
 void QuickOpenToolWindow::showConfigureDialog()
 {
-    ExtensionSystem::PluginManager::instance()
-        ->getObject<Core::ICore>()->showOptionsDialog(Constants::QUICKOPEN_CATEGORY,
+    Core::ICore::instance()->showOptionsDialog(Constants::QUICKOPEN_CATEGORY,
           Constants::FILTER_OPTIONS_PAGE);
 }
diff --git a/src/plugins/quickopen/settingspage.cpp b/src/plugins/quickopen/settingspage.cpp
index 174159163427a4b6f79b43dc9fc35f1f8f5616c0..5d1b3a24b59b0b52833ba076a08a6c14f2018ed4 100644
--- a/src/plugins/quickopen/settingspage.cpp
+++ b/src/plugins/quickopen/settingspage.cpp
@@ -173,7 +173,7 @@ void SettingsPage::configureFilter(QListWidgetItem *item)
 
 void SettingsPage::addCustomFilter()
 {
-    IQuickOpenFilter *filter = new DirectoryFilter(m_core);
+    IQuickOpenFilter *filter = new DirectoryFilter;
     bool needsRefresh = false;
     if (filter->openConfigDialog(m_page, needsRefresh)) {
         m_filters.append(filter);
diff --git a/src/plugins/regexp/regexpplugin.cpp b/src/plugins/regexp/regexpplugin.cpp
index 86a4ca0a7ca4b41a322fbf244cd859c9463a249e..af1bc8f242f91198e6bcdb264ccc63ecc6e3d024 100644
--- a/src/plugins/regexp/regexpplugin.cpp
+++ b/src/plugins/regexp/regexpplugin.cpp
@@ -32,14 +32,15 @@
 ***************************************************************************/
 
 #include "regexpplugin.h"
-#include "settings.h"
+
 #include "regexpwindow.h"
+#include "settings.h"
 
 #include <coreplugin/baseview.h>
 #include <coreplugin/icore.h>
 #include <coreplugin/uniqueidmanager.h>
 
-#include <QtCore/qplugin.h>
+#include <QtCore/QtPlugin>
 
 using namespace RegExp::Internal;
 
@@ -49,25 +50,24 @@ RegExpPlugin::RegExpPlugin()
 
 RegExpPlugin::~RegExpPlugin()
 {
-    if (m_regexpWindow) {
-        m_regexpWindow->settings().toQSettings(m_core->settings());
-    }
+    if (m_regexpWindow)
+        m_regexpWindow->settings().toQSettings(Core::ICore::instance()->settings());
 }
 
 void RegExpPlugin::extensionsInitialized()
 {
 }
 
-
-bool RegExpPlugin::initialize(const QStringList & /*arguments*/, QString *error_message)
+bool RegExpPlugin::initialize(const QStringList &arguments, QString *errorMessage)
 {
-    Q_UNUSED(error_message)
-    m_core = ExtensionSystem::PluginManager::instance()->getObject<Core::ICore>();
+    Q_UNUSED(arguments);
+    Q_UNUSED(errorMessage)
+    Core::ICore *core = Core::ICore::instance();
     m_regexpWindow = new RegExpWindow;
     Settings settings;
-    settings.fromQSettings(m_core->settings());
+    settings.fromQSettings(core->settings());
     m_regexpWindow->setSettings(settings);
-    const int plugId = m_core->uniqueIDManager()->uniqueIdentifier(QLatin1String("RegExpPlugin"));
+    const int plugId = core->uniqueIDManager()->uniqueIdentifier(QLatin1String("RegExpPlugin"));
     addAutoReleasedObject(new Core::BaseView("TextEditor.RegExpWindow",
                                              m_regexpWindow,
                                              QList<int>() << plugId,
diff --git a/src/plugins/regexp/regexpplugin.h b/src/plugins/regexp/regexpplugin.h
index c944d37bc17fd739bd5fe53b253d386b37d22003..aa102953704082e350bf60d38b475bb72d8e7698 100644
--- a/src/plugins/regexp/regexpplugin.h
+++ b/src/plugins/regexp/regexpplugin.h
@@ -39,10 +39,6 @@
 #include <QtCore/QObject>
 #include <QtCore/QPointer>
 
-namespace Core {
-class ICore;
-}
-
 namespace RegExp {
 namespace Internal {
 
@@ -56,11 +52,10 @@ public:
     RegExpPlugin();
     virtual ~RegExpPlugin();
 
-    bool initialize(const QStringList &arguments, QString *error_message);
+    bool initialize(const QStringList &arguments, QString *errorMessage);
     void extensionsInitialized();
 
 private:
-    Core::ICore *m_core;
     QPointer<RegExpWindow> m_regexpWindow;
 };
 
diff --git a/src/plugins/resourceeditor/resourceeditorfactory.cpp b/src/plugins/resourceeditor/resourceeditorfactory.cpp
index 4a623c77f4aaedd0add95dd41b0ebfc6da376672..658a572c3949b5ae867aa35531f8ab3f1290cf53 100644
--- a/src/plugins/resourceeditor/resourceeditorfactory.cpp
+++ b/src/plugins/resourceeditor/resourceeditorfactory.cpp
@@ -47,14 +47,13 @@
 using namespace ResourceEditor::Internal;
 using namespace ResourceEditor::Constants;
 
-ResourceEditorFactory::ResourceEditorFactory(Core::ICore *core, ResourceEditorPlugin *plugin) :
+ResourceEditorFactory::ResourceEditorFactory(ResourceEditorPlugin *plugin) :
     Core::IEditorFactory(plugin),
     m_mimeTypes(QStringList(QLatin1String("application/vnd.nokia.xml.qt.resource"))),
     m_kind(QLatin1String(C_RESOURCEEDITOR)),
-    m_core(core),
     m_plugin(plugin)
 {
-    m_context += m_core->uniqueIDManager()
+    m_context += Core::ICore::instance()->uniqueIDManager()
                  ->uniqueIdentifier(QLatin1String(ResourceEditor::Constants::C_RESOURCEEDITOR));
     Core::FileIconProvider *iconProvider = Core::FileIconProvider::instance();
     iconProvider->registerIconForSuffix(QIcon(":/resourceeditor/images/qt_qrc.png"),
@@ -68,7 +67,7 @@ QString ResourceEditorFactory::kind() const
 
 Core::IFile *ResourceEditorFactory::open(const QString &fileName)
 {
-    Core::IEditor *iface = m_core->editorManager()->openEditor(fileName, kind());
+    Core::IEditor *iface = Core::ICore::instance()->editorManager()->openEditor(fileName, kind());
     if (!iface) {
         qWarning() << "ResourceEditorFactory::open: openEditor failed for " << fileName;
         return 0;
@@ -78,7 +77,7 @@ Core::IFile *ResourceEditorFactory::open(const QString &fileName)
 
 Core::IEditor *ResourceEditorFactory::createEditor(QWidget *parent)
 {
-    return new ResourceEditorW(m_context, m_core, m_plugin, parent);
+    return new ResourceEditorW(m_context, m_plugin, parent);
 }
 
 QStringList ResourceEditorFactory::mimeTypes() const
diff --git a/src/plugins/resourceeditor/resourceeditorfactory.h b/src/plugins/resourceeditor/resourceeditorfactory.h
index 0bcafd3ca569a9ae052d5eeee29a73091be0d928..0c4ab63c909ce31b1cd5f6901d2835ceae208067 100644
--- a/src/plugins/resourceeditor/resourceeditorfactory.h
+++ b/src/plugins/resourceeditor/resourceeditorfactory.h
@@ -34,17 +34,10 @@
 #ifndef RRESOURCEEDITORFACTORY_H
 #define RRESOURCEEDITORFACTORY_H
 
-#include <extensionsystem/ExtensionSystemInterfaces>
 #include <coreplugin/editormanager/ieditorfactory.h>
 
 #include <QtCore/QStringList>
 
-namespace Core {
-class ICore;
-class IEditor;
-class IFile;
-}
-
 namespace ResourceEditor {
 namespace Internal {
 
@@ -57,11 +50,11 @@ class ResourceEditorFactory : public Core::IEditorFactory
 public:
     typedef QList<int> Context;
 
-    ResourceEditorFactory(Core::ICore *core, ResourceEditorPlugin *plugin);
+    explicit ResourceEditorFactory(ResourceEditorPlugin *plugin);
 
     virtual QStringList mimeTypes() const;
 
-    //EditorFactory
+    // IEditorFactory
     QString kind() const;
     Core::IFile *open(const QString &fileName);
     Core::IEditor *createEditor(QWidget *parent);
@@ -71,7 +64,6 @@ private:
     const QString m_kind;
     Context m_context;
 
-    Core::ICore *m_core;
     ResourceEditorPlugin *m_plugin;
 };
 
diff --git a/src/plugins/resourceeditor/resourceeditorplugin.cpp b/src/plugins/resourceeditor/resourceeditorplugin.cpp
index 851cf8634c15845ffeb14a065315344e612638e6..7e5a7dcd1f8b853178080e25dcce868ba130fe3a 100644
--- a/src/plugins/resourceeditor/resourceeditorplugin.cpp
+++ b/src/plugins/resourceeditor/resourceeditorplugin.cpp
@@ -44,10 +44,11 @@
 #include <coreplugin/uniqueidmanager.h>
 #include <coreplugin/actionmanager/actionmanager.h>
 #include <coreplugin/editormanager/editormanager.h>
+#include <extensionsystem/pluginmanager.h>
 
 #include <utils/qtcassert.h>
 
-#include <QtCore/qplugin.h>
+#include <QtCore/QtPlugin>
 #include <QtGui/QAction>
 
 using namespace ResourceEditor::Internal;
@@ -55,9 +56,8 @@ using namespace ResourceEditor::Internal;
 ResourceEditorPlugin::ResourceEditorPlugin() :
     m_wizard(0),
     m_editor(0),
-    m_core(NULL),
-    m_redoAction(NULL),
-    m_undoAction(NULL)
+    m_redoAction(0),
+    m_undoAction(0)
 {
 }
 
@@ -67,13 +67,14 @@ ResourceEditorPlugin::~ResourceEditorPlugin()
     removeObject(m_wizard);
 }
 
-bool ResourceEditorPlugin::initialize(const QStringList & /*arguments*/, QString *error_message)
+bool ResourceEditorPlugin::initialize(const QStringList &arguments, QString *errorMessage)
 {
-    m_core = ExtensionSystem::PluginManager::instance()->getObject<Core::ICore>();
-    if (!m_core->mimeDatabase()->addMimeTypes(QLatin1String(":/resourceeditor/ResourceEditor.mimetypes.xml"), error_message))
+    Q_UNUSED(arguments);
+    Core::ICore *core = Core::ICore::instance();
+    if (!core->mimeDatabase()->addMimeTypes(QLatin1String(":/resourceeditor/ResourceEditor.mimetypes.xml"), errorMessage))
         return false;
 
-    m_editor = new ResourceEditorFactory(m_core, this);
+    m_editor = new ResourceEditorFactory(this);
     addObject(m_editor);
 
     Core::BaseFileWizardParameters wizardParameters(Core::IWizard::FileWizard);
@@ -82,16 +83,16 @@ bool ResourceEditorPlugin::initialize(const QStringList & /*arguments*/, QString
     wizardParameters.setCategory(QLatin1String("Qt"));
     wizardParameters.setTrCategory(tr("Qt"));
 
-    m_wizard = new ResourceWizard(wizardParameters, m_core, this);
+    m_wizard = new ResourceWizard(wizardParameters, this);
     addObject(m_wizard);
 
-    error_message->clear();
+    errorMessage->clear();
 
     // Register undo and redo
-    Core::ActionManager * const actionManager = m_core->actionManager();
-    int const pluginId = m_core->uniqueIDManager()->uniqueIdentifier(
+    Core::ActionManager * const actionManager = core->actionManager();
+    int const pluginId = core->uniqueIDManager()->uniqueIdentifier(
             Constants::C_RESOURCEEDITOR);
-    QList<int> const idList = QList<int>() << pluginId;
+    const QList<int> idList = QList<int>() << pluginId;
     m_undoAction = new QAction(tr("&Undo"), this);
     m_redoAction = new QAction(tr("&Redo"), this);
     actionManager->registerAction(m_undoAction, Core::Constants::UNDO, idList);
@@ -128,7 +129,7 @@ void ResourceEditorPlugin::onUndoStackChanged(ResourceEditorW const *editor,
 ResourceEditorW * ResourceEditorPlugin::currentEditor() const
 {
     ResourceEditorW * const focusEditor = qobject_cast<ResourceEditorW *>(
-            m_core->editorManager()->currentEditor());
+            Core::ICore::instance()->editorManager()->currentEditor());
     QTC_ASSERT(focusEditor, return 0);
     return focusEditor;
 }
diff --git a/src/plugins/resourceeditor/resourceeditorplugin.h b/src/plugins/resourceeditor/resourceeditorplugin.h
index fd9576ea00de1db41e644d64f240b6ce5bfdfb6d..d8c4c3daf1a68570fe3f4df476a9d7ce4bf858c0 100644
--- a/src/plugins/resourceeditor/resourceeditorplugin.h
+++ b/src/plugins/resourceeditor/resourceeditorplugin.h
@@ -36,11 +36,9 @@
 
 #include <extensionsystem/iplugin.h>
 
-QT_FORWARD_DECLARE_CLASS(QAction);
-
-namespace Core {
-    class ICore;
-}
+QT_BEGIN_NAMESPACE
+class QAction;
+QT_END_NAMESPACE
 
 namespace ResourceEditor {
 namespace Internal {
@@ -57,8 +55,8 @@ public:
     ResourceEditorPlugin();
     virtual ~ResourceEditorPlugin();
 
-    //Plugin
-    bool initialize(const QStringList &arguments, QString *error_message = 0);
+    // IPlugin
+    bool initialize(const QStringList &arguments, QString *errorMessage = 0);
     void extensionsInitialized();
 
 private slots:
@@ -74,7 +72,6 @@ private:
 private:
     ResourceWizard *m_wizard;
     ResourceEditorFactory *m_editor;
-    Core::ICore *m_core;
     QAction *m_redoAction;
     QAction *m_undoAction;
 };
diff --git a/src/plugins/resourceeditor/resourceeditorw.cpp b/src/plugins/resourceeditor/resourceeditorw.cpp
index db4ed08980501f7de66dbe1ede76de9e6aa3462a..c8e0bbf51072ddad9ddc86028840b47aeb128c4e 100644
--- a/src/plugins/resourceeditor/resourceeditorw.cpp
+++ b/src/plugins/resourceeditor/resourceeditorw.cpp
@@ -70,11 +70,9 @@ QString ResourceEditorFile::mimeType() const
 
 
 ResourceEditorW::ResourceEditorW(const QList<int> &context,
-                               Core::ICore *core,
                                ResourceEditorPlugin *plugin,
                                QWidget *parent)
         : m_context(context),
-        m_core(core),
         m_resourceEditor(new SharedTools::QrcEditor(parent)),
         m_resourceFile(new ResourceEditorFile(this)),
         m_plugin(plugin)
@@ -207,7 +205,7 @@ void ResourceEditorFile::modified(Core::IFile::ReloadBehavior *behavior)
         break;
     }
 
-    switch (Core::Utils::reloadPrompt(fileName, m_parent->m_core->mainWindow())) {
+    switch (Core::Utils::reloadPrompt(fileName, Core::ICore::instance()->mainWindow())) {
     case Core::Utils::ReloadCurrent:
         m_parent->open(fileName);
         break;
diff --git a/src/plugins/resourceeditor/resourceeditorw.h b/src/plugins/resourceeditor/resourceeditorw.h
index 4070e155cd6e936ca96f52a1e5f710482c2bbdea..cc26250458aed18e5b36ab938a8f09c391e5f54c 100644
--- a/src/plugins/resourceeditor/resourceeditorw.h
+++ b/src/plugins/resourceeditor/resourceeditorw.h
@@ -40,11 +40,6 @@
 #include <QtGui/QWidget>
 #include <QtCore/QPointer>
 
-
-namespace  Core {
-    class ICore;
-}
-
 namespace SharedTools {
     class QrcEditor;
 }
@@ -92,7 +87,6 @@ public:
     typedef QList<int> Context;
 
     ResourceEditorW(const Context &context,
-                   Core::ICore *core,
                    ResourceEditorPlugin *plugin,
                    QWidget *parent = 0);
     ~ResourceEditorW();
@@ -126,7 +120,6 @@ private:
     QString m_displayName;
     QString m_suggestedName;
     const Context m_context;
-    Core::ICore *m_core;
     QPointer<SharedTools::QrcEditor> m_resourceEditor;
     ResourceEditorFile *m_resourceFile;
     ResourceEditorPlugin *m_plugin;
diff --git a/src/plugins/resourceeditor/resourcewizard.cpp b/src/plugins/resourceeditor/resourcewizard.cpp
index b2e76ed154a9cce9f15dd6ad2396cae548bedcb8..e4657fb0a95d721352ede88976eb83322b59ed2b 100644
--- a/src/plugins/resourceeditor/resourcewizard.cpp
+++ b/src/plugins/resourceeditor/resourcewizard.cpp
@@ -38,16 +38,17 @@
 using namespace ResourceEditor;
 using namespace ResourceEditor::Internal;
 
-ResourceWizard::ResourceWizard(const BaseFileWizardParameters &parameters, Core::ICore *core, QObject *parent) :
-    Core::StandardFileWizard(parameters, core, parent)
+ResourceWizard::ResourceWizard(const BaseFileWizardParameters &parameters, QObject *parent)
+  : Core::StandardFileWizard(parameters, parent)
 {
 }
 
 Core::GeneratedFiles
 ResourceWizard::generateFilesFromPath(const QString &path,
                                       const QString &name,
-                                      QString * /*errorMessage*/) const
+                                      QString *errorMessage) const
 {
+    Q_UNUSED(errorMessage);
     const QString suffix = preferredSuffix(QLatin1String(Constants::C_RESOURCE_MIMETYPE));
     const QString fileName = Core::BaseFileWizard::buildFileName(path, name, suffix);
     Core::GeneratedFile file(fileName);
diff --git a/src/plugins/resourceeditor/resourcewizard.h b/src/plugins/resourceeditor/resourcewizard.h
index e435755b2fc9b2cff629cbcd08f2850146cba0cb..829c6eae9a9bab909cf179a68da897454439dd31 100644
--- a/src/plugins/resourceeditor/resourcewizard.h
+++ b/src/plugins/resourceeditor/resourcewizard.h
@@ -45,7 +45,7 @@ class ResourceWizard : public Core::StandardFileWizard
 
 public:
     typedef Core::BaseFileWizardParameters BaseFileWizardParameters;
-    explicit ResourceWizard(const BaseFileWizardParameters &parameters, Core::ICore *core, QObject *parent);
+    explicit ResourceWizard(const BaseFileWizardParameters &parameters, QObject *parent);
 
 protected:
     virtual Core::GeneratedFiles
diff --git a/src/plugins/snippets/snippetsplugin.cpp b/src/plugins/snippets/snippetsplugin.cpp
index c014a6432a1a5e4f27f467ddac2ad953fcf4eb30..32dd4bc04e2655b54b3dfef63769ae7e03aa60c8 100644
--- a/src/plugins/snippets/snippetsplugin.cpp
+++ b/src/plugins/snippets/snippetsplugin.cpp
@@ -36,13 +36,12 @@
 #include "snippetsplugin.h"
 #include "snippetspec.h"
 
-#include <QtCore/qplugin.h>
+#include <QtCore/QtPlugin>
 #include <QtCore/QDebug>
 #include <QtGui/QShortcut>
 #include <QtGui/QApplication>
 
 #include <extensionsystem/pluginmanager.h>
-#include <coreplugin/icore.h>
 #include <coreplugin/uniqueidmanager.h>
 #include <coreplugin/actionmanager/actionmanagerinterface.h>
 #include <coreplugin/editormanager/editormanager.h>
@@ -69,19 +68,20 @@ void SnippetsPlugin::extensionsInitialized()
 {
 }
 
-bool SnippetsPlugin::initialize(const QStringList & /*arguments*/, QString *)
+bool SnippetsPlugin::initialize(const QStringList &arguments, QString *)
 {
-    m_core = ExtensionSystem::PluginManager::instance()->getObject<Core::ICore>();
-    Core::ActionManager *am = m_core->actionManager();
+    Q_UNUSED(arguments);
+    Core::ICore *core = Core::ICore::instance();
+    Core::ActionManager *am = core->actionManager();
 
     QList<int> context;
-    context << m_core->uniqueIDManager()->uniqueIdentifier(TextEditor::Constants::C_TEXTEDITOR);
+    context << core->uniqueIDManager()->uniqueIdentifier(TextEditor::Constants::C_TEXTEDITOR);
 
     m_snippetWnd = new SnippetsWindow();
     addAutoReleasedObject(new Core::BaseView("Snippets.SnippetsTree",
         m_snippetWnd,
-        QList<int>() << m_core->uniqueIDManager()->uniqueIdentifier(QLatin1String("Snippets Window"))
-                     << m_core->uniqueIDManager()->uniqueIdentifier(TextEditor::Constants::C_TEXTEDITOR),
+        QList<int>() << core->uniqueIDManager()->uniqueIdentifier(QLatin1String("Snippets Window"))
+                     << core->uniqueIDManager()->uniqueIdentifier(TextEditor::Constants::C_TEXTEDITOR),
         Qt::RightDockWidgetArea));
     m_snippetsCompletion = new SnippetsCompletion(this);
     addObject(m_snippetsCompletion);
@@ -107,11 +107,12 @@ QString SnippetsPlugin::simplifySnippetName(SnippetSpec *snippet) const
 
 void SnippetsPlugin::snippetActivated()
 {
+    Core::ICore *core = Core::ICore::instance();
     SnippetSpec *snippet = m_shortcuts.value(sender());
-    if (snippet && m_core->editorManager()->currentEditor()) {
+    if (snippet && core->editorManager()->currentEditor()) {
         TextEditor::ITextEditable *te =
             qobject_cast<TextEditor::ITextEditable *>(
-                    m_core->editorManager()->currentEditor());
+                    core->editorManager()->currentEditor());
         m_snippetWnd->insertSnippet(te, snippet);
     }
 }
diff --git a/src/plugins/snippets/snippetsplugin.h b/src/plugins/snippets/snippetsplugin.h
index 3647244d659ea820c80e395390a6be55bf4b8d85..dba0804a63282c96e530a14a89d8dc8b890d57e0 100644
--- a/src/plugins/snippets/snippetsplugin.h
+++ b/src/plugins/snippets/snippetsplugin.h
@@ -40,11 +40,6 @@
 
 #include <extensionsystem/iplugin.h>
 
-namespace Core {
-class ICore;
-struct Application;
-}
-
 namespace Snippets {
 namespace Internal {
 
@@ -62,9 +57,8 @@ public:
 
     static SnippetsPlugin *instance() { return m_instance; }
     static SnippetsWindow *snippetsWindow() { return m_instance->m_snippetWnd; }
-    static Core::ICore *core() { return m_instance->m_core; }
 
-    bool initialize(const QStringList &arguments, QString *error_message);
+    bool initialize(const QStringList &arguments, QString *errorMessage);
     void extensionsInitialized();
 
 private slots:
@@ -74,7 +68,6 @@ private:
     static SnippetsPlugin *m_instance;
 
     QString simplifySnippetName(SnippetSpec *snippet) const;
-    Core::ICore *m_core;
     SnippetsCompletion *m_snippetsCompletion;
     SnippetsWindow *m_snippetWnd;
 
diff --git a/src/plugins/subversion/subversionplugin.cpp b/src/plugins/subversion/subversionplugin.cpp
index a98848a8b3777bfd32e209c3708e53e06dc79fe3..5a3d567f1ec1f456369e668809524d220428b0f7 100644
--- a/src/plugins/subversion/subversionplugin.cpp
+++ b/src/plugins/subversion/subversionplugin.cpp
@@ -55,20 +55,21 @@
 #include <coreplugin/uniqueidmanager.h>
 #include <coreplugin/actionmanager/actionmanager.h>
 #include <coreplugin/editormanager/editormanager.h>
-#include <projectexplorer/ProjectExplorerInterfaces>
+#include <extensionsystem/pluginmanager.h>
+#include <projectexplorer/projectexplorer.h>
 #include <utils/qtcassert.h>
 
-#include <QtCore/qplugin.h>
 #include <QtCore/QDebug>
-#include <QtCore/QTextCodec>
+#include <QtCore/QDir>
 #include <QtCore/QFileInfo>
 #include <QtCore/QTemporaryFile>
-#include <QtCore/QDir>
+#include <QtCore/QTextCodec>
+#include <QtCore/QtPlugin>
 #include <QtGui/QAction>
+#include <QtGui/QFileDialog>
+#include <QtGui/QMainWindow>
 #include <QtGui/QMenu>
 #include <QtGui/QMessageBox>
-#include <QtGui/QMainWindow>
-#include <QtGui/QFileDialog>
 
 using namespace Subversion::Internal;
 
@@ -248,8 +249,10 @@ static const VCSBase::VCSBaseSubmitEditorParameters submitParameters = {
     Subversion::Constants::SUBVERSIONCOMMITEDITOR
 };
 
-bool SubversionPlugin::initialize(const QStringList & /*arguments*/, QString *errorMessage)
+bool SubversionPlugin::initialize(const QStringList &arguments, QString *errorMessage)
 {
+    Q_UNUSED(arguments);
+
     typedef VCSBase::VCSSubmitEditorFactory<SubversionSubmitEditor> SubversionSubmitEditorFactory;
     typedef VCSBase::VCSEditorFactory<SubversionEditor> SubversionEditorFactory;
     using namespace Constants;
@@ -258,7 +261,7 @@ bool SubversionPlugin::initialize(const QStringList & /*arguments*/, QString *er
     using namespace ExtensionSystem;
 
     m_subversionPluginInstance = this;
-    m_coreInstance = PluginManager::instance()->getObject<Core::ICore>();
+    m_coreInstance = Core::ICore::instance();
 
     if (!m_coreInstance->mimeDatabase()->addMimeTypes(QLatin1String(":/trolltech.subversion/Subversion.mimetypes.xml"), errorMessage))
         return false;
@@ -281,7 +284,8 @@ bool SubversionPlugin::initialize(const QStringList & /*arguments*/, QString *er
     static const char *describeSlot = SLOT(describe(QString,QString));
     const int editorCount = sizeof(editorParameters)/sizeof(VCSBase::VCSBaseEditorParameters);
     for (int i = 0; i < editorCount; i++) {
-        m_editorFactories.push_back(new SubversionEditorFactory(editorParameters + i, m_coreInstance, this, describeSlot));
+        m_editorFactories.push_back(
+            new SubversionEditorFactory(editorParameters + i, this, describeSlot));
         addObject(m_editorFactories.back());
     }
 
@@ -492,7 +496,7 @@ void SubversionPlugin::svnDiff(const QStringList &files, QString diffname)
     if (Subversion::Constants::debug)
         qDebug() << Q_FUNC_INFO << files << diffname;
     const QString source = files.empty() ? QString() : files.front();
-    QTextCodec *codec =  source.isEmpty() ? static_cast<QTextCodec *>(0) : VCSBase::VCSBaseEditor::getCodec(m_coreInstance, source);
+    QTextCodec *codec = source.isEmpty() ? static_cast<QTextCodec *>(0) : VCSBase::VCSBaseEditor::getCodec(source);
 
     if (files.count() == 1 && diffname.isEmpty())
         diffname = QFileInfo(files.front()).fileName();
@@ -759,7 +763,7 @@ void SubversionPlugin::filelogCurrentFile()
 
 void SubversionPlugin::filelog(const QString &file)
 {
-    QTextCodec *codec = VCSBase::VCSBaseEditor::getCodec(m_coreInstance, file);
+    QTextCodec *codec = VCSBase::VCSBaseEditor::getCodec(file);
     // no need for temp file
     QStringList args(QLatin1String("log"));
     args.append(QDir::toNativeSeparators(file));
@@ -801,7 +805,7 @@ void SubversionPlugin::annotateCurrentFile()
 
 void SubversionPlugin::annotate(const QString &file)
 {
-    QTextCodec *codec = VCSBase::VCSBaseEditor::getCodec(m_coreInstance, file);
+    QTextCodec *codec = VCSBase::VCSBaseEditor::getCodec(file);
 
     QStringList args(QLatin1String("annotate"));
     args.push_back(QLatin1String("-v"));
@@ -860,7 +864,7 @@ void SubversionPlugin::describe(const QString &source, const QString &changeNr)
     args.push_back(diffArg);
     args.push_back(topLevel);
 
-    QTextCodec *codec = VCSBase::VCSBaseEditor::getCodec(m_coreInstance, source);
+    QTextCodec *codec = VCSBase::VCSBaseEditor::getCodec(source);
     const SubversionResponse response = runSvn(args, subversionShortTimeOut, false, codec);
     if (response.error)
         return;
@@ -1014,12 +1018,6 @@ void SubversionPlugin::setSettings(const SubversionSettings &s)
     }
 }
 
-Core::ICore *SubversionPlugin::coreInstance()
-{
-    QTC_ASSERT(m_coreInstance, return 0);
-    return m_coreInstance;
-}
-
 SubversionPlugin *SubversionPlugin::subversionPluginInstance()
 {
     QTC_ASSERT(m_subversionPluginInstance, return m_subversionPluginInstance);
diff --git a/src/plugins/subversion/subversionplugin.h b/src/plugins/subversion/subversionplugin.h
index fb6bd17b7a912ba341c8b17e96850b6b882d12c1..17285e73351a31aee5922ea7f1b0a7bb96cc6c47 100644
--- a/src/plugins/subversion/subversionplugin.h
+++ b/src/plugins/subversion/subversionplugin.h
@@ -39,8 +39,8 @@
 #include <coreplugin/editormanager/ieditorfactory.h>
 #include <coreplugin/iversioncontrol.h>
 #include <coreplugin/icorelistener.h>
-#include <extensionsystem/iplugin.h>
 #include <coreplugin/icorelistener.h>
+#include <extensionsystem/iplugin.h>
 
 #include <QtCore/QObject>
 #include <QtCore/QProcess>
@@ -105,7 +105,6 @@ public:
     bool managesDirectory(const QString &directory) const;
     QString findTopLevelForDirectory(const QString &directory) const;
 
-    static Core::ICore *coreInstance();
     static SubversionPlugin *subversionPluginInstance();
 
 private slots:
diff --git a/src/plugins/texteditor/basefilefind.cpp b/src/plugins/texteditor/basefilefind.cpp
index 61fc6eadc175cc73affbc380af0277bdc7518c88..e574140d3d8eff399c7c81f1dd513b61b0985880 100644
--- a/src/plugins/texteditor/basefilefind.cpp
+++ b/src/plugins/texteditor/basefilefind.cpp
@@ -49,9 +49,8 @@ using namespace Core::Utils;
 using namespace Find;
 using namespace TextEditor;
 
-BaseFileFind::BaseFileFind(Core::ICore *core, SearchResultWindow *resultWindow)
-    : m_core(core),
-    m_resultWindow(resultWindow),
+BaseFileFind::BaseFileFind(SearchResultWindow *resultWindow)
+  : m_resultWindow(resultWindow),
     m_isSearching(false),
     m_resultLabel(0),
     m_filterCombo(0),
@@ -95,7 +94,8 @@ void BaseFileFind::findAll(const QString &txt, QTextDocument::FindFlags findFlag
         m_watcher.setFuture(Core::Utils::findInFilesRegExp(txt, files(), findFlags));
     else
         m_watcher.setFuture(Core::Utils::findInFiles(txt, files(), findFlags));
-    Core::FutureProgress *progress = m_core->progressManager()->addTask(m_watcher.future(),
+    Core::FutureProgress *progress = 
+        Core::ICore::instance()->progressManager()->addTask(m_watcher.future(),
                                                                         "Search",
                                                                         Constants::TASK_SEARCH);
     progress->setWidget(createProgressWidget());
diff --git a/src/plugins/texteditor/basefilefind.h b/src/plugins/texteditor/basefilefind.h
index 2aacf2d9650ee172d0ed0e83edbe31c30d9baff2..706964cf50ab7367617b9643e004a26e5ee4ef9f 100644
--- a/src/plugins/texteditor/basefilefind.h
+++ b/src/plugins/texteditor/basefilefind.h
@@ -36,7 +36,6 @@
 
 #include "texteditor_global.h"
 
-#include <coreplugin/icore.h>
 #include <find/ifindfilter.h>
 #include <find/searchresultwindow.h>
 #include <utils/filesearch.h>
@@ -55,7 +54,7 @@ class TEXTEDITOR_EXPORT BaseFileFind : public Find::IFindFilter
     Q_OBJECT
 
 public:
-    BaseFileFind(Core::ICore *core, Find::SearchResultWindow *resultWindow);
+    explicit BaseFileFind(Find::SearchResultWindow *resultWindow);
 
     bool isEnabled() const;
     void findAll(const QString &txt, QTextDocument::FindFlags findFlags);
@@ -79,7 +78,6 @@ private slots:
 private:
     QWidget *createProgressWidget();
 
-    Core::ICore *m_core;
     Find::SearchResultWindow *m_resultWindow;
     QFutureWatcher<Core::Utils::FileSearchResult> m_watcher;
     bool m_isSearching;
diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp
index 9f145bc08018fcb7caaea3bd69e63828e8c46392..cae7df6bd7d58d0f0dda146f2436bd621e830824 100644
--- a/src/plugins/texteditor/basetexteditor.cpp
+++ b/src/plugins/texteditor/basetexteditor.cpp
@@ -47,6 +47,7 @@
 #include <coreplugin/manhattanstyle.h>
 #include <coreplugin/coreconstants.h>
 #include <coreplugin/editormanager/editormanager.h>
+#include <extensionsystem/pluginmanager.h>
 #include <find/basetextfind.h>
 #include <texteditor/fontsettings.h>
 #include <utils/reloadpromptutils.h>
@@ -87,7 +88,7 @@ using namespace TextEditor::Internal;
 
 
 namespace TextEditor {
-    namespace Internal {
+namespace Internal {
 
 class TextEditExtraArea : public QWidget {
     BaseTextEditor *textEdit;
@@ -123,16 +124,15 @@ protected:
     }
 };
 
-    }
-}
+} // namespace Internal
+} // namespace TextEditor
 
 ITextEditor *BaseTextEditor::openEditorAt(const QString &fileName,
                                              int line,
                                              int column,
                                              const QString &editorKind)
 {
-    Core::EditorManager *editorManager =
-            ExtensionSystem::PluginManager::instance()->getObject<Core::ICore>()->editorManager();
+    Core::EditorManager *editorManager = Core::ICore::instance()->editorManager();
     editorManager->addCurrentPositionToNavigationHistory(true);
     Core::IEditor *editor = editorManager->openEditor(fileName, editorKind, true);
     TextEditor::ITextEditor *texteditor = qobject_cast<TextEditor::ITextEditor *>(editor);
@@ -562,7 +562,7 @@ bool BaseTextEditor::open(const QString &fileName)
     return false;
 }
 
-Core::IFile * BaseTextEditor::file()
+Core::IFile *BaseTextEditor::file()
 {
     return d->m_document;
 }
@@ -3370,9 +3370,9 @@ void BaseTextEditor::setIfdefedOutBlocks(const QList<BaseTextEditor::BlockRange>
             const BlockRange &range = blocks.at(rangeNumber);
 
             if (block.position() >= range.first && (block.position() <= range.last || !range.last)) {
-                needUpdate += TextEditDocumentLayout::setIfdefedOut(block);
+                needUpdate |= TextEditDocumentLayout::setIfdefedOut(block);
             } else {
-                needUpdate += TextEditDocumentLayout::clearIfdefedOut(block);
+                needUpdate |= TextEditDocumentLayout::clearIfdefedOut(block);
             }
             if (block.contains(range.last))
                 ++rangeNumber;
diff --git a/src/plugins/texteditor/basetextmark.cpp b/src/plugins/texteditor/basetextmark.cpp
index 4e4adf28bdcfc091ed9d9e2c8e131782451ef300..c5db69325657e50643a59d1408cd0e9a6ae97458 100644
--- a/src/plugins/texteditor/basetextmark.cpp
+++ b/src/plugins/texteditor/basetextmark.cpp
@@ -57,7 +57,7 @@ BaseTextMark::BaseTextMark(const QString &filename, int line)
 void BaseTextMark::init()
 {
     m_init = true;
-    Core::EditorManager *em = ExtensionSystem::PluginManager::instance()->getObject<Core::ICore>()->editorManager();
+    Core::EditorManager *em = Core::ICore::instance()->editorManager();
     connect(em, SIGNAL(editorOpened(Core::IEditor *)), this, SLOT(editorOpened(Core::IEditor *)));
 
     foreach (Core::IEditor *editor, em->openedEditors())
@@ -117,7 +117,7 @@ void BaseTextMark::updateMarker()
 
 void BaseTextMark::moveMark(const QString & /* filename */, int /* line */)
 {
-    Core::EditorManager *em = ExtensionSystem::PluginManager::instance()->getObject<Core::ICore>()->editorManager();
+    Core::EditorManager *em = Core::ICore::instance()->editorManager();
     if (!m_init) {
         connect(em, SIGNAL(editorOpened(Core::IEditor *)), this, SLOT(editorOpened(Core::IEditor *)));
         m_init = true;
diff --git a/src/plugins/texteditor/completionsupport.cpp b/src/plugins/texteditor/completionsupport.cpp
index 5c863e3afe231a08be5b2ea60bed06ed014e5d3e..ddac8de09d179f99f2ab2c25df364786765568a2 100644
--- a/src/plugins/texteditor/completionsupport.cpp
+++ b/src/plugins/texteditor/completionsupport.cpp
@@ -36,11 +36,12 @@
 #include "icompletioncollector.h"
 
 #include <coreplugin/icore.h>
+#include <extensionsystem/pluginmanager.h>
 #include <texteditor/itexteditable.h>
 #include <utils/qtcassert.h>
 
-#include <QString>
-#include <QList>
+#include <QtCore/QString>
+#include <QtCore/QList>
 
 #include <algorithm>
 
@@ -48,23 +49,23 @@ using namespace TextEditor;
 using namespace TextEditor::Internal;
 
 
-CompletionSupport *CompletionSupport::instance(Core::ICore *core)
+CompletionSupport *CompletionSupport::instance()
 {
     static CompletionSupport *m_instance = 0;
-    if (!m_instance) {
-        m_instance = new CompletionSupport(core);
-    }
+    if (!m_instance)
+        m_instance = new CompletionSupport;
     return m_instance;
 }
 
-CompletionSupport::CompletionSupport(Core::ICore *core)
-    : QObject(core),
+CompletionSupport::CompletionSupport()
+    : QObject(Core::ICore::instance()),
       m_completionList(0),
       m_startPosition(0),
       m_checkCompletionTrigger(false),
       m_editor(0)
 {
-    m_completionCollector = core->pluginManager()->getObject<ICompletionCollector>();
+    m_completionCollector = ExtensionSystem::PluginManager::instance()
+        ->getObject<ICompletionCollector>();
 }
 
 void CompletionSupport::performCompletion(const CompletionItem &item)
diff --git a/src/plugins/texteditor/completionsupport.h b/src/plugins/texteditor/completionsupport.h
index 9704f80f2a229c9ce9a9fb07f4b44e56ce1ba4cd..a2300010200929b3efad6db0b7d0ee3883ab3bf8 100644
--- a/src/plugins/texteditor/completionsupport.h
+++ b/src/plugins/texteditor/completionsupport.h
@@ -38,8 +38,6 @@
 
 #include <QtCore/QObject>
 
-namespace Core { class ICore; }
-
 namespace TextEditor {
 
 struct CompletionItem;
@@ -58,9 +56,9 @@ class TEXTEDITOR_EXPORT CompletionSupport : public QObject
     Q_OBJECT
 
 public:
-    CompletionSupport(Core::ICore *core);
+    CompletionSupport();
 
-    static CompletionSupport *instance(Core::ICore *core);
+    static CompletionSupport *instance();
 public slots:
     void autoComplete(ITextEditable *editor, bool forced);
 
diff --git a/src/plugins/texteditor/findinfiles.cpp b/src/plugins/texteditor/findinfiles.cpp
index c8c1020563e1212b19bc6c9f82fc097317d66da5..b474fdd5eac1b7f15d783f5a7298e0e52037b754 100644
--- a/src/plugins/texteditor/findinfiles.cpp
+++ b/src/plugins/texteditor/findinfiles.cpp
@@ -42,8 +42,8 @@
 using namespace Find;
 using namespace TextEditor::Internal;
 
-FindInFiles::FindInFiles(Core::ICore *core, SearchResultWindow *resultWindow)
-    : BaseFileFind(core, resultWindow),
+FindInFiles::FindInFiles(SearchResultWindow *resultWindow)
+  : BaseFileFind(resultWindow),
     m_configWidget(0),
     m_directory(0)
 {
diff --git a/src/plugins/texteditor/findinfiles.h b/src/plugins/texteditor/findinfiles.h
index e38c838f87dc5264bf600261e1b3150f4ed3fa33..e894f7eece76841aeed2baed3725074f8bbcc4fb 100644
--- a/src/plugins/texteditor/findinfiles.h
+++ b/src/plugins/texteditor/findinfiles.h
@@ -36,7 +36,6 @@
 
 #include "basefilefind.h"
 
-#include <coreplugin/icore.h>
 #include <find/ifindfilter.h>
 #include <find/searchresultwindow.h>
 
@@ -54,12 +53,10 @@ class FindInFiles : public BaseFileFind
     Q_OBJECT
 
 public:
-    FindInFiles(Core::ICore *core, Find::SearchResultWindow *resultWindow);
+    explicit FindInFiles(Find::SearchResultWindow *resultWindow);
 
     QString name() const;
-
     QKeySequence defaultShortcut() const;
-
     void findAll(const QString &txt, QTextDocument::FindFlags findFlags);
     QWidget *createConfigWidget();
     void writeSettings(QSettings *settings);
diff --git a/src/plugins/texteditor/fontsettingspage.cpp b/src/plugins/texteditor/fontsettingspage.cpp
index 1eaccaba6e26689b16f82eb4c9a0f9a946a6b525..5d493cef404c5a828a8e89ce4607ee85e78fca7f 100644
--- a/src/plugins/texteditor/fontsettingspage.cpp
+++ b/src/plugins/texteditor/fontsettingspage.cpp
@@ -36,20 +36,21 @@
 #include "texteditorconstants.h"
 #include "ui_fontsettingspage.h"
 
+#include <coreplugin/icore.h>
 #include <utils/settingsutils.h>
 
 #include <QtCore/QSettings>
 #include <QtCore/QTimer>
-#include <QtGui/QListWidget>
-#include <QtGui/QToolButton>
-#include <QtGui/QPalette>
 #include <QtGui/QCheckBox>
 #include <QtGui/QColorDialog>
-#include <QtGui/QTextEdit>
-#include <QtGui/QTextCharFormat>
 #include <QtGui/QComboBox>
 #include <QtGui/QFontDatabase>
+#include <QtGui/QListWidget>
 #include <QtGui/QPalette>
+#include <QtGui/QPalette>
+#include <QtGui/QTextCharFormat>
+#include <QtGui/QTextEdit>
+#include <QtGui/QToolButton>
 
 static inline QString colorButtonStyleSheet(const QColor &bgColor)
 {
@@ -70,10 +71,9 @@ public:
     FontSettingsPagePrivate(const TextEditor::FormatDescriptions &fd,
                             const QString &name,
                             const QString &category,
-                            const QString &trCategory,
-                            Core::ICore *core);
+                            const QString &trCategory);
 
-    Core::ICore *m_core;
+public:
     const QString m_name;
     const QString m_settingsGroup;
     const QString m_category;
@@ -89,9 +89,7 @@ public:
 FontSettingsPagePrivate::FontSettingsPagePrivate(const TextEditor::FormatDescriptions &fd,
                                                  const QString &name,
                                                  const QString &category,
-                                                 const QString &trCategory,
-                                                 Core::ICore *core) :
-    m_core(core),
+                                                 const QString &trCategory) :
     m_name(name),
     m_settingsGroup(Core::Utils::settingsKey(category)),
     m_category(category),
@@ -102,9 +100,8 @@ FontSettingsPagePrivate::FontSettingsPagePrivate(const TextEditor::FormatDescrip
     m_curItem(-1)
 {
     bool settingsFound = false;
-    if (m_core)
-        if (const QSettings *settings = m_core->settings())
-            settingsFound = m_value.fromSettings(m_settingsGroup, m_descriptions, settings);
+    if (const QSettings *settings = Core::ICore::instance()->settings())
+        settingsFound = m_value.fromSettings(m_settingsGroup, m_descriptions, settings);
     if (!settingsFound) { // Apply defaults
         foreach (const FormatDescription &f, m_descriptions) {
             const QString name = f.name();
@@ -200,10 +197,9 @@ QColor FormatDescription::background() const
 FontSettingsPage::FontSettingsPage(const FormatDescriptions &fd,
                                    const QString &category,
                                    const QString &trCategory,
-                                   Core::ICore *core,
                                    QObject *parent) :
     Core::IOptionsPage(parent),
-    d_ptr(new FontSettingsPagePrivate(fd, tr("Font & Colors"), category, trCategory, core))
+    d_ptr(new FontSettingsPagePrivate(fd, tr("Font & Colors"), category, trCategory))
 {
 }
 
@@ -232,7 +228,6 @@ QWidget *FontSettingsPage::createPage(QWidget *parent)
     QWidget *w = new QWidget(parent);
     d_ptr->ui.setupUi(w);
 
-
     d_ptr->ui.itemListWidget->setSelectionMode(QAbstractItemView::ExtendedSelection);
 
     foreach (const FormatDescription &d, d_ptr->m_descriptions)
@@ -447,9 +442,8 @@ void FontSettingsPage::apply()
 
     if (d_ptr->m_value != d_ptr->m_lastValue) {
         d_ptr->m_lastValue = d_ptr->m_value;
-        if (d_ptr->m_core)
-            if (QSettings *settings = d_ptr->m_core->settings())
-                d_ptr->m_value.toSettings(d_ptr->m_settingsGroup, d_ptr->m_descriptions, settings);
+        if (QSettings *settings = Core::ICore::instance()->settings())
+            d_ptr->m_value.toSettings(d_ptr->m_settingsGroup, d_ptr->m_descriptions, settings);
 
         QTimer::singleShot(0, this, SLOT(delayedChange()));
     }
diff --git a/src/plugins/texteditor/fontsettingspage.h b/src/plugins/texteditor/fontsettingspage.h
index 6a518f518d361757d2eff3502c042bcba7f382b3..bc674de3c2028bb50badbfefb0948d333472cea3 100644
--- a/src/plugins/texteditor/fontsettingspage.h
+++ b/src/plugins/texteditor/fontsettingspage.h
@@ -38,7 +38,6 @@
 
 #include "fontsettings.h"
 
-#include <coreplugin/icore.h>
 #include <coreplugin/dialogs/ioptionspage.h>
 
 #include <QtGui/QColor>
@@ -89,7 +88,6 @@ public:
     FontSettingsPage(const FormatDescriptions &fd,
                      const QString &category,
                      const QString &trCategory,
-                     Core::ICore *core,
                      QObject *parent = 0);
 
     ~FontSettingsPage();
diff --git a/src/plugins/texteditor/generalsettingspage.cpp b/src/plugins/texteditor/generalsettingspage.cpp
index d20763b0cab82ff5f2a0b6c9983a5b592dcab548..7be7bca1f4b3fc5e3c272a3509f419dbb55aeeea 100644
--- a/src/plugins/texteditor/generalsettingspage.cpp
+++ b/src/plugins/texteditor/generalsettingspage.cpp
@@ -37,16 +37,17 @@
 #include "tabsettings.h"
 #include "ui_generalsettingspage.h"
 
+#include <coreplugin/icore.h>
+
 #include <QtCore/QSettings>
 #include <QtCore/QDebug>
 
 using namespace TextEditor;
 
-struct GeneralSettingsPage::GeneralSettingsPagePrivate {
-    GeneralSettingsPagePrivate(Core::ICore *core,
-                           const GeneralSettingsPageParameters &p);
+struct GeneralSettingsPage::GeneralSettingsPagePrivate
+{
+    explicit GeneralSettingsPagePrivate(const GeneralSettingsPageParameters &p);
 
-    Core::ICore *m_core;
     const GeneralSettingsPageParameters m_parameters;
     Ui::generalSettingsPage m_page;
     TabSettings m_tabSettings;
@@ -54,24 +55,21 @@ struct GeneralSettingsPage::GeneralSettingsPagePrivate {
     DisplaySettings m_displaySettings;
 };
 
-GeneralSettingsPage::GeneralSettingsPagePrivate::GeneralSettingsPagePrivate(Core::ICore *core,
-                                                                const GeneralSettingsPageParameters &p) :
-   m_core(core),
-   m_parameters(p)
+GeneralSettingsPage::GeneralSettingsPagePrivate::GeneralSettingsPagePrivate
+    (const GeneralSettingsPageParameters &p)
+  : m_parameters(p)
 {
-    if (m_core)
-        if (const QSettings *s = m_core->settings()) {
-            m_tabSettings.fromSettings(m_parameters.settingsPrefix, s);
-            m_storageSettings.fromSettings(m_parameters.settingsPrefix, s);
-            m_displaySettings.fromSettings(m_parameters.settingsPrefix, s);
-        }
+    if (const QSettings *s = Core::ICore::instance()->settings()) {
+        m_tabSettings.fromSettings(m_parameters.settingsPrefix, s);
+        m_storageSettings.fromSettings(m_parameters.settingsPrefix, s);
+        m_displaySettings.fromSettings(m_parameters.settingsPrefix, s);
+    }
 }
 
-GeneralSettingsPage::GeneralSettingsPage(Core::ICore *core,
-                                 const GeneralSettingsPageParameters &p,
-                                 QObject *parent) :
-    Core::IOptionsPage(parent),
-    m_d(new GeneralSettingsPagePrivate(core, p))
+GeneralSettingsPage::GeneralSettingsPage(const GeneralSettingsPageParameters &p,
+                                 QObject *parent)
+  : Core::IOptionsPage(parent),
+    m_d(new GeneralSettingsPagePrivate(p))
 {
 }
 
@@ -99,9 +97,7 @@ QWidget *GeneralSettingsPage::createPage(QWidget *parent)
 {
     QWidget *w = new QWidget(parent);
     m_d->m_page.setupUi(w);
-
     settingsToUI();
-
     return w;
 }
 
@@ -112,30 +108,28 @@ void GeneralSettingsPage::apply()
     DisplaySettings newDisplaySettings;
 
     settingsFromUI(newTabSettings, newStorageSettings, newDisplaySettings);
+    Core::ICore *core = Core::ICore::instance();
 
     if (newTabSettings != m_d->m_tabSettings) {
         m_d->m_tabSettings = newTabSettings;
-        if (m_d->m_core)
-            if (QSettings *s = m_d->m_core->settings())
-                m_d->m_tabSettings.toSettings(m_d->m_parameters.settingsPrefix, s);
+        if (QSettings *s = core->settings())
+            m_d->m_tabSettings.toSettings(m_d->m_parameters.settingsPrefix, s);
 
         emit tabSettingsChanged(newTabSettings);
     }
 
     if (newStorageSettings != m_d->m_storageSettings) {
         m_d->m_storageSettings = newStorageSettings;
-        if (m_d->m_core)
-            if (QSettings *s = m_d->m_core->settings())
-                m_d->m_storageSettings.toSettings(m_d->m_parameters.settingsPrefix, s);
+        if (QSettings *s = core->settings())
+            m_d->m_storageSettings.toSettings(m_d->m_parameters.settingsPrefix, s);
 
         emit storageSettingsChanged(newStorageSettings);
     }
 
     if (newDisplaySettings != m_d->m_displaySettings) {
         m_d->m_displaySettings = newDisplaySettings;
-        if (m_d->m_core)
-            if (QSettings *s = m_d->m_core->settings())
-                m_d->m_displaySettings.toSettings(m_d->m_parameters.settingsPrefix, s);
+        if (QSettings *s = core->settings())
+            m_d->m_displaySettings.toSettings(m_d->m_parameters.settingsPrefix, s);
 
         emit displaySettingsChanged(newDisplaySettings);
     }
@@ -207,9 +201,9 @@ void GeneralSettingsPage::setDisplaySettings(const DisplaySettings &newDisplaySe
 {
     if (newDisplaySettings != m_d->m_displaySettings) {
         m_d->m_displaySettings = newDisplaySettings;
-        if (m_d->m_core)
-            if (QSettings *s = m_d->m_core->settings())
-                m_d->m_displaySettings.toSettings(m_d->m_parameters.settingsPrefix, s);
+        Core::ICore *core = Core::ICore::instance();
+        if (QSettings *s = core->settings())
+            m_d->m_displaySettings.toSettings(m_d->m_parameters.settingsPrefix, s);
 
         emit displaySettingsChanged(newDisplaySettings);
     }
diff --git a/src/plugins/texteditor/generalsettingspage.h b/src/plugins/texteditor/generalsettingspage.h
index eea75e2ccc8a72ada08b7881ccd666656c45aa91..5eb9c0811c23b9f761e2b3a8e1f37c11486646e1 100644
--- a/src/plugins/texteditor/generalsettingspage.h
+++ b/src/plugins/texteditor/generalsettingspage.h
@@ -36,7 +36,6 @@
 
 #include "texteditor_global.h"
 
-#include <coreplugin/icore.h>
 #include <coreplugin/dialogs/ioptionspage.h>
 
 #include <QtCore/QObject>
@@ -47,26 +46,23 @@ struct TabSettings;
 struct StorageSettings;
 struct DisplaySettings;
 
-struct TEXTEDITOR_EXPORT GeneralSettingsPageParameters {
+struct TEXTEDITOR_EXPORT GeneralSettingsPageParameters
+{
     QString name;
     QString category;
     QString trCategory;
     QString settingsPrefix;
 };
 
-class Ui_generalSettingsPage;
-
 class TEXTEDITOR_EXPORT GeneralSettingsPage : public Core::IOptionsPage
 {
     Q_OBJECT
 
 public:
-    GeneralSettingsPage(Core::ICore *core,
-                        const GeneralSettingsPageParameters &p,
-                        QObject *parent);
+    GeneralSettingsPage(const GeneralSettingsPageParameters &p, QObject *parent);
     virtual ~GeneralSettingsPage();
 
-    //IOptionsPage
+    // IOptionsPage
     QString name() const;
     QString category() const;
     QString trCategory() const;
diff --git a/src/plugins/texteditor/plaintexteditor.cpp b/src/plugins/texteditor/plaintexteditor.cpp
index b9370bca9cf46089f343d9deb5948816fb772245..4a76df107660f35269e9c084f07ace2e01add38c 100644
--- a/src/plugins/texteditor/plaintexteditor.cpp
+++ b/src/plugins/texteditor/plaintexteditor.cpp
@@ -45,7 +45,7 @@ using namespace TextEditor::Internal;
 PlainTextEditorEditable::PlainTextEditorEditable(PlainTextEditor *editor)
     :BaseTextEditorEditable(editor)
 {
-    Core::ICore *core = TextEditorPlugin::core();
+    Core::ICore *core = Core::ICore::instance();
     m_context << core->uniqueIDManager()->
         uniqueIdentifier(Core::Constants::K_DEFAULT_TEXT_EDITOR);
     m_context << core->uniqueIDManager()->
@@ -55,7 +55,6 @@ PlainTextEditorEditable::PlainTextEditorEditable(PlainTextEditor *editor)
 PlainTextEditor::PlainTextEditor(QWidget *parent) :
     BaseTextEditor(parent)
 {
-
     setRevisionsVisible(true);
     setMarksVisible(true);
     setRequestMarkEnabled(false);
@@ -69,7 +68,6 @@ QList<int> PlainTextEditorEditable::context() const
     return m_context;
 }
 
-
 Core::IEditor *PlainTextEditorEditable::duplicate(QWidget *parent)
 {
     PlainTextEditor *newEditor = new PlainTextEditor(parent);
@@ -103,8 +101,10 @@ const char *PlainTextEditorEditable::kind() const
 // to do in 2 steps (indenting/wrapping)}
 //
 
-void PlainTextEditor::indentBlock(QTextDocument *doc, QTextBlock block, QChar /* typedChar */)
+void PlainTextEditor::indentBlock(QTextDocument *doc, QTextBlock block, QChar typedChar)
 {
+    Q_UNUSED(typedChar);
+
     // At beginning: Leave as is.
     if (block == doc->begin())
         return;
diff --git a/src/plugins/texteditor/plaintexteditorfactory.cpp b/src/plugins/texteditor/plaintexteditorfactory.cpp
index 92a3a79ea4f8d697cddac7d0c9ec401ca25cc788..7c63855ec7a74c4880e176f6f58fa8c9e4ea1089 100644
--- a/src/plugins/texteditor/plaintexteditorfactory.cpp
+++ b/src/plugins/texteditor/plaintexteditorfactory.cpp
@@ -37,19 +37,20 @@
 #include "texteditorplugin.h"
 #include "texteditoractionhandler.h"
 
+#include <coreplugin/icore.h>
 #include <coreplugin/coreconstants.h>
 #include <coreplugin/editormanager/editormanager.h>
 
 using namespace TextEditor;
 using namespace TextEditor::Internal;
 
-PlainTextEditorFactory::PlainTextEditorFactory(QObject *parent)   :
-    Core::IEditorFactory(parent),
+PlainTextEditorFactory::PlainTextEditorFactory(QObject *parent)
+  : Core::IEditorFactory(parent),
     m_kind(Core::Constants::K_DEFAULT_TEXT_EDITOR)
 {
-    m_actionHandler = new TextEditorActionHandler(TextEditorPlugin::core(),
-                                                  QLatin1String(TextEditor::Constants::C_TEXTEDITOR),
-                                                  TextEditorActionHandler::Format);
+    m_actionHandler = new TextEditorActionHandler(
+        QLatin1String(TextEditor::Constants::C_TEXTEDITOR),
+        TextEditorActionHandler::Format);
     m_mimeTypes << QLatin1String(TextEditor::Constants::C_TEXTEDITOR_MIMETYPE_TEXT)
                 << QLatin1String(TextEditor::Constants::C_TEXTEDITOR_MIMETYPE_XML);
 }
@@ -66,14 +67,14 @@ QString PlainTextEditorFactory::kind() const
 
 Core::IFile *PlainTextEditorFactory::open(const QString &fileName)
 {
-    Core::ICore *core = TextEditorPlugin::core();
+    Core::ICore *core = Core::ICore::instance();
     Core::IEditor *iface = core->editorManager()->openEditor(fileName, kind());
     return iface ? iface->file() : 0;
 }
 
 Core::IEditor *PlainTextEditorFactory::createEditor(QWidget *parent)
 {
-    PlainTextEditor *rc =  new PlainTextEditor(parent);
+    PlainTextEditor *rc = new PlainTextEditor(parent);
     TextEditorPlugin::instance()->initializeEditor(rc);
     return rc->editableInterface();
 }
diff --git a/src/plugins/texteditor/texteditoractionhandler.cpp b/src/plugins/texteditor/texteditoractionhandler.cpp
index 44b6f33b17d41bdf3df2c20ff78a974c9dcf5017..511e1d919e7dfa130c7a21130405ec86821ae5ff 100644
--- a/src/plugins/texteditor/texteditoractionhandler.cpp
+++ b/src/plugins/texteditor/texteditoractionhandler.cpp
@@ -38,6 +38,7 @@
 #include "linenumberfilter.h"
 
 #include <quickopen/quickopenmanager.h>
+#include <coreplugin/icore.h>
 #include <coreplugin/coreconstants.h>
 #include <coreplugin/uniqueidmanager.h>
 #include <coreplugin/actionmanager/actionmanager.h>
@@ -52,31 +53,45 @@
 using namespace TextEditor;
 using namespace TextEditor::Internal;
 
-TextEditorActionHandler::TextEditorActionHandler(Core::ICore *core,
-                                                 const QString &context,
-                                                 uint optionalActions)  :
-    QObject(core),
+TextEditorActionHandler::TextEditorActionHandler(const QString &context,
+                                                 uint optionalActions) 
+  : QObject(Core::ICore::instance()),
     m_optionalActions(optionalActions),
     m_currentEditor(0),
-    m_core(core),
     m_initialized(false)
 {
-    m_undoAction = m_redoAction = m_copyAction = m_cutAction = m_pasteAction
-                 = m_selectAllAction = m_gotoAction = m_printAction = m_formatAction
-                 = m_visualizeWhitespaceAction = m_cleanWhitespaceAction = m_textWrappingAction
-                 = m_unCommentSelectionAction = m_unCollapseAllAction
-                 = m_collapseAction = m_expandAction
-                 = m_deleteLineAction = m_selectEncodingAction
-                 = m_increaseFontSizeAction = m_decreaseFontSizeAction
-                 = m_gotoBlockStartAction = m_gotoBlockStartWithSelectionAction
-                 = m_gotoBlockEndAction = m_gotoBlockEndWithSelectionAction
-                 = m_selectBlockUpAction = m_selectBlockDownAction
-                 = m_moveLineUpAction = m_moveLineDownAction
-                 = 0;
-
-    m_contextId << m_core->uniqueIDManager()->uniqueIdentifier(context);
-
-    connect(m_core, SIGNAL(contextAboutToChange(Core::IContext *)),
+    m_undoAction = 0;
+    m_redoAction = 0;
+    m_copyAction = 0;
+    m_cutAction = 0;
+    m_pasteAction = 0;
+    m_selectAllAction = 0;
+    m_gotoAction = 0;
+    m_printAction = 0;
+    m_formatAction = 0;
+    m_visualizeWhitespaceAction = 0;
+    m_cleanWhitespaceAction = 0;
+    m_textWrappingAction = 0;
+    m_unCommentSelectionAction = 0;
+    m_unCollapseAllAction = 0;
+    m_collapseAction = 0;
+    m_expandAction = 0;
+    m_deleteLineAction = 0;
+    m_selectEncodingAction = 0;
+    m_increaseFontSizeAction = 0;
+    m_decreaseFontSizeAction = 0;
+    m_gotoBlockStartAction = 0;
+    m_gotoBlockStartWithSelectionAction = 0;
+    m_gotoBlockEndAction = 0;
+    m_gotoBlockEndWithSelectionAction = 0;
+    m_selectBlockUpAction = 0;
+    m_selectBlockDownAction = 0;
+    m_moveLineUpAction = 0;
+    m_moveLineDownAction = 0;
+
+    m_contextId << Core::ICore::instance()->uniqueIDManager()->uniqueIdentifier(context);
+
+    connect(Core::ICore::instance(), SIGNAL(contextAboutToChange(Core::IContext *)),
         this, SLOT(updateCurrentEditor(Core::IContext *)));
 }
 
@@ -111,7 +126,7 @@ void TextEditorActionHandler::createActions()
     m_gotoAction      = registerNewAction(QLatin1String(Core::Constants::GOTO),      this, SLOT(gotoAction()));
     m_printAction     = registerNewAction(QLatin1String(Core::Constants::PRINT),     this, SLOT(printAction()));
 
-    Core::ActionManager *am = m_core->actionManager();
+    Core::ActionManager *am = Core::ICore::instance()->actionManager();
 
     Core::ActionContainer *medit = am->actionContainer(Core::Constants::M_EDIT);
     Core::ActionContainer *advancedMenu = am->actionContainer(Core::Constants::M_EDIT_ADVANCED);
@@ -125,35 +140,34 @@ void TextEditorActionHandler::createActions()
     m_formatAction = new QAction(tr("Auto-&indent Selection"), this);
     command = am->registerAction(m_formatAction, TextEditor::Constants::AUTO_INDENT_SELECTION, m_contextId);
     command->setDefaultKeySequence(QKeySequence(tr("Ctrl+I")));
-    advancedMenu->addAction(command);
+    advancedMenu->addAction(command, Core::Constants::G_EDIT_FORMAT);
     connect(m_formatAction, SIGNAL(triggered(bool)), this, SLOT(formatAction()));
 
 
     m_visualizeWhitespaceAction = new QAction(tr("&Visualize Whitespace"), this);
     m_visualizeWhitespaceAction->setCheckable(true);
     command = am->registerAction(m_visualizeWhitespaceAction,
-                                                 TextEditor::Constants::VISUALIZE_WHITESPACE, m_contextId);
+                                 TextEditor::Constants::VISUALIZE_WHITESPACE, m_contextId);
 #ifndef Q_OS_MAC
     command->setDefaultKeySequence(QKeySequence(tr("Ctrl+E, Ctrl+V")));
 #endif
-    advancedMenu->addAction(command);
+    advancedMenu->addAction(command, Core::Constants::G_EDIT_FORMAT);
     connect(m_visualizeWhitespaceAction, SIGNAL(triggered(bool)), this, SLOT(setVisualizeWhitespace(bool)));
 
     m_cleanWhitespaceAction = new QAction(tr("Clean Whitespace"), this);
     command = am->registerAction(m_cleanWhitespaceAction,
                                  TextEditor::Constants::CLEAN_WHITESPACE, m_contextId);
 
-    advancedMenu->addAction(command);
+    advancedMenu->addAction(command, Core::Constants::G_EDIT_FORMAT);
     connect(m_cleanWhitespaceAction, SIGNAL(triggered()), this, SLOT(cleanWhitespace()));
 
     m_textWrappingAction = new QAction(tr("Enable Text &Wrapping"), this);
     m_textWrappingAction->setCheckable(true);
-    command = am->registerAction(m_textWrappingAction,
-                                                 TextEditor::Constants::TEXT_WRAPPING, m_contextId);
+    command = am->registerAction(m_textWrappingAction, TextEditor::Constants::TEXT_WRAPPING, m_contextId);
 #ifndef Q_OS_MAC
     command->setDefaultKeySequence(QKeySequence(tr("Ctrl+E, Ctrl+W")));
 #endif
-    advancedMenu->addAction(command);
+    advancedMenu->addAction(command, Core::Constants::G_EDIT_FORMAT);
     connect(m_textWrappingAction, SIGNAL(triggered(bool)), this, SLOT(setTextWrapping(bool)));
 
 
@@ -161,7 +175,7 @@ void TextEditorActionHandler::createActions()
     command = am->registerAction(m_unCommentSelectionAction, Constants::UN_COMMENT_SELECTION, m_contextId);
     command->setDefaultKeySequence(QKeySequence(tr("Ctrl+/")));
     connect(m_unCommentSelectionAction, SIGNAL(triggered()), this, SLOT(unCommentSelection()));
-    advancedMenu->addAction(command);
+    advancedMenu->addAction(command, Core::Constants::G_EDIT_FORMAT);
 
     m_deleteLineAction = new QAction(tr("Delete &Line"), this);
     command = am->registerAction(m_deleteLineAction, Constants::DELETE_LINE, m_contextId);
@@ -172,28 +186,30 @@ void TextEditorActionHandler::createActions()
     command = am->registerAction(m_collapseAction, Constants::COLLAPSE, m_contextId);
     command->setDefaultKeySequence(QKeySequence(tr("Ctrl+<")));
     connect(m_collapseAction, SIGNAL(triggered()), this, SLOT(collapse()));
+    advancedMenu->addAction(command, Core::Constants::G_EDIT_COLLAPSING);
 
     m_expandAction = new QAction(tr("Expand"), this);
     command = am->registerAction(m_expandAction, Constants::EXPAND, m_contextId);
     command->setDefaultKeySequence(QKeySequence(tr("Ctrl+>")));
     connect(m_expandAction, SIGNAL(triggered()), this, SLOT(expand()));
+    advancedMenu->addAction(command, Core::Constants::G_EDIT_COLLAPSING);
 
     m_unCollapseAllAction = new QAction(tr("(Un)&Collapse All"), this);
     command = am->registerAction(m_unCollapseAllAction, Constants::UN_COLLAPSE_ALL, m_contextId);
     connect(m_unCollapseAllAction, SIGNAL(triggered()), this, SLOT(unCollapseAll()));
-    advancedMenu->addAction(command);
+    advancedMenu->addAction(command, Core::Constants::G_EDIT_COLLAPSING);
 
     m_increaseFontSizeAction = new QAction(tr("Increase Font Size"), this);
     command = am->registerAction(m_increaseFontSizeAction, Constants::INCREASE_FONT_SIZE, m_contextId);
     command->setDefaultKeySequence(QKeySequence(tr("Ctrl++")));
     connect(m_increaseFontSizeAction, SIGNAL(triggered()), this, SLOT(increaseFontSize()));
-    advancedMenu->addAction(command);
+    advancedMenu->addAction(command, Core::Constants::G_EDIT_FONT);
     
     m_decreaseFontSizeAction = new QAction(tr("Decrease Font Size"), this);
     command = am->registerAction(m_decreaseFontSizeAction, Constants::DECREASE_FONT_SIZE, m_contextId);
     command->setDefaultKeySequence(QKeySequence(tr("Ctrl+-")));
     connect(m_decreaseFontSizeAction, SIGNAL(triggered()), this, SLOT(decreaseFontSize()));
-    advancedMenu->addAction(command);
+    advancedMenu->addAction(command, Core::Constants::G_EDIT_FONT);
 
     m_gotoBlockStartAction = new QAction(tr("Goto Block Start"), this);
     command = am->registerAction(m_gotoBlockStartAction, Constants::GOTO_BLOCK_START, m_contextId);
@@ -247,7 +263,7 @@ QAction *TextEditorActionHandler::registerNewAction(const QString &id, const QSt
         return 0;
 
     QAction *result = new QAction(title, this);
-    m_core->actionManager()->registerAction(result, id, m_contextId);
+    Core::ICore::instance()->actionManager()->registerAction(result, id, m_contextId);
     return result;
 }
 
@@ -348,7 +364,7 @@ void TextEditorActionHandler::gotoAction()
 void TextEditorActionHandler::printAction()
 {
     if (m_currentEditor)
-        m_currentEditor->print(m_core->printer());
+        m_currentEditor->print(Core::ICore::instance()->printer());
 }
 
 void TextEditorActionHandler::setVisualizeWhitespace(bool checked)
@@ -444,9 +460,3 @@ const QPointer<BaseTextEditor> &TextEditorActionHandler::currentEditor() const
 {
     return m_currentEditor;
 }
-
-Core::ICore *TextEditorActionHandler::core() const
-{
-    return m_core;
-}
-
diff --git a/src/plugins/texteditor/texteditoractionhandler.h b/src/plugins/texteditor/texteditoractionhandler.h
index ea30cad741337c1bf5bb74c6d3577b4a1d2494f1..172617e9a27e7b7fc55869b9a0f87262a05e62f4 100644
--- a/src/plugins/texteditor/texteditoractionhandler.h
+++ b/src/plugins/texteditor/texteditoractionhandler.h
@@ -38,11 +38,10 @@
 #include "basetexteditor.h"
 
 #include "coreplugin/icontext.h"
-#include "coreplugin/icore.h"
 
+#include <QtCore/QList>
 #include <QtCore/QObject>
 #include <QtCore/QPointer>
-#include <QtCore/QList>
 
 namespace TextEditor {
 
@@ -62,9 +61,7 @@ public:
         UnCollapseAll = 4
     };
 
-    TextEditorActionHandler(Core::ICore *core,
-                            const QString &context,
-                            uint optionalActions = None);
+    TextEditorActionHandler(const QString &context, uint optionalActions = None);
     void setupActions(BaseTextEditor *editor);
 
     void initializeActions();
@@ -80,7 +77,6 @@ protected:
     QAction *registerNewAction(const QString &id, const QString &title = QString());
     QAction *registerNewAction(const QString &id, QObject *receiver, const char *slot,
                                const QString &title = QString());
-    Core::ICore *core() const;
 
     enum UpdateMode { NoEditor , ReadOnlyMode, WriteMode };
     UpdateMode updateMode() const;
@@ -152,7 +148,6 @@ private:
 
     uint m_optionalActions;
     QPointer<BaseTextEditor> m_currentEditor;
-    Core::ICore *m_core;
     QList<int> m_contextId;
     bool m_initialized;
 };
diff --git a/src/plugins/texteditor/texteditorplugin.cpp b/src/plugins/texteditor/texteditorplugin.cpp
index d76bd7167082e15f07ee6941592c0752920f7093..23b96a5321762269ecc7edfae935b60d987098a7 100644
--- a/src/plugins/texteditor/texteditorplugin.cpp
+++ b/src/plugins/texteditor/texteditorplugin.cpp
@@ -49,21 +49,21 @@
 #include <coreplugin/actionmanager/actionmanager.h>
 #include <coreplugin/actionmanager/command.h>
 #include <coreplugin/editormanager/editormanager.h>
+#include <extensionsystem/pluginmanager.h>
 #include <texteditor/texteditoractionhandler.h>
 #include <utils/qtcassert.h>
 
-#include <QtCore/qplugin.h>
-#include <QtGui/QShortcut>
+#include <QtCore/QtPlugin>
 #include <QtGui/QMainWindow>
+#include <QtGui/QShortcut>
 
 using namespace TextEditor;
 using namespace TextEditor::Internal;
 
 TextEditorPlugin *TextEditorPlugin::m_instance = 0;
 
-TextEditorPlugin::TextEditorPlugin() :
-    m_core(0),
-    m_settings(0),
+TextEditorPlugin::TextEditorPlugin()
+  : m_settings(0),
     m_wizard(0),
     m_editorFactory(0),
     m_lineNumberFilter(0)
@@ -82,17 +82,12 @@ TextEditorPlugin *TextEditorPlugin::instance()
     return m_instance;
 }
 
-Core::ICore *TextEditorPlugin::core()
-{
-    return m_instance->m_core;
-}
-
-//ExtensionSystem::PluginInterface
-bool TextEditorPlugin::initialize(const QStringList & /*arguments*/, QString *errorMessage)
+// ExtensionSystem::PluginInterface
+bool TextEditorPlugin::initialize(const QStringList &arguments, QString *errorMessage)
 {
-    m_core = ExtensionSystem::PluginManager::instance()->getObject<Core::ICore>();
+    Q_UNUSED(arguments);
 
-    if (!m_core->mimeDatabase()->addMimeTypes(QLatin1String(":/texteditor/TextEditor.mimetypes.xml"), errorMessage))
+    if (!Core::ICore::instance()->mimeDatabase()->addMimeTypes(QLatin1String(":/texteditor/TextEditor.mimetypes.xml"), errorMessage))
         return false;
 
     Core::BaseFileWizardParameters wizardParameters(Core::IWizard::FileWizard);
@@ -103,7 +98,7 @@ bool TextEditorPlugin::initialize(const QStringList & /*arguments*/, QString *er
     m_wizard = new TextFileWizard(QLatin1String(TextEditor::Constants::C_TEXTEDITOR_MIMETYPE_TEXT),
                                   QLatin1String(Core::Constants::K_DEFAULT_TEXT_EDITOR),
                                   QLatin1String("text$"),
-                                  wizardParameters, m_core);
+                                  wizardParameters);
     // Add text file wizard
     addAutoReleasedObject(m_wizard);
 
@@ -115,15 +110,16 @@ bool TextEditorPlugin::initialize(const QStringList & /*arguments*/, QString *er
     addAutoReleasedObject(m_editorFactory);
 
     // Goto line functionality for quick open
-    m_lineNumberFilter = new LineNumberFilter(m_core->editorManager());
+    Core::ICore *core = Core::ICore::instance();
+    m_lineNumberFilter = new LineNumberFilter(core->editorManager());
     addAutoReleasedObject(m_lineNumberFilter);
 
-    int contextId = m_core->uniqueIDManager()->uniqueIdentifier(TextEditor::Constants::C_TEXTEDITOR);
+    int contextId = core->uniqueIDManager()->uniqueIdentifier(TextEditor::Constants::C_TEXTEDITOR);
     QList<int> context = QList<int>() << contextId;
-    Core::ActionManager *am = m_core->actionManager();
+    Core::ActionManager *am = core->actionManager();
 
     // Add shortcut for invoking automatic completion
-    QShortcut *completionShortcut = new QShortcut(m_core->mainWindow());
+    QShortcut *completionShortcut = new QShortcut(core->mainWindow());
     completionShortcut->setWhatsThis(tr("Triggers a completion in this scope"));
     // Make sure the shortcut still works when the completion widget is active
     completionShortcut->setContext(Qt::ApplicationShortcut);
@@ -135,7 +131,8 @@ bool TextEditorPlugin::initialize(const QStringList & /*arguments*/, QString *er
 #endif
     connect(completionShortcut, SIGNAL(activated()), this, SLOT(invokeCompletion()));
 
-    addAutoReleasedObject(new FindInFiles(m_core, m_core->pluginManager()->getObject<Find::SearchResultWindow>()));
+    addAutoReleasedObject(new FindInFiles(
+        ExtensionSystem::PluginManager::instance()->getObject<Find::SearchResultWindow>()));
 
     return true;
 }
@@ -169,10 +166,7 @@ void TextEditorPlugin::initializeEditor(TextEditor::PlainTextEditor *editor)
 
 void TextEditorPlugin::invokeCompletion()
 {
-    if (!m_core)
-        return;
-
-    Core::IEditor *iface = m_core->editorManager()->currentEditor();
+    Core::IEditor *iface = Core::ICore::instance()->editorManager()->currentEditor();
     ITextEditor *editor = qobject_cast<ITextEditor *>(iface);
     if (editor)
         editor->triggerCompletions();
diff --git a/src/plugins/texteditor/texteditorplugin.h b/src/plugins/texteditor/texteditorplugin.h
index 65c7c3e48e83fb28197af9c289de0bf74e991fb6..1f0029a71aa09600e65f1fbb273074d433ed6198 100644
--- a/src/plugins/texteditor/texteditorplugin.h
+++ b/src/plugins/texteditor/texteditorplugin.h
@@ -36,22 +36,13 @@
 
 #include <extensionsystem/iplugin.h>
 
-QT_BEGIN_NAMESPACE
-class QAction;
-QT_END_NAMESPACE
-
-namespace Core {
-class ICore;
-class IEditor;
-}
-
 namespace TextEditor {
 
 class FontSettings;
 class FontSettingsPage;
+class PlainTextEditor;
 class TextEditorSettings;
 class TextFileWizard;
-class PlainTextEditor;
 
 namespace Internal {
 
@@ -67,10 +58,9 @@ public:
     virtual ~TextEditorPlugin();
 
     static TextEditorPlugin *instance();
-    static Core::ICore *core();
 
     // ExtensionSystem::PluginInterface
-    bool initialize(const QStringList &arguments, QString *);
+    bool initialize(const QStringList &arguments, QString *errorMessage);
     void extensionsInitialized();
 
     void initializeEditor(PlainTextEditor *editor);
@@ -82,7 +72,6 @@ private slots:
 
 private:
     static TextEditorPlugin *m_instance;
-    Core::ICore *m_core;
     TextEditorSettings *m_settings;
     TextFileWizard *m_wizard;
     PlainTextEditorFactory *m_editorFactory;
diff --git a/src/plugins/texteditor/texteditorsettings.cpp b/src/plugins/texteditor/texteditorsettings.cpp
index 2637b5da545c9c24d5dd5e3c11393760c547264a..ea61d57172527e1bcb346cdd5276b17630b3bbd5 100644
--- a/src/plugins/texteditor/texteditorsettings.cpp
+++ b/src/plugins/texteditor/texteditorsettings.cpp
@@ -41,9 +41,10 @@
 #include "texteditorconstants.h"
 #include "texteditorplugin.h"
 
+#include <extensionsystem/pluginmanager.h>
 #include <utils/qtcassert.h>
 
-#include <QApplication>
+#include <QtGui/QApplication>
 
 using namespace TextEditor;
 using namespace TextEditor::Constants;
@@ -93,8 +94,7 @@ TextEditorSettings::TextEditorSettings(Internal::TextEditorPlugin *plugin,
 
     m_fontSettingsPage = new FontSettingsPage(formatDescriptions,
                                               QLatin1String("TextEditor"),
-                                              tr("Text Editor"),
-                                              plugin->core());
+                                              tr("Text Editor"));
     pm->addObject(m_fontSettingsPage);
 
     // Add the GUI used to configure the tab, storage and display settings
@@ -103,7 +103,7 @@ TextEditorSettings::TextEditorSettings(Internal::TextEditorPlugin *plugin,
     generalSettingsPageParameters.category = QLatin1String("TextEditor");
     generalSettingsPageParameters.trCategory = tr("Text Editor");
     generalSettingsPageParameters.settingsPrefix = QLatin1String("text");
-    m_generalSettingsPage = new GeneralSettingsPage(plugin->core(), generalSettingsPageParameters, this);
+    m_generalSettingsPage = new GeneralSettingsPage(generalSettingsPageParameters, this);
     pm->addObject(m_generalSettingsPage);
 
     connect(m_fontSettingsPage, SIGNAL(changed(TextEditor::FontSettings)),
diff --git a/src/plugins/texteditor/textfilewizard.cpp b/src/plugins/texteditor/textfilewizard.cpp
index e755233735df41d296a58fb50b4a3afa553f402e..05a3b843a4d454d448d1d7b63af0e1cc73aa0322 100644
--- a/src/plugins/texteditor/textfilewizard.cpp
+++ b/src/plugins/texteditor/textfilewizard.cpp
@@ -41,9 +41,8 @@ TextFileWizard::TextFileWizard(const QString &mimeType,
                                const QString &editorKind,
                                const QString &suggestedFileName,
                                const BaseFileWizardParameters &parameters,
-                               Core::ICore *core,
                                QObject *parent) :
-    Core::StandardFileWizard(parameters, core, parent),
+    Core::StandardFileWizard(parameters, parent),
     m_mimeType(mimeType),
     m_editorKind(editorKind),
     m_suggestedFileName(suggestedFileName)
diff --git a/src/plugins/texteditor/textfilewizard.h b/src/plugins/texteditor/textfilewizard.h
index 2cf2a01b39505af4e0ee6b13d585ea0dfd6d17e1..1ccc50166f5521d506c1d68c249ef48ce4d585ba 100644
--- a/src/plugins/texteditor/textfilewizard.h
+++ b/src/plugins/texteditor/textfilewizard.h
@@ -50,7 +50,6 @@ public:
                    const QString &editorKind,
                    const QString &suggestedFileName,
                    const BaseFileWizardParameters &parameters,
-                   Core::ICore *core,
                    QObject *parent = 0);
 
 protected:
diff --git a/src/plugins/vcsbase/basevcseditorfactory.cpp b/src/plugins/vcsbase/basevcseditorfactory.cpp
index 392b9c269642b4f62e33e95356927491cf420a4d..edfadc7032a27da683f68b32ef207e27cf73e5a2 100644
--- a/src/plugins/vcsbase/basevcseditorfactory.cpp
+++ b/src/plugins/vcsbase/basevcseditorfactory.cpp
@@ -43,28 +43,26 @@
 
 namespace VCSBase {
 
-struct BaseVCSEditorFactoryPrivate  {
-    BaseVCSEditorFactoryPrivate(const VCSBaseEditorParameters *t, Core::ICore *core);
+struct BaseVCSEditorFactoryPrivate
+{
+    BaseVCSEditorFactoryPrivate(const VCSBaseEditorParameters *t);
 
     const VCSBaseEditorParameters *m_type;
     const QString m_kind;
     const QStringList m_mimeTypes;
-    Core::ICore *m_core;
     TextEditor::TextEditorActionHandler *m_editorHandler;
 };
 
-BaseVCSEditorFactoryPrivate::BaseVCSEditorFactoryPrivate(const VCSBaseEditorParameters *t, Core::ICore *core) :
+BaseVCSEditorFactoryPrivate::BaseVCSEditorFactoryPrivate(const VCSBaseEditorParameters *t) :
     m_type(t),
     m_kind(QLatin1String(t->kind)),
     m_mimeTypes(QStringList(QLatin1String(t->mimeType))),
-    m_core(core),
-    m_editorHandler(new TextEditor::TextEditorActionHandler(core, t->kind))
+    m_editorHandler(new TextEditor::TextEditorActionHandler(t->kind))
 {
 }
 
-BaseVCSEditorFactory::BaseVCSEditorFactory(const VCSBaseEditorParameters *t,
-                                           Core::ICore *core) :
-    m_d(new BaseVCSEditorFactoryPrivate(t, core))
+BaseVCSEditorFactory::BaseVCSEditorFactory(const VCSBaseEditorParameters *t)
+  : m_d(new BaseVCSEditorFactoryPrivate(t))
 {
 }
 
@@ -85,7 +83,7 @@ QString BaseVCSEditorFactory::kind() const
 
 Core::IFile *BaseVCSEditorFactory::open(const QString &fileName)
 {
-    Core::IEditor *iface = m_d->m_core->editorManager()->openEditor(fileName, kind());
+    Core::IEditor *iface = Core::ICore::instance()->editorManager()->openEditor(fileName, kind());
     return iface ? iface->file() : 0;
 }
 
diff --git a/src/plugins/vcsbase/basevcseditorfactory.h b/src/plugins/vcsbase/basevcseditorfactory.h
index bc10a21180dd4712fa3d92eb5950c3d79cadde7f..ca6e926937ad03bd02f8ab4157201c6331eb3a47 100644
--- a/src/plugins/vcsbase/basevcseditorfactory.h
+++ b/src/plugins/vcsbase/basevcseditorfactory.h
@@ -41,14 +41,6 @@
 
 #include <QtCore/QStringList>
 
-namespace TextEditor {
-    class TextEditorActionHandler;
-}
-
-namespace Core {
-    class ICore;
-}
-
 namespace VCSBase {
 
 struct BaseVCSEditorFactoryPrivate;
@@ -59,8 +51,7 @@ class VCSBASE_EXPORT BaseVCSEditorFactory : public Core::IEditorFactory
 {
     Q_OBJECT
 public:
-    explicit BaseVCSEditorFactory(const VCSBaseEditorParameters *type,
-                                  Core::ICore *core);
+    explicit BaseVCSEditorFactory(const VCSBaseEditorParameters *type);
     virtual ~BaseVCSEditorFactory();
 
     virtual QStringList mimeTypes() const;
@@ -85,7 +76,6 @@ class VCSEditorFactory : public BaseVCSEditorFactory
 {
 public:
     explicit VCSEditorFactory(const VCSBaseEditorParameters *type,
-                              Core::ICore *core,
                               QObject *describeReceiver = 0,
                               const char *describeSlot = 0);
 
@@ -98,10 +88,9 @@ private:
 
 template <class Editor>
 VCSEditorFactory<Editor>::VCSEditorFactory(const VCSBaseEditorParameters *type,
-                                           Core::ICore *core,
                                            QObject *describeReceiver,
                                            const char *describeSlot) :
-    BaseVCSEditorFactory(type, core),
+    BaseVCSEditorFactory(type),
     m_describeReceiver(describeReceiver),
     m_describeSlot(describeSlot)
 {
diff --git a/src/plugins/vcsbase/basevcssubmiteditorfactory.cpp b/src/plugins/vcsbase/basevcssubmiteditorfactory.cpp
index b662abbf409f00655da680edaac5b15a22322c15..f4610ed668563ae756724c84b5c2cc53a854645d 100644
--- a/src/plugins/vcsbase/basevcssubmiteditorfactory.cpp
+++ b/src/plugins/vcsbase/basevcssubmiteditorfactory.cpp
@@ -82,7 +82,7 @@ QStringList BaseVCSSubmitEditorFactory::mimeTypes() const
 
 Core::IFile *BaseVCSSubmitEditorFactory::open(const QString &fileName)
 {
-    Core::ICore *core = ExtensionSystem::PluginManager::instance()->getObject<Core::ICore>();
+    Core::ICore *core = Core::ICore::instance();
     if (Core::IEditor *iface = core->editorManager()->openEditor(fileName, kind()))
         return iface->file();
     return 0;
diff --git a/src/plugins/vcsbase/vcsbaseeditor.cpp b/src/plugins/vcsbase/vcsbaseeditor.cpp
index 6951d39eea58b0776d35883a23e472101ac84e11..7cf2f2a9a4ee1564b8f9186918ac3a9a6f822ce0 100644
--- a/src/plugins/vcsbase/vcsbaseeditor.cpp
+++ b/src/plugins/vcsbase/vcsbaseeditor.cpp
@@ -37,29 +37,29 @@
 #include "vcsbasetextdocument.h"
 #include "vcsbaseconstants.h"
 
+#include <coreplugin/editormanager/editormanager.h>
 #include <coreplugin/icore.h>
 #include <coreplugin/uniqueidmanager.h>
-#include <coreplugin/editormanager/editormanager.h>
-#include <texteditor/fontsettings.h>
-#include <texteditor/texteditorconstants.h>
-
+#include <extensionsystem/pluginmanager.h>
+#include <projectexplorer/editorconfiguration.h>
 #include <projectexplorer/projectexplorer.h>
 #include <projectexplorer/session.h>
-#include <projectexplorer/editorconfiguration.h>
+#include <texteditor/fontsettings.h>
+#include <texteditor/texteditorconstants.h>
 
+#include <QtCore/QDebug>
 #include <QtCore/QFileInfo>
-#include <QtCore/QTextStream>
-#include <QtCore/QSet>
+#include <QtCore/QProcess>
 #include <QtCore/QRegExp>
-#include <QtCore/QDebug>
+#include <QtCore/QSet>
 #include <QtCore/QTextCodec>
+#include <QtCore/QTextStream>
+#include <QtGui/QAction>
 #include <QtGui/QKeyEvent>
 #include <QtGui/QLayout>
-#include <QtGui/QTextEdit>
 #include <QtGui/QMenu>
-#include <QtGui/QAction>
 #include <QtGui/QTextCursor>
-#include <QtCore/QProcess>
+#include <QtGui/QTextEdit>
 
 namespace VCSBase {
 
@@ -68,8 +68,7 @@ class VCSBaseEditorEditable : public TextEditor::BaseTextEditorEditable
 {
 public:
     VCSBaseEditorEditable(VCSBaseEditor *,
-                          const VCSBaseEditorParameters *type,
-                          Core::ICore *);
+                          const VCSBaseEditorParameters *type);
     QList<int> context() const;
 
     bool duplicateSupported() const { return false; }
@@ -83,11 +82,10 @@ private:
 };
 
 VCSBaseEditorEditable::VCSBaseEditorEditable(VCSBaseEditor *editor,
-                                             const VCSBaseEditorParameters *type,
-                                             Core::ICore *core) :
-    BaseTextEditorEditable(editor),
-    m_kind(type->kind)
+                                             const VCSBaseEditorParameters *type)
+    : BaseTextEditorEditable(editor), m_kind(type->kind)
 {
+    Core::ICore *core = Core::ICore::instance();
     m_context << core->uniqueIDManager()->uniqueIdentifier(QLatin1String(type->context))
               << core->uniqueIDManager()->uniqueIdentifier(QLatin1String(TextEditor::Constants::C_TEXTEDITOR));
 
@@ -100,46 +98,39 @@ QList<int> VCSBaseEditorEditable::context() const
 
 // ----------- VCSBaseEditorPrivate
 
-struct VCSBaseEditorPrivate {
+struct VCSBaseEditorPrivate
+{
     VCSBaseEditorPrivate(const VCSBaseEditorParameters *type, QObject *parent);
 
     const VCSBaseEditorParameters *m_parameters;
     QAction *m_describeAction;
     QString m_currentChange;
-    Core::ICore *m_core;
     QString m_source;
 };
 
-VCSBaseEditorPrivate::VCSBaseEditorPrivate(const VCSBaseEditorParameters *type, QObject *parent) :
-    m_parameters(type),
-    m_describeAction(new QAction(parent)),
-    m_core(ExtensionSystem::PluginManager::instance()->getObject<Core::ICore>())
+VCSBaseEditorPrivate::VCSBaseEditorPrivate(const VCSBaseEditorParameters *type, QObject *parent)
+    : m_parameters(type), m_describeAction(new QAction(parent))
 {
 }
 
 // ------------ VCSBaseEditor
-VCSBaseEditor::VCSBaseEditor(const VCSBaseEditorParameters *type,
-                             QWidget *parent) :
-    BaseTextEditor(parent),
-    m_d(new VCSBaseEditorPrivate(type, this))
+VCSBaseEditor::VCSBaseEditor(const VCSBaseEditorParameters *type, QWidget *parent)
+  : BaseTextEditor(parent),
+    d(new VCSBaseEditorPrivate(type, this))
 {
     if (VCSBase::Constants::Internal::debug)
         qDebug() << "VCSBaseEditor::VCSBaseEditor" << type->type << type->kind;
 
     setReadOnly(true);
-
-    connect(m_d->m_describeAction, SIGNAL(triggered()), this, SLOT(describe()));
-
+    connect(d->m_describeAction, SIGNAL(triggered()), this, SLOT(describe()));
     viewport()->setMouseTracking(true);
-
     setBaseTextDocument(new Internal::VCSBaseTextDocument);
-
-    setMimeType(QLatin1String(m_d->m_parameters->mimeType));
+    setMimeType(QLatin1String(d->m_parameters->mimeType));
 }
 
 void VCSBaseEditor::init()
 {
-    switch (m_d->m_parameters->type) {
+    switch (d->m_parameters->type) {
     case RegularCommandOutput:
     case LogOutput:
     case AnnotateOutput:
@@ -154,17 +145,17 @@ void VCSBaseEditor::init()
 
 VCSBaseEditor::~VCSBaseEditor()
 {
-    delete m_d;
+    delete d;
 }
 
 QString VCSBaseEditor::source() const
 {
-    return m_d->m_source;
+    return d->m_source;
 }
 
 void VCSBaseEditor::setSource(const  QString &source)
 {
-    m_d->m_source = source;
+    d->m_source = source;
 }
 
 QTextCodec *VCSBaseEditor::codec() const
@@ -183,7 +174,7 @@ void VCSBaseEditor::setCodec(QTextCodec *c)
 
 EditorContentType VCSBaseEditor::contentType() const
 {
-    return m_d->m_parameters->type;
+    return d->m_parameters->type;
 }
 
 bool VCSBaseEditor::isModified() const
@@ -193,19 +184,19 @@ bool VCSBaseEditor::isModified() const
 
 TextEditor::BaseTextEditorEditable *VCSBaseEditor::createEditableInterface()
 {
-    return new VCSBaseEditorEditable(this, m_d->m_parameters, m_d->m_core);
+    return new VCSBaseEditorEditable(this, d->m_parameters);
 }
 
 void VCSBaseEditor::contextMenuEvent(QContextMenuEvent *e)
 {
     QMenu *menu = createStandardContextMenu();
     // 'click on change-interaction'
-    if (m_d->m_parameters->type == LogOutput || m_d->m_parameters->type == AnnotateOutput) {
-        m_d->m_currentChange = changeUnderCursor(cursorForPosition(e->pos()));
-        if (!m_d->m_currentChange.isEmpty()) {
-            m_d->m_describeAction->setText(tr("Describe change %1").arg(m_d->m_currentChange));
+    if (d->m_parameters->type == LogOutput || d->m_parameters->type == AnnotateOutput) {
+        d->m_currentChange = changeUnderCursor(cursorForPosition(e->pos()));
+        if (!d->m_currentChange.isEmpty()) {
+            d->m_describeAction->setText(tr("Describe change %1").arg(d->m_currentChange));
             menu->addSeparator();
-            menu->addAction(m_d->m_describeAction);
+            menu->addAction(d->m_describeAction);
         }
     }
     menu->exec(e->globalPos());
@@ -217,7 +208,7 @@ void VCSBaseEditor::mouseMoveEvent(QMouseEvent *e)
     bool overrideCursor = false;
     Qt::CursorShape cursorShape;
 
-    if (m_d->m_parameters->type == LogOutput || m_d->m_parameters->type == AnnotateOutput) {
+    if (d->m_parameters->type == LogOutput || d->m_parameters->type == AnnotateOutput) {
         // Link emulation behaviour for 'click on change-interaction'
         QTextCursor cursor = cursorForPosition(e->pos());
         QString change = changeUnderCursor(cursor);
@@ -245,11 +236,11 @@ void VCSBaseEditor::mouseMoveEvent(QMouseEvent *e)
 
 void VCSBaseEditor::mouseReleaseEvent(QMouseEvent *e)
 {
-    if (m_d->m_parameters->type == LogOutput || m_d->m_parameters->type == AnnotateOutput) {
+    if (d->m_parameters->type == LogOutput || d->m_parameters->type == AnnotateOutput) {
         if (e->button() == Qt::LeftButton &&!(e->modifiers() & Qt::ShiftModifier)) {
             QTextCursor cursor = cursorForPosition(e->pos());
-            m_d->m_currentChange = changeUnderCursor(cursor);
-            if (!m_d->m_currentChange.isEmpty()) {
+            d->m_currentChange = changeUnderCursor(cursor);
+            if (!d->m_currentChange.isEmpty()) {
                 describe();
                 e->accept();
                 return;
@@ -261,7 +252,7 @@ void VCSBaseEditor::mouseReleaseEvent(QMouseEvent *e)
 
 void VCSBaseEditor::mouseDoubleClickEvent(QMouseEvent *e)
 {
-    if (m_d->m_parameters->type == DiffOutput) {
+    if (d->m_parameters->type == DiffOutput) {
         if (e->button() == Qt::LeftButton &&!(e->modifiers() & Qt::ShiftModifier)) {
             QTextCursor cursor = cursorForPosition(e->pos());
             jumpToChangeFromDiff(cursor);
@@ -282,16 +273,16 @@ void VCSBaseEditor::keyPressEvent(QKeyEvent *e)
 void VCSBaseEditor::describe()
 {
     if (VCSBase::Constants::Internal::debug)
-        qDebug() << "VCSBaseEditor::describe" << m_d->m_currentChange;
-    if (!m_d->m_currentChange.isEmpty())
-        emit describeRequested(m_d->m_source, m_d->m_currentChange);
+        qDebug() << "VCSBaseEditor::describe" << d->m_currentChange;
+    if (!d->m_currentChange.isEmpty())
+        emit describeRequested(d->m_source, d->m_currentChange);
 }
 
 void VCSBaseEditor::slotActivateAnnotation()
 {
     // The annotation highlighting depends on contents (change number
     // set with assigned colors)
-    if (m_d->m_parameters->type != AnnotateOutput)
+    if (d->m_parameters->type != AnnotateOutput)
         return;
 
     const QSet<QString> changes = annotationChanges();
@@ -372,9 +363,10 @@ void VCSBaseEditor::jumpToChangeFromDiff(QTextCursor cursor)
     if (!exists)
         return;
 
-    Core::IEditor *ediface = m_d->m_core->editorManager()->openEditor(fileName);
-    m_d->m_core->editorManager()->ensureEditorManagerVisible();
-    if (TextEditor::ITextEditor *editor = qobject_cast<TextEditor::ITextEditor *>(ediface))
+    Core::EditorManager *em = Core::ICore::instance()->editorManager();
+    Core::IEditor *ed = em->openEditor(fileName);
+    em->ensureEditorManagerVisible();
+    if (TextEditor::ITextEditor *editor = qobject_cast<TextEditor::ITextEditor *>(ed))
         editor->gotoLine(chunkStart + lineCount);
 }
 
@@ -386,7 +378,7 @@ void VCSBaseEditor::setPlainTextData(const QByteArray &data)
 void VCSBaseEditor::setFontSettings(const TextEditor::FontSettings &fs)
 {
     TextEditor::BaseTextEditor::setFontSettings(fs);
-    if (m_d->m_parameters->type == DiffOutput) {
+    if (d->m_parameters->type == DiffOutput) {
         if (DiffHighlighter *highlighter = qobject_cast<DiffHighlighter*>(baseTextDocument()->syntaxHighlighter())) {
             static QVector<QString> categories;
             if (categories.isEmpty()) {
@@ -413,11 +405,12 @@ const VCSBaseEditorParameters *VCSBaseEditor::findType(const VCSBaseEditorParame
 }
 
 // Find the codec used for a file querying the editor.
-static QTextCodec *findFileCodec(const Core::ICore *core, const QString &source)
+static QTextCodec *findFileCodec(const QString &source)
 {
     typedef QList<Core::IEditor *> EditorList;
 
-    const EditorList editors = core->editorManager()->editorsForFileName(source);
+    const EditorList editors =
+        Core::ICore::instance()->editorManager()->editorsForFileName(source);
     if (!editors.empty()) {
         const EditorList::const_iterator ecend =  editors.constEnd();
         for (EditorList::const_iterator it = editors.constBegin(); it != ecend; ++it)
@@ -456,13 +449,13 @@ static QTextCodec *findProjectCodec(const QString &dir)
     return 0;
 }
 
-QTextCodec *VCSBaseEditor::getCodec(const Core::ICore *core, const QString &source)
+QTextCodec *VCSBaseEditor::getCodec(const QString &source)
 {
     if (!source.isEmpty()) {
         // Check file
         const QFileInfo sourceFi(source);
         if (sourceFi.isFile())
-            if (QTextCodec *fc = findFileCodec(core, source))
+            if (QTextCodec *fc = findFileCodec(source))
                 return fc;
         // Find by project via directory
         if (QTextCodec *pc = findProjectCodec(sourceFi.isFile() ? sourceFi.absolutePath() : source))
diff --git a/src/plugins/vcsbase/vcsbaseeditor.h b/src/plugins/vcsbase/vcsbaseeditor.h
index 42c31c6c37dfb18b6fd0c6fb9789fb0bec2d3e09..5c516f00ffb56bd696298a4056227341d384f85d 100644
--- a/src/plugins/vcsbase/vcsbaseeditor.h
+++ b/src/plugins/vcsbase/vcsbaseeditor.h
@@ -46,10 +46,6 @@ class QTextCodec;
 class QTextCursor;
 QT_END_NAMESPACE
 
-namespace Core {
-class ICore;
-}
-
 namespace VCSBase {
 
 struct VCSBaseEditorPrivate;
@@ -121,7 +117,7 @@ public:
     // the editor manager and the project managers (defaults to system codec).
     // The codec should be set on editors displaying diff or annotation
     // output.
-    static QTextCodec *getCodec(const Core::ICore *core, const QString &source);
+    static QTextCodec *getCodec(const QString &source);
 
     // Utility to return the editor from the IEditor returned by the editor
     // manager which is a BaseTextEditable.
@@ -166,7 +162,7 @@ private:
 
     void jumpToChangeFromDiff(QTextCursor cursor);
 
-    VCSBaseEditorPrivate *m_d;
+    VCSBaseEditorPrivate *d;
 };
 
 } // namespace VCSBase
diff --git a/src/plugins/vcsbase/vcsbaseplugin.cpp b/src/plugins/vcsbase/vcsbaseplugin.cpp
index 7cbd8a9233ed6f2ad6a929d6065f63b18e41b242..06cefbb71dde5cf31700d377600fe311d2d579b5 100644
--- a/src/plugins/vcsbase/vcsbaseplugin.cpp
+++ b/src/plugins/vcsbase/vcsbaseplugin.cpp
@@ -34,13 +34,12 @@
 #include "vcsbaseplugin.h"
 #include "diffhighlighter.h"
 
-#include <extensionsystem/pluginmanager.h>
 #include <coreplugin/icore.h>
 #include <coreplugin/coreconstants.h>
 #include <coreplugin/uniqueidmanager.h>
 #include <coreplugin/mimedatabase.h>
 
-#include <QtCore/qplugin.h>
+#include <QtCore/QtPlugin>
 
 namespace VCSBase {
 namespace Internal {
@@ -57,10 +56,12 @@ VCSBasePlugin::~VCSBasePlugin()
     m_instance = 0;
 }
 
-bool VCSBasePlugin::initialize(const QStringList & /*arguments*/, QString *errorMessage)
+bool VCSBasePlugin::initialize(const QStringList &arguments, QString *errorMessage)
 {
-    Core::ICore *core = ExtensionSystem::PluginManager::instance()->getObject<Core::ICore>();
+    Q_UNUSED(arguments);
+    Q_UNUSED(errorMessage);
 
+    Core::ICore *core = Core::ICore::instance();
     if (!core->mimeDatabase()->addMimeTypes(QLatin1String(":/vcsbase/VCSBase.mimetypes.xml"), errorMessage))
         return false;
 
diff --git a/src/plugins/vcsbase/vcsbasesubmiteditor.cpp b/src/plugins/vcsbase/vcsbasesubmiteditor.cpp
index a47a66ab064be7d2983f0c0dd97c3fd44e2317ae..64192d1b6b4382017856090d3a6c935baf948b60 100644
--- a/src/plugins/vcsbase/vcsbasesubmiteditor.cpp
+++ b/src/plugins/vcsbase/vcsbasesubmiteditor.cpp
@@ -38,33 +38,33 @@
 #include <coreplugin/icore.h>
 #include <coreplugin/uniqueidmanager.h>
 #include <coreplugin/actionmanager/actionmanager.h>
-
+#include <extensionsystem/pluginmanager.h>
 #include <utils/submiteditorwidget.h>
 #include <find/basetextfind.h>
 
 #include <projectexplorer/projectexplorer.h>
 #include <projectexplorer/session.h>
 
-#include <QtGui/QToolBar>
-#include <QtGui/QStyle>
-#include <QtCore/QPointer>
-#include <QtCore/QFileInfo>
-#include <QtCore/QFile>
+#include <QtCore/QDebug>
 #include <QtCore/QDir>
+#include <QtCore/QFile>
+#include <QtCore/QFileInfo>
+#include <QtCore/QPointer>
 #include <QtCore/QTextStream>
-#include <QtCore/QDebug>
+#include <QtGui/QStyle>
+#include <QtGui/QToolBar>
 
 enum { debug = 0 };
 enum { wantToolBar = 0 };
 
 namespace VCSBase {
 
-struct VCSBaseSubmitEditorPrivate {
+struct VCSBaseSubmitEditorPrivate
+{
     VCSBaseSubmitEditorPrivate(const VCSBaseSubmitEditorParameters *parameters,
                                Core::Utils::SubmitEditorWidget *editorWidget,
                                QObject *q);
 
-    Core::ICore *m_core;
     Core::Utils::SubmitEditorWidget *m_widget;
     QToolBar *m_toolWidget;
     const VCSBaseSubmitEditorParameters *m_parameters;
@@ -79,13 +79,12 @@ struct VCSBaseSubmitEditorPrivate {
 VCSBaseSubmitEditorPrivate::VCSBaseSubmitEditorPrivate(const VCSBaseSubmitEditorParameters *parameters,
                                                        Core::Utils::SubmitEditorWidget *editorWidget,
                                                        QObject *q) :
-    m_core(ExtensionSystem::PluginManager::instance()->getObject<Core::ICore>()),
     m_widget(editorWidget),
     m_toolWidget(0),
     m_parameters(parameters),
     m_file(new VCSBase::Internal::SubmitEditorFile(QLatin1String(m_parameters->mimeType), q))
 {
-    m_contexts << m_core->uniqueIDManager()->uniqueIdentifier(m_parameters->context);
+    m_contexts << Core::ICore::instance()->uniqueIDManager()->uniqueIdentifier(m_parameters->context);
 }
 
 VCSBaseSubmitEditor::VCSBaseSubmitEditor(const VCSBaseSubmitEditorParameters *parameters,
diff --git a/tests/auto/cplusplus/ast/ast.pro b/tests/auto/cplusplus/ast/ast.pro
index 6974c6bbb4c69f78c5816767bbcab9d083121ae2..39fd14105de2e394305c223f6e76f6047eb139e0 100644
--- a/tests/auto/cplusplus/ast/ast.pro
+++ b/tests/auto/cplusplus/ast/ast.pro
@@ -1,5 +1,4 @@
 load(qttest_p4)
 include(../shared/shared.pri)
 QT = core
-
 SOURCES += tst_ast.cpp
diff --git a/tests/auto/cplusplus/ast/tst_ast.cpp b/tests/auto/cplusplus/ast/tst_ast.cpp
index 5756d2dd2245053c564ee73eea2f9dca11b70da0..689da076ea1c6045778d23da6ec97eb0dafefc4e 100644
--- a/tests/auto/cplusplus/ast/tst_ast.cpp
+++ b/tests/auto/cplusplus/ast/tst_ast.cpp
@@ -36,6 +36,9 @@ public:
     { return parse(source, TranslationUnit::ParseStatement); }
 
 private slots:
+    // declarations
+    void gcc_attributes_1();
+
     // expressions
     void simple_name();
     void template_id();
@@ -54,6 +57,13 @@ private slots:
     void objc_protocol_definition_1();
 };
 
+void tst_AST::gcc_attributes_1()
+{
+    QSharedPointer<TranslationUnit> unit(parseDeclaration("\n"
+"static inline void *__attribute__((__always_inline__)) _mm_malloc(size_t size, size_t align);"
+    ));
+}
+
 void tst_AST::simple_name()
 {
     QSharedPointer<TranslationUnit> unit(parseExpression("a"));
diff --git a/tests/manual/cplusplus/conf.c++ b/tests/manual/cplusplus/conf.c++
index fbfad57a4bc2157303aac6103ef7e15ca056e1d5..c179f979272ee673d3b78d5b8748271f73c0fc0e 100644
--- a/tests/manual/cplusplus/conf.c++
+++ b/tests/manual/cplusplus/conf.c++
@@ -5,3 +5,4 @@
 #define __asm__(a...)
 #define   restrict
 #define __restrict
+#define __weak
diff --git a/tests/manual/fakevim/main.cpp b/tests/manual/fakevim/main.cpp
index c668601e78dd108d6ba20ef4a9668496050de1cb..dfa1350e5597ade677abf0aa7557788708c2c282 100644
--- a/tests/manual/fakevim/main.cpp
+++ b/tests/manual/fakevim/main.cpp
@@ -5,6 +5,7 @@
 
 #include <QtGui/QApplication>
 #include <QtGui/QMainWindow>
+#include <QtGui/QMessageBox>
 #include <QtGui/QPlainTextEdit>
 #include <QtGui/QStatusBar>
 #include <QtGui/QTextEdit>
@@ -16,7 +17,7 @@ class Proxy : public QObject
     Q_OBJECT
 
 public:
-    Proxy(QWidget *widget) : QObject(0), m_widget(widget) {}
+    Proxy() : QObject(0) {}
 
 public slots:
     void changeSelection(QWidget *w, const QList<QTextEdit::ExtraSelection> &s)
@@ -26,8 +27,11 @@ public slots:
         else if (QTextEdit *ed = qobject_cast<QTextEdit *>(w))
             ed->setExtraSelections(s);
     }
-private:
-    QWidget *m_widget; 
+
+    void changeExtraInformation(QWidget *w, const QString &info)
+    {
+        QMessageBox::information(w, "Information", info);
+    }
 };
 
 int main(int argc, char *argv[])
@@ -50,7 +54,7 @@ int main(int argc, char *argv[])
     widget->resize(450, 350);
     widget->setFocus();
 
-    Proxy proxy(widget);
+    Proxy proxy;
 
 
     FakeVimHandler handler;
@@ -78,6 +82,9 @@ int main(int argc, char *argv[])
     QObject::connect(&handler,
         SIGNAL(selectionChanged(QWidget*,QList<QTextEdit::ExtraSelection>)),
         &proxy, SLOT(changeSelection(QWidget*,QList<QTextEdit::ExtraSelection>)));
+    QObject::connect(&handler,
+        SIGNAL(extraInformationChanged(QWidget*,QString)),
+        &proxy, SLOT(changeExtraInformation(QWidget*,QString)));
 
     handler.addWidget(widget);
     if (args.size() >= 1)
diff --git a/tests/manual/gdbdebugger/simple/app.cpp b/tests/manual/gdbdebugger/simple/app.cpp
index a20311822f8436336695ccff0186ff7b55ad856c..b719915c4793f79212d906155feecc5fb4bc693c 100644
--- a/tests/manual/gdbdebugger/simple/app.cpp
+++ b/tests/manual/gdbdebugger/simple/app.cpp
@@ -54,6 +54,7 @@
 
 #include <QtNetwork/QHostAddress>
 
+#include <deque>
 #include <iostream>
 #include <map>
 #include <list>
@@ -444,6 +445,29 @@ void stringRefTest(const QString &refstring)
     Q_UNUSED(refstring);
 }
 
+void testStdDeque()
+{
+    std::deque<int *> plist1;
+    plist1.push_back(new int(1));
+    plist1.push_back(0);
+    plist1.push_back(new int(2));
+    plist1.pop_back();
+    plist1.pop_front();
+    plist1.pop_front();
+
+    std::deque<int> flist2;
+    flist2.push_back(1);
+    flist2.push_back(2);
+
+    std::deque<Foo *> plist;
+    plist.push_back(new Foo(1));
+    plist.push_back(new Foo(2));
+
+    std::deque<Foo> flist;
+    flist.push_back(1);
+    flist.push_front(2);
+}
+
 void testStdList()
 {
     std::list<int *> plist1;
@@ -911,6 +935,7 @@ int main(int argc, char *argv[])
     testHidden();
     testArray();
 
+    testStdDeque();
     testStdList();
     testStdMap();
     testStdStack();
diff --git a/tests/manual/gdbdebugger/simple/plugin.cpp b/tests/manual/gdbdebugger/simple/plugin.cpp
index 4e02c7f9f7e5628c7b000cfa93a41684dc0905d8..5e140d5811e85b65fbabd3307d2a2e0ada9aeade 100644
--- a/tests/manual/gdbdebugger/simple/plugin.cpp
+++ b/tests/manual/gdbdebugger/simple/plugin.cpp
@@ -39,6 +39,6 @@ extern "C" Q_DECL_EXPORT int pluginTest()
     int s = 0;
     for (int i = 1; i != 2000; ++i)
         s += i; 
-    fprintf(stderr, "in plugin test");
+    fprintf(stderr, "in plugin test\n");
     return s;
 }