diff --git a/src/plugins/cpptools/completionsettingspage.cpp b/src/plugins/cpptools/completionsettingspage.cpp
index e001313e10a9b6824801bf3b2d61e02e41cadae1..ae1882b0093f0ad117792342d2140a473566a0f1 100644
--- a/src/plugins/cpptools/completionsettingspage.cpp
+++ b/src/plugins/cpptools/completionsettingspage.cpp
@@ -32,15 +32,15 @@
 
 #include <coreplugin/icore.h>
 #include <extensionsystem/pluginmanager.h>
+#include <texteditor/texteditorsettings.h>
 
 #include <QtCore/QTextStream>
 #include <QtCore/QCoreApplication>
 
 using namespace CppTools::Internal;
 
-CompletionSettingsPage::CompletionSettingsPage(CppCodeCompletion *completion)
-    : m_completion(completion)
-    , m_page(new Ui_CompletionSettingsPage)
+CompletionSettingsPage::CompletionSettingsPage()
+    : m_page(new Ui_CompletionSettingsPage)
 {
 }
 
@@ -64,23 +64,27 @@ QWidget *CompletionSettingsPage::createPage(QWidget *parent)
     QWidget *w = new QWidget(parent);
     m_page->setupUi(w);
 
+    const TextEditor::CompletionSettings &settings =
+            TextEditor::TextEditorSettings::instance()->completionSettings();
+
     int caseSensitivityIndex = 0;
-    switch (m_completion->caseSensitivity()) {
-    case CppCodeCompletion::CaseSensitive:
+    switch (settings.m_caseSensitivity) {
+    case TextEditor::CaseSensitive:
         caseSensitivityIndex = 0;
         break;
-    case CppCodeCompletion::CaseInsensitive:
+    case TextEditor::CaseInsensitive:
         caseSensitivityIndex = 1;
         break;
-    case CppCodeCompletion::FirstLetterCaseSensitive:
+    case TextEditor::FirstLetterCaseSensitive:
         caseSensitivityIndex = 2;
         break;
     }
 
     m_page->caseSensitivity->setCurrentIndex(caseSensitivityIndex);
-    m_page->autoInsertBrackets->setChecked(m_completion->autoInsertBrackets());
-    m_page->partiallyComplete->setChecked(m_completion->isPartialCompletionEnabled());
-    m_page->spaceAfterFunctionName->setChecked(m_completion->isSpaceAfterFunctionName());
+    m_page->autoInsertBrackets->setChecked(settings.m_autoInsertBrackets);
+    m_page->partiallyComplete->setChecked(settings.m_partiallyComplete);
+    m_page->spaceAfterFunctionName->setChecked(settings.m_spaceAfterFunctionName);
+
     if (m_searchKeywords.isEmpty()) {
         QTextStream(&m_searchKeywords) << m_page->caseSensitivityLabel->text()
                 << ' ' << m_page->autoInsertBrackets->text()
@@ -88,15 +92,19 @@ QWidget *CompletionSettingsPage::createPage(QWidget *parent)
 		<< ' ' << m_page->spaceAfterFunctionName->text();
         m_searchKeywords.remove(QLatin1Char('&'));
     }
+
     return w;
 }
 
 void CompletionSettingsPage::apply()
 {
-    m_completion->setCaseSensitivity(caseSensitivity());
-    m_completion->setAutoInsertBrackets(m_page->autoInsertBrackets->isChecked());
-    m_completion->setPartialCompletionEnabled(m_page->partiallyComplete->isChecked());
-    m_completion->setSpaceAfterFunctionName(m_page->spaceAfterFunctionName->isChecked());
+    TextEditor::CompletionSettings settings;
+    settings.m_caseSensitivity = caseSensitivity();
+    settings.m_autoInsertBrackets = m_page->autoInsertBrackets->isChecked();
+    settings.m_partiallyComplete = m_page->partiallyComplete->isChecked();
+    settings.m_spaceAfterFunctionName = m_page->spaceAfterFunctionName->isChecked();
+
+    TextEditor::TextEditorSettings::instance()->setCompletionSettings(settings);
 }
 
 bool CompletionSettingsPage::matches(const QString &s) const
@@ -104,14 +112,14 @@ bool CompletionSettingsPage::matches(const QString &s) const
     return m_searchKeywords.contains(s, Qt::CaseInsensitive);
 }
 
-CppCodeCompletion::CaseSensitivity CompletionSettingsPage::caseSensitivity() const
+TextEditor::CaseSensitivity CompletionSettingsPage::caseSensitivity() const
 {
     switch (m_page->caseSensitivity->currentIndex()) {
     case 0: // Full
-        return CppCodeCompletion::CaseSensitive;
+        return TextEditor::CaseSensitive;
     case 1: // None
-        return CppCodeCompletion::CaseInsensitive;
+        return TextEditor::CaseInsensitive;
     default: // First letter
-        return CppCodeCompletion::FirstLetterCaseSensitive;
+        return TextEditor::FirstLetterCaseSensitive;
     }
 }
diff --git a/src/plugins/cpptools/completionsettingspage.h b/src/plugins/cpptools/completionsettingspage.h
index fe9b8477c39e3f52dbca11bf9f17aab834459d42..4221811ad63077985392eeded0f850c28e40514e 100644
--- a/src/plugins/cpptools/completionsettingspage.h
+++ b/src/plugins/cpptools/completionsettingspage.h
@@ -30,10 +30,9 @@
 #ifndef COMPLETIONSETTINGSPAGE_H
 #define COMPLETIONSETTINGSPAGE_H
 
+#include <texteditor/completionsettings.h>
 #include <texteditor/texteditoroptionspage.h>
 
-#include "cppcodecompletion.h"
-
 QT_BEGIN_NAMESPACE
 class Ui_CompletionSettingsPage;
 QT_END_NAMESPACE
@@ -41,12 +40,14 @@ QT_END_NAMESPACE
 namespace CppTools {
 namespace Internal {
 
+// TODO: Move this class to the text editor plugin
+
 class CompletionSettingsPage : public TextEditor::TextEditorOptionsPage
 {
     Q_OBJECT
 
 public:
-    CompletionSettingsPage(CppCodeCompletion *completion);
+    CompletionSettingsPage();
     ~CompletionSettingsPage();
 
     QString id() const;
@@ -58,9 +59,8 @@ public:
     virtual bool matches(const QString &) const;
 
 private:
-    CppCodeCompletion::CaseSensitivity caseSensitivity() const;
+    TextEditor::CaseSensitivity caseSensitivity() const;
 
-    CppCodeCompletion *m_completion;
     Ui_CompletionSettingsPage *m_page;
     QString m_searchKeywords;
 };
diff --git a/src/plugins/cpptools/cppcodecompletion.cpp b/src/plugins/cpptools/cppcodecompletion.cpp
index a01e63b18dcb1dd44de0e19362235cbc091445b5..19e8e94cdf9166568d0d3eb85b3b8a2e60977932 100644
--- a/src/plugins/cpptools/cppcodecompletion.cpp
+++ b/src/plugins/cpptools/cppcodecompletion.cpp
@@ -56,6 +56,7 @@
 #include <coreplugin/icore.h>
 #include <coreplugin/mimedatabase.h>
 #include <coreplugin/editormanager/editormanager.h>
+#include <texteditor/completionsettings.h>
 #include <texteditor/itexteditor.h>
 #include <texteditor/itexteditable.h>
 #include <texteditor/basetexteditor.h>
@@ -435,10 +436,6 @@ CppCodeCompletion::CppCodeCompletion(CppModelManager *manager)
       m_manager(manager),
       m_editor(0),
       m_startPosition(-1),
-      m_caseSensitivity(FirstLetterCaseSensitive),
-      m_autoInsertBrackets(true),
-      m_partialCompletionEnabled(true),
-      m_spaceAfterFunctionName(false),
       m_forcedCompletion(false),
       m_completionOperator(T_EOF_SYMBOL),
       m_objcEnabled(true)
@@ -450,46 +447,6 @@ QIcon CppCodeCompletion::iconForSymbol(Symbol *symbol) const
     return m_icons.iconForSymbol(symbol);
 }
 
-CppCodeCompletion::CaseSensitivity CppCodeCompletion::caseSensitivity() const
-{
-    return m_caseSensitivity;
-}
-
-void CppCodeCompletion::setCaseSensitivity(CaseSensitivity caseSensitivity)
-{
-    m_caseSensitivity = caseSensitivity;
-}
-
-bool CppCodeCompletion::autoInsertBrackets() const
-{
-    return m_autoInsertBrackets;
-}
-
-void CppCodeCompletion::setAutoInsertBrackets(bool autoInsertBrackets)
-{
-    m_autoInsertBrackets = autoInsertBrackets;
-}
-
-bool CppCodeCompletion::isPartialCompletionEnabled() const
-{
-    return m_partialCompletionEnabled;
-}
-
-void CppCodeCompletion::setPartialCompletionEnabled(bool partialCompletionEnabled)
-{
-    m_partialCompletionEnabled = partialCompletionEnabled;
-}
-
-bool CppCodeCompletion::isSpaceAfterFunctionName() const
-{
-    return m_spaceAfterFunctionName;
-}
-
-void CppCodeCompletion::setSpaceAfterFunctionName(bool spaceAfterFunctionName)
-{
-    m_spaceAfterFunctionName = spaceAfterFunctionName;
-}
-
 /*
   Searches backwards for an access operator.
 */
@@ -1459,7 +1416,7 @@ void CppCodeCompletion::completions(QList<TextEditor::CompletionItem> *completio
             return;
 
         if (m_completionOperator != T_LPAREN) {
-            filter(m_completions, completions, key, m_caseSensitivity);
+            filter(m_completions, completions, key);
 
         } else if (m_completionOperator == T_LPAREN ||
                    m_completionOperator == T_SIGNAL ||
@@ -1537,7 +1494,9 @@ void CppCodeCompletion::complete(const TextEditor::CompletionItem &item)
         //qDebug() << "current symbol:" << overview.prettyName(symbol->name())
         //<< overview.prettyType(symbol->type());
 
-        if (m_autoInsertBrackets && symbol && symbol->type()) {
+        const bool autoInsertBrackets = completionSettings().m_autoInsertBrackets;
+
+        if (autoInsertBrackets && symbol && symbol->type()) {
             if (Function *function = symbol->type()->asFunctionType()) {
                 // If the member is a function, automatically place the opening parenthesis,
                 // except when it might take template parameters.
@@ -1550,7 +1509,7 @@ void CppCodeCompletion::complete(const TextEditor::CompletionItem &item)
                         extraChars += QLatin1Char('<');
                     }
                 } else if (! function->isAmbiguous()) {
-		    if (m_spaceAfterFunctionName)
+                    if (completionSettings().m_spaceAfterFunctionName)
 			extraChars += QLatin1Char(' ');
                     extraChars += QLatin1Char('(');
 
@@ -1578,7 +1537,7 @@ void CppCodeCompletion::complete(const TextEditor::CompletionItem &item)
             }
         }
 
-        if (m_autoInsertBrackets && item.data.canConvert<CompleteFunctionDeclaration>()) {
+        if (autoInsertBrackets && item.data.canConvert<CompleteFunctionDeclaration>()) {
             // everything from the closing parenthesis on are extra chars, to
             // make sure an auto-inserted ")" gets replaced by ") const" if necessary
             int closingParen = toInsert.lastIndexOf(QLatin1Char(')'));
@@ -1614,7 +1573,7 @@ bool CppCodeCompletion::partiallyComplete(const QList<TextEditor::CompletionItem
     } else if (completionItems.count() == 1) {
         complete(completionItems.first());
         return true;
-    } else if (m_partialCompletionEnabled && m_completionOperator != T_LPAREN) {
+    } else if (m_completionOperator != T_LPAREN) {
         return TextEditor::ICompletionCollector::partiallyComplete(completionItems);
     }
 
diff --git a/src/plugins/cpptools/cppcodecompletion.h b/src/plugins/cpptools/cppcodecompletion.h
index b3c8402ee27348e2e9837d40486b61d59d0eca01..b4bff01fba807157fc88f5d31b47a20ed8879234 100644
--- a/src/plugins/cpptools/cppcodecompletion.h
+++ b/src/plugins/cpptools/cppcodecompletion.h
@@ -79,18 +79,6 @@ public:
 
     QIcon iconForSymbol(CPlusPlus::Symbol *symbol) const;
 
-    CaseSensitivity caseSensitivity() const;
-    void setCaseSensitivity(CaseSensitivity caseSensitivity);
-
-    bool autoInsertBrackets() const;
-    void setAutoInsertBrackets(bool autoInsertBrackets);
-
-    bool isPartialCompletionEnabled() const;
-    void setPartialCompletionEnabled(bool partialCompletionEnabled);
-
-    bool isSpaceAfterFunctionName() const;
-    void setSpaceAfterFunctionName(bool spaceAfterFunctionName);
-
 private:
     void addKeywords();
     void addMacros(const QString &fileName, const CPlusPlus::Snapshot &snapshot);
@@ -152,10 +140,6 @@ private:
     TextEditor::ITextEditable *m_editor;
     int m_startPosition;     // Position of the cursor from which completion started
 
-    CaseSensitivity m_caseSensitivity;
-    bool m_autoInsertBrackets;
-    bool m_partialCompletionEnabled;
-    bool m_spaceAfterFunctionName;
     bool m_forcedCompletion;
     unsigned m_completionOperator;
     bool m_objcEnabled;
diff --git a/src/plugins/cpptools/cpptoolsplugin.cpp b/src/plugins/cpptools/cpptoolsplugin.cpp
index 19f986a8b98b0c17de2758eb2f8a46b5e57d627f..61173c8e5f6297834d064d71acf346da7014edf6 100644
--- a/src/plugins/cpptools/cpptoolsplugin.cpp
+++ b/src/plugins/cpptools/cpptoolsplugin.cpp
@@ -51,6 +51,7 @@
 #include <coreplugin/progressmanager/progressmanager.h>
 #include <coreplugin/vcsmanager.h>
 #include <coreplugin/filemanager.h>
+#include <texteditor/texteditorsettings.h>
 #include <cppeditor/cppeditorconstants.h>
 
 #include <QtCore/QtConcurrentRun>
@@ -109,8 +110,8 @@ bool CppToolsPlugin::initialize(const QStringList &arguments, QString *error)
             m_modelManager, SLOT(updateSourceFiles(QStringList)));
     addAutoReleasedObject(m_modelManager);
 
-    m_completion = new CppCodeCompletion(m_modelManager);
-    addAutoReleasedObject(m_completion);
+    CppCodeCompletion *completion = new CppCodeCompletion(m_modelManager);
+    addAutoReleasedObject(completion);
 
     CppLocatorFilter *locatorFilter = new CppLocatorFilter(m_modelManager,
                                                                  core->editorManager());
@@ -118,7 +119,7 @@ bool CppToolsPlugin::initialize(const QStringList &arguments, QString *error)
     addAutoReleasedObject(new CppClassesFilter(m_modelManager, core->editorManager()));
     addAutoReleasedObject(new CppFunctionsFilter(m_modelManager, core->editorManager()));
     addAutoReleasedObject(new CppCurrentDocumentFilter(m_modelManager, core->editorManager()));
-    addAutoReleasedObject(new CompletionSettingsPage(m_completion));
+    addAutoReleasedObject(new CompletionSettingsPage);
     addAutoReleasedObject(new CppFileSettingsPage(m_fileSettings));
 
     // Menus
@@ -139,17 +140,11 @@ bool CppToolsPlugin::initialize(const QStringList &arguments, QString *error)
     mcpptools->addAction(command);
     connect(switchAction, SIGNAL(triggered()), this, SLOT(switchHeaderSource()));
 
-    // Restore settings
-    QSettings *settings = Core::ICore::instance()->settings();
-    settings->beginGroup(QLatin1String("CppTools"));
-    settings->beginGroup(QLatin1String("Completion"));
-    const int caseSensitivity = settings->value(QLatin1String("CaseSensitivity"), m_completion->caseSensitivity()).toInt();
-    m_completion->setCaseSensitivity((CppCodeCompletion::CaseSensitivity) caseSensitivity);
-    m_completion->setAutoInsertBrackets(settings->value(QLatin1String("AutoInsertBraces"), true).toBool());
-    m_completion->setPartialCompletionEnabled(settings->value(QLatin1String("PartiallyComplete"), true).toBool());
-    m_completion->setSpaceAfterFunctionName(settings->value(QLatin1String("SpaceAfterFunctionName"), false).toBool());
-    settings->endGroup();
-    settings->endGroup();
+    // Set completion settings and keep them up to date
+    TextEditor::TextEditorSettings *textEditorSettings = TextEditor::TextEditorSettings::instance();
+    completion->setCompletionSettings(textEditorSettings->completionSettings());
+    connect(textEditorSettings, SIGNAL(completionSettingsChanged(TextEditor::CompletionSettings)),
+            completion, SLOT(setCompletionSettings(TextEditor::CompletionSettings)));
 
     return true;
 }
@@ -170,16 +165,6 @@ void CppToolsPlugin::extensionsInitialized()
 
 void CppToolsPlugin::aboutToShutdown()
 {
-    // Save settings
-    QSettings *settings = Core::ICore::instance()->settings();
-    settings->beginGroup(QLatin1String("CppTools"));
-    settings->beginGroup(QLatin1String("Completion"));
-    settings->setValue(QLatin1String("CaseSensitivity"), (int) m_completion->caseSensitivity());
-    settings->setValue(QLatin1String("AutoInsertBraces"), m_completion->autoInsertBrackets());
-    settings->setValue(QLatin1String("PartiallyComplete"), m_completion->isPartialCompletionEnabled());
-    settings->setValue(QLatin1String("SpaceAfterFunctionName"), m_completion->isSpaceAfterFunctionName());
-    settings->endGroup();
-    settings->endGroup();
 }
 
 void CppToolsPlugin::switchHeaderSource()
diff --git a/src/plugins/cpptools/cpptoolsplugin.h b/src/plugins/cpptools/cpptoolsplugin.h
index c5b82982ca3ab1417dc4722453672213ffe57d6e..ff4aa9ce81f88070086e048c8b66556dffb260c9 100644
--- a/src/plugins/cpptools/cpptoolsplugin.h
+++ b/src/plugins/cpptools/cpptoolsplugin.h
@@ -50,7 +50,6 @@ QT_END_NAMESPACE
 namespace CppTools {
 namespace Internal {
 
-class CppCodeCompletion;
 class CppModelManager;
 struct CppFileSettings;
 
@@ -79,7 +78,6 @@ private:
 
     int m_context;
     CppModelManager *m_modelManager;
-    CppCodeCompletion *m_completion;
     QSharedPointer<CppFileSettings> m_fileSettings;
 
     static CppToolsPlugin *m_instance;
diff --git a/src/plugins/qmljseditor/qmljscodecompletion.cpp b/src/plugins/qmljseditor/qmljscodecompletion.cpp
index aae8b16863bacd34d8b44cdcc7ad806761683285..9daad528c0d92cfcb2cf211d37c7bc0f7ba0cc5c 100644
--- a/src/plugins/qmljseditor/qmljscodecompletion.cpp
+++ b/src/plugins/qmljseditor/qmljscodecompletion.cpp
@@ -477,8 +477,7 @@ CodeCompletion::CodeCompletion(ModelManagerInterface *modelManager, QObject *par
     : TextEditor::ICompletionCollector(parent),
       m_modelManager(modelManager),
       m_editor(0),
-      m_startPosition(0),
-      m_caseSensitivity(Qt::CaseSensitive)
+      m_startPosition(0)
 {
     Q_ASSERT(modelManager);
 }
@@ -486,12 +485,6 @@ CodeCompletion::CodeCompletion(ModelManagerInterface *modelManager, QObject *par
 CodeCompletion::~CodeCompletion()
 { }
 
-Qt::CaseSensitivity CodeCompletion::caseSensitivity() const
-{ return m_caseSensitivity; }
-
-void CodeCompletion::setCaseSensitivity(Qt::CaseSensitivity caseSensitivity)
-{ m_caseSensitivity = caseSensitivity; }
-
 TextEditor::ITextEditable *CodeCompletion::editor() const
 { return m_editor; }
 
@@ -854,7 +847,7 @@ void CodeCompletion::completions(QList<TextEditor::CompletionItem> *completions)
     else if (length > 0) {
         const QString key = m_editor->textAt(m_startPosition, length);
 
-        filter(m_completions, completions, key, FirstLetterCaseSensitive);
+        filter(m_completions, completions, key);
 
         if (completions->size() == 1) {
             if (key == completions->first().text)
diff --git a/src/plugins/qmljseditor/qmljscodecompletion.h b/src/plugins/qmljseditor/qmljscodecompletion.h
index aa5b19044ca1f4aeebdb6a9d7a81e7b1fe795134..7129bce9007d0c114effd61df54e7add5ad48dcb 100644
--- a/src/plugins/qmljseditor/qmljscodecompletion.h
+++ b/src/plugins/qmljseditor/qmljscodecompletion.h
@@ -55,9 +55,6 @@ public:
     CodeCompletion(ModelManagerInterface *modelManager, QObject *parent = 0);
     virtual ~CodeCompletion();
 
-    Qt::CaseSensitivity caseSensitivity() const;
-    void setCaseSensitivity(Qt::CaseSensitivity caseSensitivity);
-
     virtual TextEditor::ITextEditable *editor() const;
     virtual int startPosition() const;
     virtual bool shouldRestartCompletion();
@@ -81,7 +78,6 @@ private:
     TextEditor::ITextEditable *m_editor;
     int m_startPosition;
     QList<TextEditor::CompletionItem> m_completions;
-    Qt::CaseSensitivity m_caseSensitivity;
 
     QList<TextEditor::CompletionItem> m_snippets;
     QDateTime m_snippetFileLastModified;
diff --git a/src/plugins/qmljseditor/qmljseditorplugin.cpp b/src/plugins/qmljseditor/qmljseditorplugin.cpp
index a2b005f416ea5b269859362252495bd9d344bd0f..f998309ac172fb3dd971b8039cbaeb6c89599ac7 100644
--- a/src/plugins/qmljseditor/qmljseditorplugin.cpp
+++ b/src/plugins/qmljseditor/qmljseditorplugin.cpp
@@ -77,8 +77,7 @@ QmlJSEditorPlugin::QmlJSEditorPlugin() :
         m_modelManager(0),
     m_wizard(0),
     m_editor(0),
-    m_actionHandler(0),
-    m_completion(0)
+    m_actionHandler(0)
 {
     m_instance = this;
 }
@@ -148,19 +147,16 @@ bool QmlJSEditorPlugin::initialize(const QStringList & /*arguments*/, QString *e
     cmd = am->command(TextEditor::Constants::UN_COMMENT_SELECTION);
     contextMenu->addAction(cmd);
 
-    m_completion = new CodeCompletion(m_modelManager);
-    addAutoReleasedObject(m_completion);
+    CodeCompletion *completion = new CodeCompletion(m_modelManager);
+    addAutoReleasedObject(completion);
 
-    addAutoReleasedObject(new HoverHandler());
+    addAutoReleasedObject(new HoverHandler);
 
-    // Restore settings
-    QSettings *settings = Core::ICore::instance()->settings();
-    settings->beginGroup(QLatin1String("CppTools")); // ### FIXME:
-    settings->beginGroup(QLatin1String("Completion"));
-    const bool caseSensitive = settings->value(QLatin1String("CaseSensitive"), true).toBool();
-    m_completion->setCaseSensitivity(caseSensitive ? Qt::CaseSensitive : Qt::CaseInsensitive);
-    settings->endGroup();
-    settings->endGroup();
+    // Set completion settings and keep them up to date
+    TextEditor::TextEditorSettings *textEditorSettings = TextEditor::TextEditorSettings::instance();
+    completion->setCompletionSettings(textEditorSettings->completionSettings());
+    connect(textEditorSettings, SIGNAL(completionSettingsChanged(TextEditor::CompletionSettings)),
+            completion, SLOT(setCompletionSettings(TextEditor::CompletionSettings)));
 
     error_message->clear();
 
diff --git a/src/plugins/qmljseditor/qmljseditorplugin.h b/src/plugins/qmljseditor/qmljseditorplugin.h
index b119e554d0a06a661bddb3f2111cc6e58936e589..db534f0f290faad17c0da689cb871a369c26eed4 100644
--- a/src/plugins/qmljseditor/qmljseditorplugin.h
+++ b/src/plugins/qmljseditor/qmljseditorplugin.h
@@ -52,7 +52,6 @@ class QmlFileWizard;
 namespace Internal {
 
 class QmlJSEditorFactory;
-class CodeCompletion;
 class QmlJSTextEditor;
 class QmlJSPreviewRunner;
 
@@ -92,7 +91,6 @@ private:
     QmlFileWizard *m_wizard;
     QmlJSEditorFactory *m_editor;
     TextEditor::TextEditorActionHandler *m_actionHandler;
-    CodeCompletion *m_completion;
 };
 
 } // namespace Internal
diff --git a/src/plugins/texteditor/completionsettings.cpp b/src/plugins/texteditor/completionsettings.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..0d800da3b32dc4f0bafd106061050d9c01ec8d01
--- /dev/null
+++ b/src/plugins/texteditor/completionsettings.cpp
@@ -0,0 +1,86 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** Commercial Usage
+**
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** GNU Lesser General Public License Usage
+**
+** Alternatively, 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.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://qt.nokia.com/contact.
+**
+**************************************************************************/
+
+#include "completionsettings.h"
+
+#include <QtCore/QSettings>
+
+static const char * const groupPostfix = "Completion";
+static const char * const caseSensitivityKey = "CaseSensitivity";
+static const char * const autoInsertBracesKey = "AutoInsertBraces";
+static const char * const partiallyCompleteKey = "PartiallyComplete";
+static const char * const spaceAfterFunctionNameKey = "SpaceAfterFunctionName";
+
+using namespace TextEditor;
+
+CompletionSettings::CompletionSettings()
+    : m_caseSensitivity(FirstLetterCaseSensitive)
+    , m_autoInsertBrackets(true)
+    , m_partiallyComplete(true)
+    , m_spaceAfterFunctionName(false)
+{
+}
+
+void CompletionSettings::toSettings(const QString &category, QSettings *s) const
+{
+    QString group = QLatin1String(groupPostfix);
+    if (!category.isEmpty())
+        group.insert(0, category);
+
+    s->beginGroup(group);
+    s->setValue(QLatin1String(caseSensitivityKey), (int) m_caseSensitivity);
+    s->setValue(QLatin1String(autoInsertBracesKey), m_autoInsertBrackets);
+    s->setValue(QLatin1String(partiallyCompleteKey), m_partiallyComplete);
+    s->setValue(QLatin1String(spaceAfterFunctionNameKey), m_spaceAfterFunctionName);
+    s->endGroup();
+}
+
+void CompletionSettings::fromSettings(const QString &category, const QSettings *s)
+{
+    QString group = QLatin1String(groupPostfix);
+    if (!category.isEmpty())
+        group.insert(0, category);
+    group += QLatin1Char('/');
+
+    *this = CompletionSettings(); // Assign defaults
+
+    m_caseSensitivity = (CaseSensitivity) s->value(group + QLatin1String(caseSensitivityKey), m_caseSensitivity).toInt();
+    m_autoInsertBrackets = s->value(group + QLatin1String(autoInsertBracesKey), m_autoInsertBrackets).toBool();
+    m_partiallyComplete = s->value(group + QLatin1String(partiallyCompleteKey), m_partiallyComplete).toBool();
+    m_spaceAfterFunctionName = s->value(group + QLatin1String(spaceAfterFunctionNameKey), m_spaceAfterFunctionName).toBool();
+}
+
+bool CompletionSettings::equals(const CompletionSettings &cs) const
+{
+    return m_caseSensitivity == cs.m_caseSensitivity
+        && m_autoInsertBrackets == cs.m_autoInsertBrackets
+        && m_partiallyComplete == cs.m_partiallyComplete
+        && m_spaceAfterFunctionName == cs.m_spaceAfterFunctionName
+        ;
+}
diff --git a/src/plugins/texteditor/completionsettings.h b/src/plugins/texteditor/completionsettings.h
new file mode 100644
index 0000000000000000000000000000000000000000..0d35abf9bb32638e9572b4009e57e12d88eeb83e
--- /dev/null
+++ b/src/plugins/texteditor/completionsettings.h
@@ -0,0 +1,70 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** Commercial Usage
+**
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** GNU Lesser General Public License Usage
+**
+** Alternatively, 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.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://qt.nokia.com/contact.
+**
+**************************************************************************/
+
+#ifndef COMPLETIONSETTINGS_H
+#define COMPLETIONSETTINGS_H
+
+#include "texteditor_global.h"
+
+QT_BEGIN_NAMESPACE
+class QSettings;
+QT_END_NAMESPACE
+
+namespace TextEditor {
+
+enum CaseSensitivity {
+    CaseInsensitive,
+    CaseSensitive,
+    FirstLetterCaseSensitive
+};
+
+/**
+ * Settings that describe how the code completion behaves.
+ */
+struct TEXTEDITOR_EXPORT CompletionSettings
+{
+    CompletionSettings();
+
+    void toSettings(const QString &category, QSettings *s) const;
+    void fromSettings(const QString &category, const QSettings *s);
+
+    bool equals(const CompletionSettings &bs) const;
+
+    CaseSensitivity m_caseSensitivity;
+    bool m_autoInsertBrackets;
+    bool m_partiallyComplete;
+    bool m_spaceAfterFunctionName;
+};
+
+inline bool operator==(const CompletionSettings &t1, const CompletionSettings &t2) { return t1.equals(t2); }
+inline bool operator!=(const CompletionSettings &t1, const CompletionSettings &t2) { return !t1.equals(t2); }
+
+} // namespace TextEditor
+
+#endif // COMPLETIONSETTINGS_H
diff --git a/src/plugins/texteditor/icompletioncollector.cpp b/src/plugins/texteditor/icompletioncollector.cpp
index 9bf453e1b5a0c671fa1487d3763387805213a712..0d4dd1296673f4c5fc38bd370a083349122097d4 100644
--- a/src/plugins/texteditor/icompletioncollector.cpp
+++ b/src/plugins/texteditor/icompletioncollector.cpp
@@ -28,11 +28,27 @@
 **************************************************************************/
 
 #include "icompletioncollector.h"
+
+#include "completionsettings.h"
 #include "itexteditable.h"
+
 #include <QtCore/QRegExp>
 #include <algorithm>
 
 using namespace TextEditor;
+using namespace TextEditor::Internal;
+
+namespace TextEditor {
+namespace Internal {
+
+struct ICompletionCollectorPrivate
+{
+public:
+    CompletionSettings m_completionSettings;
+};
+
+} // namespace Internal
+} // namespace TextEditor
 
 bool ICompletionCollector::compareChar(const QChar &l, const QChar &r)
 {
@@ -62,6 +78,27 @@ bool ICompletionCollector::completionItemLessThan(const CompletionItem &i1, cons
         return lessThan(lower1, lower2);
 }
 
+ICompletionCollector::ICompletionCollector(QObject *parent)
+    : QObject(parent)
+    , m_d(new Internal::ICompletionCollectorPrivate)
+{
+}
+
+ICompletionCollector::~ICompletionCollector()
+{
+    delete m_d;
+}
+
+void ICompletionCollector::setCompletionSettings(const CompletionSettings &settings)
+{
+    m_d->m_completionSettings = settings;
+}
+
+const CompletionSettings &ICompletionCollector::completionSettings() const
+{
+    return m_d->m_completionSettings;
+}
+
 QList<CompletionItem> ICompletionCollector::getCompletions()
 {
     QList<CompletionItem> completionItems;
@@ -88,6 +125,9 @@ QList<CompletionItem> ICompletionCollector::getCompletions()
 
 bool ICompletionCollector::partiallyComplete(const QList<TextEditor::CompletionItem> &completionItems)
 {
+    if (! m_d->m_completionSettings.m_partiallyComplete)
+        return false;
+
     // Compute common prefix
     QString firstKey = completionItems.first().text;
     QString lastKey = completionItems.last().text;
@@ -113,9 +153,10 @@ bool ICompletionCollector::partiallyComplete(const QList<TextEditor::CompletionI
 
 void ICompletionCollector::filter(const QList<TextEditor::CompletionItem> &items,
                                   QList<TextEditor::CompletionItem> *filteredItems,
-                                  const QString &key,
-                                  ICompletionCollector::CaseSensitivity caseSensitivity)
+                                  const QString &key)
 {
+    const TextEditor::CaseSensitivity caseSensitivity = m_d->m_completionSettings.m_caseSensitivity;
+
     /*
      * This code builds a regular expression in order to more intelligently match
      * camel-case style. This means upper-case characters will be rewritten as follows:
@@ -132,8 +173,8 @@ void ICompletionCollector::filter(const QList<TextEditor::CompletionItem> &items
     bool first = true;
     const QLatin1String wordContinuation("[a-z0-9_]*");
     foreach (const QChar &c, key) {
-        if (caseSensitivity == CaseInsensitive ||
-            (caseSensitivity == FirstLetterCaseSensitive && !first)) {
+        if (caseSensitivity == TextEditor::CaseInsensitive ||
+            (caseSensitivity == TextEditor::FirstLetterCaseSensitive && !first)) {
 
             keyRegExp += QLatin1String("(?:");
             if (c.isUpper() && !first)
@@ -158,7 +199,7 @@ void ICompletionCollector::filter(const QList<TextEditor::CompletionItem> &items
             if (hasKey) {
                 if (item.text.startsWith(key, Qt::CaseSensitive)) {
                     item.relevance = 2;
-                } else if (caseSensitivity != CaseSensitive
+                } else if (caseSensitivity != TextEditor::CaseSensitive
                            && item.text.startsWith(key, Qt::CaseInsensitive)) {
                     item.relevance = 1;
                 }
diff --git a/src/plugins/texteditor/icompletioncollector.h b/src/plugins/texteditor/icompletioncollector.h
index e2cfdfacd81874f16bb0559e46d75f57c7b6aefe..e78ad83b829fe2cc0bc21ff42de0df2788ae0234 100644
--- a/src/plugins/texteditor/icompletioncollector.h
+++ b/src/plugins/texteditor/icompletioncollector.h
@@ -38,8 +38,13 @@
 
 namespace TextEditor {
 
+namespace Internal {
+class ICompletionCollectorPrivate;
+}
+
 class ICompletionCollector;
 class ITextEditable;
+struct CompletionSettings;
 
 struct CompletionItem
 {
@@ -73,8 +78,10 @@ class TEXTEDITOR_EXPORT ICompletionCollector : public QObject
 {
     Q_OBJECT
 public:
-    ICompletionCollector(QObject *parent = 0) : QObject(parent) {}
-    virtual ~ICompletionCollector() {}
+    ICompletionCollector(QObject *parent = 0);
+    virtual ~ICompletionCollector();
+
+    const CompletionSettings &completionSettings() const;
 
     virtual QList<CompletionItem> getCompletions();
     virtual bool shouldRestartCompletion();
@@ -120,21 +127,20 @@ public:
 
     // helpers
 
-    enum CaseSensitivity {
-        CaseInsensitive,
-        CaseSensitive,
-        FirstLetterCaseSensitive
-    };
-
     void filter(const QList<TextEditor::CompletionItem> &items,
                 QList<TextEditor::CompletionItem> *filteredItems,
-                const QString &key,
-                CaseSensitivity caseSensitivity);
+                const QString &key);
+
+public slots:
+    void setCompletionSettings(const TextEditor::CompletionSettings &);
 
 protected:
     static bool compareChar(const QChar &item, const QChar &other);
     static bool lessThan(const QString &item, const QString &other);
     static bool completionItemLessThan(const CompletionItem &item, const CompletionItem &other);
+
+private:
+    Internal::ICompletionCollectorPrivate *m_d;
 };
 
 class TEXTEDITOR_EXPORT IQuickFixCollector : public ICompletionCollector
diff --git a/src/plugins/texteditor/texteditor.pro b/src/plugins/texteditor/texteditor.pro
index 26429c0858660418673ca84b156108e00e5a9c2a..a27f857809a36a97a7bfcc9810824dea36aaaabe 100644
--- a/src/plugins/texteditor/texteditor.pro
+++ b/src/plugins/texteditor/texteditor.pro
@@ -34,7 +34,8 @@ SOURCES += texteditorplugin.cpp \
     itexteditor.cpp \
     texteditoroverlay.cpp \
     texteditoroptionspage.cpp \
-    basetextdocumentlayout.cpp
+    basetextdocumentlayout.cpp \
+    completionsettings.cpp
 
 HEADERS += texteditorplugin.h \
     textfilewizard.h \
@@ -71,7 +72,8 @@ HEADERS += texteditorplugin.h \
     colorschemeedit.h \
     texteditoroverlay.h \
     texteditoroptionspage.h \
-    basetextdocumentlayout.h
+    basetextdocumentlayout.h \
+    completionsettings.h
 
 
 FORMS += behaviorsettingspage.ui \
diff --git a/src/plugins/texteditor/texteditorsettings.cpp b/src/plugins/texteditor/texteditorsettings.cpp
index de018d407fe710b66ef558d0e3299ce38fcfb2bd..52b98abd9d90e5aca807575ce503767cfa16a1e9 100644
--- a/src/plugins/texteditor/texteditorsettings.cpp
+++ b/src/plugins/texteditor/texteditorsettings.cpp
@@ -33,6 +33,7 @@
 #include "basetexteditor.h"
 #include "behaviorsettings.h"
 #include "behaviorsettingspage.h"
+#include "completionsettings.h"
 #include "displaysettings.h"
 #include "displaysettingspage.h"
 #include "fontsettingspage.h"
@@ -41,17 +42,54 @@
 #include "texteditorplugin.h"
 
 #include <extensionsystem/pluginmanager.h>
+#include <coreplugin/icore.h>
 #include <utils/qtcassert.h>
 
 #include <QtGui/QApplication>
 
 using namespace TextEditor;
 using namespace TextEditor::Constants;
+using namespace TextEditor::Internal;
+
+namespace TextEditor {
+namespace Internal {
+
+class TextEditorSettingsPrivate
+{
+public:
+    FontSettingsPage *m_fontSettingsPage;
+    BehaviorSettingsPage *m_behaviorSettingsPage;
+    DisplaySettingsPage *m_displaySettingsPage;
+
+    CompletionSettings m_completionSettings;
+
+    void fontZoomRequested(int pointSize);
+    void zoomResetRequested();
+};
+
+void TextEditorSettingsPrivate::fontZoomRequested(int zoom)
+{
+    FontSettings &fs = const_cast<FontSettings&>(m_fontSettingsPage->fontSettings());
+    fs.setFontZoom(qMax(10, fs.fontZoom() + zoom));
+    m_fontSettingsPage->saveSettings();
+}
+
+void TextEditorSettingsPrivate::zoomResetRequested()
+{
+    FontSettings &fs = const_cast<FontSettings&>(m_fontSettingsPage->fontSettings());
+    fs.setFontZoom(100);
+    m_fontSettingsPage->saveSettings();
+}
+
+} // namespace Internal
+} // namespace TextEditor
+
 
 TextEditorSettings *TextEditorSettings::m_instance = 0;
 
 TextEditorSettings::TextEditorSettings(QObject *parent)
     : QObject(parent)
+    , m_d(new Internal::TextEditorSettingsPrivate)
 {
     QTC_ASSERT(!m_instance, return);
     m_instance = this;
@@ -102,44 +140,50 @@ TextEditorSettings::TextEditorSettings(QObject *parent)
     formatDescriptions.append(FormatDescription(QLatin1String(C_DIFF_FILE), tr("Diff File"), Qt::darkBlue));
     formatDescriptions.append(FormatDescription(QLatin1String(C_DIFF_LOCATION), tr("Diff Location"), Qt::blue));
 
-    m_fontSettingsPage = new FontSettingsPage(formatDescriptions,
-                                              QLatin1String("A.FontSettings"),
-                                              this);
-    pm->addObject(m_fontSettingsPage);
+    m_d->m_fontSettingsPage = new FontSettingsPage(formatDescriptions,
+                                                   QLatin1String("A.FontSettings"),
+                                                   this);
+    pm->addObject(m_d->m_fontSettingsPage);
 
     // Add the GUI used to configure the tab, storage and interaction settings
     TextEditor::BehaviorSettingsPageParameters behaviorSettingsPageParameters;
     behaviorSettingsPageParameters.id = QLatin1String("B.BehaviourSettings");
     behaviorSettingsPageParameters.displayName = tr("Behavior");
     behaviorSettingsPageParameters.settingsPrefix = QLatin1String("text");
-    m_behaviorSettingsPage = new BehaviorSettingsPage(behaviorSettingsPageParameters, this);
-    pm->addObject(m_behaviorSettingsPage);
+    m_d->m_behaviorSettingsPage = new BehaviorSettingsPage(behaviorSettingsPageParameters, this);
+    pm->addObject(m_d->m_behaviorSettingsPage);
 
     TextEditor::DisplaySettingsPageParameters displaySettingsPageParameters;
     displaySettingsPageParameters.id = QLatin1String("D.DisplaySettings"),
     displaySettingsPageParameters.displayName = tr("Display");
     displaySettingsPageParameters.settingsPrefix = QLatin1String("text");
-    m_displaySettingsPage = new DisplaySettingsPage(displaySettingsPageParameters, this);
-    pm->addObject(m_displaySettingsPage);
+    m_d->m_displaySettingsPage = new DisplaySettingsPage(displaySettingsPageParameters, this);
+    pm->addObject(m_d->m_displaySettingsPage);
 
-    connect(m_fontSettingsPage, SIGNAL(changed(TextEditor::FontSettings)),
+    connect(m_d->m_fontSettingsPage, SIGNAL(changed(TextEditor::FontSettings)),
             this, SIGNAL(fontSettingsChanged(TextEditor::FontSettings)));
-    connect(m_behaviorSettingsPage, SIGNAL(tabSettingsChanged(TextEditor::TabSettings)),
+    connect(m_d->m_behaviorSettingsPage, SIGNAL(tabSettingsChanged(TextEditor::TabSettings)),
             this, SIGNAL(tabSettingsChanged(TextEditor::TabSettings)));
-    connect(m_behaviorSettingsPage, SIGNAL(storageSettingsChanged(TextEditor::StorageSettings)),
+    connect(m_d->m_behaviorSettingsPage, SIGNAL(storageSettingsChanged(TextEditor::StorageSettings)),
             this, SIGNAL(storageSettingsChanged(TextEditor::StorageSettings)));
-    connect(m_behaviorSettingsPage, SIGNAL(behaviorSettingsChanged(TextEditor::BehaviorSettings)),
+    connect(m_d->m_behaviorSettingsPage, SIGNAL(behaviorSettingsChanged(TextEditor::BehaviorSettings)),
             this, SIGNAL(behaviorSettingsChanged(TextEditor::BehaviorSettings)));
-    connect(m_displaySettingsPage, SIGNAL(displaySettingsChanged(TextEditor::DisplaySettings)),
+    connect(m_d->m_displaySettingsPage, SIGNAL(displaySettingsChanged(TextEditor::DisplaySettings)),
             this, SIGNAL(displaySettingsChanged(TextEditor::DisplaySettings)));
+
+    // TODO: Move these settings to TextEditor category
+    if (QSettings *s = Core::ICore::instance()->settings())
+        m_d->m_completionSettings.fromSettings(QLatin1String("CppTools/"), s);
 }
 
 TextEditorSettings::~TextEditorSettings()
 {
     ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
-    pm->removeObject(m_fontSettingsPage);
-    pm->removeObject(m_behaviorSettingsPage);
-    pm->removeObject(m_displaySettingsPage);
+    pm->removeObject(m_d->m_fontSettingsPage);
+    pm->removeObject(m_d->m_behaviorSettingsPage);
+    pm->removeObject(m_d->m_displaySettingsPage);
+
+    delete m_d;
 
     m_instance = 0;
 }
@@ -181,41 +225,46 @@ void TextEditorSettings::initializeEditor(BaseTextEditor *editor)
 }
 
 
-void TextEditorSettings::fontZoomRequested(int zoom)
+const FontSettings &TextEditorSettings::fontSettings() const
 {
-    FontSettings &fs = const_cast<FontSettings&>(fontSettings());
-    fs.setFontZoom(qMax(10, fs.fontZoom() + zoom));
-    m_fontSettingsPage->saveSettings();
+    return m_d->m_fontSettingsPage->fontSettings();
 }
 
-void TextEditorSettings::zoomResetRequested()
+const TabSettings &TextEditorSettings::tabSettings() const
 {
-    FontSettings &fs = const_cast<FontSettings&>(fontSettings());
-    fs.setFontZoom(100);
-    m_fontSettingsPage->saveSettings();
+    return m_d->m_behaviorSettingsPage->tabSettings();
 }
 
-const FontSettings &TextEditorSettings::fontSettings() const
+const StorageSettings &TextEditorSettings::storageSettings() const
 {
-    return m_fontSettingsPage->fontSettings();
+    return m_d->m_behaviorSettingsPage->storageSettings();
 }
 
-const TabSettings &TextEditorSettings::tabSettings() const
+const BehaviorSettings &TextEditorSettings::behaviorSettings() const
 {
-    return m_behaviorSettingsPage->tabSettings();
+    return m_d->m_behaviorSettingsPage->behaviorSettings();
 }
 
-const StorageSettings &TextEditorSettings::storageSettings() const
+const DisplaySettings &TextEditorSettings::displaySettings() const
 {
-    return m_behaviorSettingsPage->storageSettings();
+    return m_d->m_displaySettingsPage->displaySettings();
 }
 
-const BehaviorSettings &TextEditorSettings::behaviorSettings() const
+const CompletionSettings &TextEditorSettings::completionSettings() const
 {
-    return m_behaviorSettingsPage->behaviorSettings();
+    return m_d->m_completionSettings;
 }
 
-const DisplaySettings &TextEditorSettings::displaySettings() const
+void TextEditorSettings::setCompletionSettings(const TextEditor::CompletionSettings &settings)
 {
-    return m_displaySettingsPage->displaySettings();
+    if (m_d->m_completionSettings == settings)
+        return;
+
+    m_d->m_completionSettings = settings;
+    if (QSettings *s = Core::ICore::instance()->settings())
+        m_d->m_completionSettings.toSettings(QLatin1String("CppTools/"), s);
+
+    emit completionSettingsChanged(m_d->m_completionSettings);
 }
+
+#include "moc_texteditorsettings.cpp"
diff --git a/src/plugins/texteditor/texteditorsettings.h b/src/plugins/texteditor/texteditorsettings.h
index a5836304bee1ca853126b3b9da66575997656c61..ff6c9b958628e4aa51cb653191ea7b0d7e73dc07 100644
--- a/src/plugins/texteditor/texteditorsettings.h
+++ b/src/plugins/texteditor/texteditorsettings.h
@@ -45,11 +45,16 @@ struct TabSettings;
 struct StorageSettings;
 struct BehaviorSettings;
 struct DisplaySettings;
+struct CompletionSettings;
+
+namespace Internal {
+class TextEditorSettingsPrivate;
+}
 
 /**
  * This class provides a central place for basic text editor settings. These
  * settings include font settings, tab settings, storage settings, behavior
- * settings and display settings.
+ * settings, display settings and completion settings.
  */
 class TEXTEDITOR_EXPORT TextEditorSettings : public QObject
 {
@@ -68,6 +73,9 @@ public:
     const StorageSettings &storageSettings() const;
     const BehaviorSettings &behaviorSettings() const;
     const DisplaySettings &displaySettings() const;
+    const CompletionSettings &completionSettings() const;
+
+    void setCompletionSettings(const TextEditor::CompletionSettings &);
 
 signals:
     void fontSettingsChanged(const TextEditor::FontSettings &);
@@ -75,15 +83,12 @@ signals:
     void storageSettingsChanged(const TextEditor::StorageSettings &);
     void behaviorSettingsChanged(const TextEditor::BehaviorSettings &);
     void displaySettingsChanged(const TextEditor::DisplaySettings &);
-
-private slots:
-    void fontZoomRequested(int pointSize);
-    void zoomResetRequested();
+    void completionSettingsChanged(const TextEditor::CompletionSettings &);
 
 private:
-    FontSettingsPage *m_fontSettingsPage;
-    BehaviorSettingsPage *m_behaviorSettingsPage;
-    DisplaySettingsPage *m_displaySettingsPage;
+    Internal::TextEditorSettingsPrivate *m_d;
+    Q_PRIVATE_SLOT(m_d, void fontZoomRequested(int pointSize));
+    Q_PRIVATE_SLOT(m_d, void zoomResetRequested());
 
     static TextEditorSettings *m_instance;
 };