diff --git a/src/plugins/cppeditor/cppplugin.cpp b/src/plugins/cppeditor/cppplugin.cpp
index c67b3f4f7ad84851efcd6bb0615506dc4fb21f55..6d0b7bbc4126aa191cdadf63c5b830d97b9feaa3 100644
--- a/src/plugins/cppeditor/cppplugin.cpp
+++ b/src/plugins/cppeditor/cppplugin.cpp
@@ -207,6 +207,8 @@ bool CppPlugin::initialize(const QStringList & /*arguments*/, QString *errorMess
     m_quickFixCollector = new CppQuickFixCollector;
     addAutoReleasedObject(m_quickFixCollector);
 
+    addAutoReleasedObject(new CppQuickFixFactory);
+
     CppFileWizard::BaseFileWizardParameters wizardParameters(Core::IWizard::FileWizard);
 
     wizardParameters.setCategory(QLatin1String(Constants::WIZARD_CATEGORY));
diff --git a/src/plugins/cppeditor/cppquickfix.cpp b/src/plugins/cppeditor/cppquickfix.cpp
index 72bc705ed50f373384bafcfedf038467bf6e17cf..b0dadc82601e0d493e8c54aabdf0e4b04fe1289f 100644
--- a/src/plugins/cppeditor/cppquickfix.cpp
+++ b/src/plugins/cppeditor/cppquickfix.cpp
@@ -50,6 +50,7 @@
 #include <cppeditor/cpprefactoringchanges.h>
 #include <cpptools/cpptoolsconstants.h>
 #include <cpptools/cppmodelmanagerinterface.h>
+#include <extensionsystem/pluginmanager.h>
 
 #include <QtGui/QApplication>
 #include <QtGui/QTextBlock>
@@ -1079,8 +1080,19 @@ TextEditor::QuickFixState *CppQuickFixCollector::initializeCompletion(TextEditor
     return 0;
 }
 
-QList<TextEditor::QuickFixOperation::Ptr> CppQuickFixCollector::quickFixOperations(TextEditor::BaseTextEditor *editor) const
+CppQuickFixFactory::CppQuickFixFactory(QObject *parent)
+    : TextEditor::IQuickFixFactory(parent)
 {
+}
+
+CppQuickFixFactory::~CppQuickFixFactory()
+{
+}
+
+QList<TextEditor::QuickFixOperation::Ptr> CppQuickFixFactory::quickFixOperations(TextEditor::BaseTextEditor *editor)
+{
+    QList<TextEditor::QuickFixOperation::Ptr> quickFixOperations;
+
     QSharedPointer<RewriteLogicalAndOp> rewriteLogicalAndOp(new RewriteLogicalAndOp(editor));
     QSharedPointer<SplitIfStatementOp> splitIfStatementOp(new SplitIfStatementOp(editor));
     QSharedPointer<MoveDeclarationOutOfIfOp> moveDeclarationOutOfIfOp(new MoveDeclarationOutOfIfOp(editor));
@@ -1092,7 +1104,6 @@ QList<TextEditor::QuickFixOperation::Ptr> CppQuickFixCollector::quickFixOperatio
     QSharedPointer<WrapStringLiteral> wrapStringLiteral(new WrapStringLiteral(editor));
     QSharedPointer<CStringToNSString> wrapCString(new CStringToNSString(editor));
 
-    QList<TextEditor::QuickFixOperation::Ptr> quickFixOperations;
     quickFixOperations.append(rewriteLogicalAndOp);
     quickFixOperations.append(splitIfStatementOp);
     quickFixOperations.append(moveDeclarationOutOfIfOp);
diff --git a/src/plugins/cppeditor/cppquickfix.h b/src/plugins/cppeditor/cppquickfix.h
index 664a6944eb40c3a17e078e24867ccdab7721ed60..d9107fe8ebbf8a1c9ec4f35e4bc158a078e6cc57 100644
--- a/src/plugins/cppeditor/cppquickfix.h
+++ b/src/plugins/cppeditor/cppquickfix.h
@@ -107,7 +107,20 @@ public:
 
     virtual bool supportsEditor(TextEditor::ITextEditable *editor);
     virtual TextEditor::QuickFixState *initializeCompletion(TextEditor::ITextEditable *editable);
-    virtual QList<TextEditor::QuickFixOperation::Ptr> quickFixOperations(TextEditor::BaseTextEditor *editor) const;
+};
+
+class CppQuickFixFactory: public TextEditor::IQuickFixFactory
+{
+    Q_OBJECT
+
+public:
+    CppQuickFixFactory(QObject *parent = 0);
+    virtual ~CppQuickFixFactory();
+
+    /*
+     * Returns true if this IQuickFixFactory can be used with the given editor.
+     */
+    virtual QList<TextEditor::QuickFixOperation::Ptr> quickFixOperations(TextEditor::BaseTextEditor *editor);
 };
 
 } // end of namespace Internal
diff --git a/src/plugins/texteditor/quickfix.cpp b/src/plugins/texteditor/quickfix.cpp
index 974a4fa2a97894f12cdef5931f9e327ad760f819..9918ad4f5b4d192b983437de001e89b90db76a6a 100644
--- a/src/plugins/texteditor/quickfix.cpp
+++ b/src/plugins/texteditor/quickfix.cpp
@@ -31,7 +31,7 @@
 #include "basetexteditor.h"
 
 #include <coreplugin/ifile.h>
-
+#include <extensionsystem/pluginmanager.h>
 #include <QtGui/QApplication>
 #include <QtGui/QTextBlock>
 
@@ -40,6 +40,7 @@
 using TextEditor::RefactoringChanges;
 using TextEditor::QuickFixOperation;
 using TextEditor::QuickFixCollector;
+using TextEditor::IQuickFixFactory;
 
 QuickFixOperation::QuickFixOperation(TextEditor::BaseTextEditor *editor)
     : _editor(editor)
@@ -184,3 +185,26 @@ void QuickFixCollector::cleanup()
 {
     _quickFixes.clear();
 }
+
+QList<TextEditor::QuickFixOperation::Ptr> QuickFixCollector::quickFixOperations(TextEditor::BaseTextEditor *editor) const
+{
+    QList<TextEditor::IQuickFixFactory *> factories =
+            ExtensionSystem::PluginManager::instance()->getObjects<TextEditor::IQuickFixFactory>();
+
+    QList<TextEditor::QuickFixOperation::Ptr> quickFixOperations;
+
+    foreach (TextEditor::IQuickFixFactory *factory, factories)
+        quickFixOperations += factory->quickFixOperations(editor);
+
+    return quickFixOperations;
+}
+
+IQuickFixFactory::IQuickFixFactory(QObject *parent)
+    : QObject(parent)
+{
+}
+
+IQuickFixFactory::~IQuickFixFactory()
+{
+
+}
diff --git a/src/plugins/texteditor/quickfix.h b/src/plugins/texteditor/quickfix.h
index aec71790231558fa90c988a63da529ca99c59dab..fd731c6c5a1533bf93b0832eeb4acc85ca7268d8 100644
--- a/src/plugins/texteditor/quickfix.h
+++ b/src/plugins/texteditor/quickfix.h
@@ -115,13 +115,24 @@ public:
     virtual void cleanup();
 
     virtual TextEditor::QuickFixState *initializeCompletion(TextEditor::ITextEditable *editable) = 0;
-    virtual QList<TextEditor::QuickFixOperation::Ptr> quickFixOperations(TextEditor::BaseTextEditor *editor) const = 0;
+    virtual QList<TextEditor::QuickFixOperation::Ptr> quickFixOperations(TextEditor::BaseTextEditor *editor) const;
 
 private:
     TextEditor::ITextEditable *_editable;
     QList<TextEditor::QuickFixOperation::Ptr> _quickFixes;
 };
 
+class TEXTEDITOR_EXPORT IQuickFixFactory: public QObject
+{
+    Q_OBJECT
+
+public:
+    IQuickFixFactory(QObject *parent = 0);
+    virtual ~IQuickFixFactory();
+
+    virtual QList<QuickFixOperation::Ptr> quickFixOperations(TextEditor::BaseTextEditor *editor) = 0;
+};
+
 } // end of namespace TextEditor
 
 #endif // TEXTEDITORQUICKFIX_H