diff --git a/src/libs/cplusplus/ModelManagerInterface.h b/src/libs/cplusplus/ModelManagerInterface.h
index ebfae4e2ab81bd9d2361c6942dd41a2b0c87ba56..fdcfa7a66d64413737e9dd30a4062b3570fdba85 100644
--- a/src/libs/cplusplus/ModelManagerInterface.h
+++ b/src/libs/cplusplus/ModelManagerInterface.h
@@ -59,7 +59,9 @@ namespace ProjectExplorer {
 namespace CppTools {
     class AbstractEditorSupport;
     class CppCompletionSupport;
+    class CppCompletionAssistProvider;
     class CppHighlightingSupport;
+    class CppHighlightingSupportFactory;
 }
 
 namespace CPlusPlus {
@@ -216,7 +218,10 @@ public:
             const QString &fileName, int key = AllExtraDiagnostics) const = 0;
 
     virtual CppTools::CppCompletionSupport *completionSupport(Core::IEditor *editor) const = 0;
+    virtual void setCppCompletionAssistProvider(CppTools::CppCompletionAssistProvider *completionAssistProvider) = 0;
+
     virtual CppTools::CppHighlightingSupport *highlightingSupport(Core::IEditor *editor) const = 0;
+    virtual void setHighlightingSupportFactory(CppTools::CppHighlightingSupportFactory *highlightingFactory) = 0;
 
 Q_SIGNALS:
     void documentUpdated(CPlusPlus::Document::Ptr doc);
diff --git a/src/plugins/cpptools/cppcompletionassist.cpp b/src/plugins/cpptools/cppcompletionassist.cpp
index f9853f5a887e49b685be6a4fa0d51d49d8dda604..5e59fa0401a88ef7f52e69dd0538fa579b316397 100644
--- a/src/plugins/cpptools/cppcompletionassist.cpp
+++ b/src/plugins/cpptools/cppcompletionassist.cpp
@@ -82,87 +82,6 @@ using namespace CppTools;
 using namespace Internal;
 using namespace TextEditor;
 
-namespace {
-
-int activationSequenceChar(const QChar &ch,
-                           const QChar &ch2,
-                           const QChar &ch3,
-                           unsigned *kind,
-                           bool wantFunctionCall)
-{
-    int referencePosition = 0;
-    int completionKind = T_EOF_SYMBOL;
-    switch (ch.toLatin1()) {
-    case '.':
-        if (ch2 != QLatin1Char('.')) {
-            completionKind = T_DOT;
-            referencePosition = 1;
-        }
-        break;
-    case ',':
-        completionKind = T_COMMA;
-        referencePosition = 1;
-        break;
-    case '(':
-        if (wantFunctionCall) {
-            completionKind = T_LPAREN;
-            referencePosition = 1;
-        }
-        break;
-    case ':':
-        if (ch3 != QLatin1Char(':') && ch2 == QLatin1Char(':')) {
-            completionKind = T_COLON_COLON;
-            referencePosition = 2;
-        }
-        break;
-    case '>':
-        if (ch2 == QLatin1Char('-')) {
-            completionKind = T_ARROW;
-            referencePosition = 2;
-        }
-        break;
-    case '*':
-        if (ch2 == QLatin1Char('.')) {
-            completionKind = T_DOT_STAR;
-            referencePosition = 2;
-        } else if (ch3 == QLatin1Char('-') && ch2 == QLatin1Char('>')) {
-            completionKind = T_ARROW_STAR;
-            referencePosition = 3;
-        }
-        break;
-    case '\\':
-    case '@':
-        if (ch2.isNull() || ch2.isSpace()) {
-            completionKind = T_DOXY_COMMENT;
-            referencePosition = 1;
-        }
-        break;
-    case '<':
-        completionKind = T_ANGLE_STRING_LITERAL;
-        referencePosition = 1;
-        break;
-    case '"':
-        completionKind = T_STRING_LITERAL;
-        referencePosition = 1;
-        break;
-    case '/':
-        completionKind = T_SLASH;
-        referencePosition = 1;
-        break;
-    case '#':
-        completionKind = T_POUND;
-        referencePosition = 1;
-        break;
-    }
-
-    if (kind)
-        *kind = completionKind;
-
-    return referencePosition;
-}
-
-} // Anonymous
-
 namespace CppTools {
 namespace Internal {
 
@@ -500,31 +419,52 @@ int CppFunctionHintModel::activeArgument(const QString &prefix) const
 }
 
 // ---------------------------
-// CppCompletionAssistProvider
+// InternalCompletionAssistProvider
 // ---------------------------
-bool CppCompletionAssistProvider::supportsEditor(const Core::Id &editorId) const
-{
-    return editorId == Core::Id(CppEditor::Constants::CPPEDITOR_ID);
-}
 
-int CppCompletionAssistProvider::activationCharSequenceLength() const
+IAssistProcessor *InternalCompletionAssistProvider::createProcessor() const
 {
-    return 3;
+    return new CppCompletionAssistProcessor;
 }
 
-bool CppCompletionAssistProvider::isActivationCharSequence(const QString &sequence) const
+namespace {
+class CppCompletionSupportInternal: public CppCompletionSupport
 {
-    const QChar &ch  = sequence.at(2);
-    const QChar &ch2 = sequence.at(1);
-    const QChar &ch3 = sequence.at(0);
-    if (activationSequenceChar(ch, ch2, ch3, 0, true) != 0)
-        return true;
-    return false;
+public:
+    CppCompletionSupportInternal(TextEditor::ITextEditor *editor)
+        : CppCompletionSupport(editor)
+    {}
+
+    virtual ~CppCompletionSupportInternal()
+    {}
+
+    virtual TextEditor::IAssistInterface *createAssistInterface(ProjectExplorer::Project *project,
+                                                                QTextDocument *document,
+                                                                int position,
+                                                                TextEditor::AssistReason reason) const
+    {
+        CppModelManagerInterface *modelManager = CppModelManagerInterface::instance();
+        QStringList includePaths;
+        QStringList frameworkPaths;
+        if (project) {
+            includePaths = modelManager->projectInfo(project).includePaths();
+            frameworkPaths = modelManager->projectInfo(project).frameworkPaths();
+        }
+        return new CppTools::Internal::CppCompletionAssistInterface(
+                    document,
+                    position,
+                    editor()->document(),
+                    reason,
+                    modelManager->snapshot(),
+                    includePaths,
+                    frameworkPaths);
+    }
+};
 }
 
-IAssistProcessor *CppCompletionAssistProvider::createProcessor() const
+CppCompletionSupport *InternalCompletionAssistProvider::completionSupport(ITextEditor *editor)
 {
-    return new CppCompletionAssistProcessor;
+    return new CppCompletionSupportInternal(editor);
 }
 
 // -----------------
@@ -816,7 +756,7 @@ int CppCompletionAssistProcessor::startOfOperator(int pos,
     const QChar ch2 = pos >  0 ? m_interface->characterAt(pos - 2) : QChar();
     const QChar ch3 = pos >  1 ? m_interface->characterAt(pos - 3) : QChar();
 
-    int start = pos - activationSequenceChar(ch, ch2, ch3, kind, wantFunctionCall);
+    int start = pos - CppCompletionAssistProvider::activationSequenceChar(ch, ch2, ch3, kind, wantFunctionCall);
     if (start != pos) {
         QTextCursor tc(m_interface->textDocument());
         tc.setPosition(pos);
diff --git a/src/plugins/cpptools/cppcompletionassist.h b/src/plugins/cpptools/cppcompletionassist.h
index 48dbd8fa2d8cdd7cd978a3361b572968d3ad6f00..140690755821ae6f442deb695c3417cc5bae1944 100644
--- a/src/plugins/cpptools/cppcompletionassist.h
+++ b/src/plugins/cpptools/cppcompletionassist.h
@@ -33,6 +33,8 @@
 #ifndef CPPCOMPLETIONASSIST_H
 #define CPPCOMPLETIONASSIST_H
 
+#include "cppcompletionassistprovider.h"
+
 #include <cplusplus/Icons.h>
 #include <cplusplus/Overview.h>
 #include <cplusplus/TypeOfExpression.h>
@@ -67,13 +69,13 @@ namespace Internal {
 class CppCompletionAssistInterface;
 class CppAssistProposalModel;
 
-class CppCompletionAssistProvider : public TextEditor::CompletionAssistProvider
+class InternalCompletionAssistProvider : public CppCompletionAssistProvider
 {
+    Q_OBJECT
+
 public:
-    virtual bool supportsEditor(const Core::Id &editorId) const;
-    virtual int activationCharSequenceLength() const;
-    virtual bool isActivationCharSequence(const QString &sequence) const;
     virtual TextEditor::IAssistProcessor *createProcessor() const;
+    virtual CppCompletionSupport *completionSupport(TextEditor::ITextEditor *editor);
 };
 
 class CppCompletionAssistProcessor : public TextEditor::IAssistProcessor
@@ -135,7 +137,7 @@ private:
     QScopedPointer<const CppCompletionAssistInterface> m_interface;
     QList<TextEditor::BasicProposalItem *> m_completions;
     TextEditor::SnippetAssistCollector m_snippetCollector;
-    const CppCompletionAssistProvider *m_provider;
+    const InternalCompletionAssistProvider *m_provider;
     CPlusPlus::Icons m_icons;
     QStringList preprocessorCompletions;
     QScopedPointer<CppAssistProposalModel> m_model;
diff --git a/src/plugins/cpptools/cppcompletionassistprovider.cpp b/src/plugins/cpptools/cppcompletionassistprovider.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..04d1e17012da75597520629e70601b4649e7e337
--- /dev/null
+++ b/src/plugins/cpptools/cppcompletionassistprovider.cpp
@@ -0,0 +1,108 @@
+#include "cppcompletionassistprovider.h"
+
+#include <cppeditor/cppeditorconstants.h>
+
+#include <Token.h>
+
+using namespace CPlusPlus;
+using namespace CppTools;
+
+// ---------------------------
+// CppCompletionAssistProvider
+// ---------------------------
+bool CppCompletionAssistProvider::supportsEditor(const Core::Id &editorId) const
+{
+    return editorId == Core::Id(CppEditor::Constants::CPPEDITOR_ID);
+}
+
+int CppCompletionAssistProvider::activationCharSequenceLength() const
+{
+    return 3;
+}
+
+bool CppCompletionAssistProvider::isActivationCharSequence(const QString &sequence) const
+{
+    const QChar &ch  = sequence.at(2);
+    const QChar &ch2 = sequence.at(1);
+    const QChar &ch3 = sequence.at(0);
+    if (activationSequenceChar(ch, ch2, ch3, 0, true) != 0)
+        return true;
+    return false;
+}
+
+int CppCompletionAssistProvider::activationSequenceChar(const QChar &ch,
+                                                        const QChar &ch2,
+                                                        const QChar &ch3,
+                                                        unsigned *kind,
+                                                        bool wantFunctionCall)
+{
+    int referencePosition = 0;
+    int completionKind = T_EOF_SYMBOL;
+    switch (ch.toLatin1()) {
+    case '.':
+        if (ch2 != QLatin1Char('.')) {
+            completionKind = T_DOT;
+            referencePosition = 1;
+        }
+        break;
+    case ',':
+        completionKind = T_COMMA;
+        referencePosition = 1;
+        break;
+    case '(':
+        if (wantFunctionCall) {
+            completionKind = T_LPAREN;
+            referencePosition = 1;
+        }
+        break;
+    case ':':
+        if (ch3 != QLatin1Char(':') && ch2 == QLatin1Char(':')) {
+            completionKind = T_COLON_COLON;
+            referencePosition = 2;
+        }
+        break;
+    case '>':
+        if (ch2 == QLatin1Char('-')) {
+            completionKind = T_ARROW;
+            referencePosition = 2;
+        }
+        break;
+    case '*':
+        if (ch2 == QLatin1Char('.')) {
+            completionKind = T_DOT_STAR;
+            referencePosition = 2;
+        } else if (ch3 == QLatin1Char('-') && ch2 == QLatin1Char('>')) {
+            completionKind = T_ARROW_STAR;
+            referencePosition = 3;
+        }
+        break;
+    case '\\':
+    case '@':
+        if (ch2.isNull() || ch2.isSpace()) {
+            completionKind = T_DOXY_COMMENT;
+            referencePosition = 1;
+        }
+        break;
+    case '<':
+        completionKind = T_ANGLE_STRING_LITERAL;
+        referencePosition = 1;
+        break;
+    case '"':
+        completionKind = T_STRING_LITERAL;
+        referencePosition = 1;
+        break;
+    case '/':
+        completionKind = T_SLASH;
+        referencePosition = 1;
+        break;
+    case '#':
+        completionKind = T_POUND;
+        referencePosition = 1;
+        break;
+    }
+
+    if (kind)
+        *kind = completionKind;
+
+    return referencePosition;
+}
diff --git a/src/plugins/cpptools/cppcompletionassistprovider.h b/src/plugins/cpptools/cppcompletionassistprovider.h
new file mode 100644
index 0000000000000000000000000000000000000000..5a45384d7d7fd5431ba0976e3515450cd458f090
--- /dev/null
+++ b/src/plugins/cpptools/cppcompletionassistprovider.h
@@ -0,0 +1,29 @@
+#ifndef CPPTOOLS_CPPCOMPLETIONASSISTPROVIDER_H
+#define CPPTOOLS_CPPCOMPLETIONASSISTPROVIDER_H
+
+#include "cppcompletionsupport.h"
+#include "cpptools_global.h"
+
+#include <texteditor/codeassist/completionassistprovider.h>
+
+namespace CppTools {
+
+class CPPTOOLS_EXPORT CppCompletionAssistProvider : public TextEditor::CompletionAssistProvider
+{
+    Q_OBJECT
+
+public:
+    virtual bool supportsEditor(const Core::Id &editorId) const;
+    virtual int activationCharSequenceLength() const;
+    virtual bool isActivationCharSequence(const QString &sequence) const;
+
+    virtual CppCompletionSupport *completionSupport(TextEditor::ITextEditor *editor) = 0;
+
+    static int activationSequenceChar(const QChar &ch, const QChar &ch2,
+                                      const QChar &ch3, unsigned *kind,
+                                      bool wantFunctionCall);
+};
+
+} // namespace CppTools
+
+#endif // CPPTOOLS_CPPCOMPLETIONASSISTPROVIDER_H
diff --git a/src/plugins/cpptools/cppcompletionsupport.cpp b/src/plugins/cpptools/cppcompletionsupport.cpp
index cd9e6515d0211c75f906c5958bfc3c8cb39d71d2..139ab272a7442ab4c9831e0d4e1e71ec0762fd16 100644
--- a/src/plugins/cpptools/cppcompletionsupport.cpp
+++ b/src/plugins/cpptools/cppcompletionsupport.cpp
@@ -43,7 +43,3 @@ CppCompletionSupport::CppCompletionSupport(TextEditor::ITextEditor *editor)
 CppCompletionSupport::~CppCompletionSupport()
 {
 }
-
-CppCompletionSupportFactory::~CppCompletionSupportFactory()
-{
-}
diff --git a/src/plugins/cpptools/cppcompletionsupport.h b/src/plugins/cpptools/cppcompletionsupport.h
index a530b8d1c23ffe39e2e3d63e4259521856d9926f..2a207c069ac2576ef7b8abd5971fc61aebc98309 100644
--- a/src/plugins/cpptools/cppcompletionsupport.h
+++ b/src/plugins/cpptools/cppcompletionsupport.h
@@ -71,14 +71,6 @@ private:
     TextEditor::ITextEditor *m_editor;
 };
 
-class CPPTOOLS_EXPORT CppCompletionSupportFactory
-{
-public:
-    virtual ~CppCompletionSupportFactory() = 0;
-
-    virtual CppCompletionSupport *completionSupport(TextEditor::ITextEditor *editor) = 0;
-};
-
 } // namespace CppTools
 
 #endif // CPPTOOLS_CPPCOMPLETIONSUPPORT_H
diff --git a/src/plugins/cpptools/cppcompletionsupportinternal.cpp b/src/plugins/cpptools/cppcompletionsupportinternal.cpp
deleted file mode 100644
index 7f7fa1852591078e155d8d0188edc00481f4608f..0000000000000000000000000000000000000000
--- a/src/plugins/cpptools/cppcompletionsupportinternal.cpp
+++ /dev/null
@@ -1,83 +0,0 @@
-/**************************************************************************
-**
-** This file is part of Qt Creator
-**
-** Copyright (c) 2012 Nokia Corporation and/or its subsidiary(-ies).
-**
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-**
-** GNU Lesser General Public License Usage
-**
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this file.
-** Please review the following information to ensure the GNU Lesser General
-** Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** Other Usage
-**
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**************************************************************************/
-
-#include "cppcompletionassist.h"
-#include "cppcompletionsupportinternal.h"
-#include "cppmodelmanager.h"
-
-#include <coreplugin/idocument.h>
-#include <projectexplorer/project.h>
-#include <texteditor/codeassist/iassistinterface.h>
-
-using namespace CPlusPlus;
-using namespace CppTools;
-using namespace CppTools::Internal;
-
-CppCompletionSupportInternal::CppCompletionSupportInternal(TextEditor::ITextEditor *editor)
-    : CppCompletionSupport(editor)
-{
-}
-
-CppCompletionSupportInternal::~CppCompletionSupportInternal()
-{
-}
-
-TextEditor::IAssistInterface *CppCompletionSupportInternal::createAssistInterface(
-        ProjectExplorer::Project *project,
-        QTextDocument *document,
-        int position,
-        TextEditor::AssistReason reason) const
-{
-    CppModelManagerInterface *modelManager = CppModelManagerInterface::instance();
-    QStringList includePaths;
-    QStringList frameworkPaths;
-    if (project) {
-        includePaths = modelManager->projectInfo(project).includePaths();
-        frameworkPaths = modelManager->projectInfo(project).frameworkPaths();
-    }
-    return new CppTools::Internal::CppCompletionAssistInterface(
-                document,
-                position,
-                editor()->document(),
-                reason,
-                modelManager->snapshot(),
-                includePaths,
-                frameworkPaths);
-}
-
-CppCompletionSupportInternalFactory::~CppCompletionSupportInternalFactory()
-{}
-
-CppCompletionSupport *CppCompletionSupportInternalFactory::completionSupport(TextEditor::ITextEditor *editor)
-{
-    return new CppCompletionSupportInternal(editor);
-}
diff --git a/src/plugins/cpptools/cppcompletionsupportinternal.h b/src/plugins/cpptools/cppcompletionsupportinternal.h
deleted file mode 100644
index 4e5c7d94d90bca8abb38e868ea5dd9ab4ffbb6e9..0000000000000000000000000000000000000000
--- a/src/plugins/cpptools/cppcompletionsupportinternal.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/**************************************************************************
-**
-** This file is part of Qt Creator
-**
-** Copyright (c) 2012 Nokia Corporation and/or its subsidiary(-ies).
-**
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-**
-** GNU Lesser General Public License Usage
-**
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this file.
-** Please review the following information to ensure the GNU Lesser General
-** Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** Other Usage
-**
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**************************************************************************/
-
-#ifndef CPPTOOLS_CPPCOMPLETIONSUPPORTINTERNAL_H
-#define CPPTOOLS_CPPCOMPLETIONSUPPORTINTERNAL_H
-
-#include "cppcompletionsupport.h"
-
-namespace CppTools {
-namespace Internal {
-
-class CppCompletionSupportInternal: public CppCompletionSupport
-{
-public:
-    CppCompletionSupportInternal(TextEditor::ITextEditor *editor);
-    virtual ~CppCompletionSupportInternal();
-
-    virtual TextEditor::IAssistInterface *createAssistInterface(ProjectExplorer::Project *project,
-                                                                QTextDocument *document,
-                                                                int position,
-                                                                TextEditor::AssistReason reason) const;
-};
-
-class CppCompletionSupportInternalFactory: public CppCompletionSupportFactory
-{
-public:
-    virtual ~CppCompletionSupportInternalFactory();
-
-    virtual CppCompletionSupport *completionSupport(TextEditor::ITextEditor *editor);
-};
-
-} // namespace Internal
-} // namespace CppTools
-
-#endif // CPPTOOLS_CPPCOMPLETIONSUPPORTINTERNAL_H
diff --git a/src/plugins/cpptools/cppmodelmanager.cpp b/src/plugins/cpptools/cppmodelmanager.cpp
index 57baad8f88d675de2b0a22ecd72bb66b909c6eee..da0a78e0b784b1edb03bfa3bc9c8dcd873d893cb 100644
--- a/src/plugins/cpptools/cppmodelmanager.cpp
+++ b/src/plugins/cpptools/cppmodelmanager.cpp
@@ -34,8 +34,7 @@
 #include <cplusplus/Overview.h>
 
 #include "cppmodelmanager.h"
-#include "cppcompletionsupport.h"
-#include "cppcompletionsupportinternal.h"
+#include "cppcompletionassist.h"
 #include "cpphighlightingsupport.h"
 #include "cpphighlightingsupportinternal.h"
 #include "abstracteditorsupport.h"
@@ -735,14 +734,16 @@ CppModelManager::CppModelManager(QObject *parent)
     connect(Core::ICore::editorManager(), SIGNAL(editorAboutToClose(Core::IEditor *)),
         this, SLOT(editorAboutToClose(Core::IEditor *)));
 
-    m_completionFallback = new CppCompletionSupportInternalFactory;
-    m_completionFactory = m_completionFallback;
+    m_completionFallback = new InternalCompletionAssistProvider;
+    m_completionAssistProvider = m_completionFallback;
+    ExtensionSystem::PluginManager::instance()->addObject(m_completionAssistProvider);
     m_highlightingFallback = new CppHighlightingSupportInternalFactory;
     m_highlightingFactory = m_highlightingFallback;
 }
 
 CppModelManager::~CppModelManager()
 {
+    ExtensionSystem::PluginManager::instance()->removeObject(m_completionAssistProvider);
     delete m_completionFallback;
     delete m_highlightingFallback;
 }
@@ -1346,17 +1347,19 @@ void CppModelManager::finishedRefreshingSourceFiles(const QStringList &files)
 CppCompletionSupport *CppModelManager::completionSupport(Core::IEditor *editor) const
 {
     if (TextEditor::ITextEditor *textEditor = qobject_cast<TextEditor::ITextEditor *>(editor))
-        return m_completionFactory->completionSupport(textEditor);
+        return m_completionAssistProvider->completionSupport(textEditor);
     else
         return 0;
 }
 
-void CppModelManager::setCompletionSupportFactory(CppCompletionSupportFactory *completionFactory)
+void CppModelManager::setCppCompletionAssistProvider(CppCompletionAssistProvider *completionAssistProvider)
 {
-    if (completionFactory)
-        m_completionFactory = completionFactory;
+    ExtensionSystem::PluginManager::instance()->removeObject(m_completionAssistProvider);
+    if (completionAssistProvider)
+        m_completionAssistProvider = completionAssistProvider;
     else
-        m_completionFactory = m_completionFallback;
+        m_completionAssistProvider = m_completionFallback;
+    ExtensionSystem::PluginManager::instance()->addObject(m_completionAssistProvider);
 }
 
 CppHighlightingSupport *CppModelManager::highlightingSupport(Core::IEditor *editor) const
diff --git a/src/plugins/cpptools/cppmodelmanager.h b/src/plugins/cpptools/cppmodelmanager.h
index dab51c3c77414da73bf3253bfcc9de45d9869f95..7cf4b85685796759cfc528b826804721843686bc 100644
--- a/src/plugins/cpptools/cppmodelmanager.h
+++ b/src/plugins/cpptools/cppmodelmanager.h
@@ -138,10 +138,10 @@ public:
     void finishedRefreshingSourceFiles(const QStringList &files);
 
     virtual CppCompletionSupport *completionSupport(Core::IEditor *editor) const;
-    void setCompletionSupportFactory(CppCompletionSupportFactory *completionFactory);
+    virtual void setCppCompletionAssistProvider(CppCompletionAssistProvider *completionAssistProvider);
 
     virtual CppHighlightingSupport *highlightingSupport(Core::IEditor *editor) const;
-    void setHighlightingSupportFactory(CppHighlightingSupportFactory *highlightingFactory);
+    virtual void setHighlightingSupportFactory(CppHighlightingSupportFactory *highlightingFactory);
 
 Q_SIGNALS:
     void projectPathChanged(const QString &projectPath);
@@ -247,8 +247,8 @@ private:
 
     QMap<QString, QList<ProjectPart::Ptr> > m_srcToProjectPart;
 
-    CppCompletionSupportFactory *m_completionFactory;
-    CppCompletionSupportFactory *m_completionFallback;
+    CppCompletionAssistProvider *m_completionAssistProvider;
+    CppCompletionAssistProvider *m_completionFallback;
     CppHighlightingSupportFactory *m_highlightingFactory;
     CppHighlightingSupportFactory *m_highlightingFallback;
 };
diff --git a/src/plugins/cpptools/cpptools.pro b/src/plugins/cpptools/cpptools.pro
index ac622e00f2958ce77240724d38ee42cfc977d572..c53c6e8a71fd49b8c3e8ebc5389c36060ecd8215 100644
--- a/src/plugins/cpptools/cpptools.pro
+++ b/src/plugins/cpptools/cpptools.pro
@@ -40,12 +40,12 @@ HEADERS += completionsettingspage.h \
     commentssettings.h \
     symbolfinder.h \
     cppcompletionsupport.h \
-    cppcompletionsupportinternal.h \
     cpphighlightingsupport.h \
     cpphighlightingsupportinternal.h \
     cppchecksymbols.h \
     cpplocalsymbols.h \
-    cppsemanticinfo.h
+    cppsemanticinfo.h \
+    cppcompletionassistprovider.h
 
 SOURCES += completionsettingspage.cpp \
     cppclassesfilter.cpp \
@@ -77,12 +77,12 @@ SOURCES += completionsettingspage.cpp \
     commentssettings.cpp \
     symbolfinder.cpp \
     cppcompletionsupport.cpp \
-    cppcompletionsupportinternal.cpp \
     cpphighlightingsupport.cpp \
     cpphighlightingsupportinternal.cpp \
     cppchecksymbols.cpp \
     cpplocalsymbols.cpp \
-    cppsemanticinfo.cpp
+    cppsemanticinfo.cpp \
+    cppcompletionassistprovider.cpp
 
 FORMS += completionsettingspage.ui \
     cppfilesettingspage.ui \
diff --git a/src/plugins/cpptools/cpptoolsplugin.cpp b/src/plugins/cpptools/cpptoolsplugin.cpp
index fd52c2f87cb47f3e83a82b098d9680e3060c6993..f75a0207a4e4abe2f7cdd569d33356bbf01999ae 100644
--- a/src/plugins/cpptools/cpptoolsplugin.cpp
+++ b/src/plugins/cpptools/cpptoolsplugin.cpp
@@ -41,7 +41,6 @@
 #include "cpptoolsconstants.h"
 #include "cpplocatorfilter.h"
 #include "symbolsfindfilter.h"
-#include "cppcompletionassist.h"
 #include "cpptoolssettings.h"
 
 #include <extensionsystem/pluginmanager.h>
@@ -116,7 +115,6 @@ bool CppToolsPlugin::initialize(const QStringList &arguments, QString *error)
             m_modelManager, SLOT(updateSourceFiles(QStringList)));
     addAutoReleasedObject(m_modelManager);
 
-    addAutoReleasedObject(new CppCompletionAssistProvider);
     addAutoReleasedObject(new CppLocatorFilter(m_modelManager));
     addAutoReleasedObject(new CppClassesFilter(m_modelManager));
     addAutoReleasedObject(new CppFunctionsFilter(m_modelManager));