diff --git a/src/plugins/cppeditor/cppeditor.cpp b/src/plugins/cppeditor/cppeditor.cpp
index 3db56ab32cec83c28d7120453a8467cf545baea3..ac826bda32bcf0a33190a4c65dae08189a80dd42 100644
--- a/src/plugins/cppeditor/cppeditor.cpp
+++ b/src/plugins/cppeditor/cppeditor.cpp
@@ -31,6 +31,7 @@
 #include "cppeditorconstants.h"
 #include "cppplugin.h"
 #include "cpphighlighter.h"
+#include "cppquickfix.h"
 #include <cpptools/cpptoolsplugin.h>
 
 #include <AST.h>
@@ -81,6 +82,7 @@
 #include <QtCore/QTimer>
 #include <QtCore/QStack>
 #include <QtCore/QSettings>
+#include <QtCore/QSignalMapper>
 #include <QtGui/QAction>
 #include <QtGui/QApplication>
 #include <QtGui/QHeaderView>
@@ -1675,6 +1677,13 @@ bool CPPEditor::event(QEvent *e)
     return BaseTextEditor::event(e);
 }
 
+void CPPEditor::performQuickFix(int index)
+{
+    CPPQuickFixCollector *quickFixCollector = CppPlugin::instance()->quickFixCollector();
+    QuickFixOperationPtr op = m_quickFixes.at(index);
+    quickFixCollector->perform(op);
+}
+
 void CPPEditor::contextMenuEvent(QContextMenuEvent *e)
 {
     // ### enable
@@ -1686,12 +1695,35 @@ void CPPEditor::contextMenuEvent(QContextMenuEvent *e)
     Core::ActionContainer *mcontext = am->actionContainer(CppEditor::Constants::M_CONTEXT);
     QMenu *contextMenu = mcontext->menu();
 
+    CPPQuickFixCollector *quickFixCollector = CppPlugin::instance()->quickFixCollector();
+
+    QSignalMapper mapper;
+    connect(&mapper, SIGNAL(mapped(int)), this, SLOT(performQuickFix(int)));
+
+    if (! isOutdated()) {
+        if (quickFixCollector->startCompletion(editableInterface()) != -1) {
+            m_quickFixes = quickFixCollector->quickFixes();
+
+            for (int index = 0; index < m_quickFixes.size(); ++index) {
+                QuickFixOperationPtr op = m_quickFixes.at(index);
+                QAction *action = menu->addAction(op->description());
+                mapper.setMapping(action, index);
+                connect(action, SIGNAL(triggered()), &mapper, SLOT(map()));
+            }
+
+            if (! m_quickFixes.isEmpty())
+                menu->addSeparator();
+        }
+    }
+
     foreach (QAction *action, contextMenu->actions())
         menu->addAction(action);
 
     appendStandardContextMenuActions(menu);
 
     menu->exec(e->globalPos());
+    quickFixCollector->cleanup();
+    m_quickFixes.clear();
     delete menu;
 }
 
diff --git a/src/plugins/cppeditor/cppeditor.h b/src/plugins/cppeditor/cppeditor.h
index bc00864224c91761812f5ef5aff871fb20d2e1fe..16bf04f94ecf8b0e991017697ea14f4677f0ea23 100644
--- a/src/plugins/cppeditor/cppeditor.h
+++ b/src/plugins/cppeditor/cppeditor.h
@@ -31,6 +31,7 @@
 #define CPPEDITOR_H
 
 #include "cppeditorenums.h"
+#include "cppquickfix.h"
 #include <cplusplus/CppDocument.h>
 #include <texteditor/basetexteditor.h>
 
@@ -235,6 +236,8 @@ private Q_SLOTS:
     void semanticRehighlight();
     void updateSemanticInfo(const SemanticInfo &semanticInfo);
 
+    void performQuickFix(int index);
+
 private:
     bool showWarningMessage() const;
     void setShowWarningMessage(bool showWarningMessage);
@@ -292,6 +295,7 @@ private:
 
     SemanticHighlighter *m_semanticHighlighter;
     SemanticInfo m_lastSemanticInfo;
+    QList<QuickFixOperationPtr> m_quickFixes;
     bool m_initialized;
 };
 
diff --git a/src/plugins/cppeditor/cppeditorconstants.h b/src/plugins/cppeditor/cppeditorconstants.h
index 85d02021251984a1eacf6120e4e53b1ba8b06e71..d115bcf162bdc98e8d1d731016b4c8bb6f967d43 100644
--- a/src/plugins/cppeditor/cppeditorconstants.h
+++ b/src/plugins/cppeditor/cppeditorconstants.h
@@ -40,6 +40,7 @@ const char * const CPPEDITOR_KIND = QT_TRANSLATE_NOOP("OpenWith::Editors", "C++
 const char * const SWITCH_DECLARATION_DEFINITION = "CppEditor.SwitchDeclarationDefinition";
 const char * const RENAME_SYMBOL_UNDER_CURSOR = "CppEditor.RenameSymbolUnderCursor";
 const char * const FIND_USAGES = "CppEditor.FindUsages";
+const char * const REFACTOR_MENU = "CppEditor.RefactorMenu";
 const char * const SEPARATOR = "CppEditor.Separator";
 const char * const SEPARATOR2 = "CppEditor.Separator2";
 const char * const FIND_REFERENCES = "CppEditor.FindReferences";
diff --git a/src/plugins/cppeditor/cppplugin.cpp b/src/plugins/cppeditor/cppplugin.cpp
index b93408df19013ba46d46739dc83822471604b08c..6b3a05b187a840d4b52e9a3cd1f1ef6b56231a90 100644
--- a/src/plugins/cppeditor/cppplugin.cpp
+++ b/src/plugins/cppeditor/cppplugin.cpp
@@ -137,6 +137,7 @@ CppPlugin::CppPlugin() :
 {
     m_instance = this;
 
+    m_quickFixCollector = 0;
     m_quickFixTimer = new QTimer(this);
     m_quickFixTimer->setInterval(20);
     m_quickFixTimer->setSingleShot(true);
@@ -184,6 +185,9 @@ bool CppPlugin::sortedMethodOverview() const
     return m_sortedMethodOverview;
 }
 
+CPPQuickFixCollector *CppPlugin::quickFixCollector() const
+{ return m_quickFixCollector; }
+
 bool CppPlugin::initialize(const QStringList & /*arguments*/, QString *errorMessage)
 {
     Core::ICore *core = Core::ICore::instance();
@@ -193,7 +197,9 @@ bool CppPlugin::initialize(const QStringList & /*arguments*/, QString *errorMess
 
     addAutoReleasedObject(new CppEditorFactory(this));
     addAutoReleasedObject(new CppHoverHandler);
-    addAutoReleasedObject(new CPPQuickFixCollector);
+
+    m_quickFixCollector = new CPPQuickFixCollector;
+    addAutoReleasedObject(m_quickFixCollector);
 
     CppFileWizard::BaseFileWizardParameters wizardParameters(Core::IWizard::FileWizard);
 
diff --git a/src/plugins/cppeditor/cppplugin.h b/src/plugins/cppeditor/cppplugin.h
index 7e8ea29b678be49db6e351775dbb81191a9d9fbd..305aaa804666a03a2d2d9210203878647b823ec5 100644
--- a/src/plugins/cppeditor/cppplugin.h
+++ b/src/plugins/cppeditor/cppplugin.h
@@ -46,6 +46,7 @@ namespace CppEditor {
 namespace Internal {
 
 class CPPEditor;
+class CPPQuickFixCollector;
 
 class CppPlugin : public ExtensionSystem::IPlugin
 {
@@ -66,6 +67,8 @@ public:
 
     bool sortedMethodOverview() const;
 
+    CPPQuickFixCollector *quickFixCollector() const;
+
 signals:
     void methodOverviewSortingChanged(bool sort);
 
@@ -95,6 +98,8 @@ private:
     QAction *m_findUsagesAction;
     QAction *m_updateCodeModelAction;
 
+    CPPQuickFixCollector *m_quickFixCollector;
+
     QTimer *m_quickFixTimer;
     QPointer<TextEditor::ITextEditable> m_currentTextEditable;
 };
diff --git a/src/plugins/cppeditor/cppquickfix.cpp b/src/plugins/cppeditor/cppquickfix.cpp
index f5b43c0a9babe7d29fdfd4c9d92d3264627113a2..410f8dbb15f616a7087f837c3b4500dc0681317c 100644
--- a/src/plugins/cppeditor/cppquickfix.cpp
+++ b/src/plugins/cppeditor/cppquickfix.cpp
@@ -858,11 +858,16 @@ void CPPQuickFixCollector::complete(const TextEditor::CompletionItem &item)
 
     if (index < _quickFixes.size()) {
         QuickFixOperationPtr quickFix = _quickFixes.at(index);
-        quickFix->setTextCursor(_editor->textCursor());
-        quickFix->apply();
+        perform(quickFix);
     }
 }
 
+void CPPQuickFixCollector::perform(QuickFixOperationPtr op)
+{
+    op->setTextCursor(_editor->textCursor());
+    op->apply();
+}
+
 void CPPQuickFixCollector::cleanup()
 {
     _quickFixes.clear();
diff --git a/src/plugins/cppeditor/cppquickfix.h b/src/plugins/cppeditor/cppquickfix.h
index a9f1b8c90001d433cfcd6035c914df68ce9a89c9..41377fae511ccea138e25aa89332b62fb4424223 100644
--- a/src/plugins/cppeditor/cppquickfix.h
+++ b/src/plugins/cppeditor/cppquickfix.h
@@ -126,6 +126,8 @@ public:
     CPPQuickFixCollector();
     virtual ~CPPQuickFixCollector();
 
+    QList<QuickFixOperationPtr> quickFixes() const { return _quickFixes; }
+
     virtual bool supportsEditor(TextEditor::ITextEditable *editor);
     virtual bool triggersCompletion(TextEditor::ITextEditable *editor);
     virtual int startCompletion(TextEditor::ITextEditable *editor);
@@ -133,6 +135,9 @@ public:
     virtual void complete(const TextEditor::CompletionItem &item);
     virtual void cleanup();
 
+public Q_SLOTS:
+    void perform(QuickFixOperationPtr op);
+
 private:
     CppTools::CppModelManagerInterface *_modelManager;
     CPPEditor *_editor;