diff --git a/src/plugins/cpptools/cppfilesettingspage.cpp b/src/plugins/cpptools/cppfilesettingspage.cpp
index cdebf13a7c5c28fd600eab8c769d741cca19712c..12fe50fcb0ad743441eae2c1bf4fa1cbda1d1bb9 100644
--- a/src/plugins/cpptools/cppfilesettingspage.cpp
+++ b/src/plugins/cpptools/cppfilesettingspage.cpp
@@ -69,11 +69,11 @@ void CppFileSettings::fromSettings(QSettings *s)
     s->endGroup();
 }
 
-void CppFileSettings::applySuffixesToMimeDB()
+bool CppFileSettings::applySuffixesToMimeDB()
 {
     Core::MimeDatabase *mdb = Core::ICore::instance()->mimeDatabase();
-    mdb->setPreferredSuffix(QLatin1String(CppTools::Constants::CPP_SOURCE_MIMETYPE), sourceSuffix);
-    mdb->setPreferredSuffix(QLatin1String(CppTools::Constants::CPP_HEADER_MIMETYPE), headerSuffix);
+    return mdb->setPreferredSuffix(QLatin1String(CppTools::Constants::CPP_SOURCE_MIMETYPE), sourceSuffix)
+            && mdb->setPreferredSuffix(QLatin1String(CppTools::Constants::CPP_HEADER_MIMETYPE), headerSuffix);
 }
 
 bool CppFileSettings::equals(const CppFileSettings &rhs) const
@@ -129,11 +129,11 @@ void CppFileSettingsWidget::setSettings(const CppFileSettings &s)
 }
 
 // --------------- CppFileSettingsPage
-CppFileSettingsPage::CppFileSettingsPage(QObject *parent) :
-    Core::IOptionsPage(parent)
+CppFileSettingsPage::CppFileSettingsPage(QSharedPointer<CppFileSettings> &settings,
+                                         QObject *parent) :
+    Core::IOptionsPage(parent),
+    m_settings(settings)
 {
-    m_settings.fromSettings(Core::ICore::instance()->settings());
-    m_settings.applySuffixesToMimeDB();
 }
 
 CppFileSettingsPage::~CppFileSettingsPage()
@@ -164,7 +164,7 @@ QWidget *CppFileSettingsPage::createPage(QWidget *parent)
 {
 
     m_widget = new CppFileSettingsWidget(parent);
-    m_widget->setSettings(m_settings);
+    m_widget->setSettings(*m_settings);
     return m_widget;
 }
 
@@ -172,10 +172,10 @@ void CppFileSettingsPage::apply()
 {
     if (m_widget) {
         const CppFileSettings newSettings = m_widget->settings();
-        if (newSettings != m_settings) {
-            m_settings = newSettings;
-            m_settings.toSettings(Core::ICore::instance()->settings());
-            m_settings.applySuffixesToMimeDB();
+        if (newSettings != *m_settings) {
+            *m_settings = newSettings;
+            m_settings->toSettings(Core::ICore::instance()->settings());
+            m_settings->applySuffixesToMimeDB();
         }
     }
 }
diff --git a/src/plugins/cpptools/cppfilesettingspage.h b/src/plugins/cpptools/cppfilesettingspage.h
index 53abb7788a5fd52793b404e1e8fa677ef615c610..94e0a103e401ed4c82365451a1be1e9f7018206a 100644
--- a/src/plugins/cpptools/cppfilesettingspage.h
+++ b/src/plugins/cpptools/cppfilesettingspage.h
@@ -32,6 +32,7 @@
 
 #include <coreplugin/dialogs/ioptionspage.h>
 #include <QtCore/QPointer>
+#include <QtCore/QSharedPointer>
 #include <QtGui/QWidget>
 
 QT_BEGIN_NAMESPACE
@@ -53,7 +54,7 @@ struct CppFileSettings {
 
     void toSettings(QSettings *) const;
     void fromSettings(QSettings *);
-    void applySuffixesToMimeDB();
+    bool applySuffixesToMimeDB();
 
     bool equals(const CppFileSettings &rhs) const;
 };
@@ -76,8 +77,10 @@ private:
 
 class CppFileSettingsPage : public Core::IOptionsPage
 {
+    Q_DISABLE_COPY(CppFileSettingsPage)
 public:
-    explicit CppFileSettingsPage(QObject *parent = 0);
+    explicit CppFileSettingsPage(QSharedPointer<CppFileSettings> &settings,
+                                 QObject *parent = 0);
     virtual ~CppFileSettingsPage();
 
     virtual QString id() const;
@@ -90,8 +93,8 @@ public:
     virtual void finish() { }
 
 private:
+    const QSharedPointer<CppFileSettings> m_settings;
     QPointer<CppFileSettingsWidget> m_widget;
-    CppFileSettings m_settings;
 };
 
 } // namespace Internal
diff --git a/src/plugins/cpptools/cpptoolsplugin.cpp b/src/plugins/cpptools/cpptoolsplugin.cpp
index 301935530dafb040ad4ba70955687f9b5a2d72c9..cdfda4c24bd8d2d5fcb584ac542b2d4baf9172dc 100644
--- a/src/plugins/cpptools/cpptoolsplugin.cpp
+++ b/src/plugins/cpptools/cpptoolsplugin.cpp
@@ -61,8 +61,10 @@ enum { debug = 0 };
 
 CppToolsPlugin *CppToolsPlugin::m_instance = 0;
 
-CppToolsPlugin::CppToolsPlugin()
-    : m_context(-1), m_modelManager(0)
+CppToolsPlugin::CppToolsPlugin() :
+    m_context(-1),
+    m_modelManager(0),
+    m_fileSettings(new CppFileSettings)
 {
     m_instance = this;
 }
@@ -91,7 +93,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 CompletionSettingsPage(m_completion));
-    addAutoReleasedObject(new CppFileSettingsPage);
+    addAutoReleasedObject(new CppFileSettingsPage(m_fileSettings));
 
     // Menus
     Core::ActionContainer *mtools = am->actionContainer(Core::Constants::M_TOOLS);
@@ -127,6 +129,11 @@ bool CppToolsPlugin::initialize(const QStringList &arguments, QString *error)
 
 void CppToolsPlugin::extensionsInitialized()
 {
+    // The Cpp editor plugin, which is loaded later on, registers the Cpp mime types,
+    // so, apply settings here
+    m_fileSettings->fromSettings(Core::ICore::instance()->settings());
+    if (!m_fileSettings->applySuffixesToMimeDB())
+        qWarning("Unable to apply cpp suffixes to mime database (cpp mime types not found).\n");
 }
 
 void CppToolsPlugin::shutdown()
diff --git a/src/plugins/cpptools/cpptoolsplugin.h b/src/plugins/cpptools/cpptoolsplugin.h
index 40e8d1a62cd92a48080ba1530ab2b6544b97163d..dacc946fe10cd09a0bc9d2f81fed8a69696af1d9 100644
--- a/src/plugins/cpptools/cpptoolsplugin.h
+++ b/src/plugins/cpptools/cpptoolsplugin.h
@@ -32,6 +32,7 @@
 
 #include <extensionsystem/iplugin.h>
 #include <projectexplorer/projectexplorer.h>
+#include <QtCore/QSharedPointer>
 
 QT_BEGIN_NAMESPACE
 class QFileInfo;
@@ -43,11 +44,12 @@ namespace Internal {
 
 class CppCodeCompletion;
 class CppModelManager;
+struct CppFileSettings;
 
 class CppToolsPlugin : public ExtensionSystem::IPlugin
 {
+    Q_DISABLE_COPY(CppToolsPlugin)
     Q_OBJECT
-
 public:
     static CppToolsPlugin *instance() { return m_instance; }
 
@@ -70,6 +72,7 @@ private:
     int m_context;
     CppModelManager *m_modelManager;
     CppCodeCompletion *m_completion;
+    QSharedPointer<CppFileSettings> m_fileSettings;
 
     static CppToolsPlugin *m_instance;
 };