diff --git a/src/plugins/cppeditor/cppeditor.cpp b/src/plugins/cppeditor/cppeditor.cpp
index e7216e13ee3a05974f2b7184fa2134e40a69dc47..9acbd0ff90e439a54c179e857b184403b0b9fdfd 100644
--- a/src/plugins/cppeditor/cppeditor.cpp
+++ b/src/plugins/cppeditor/cppeditor.cpp
@@ -543,9 +543,6 @@ CPPEditor::CPPEditor(QWidget *parent)
     setCodeFoldingVisible(true);
     baseTextDocument()->setSyntaxHighlighter(new CppHighlighter);
 
-    new QShortcut(QKeySequence(tr("CTRL+SHIFT+r")), this, SLOT(renameInPlace()),
-                  /*ambiguousMember=*/ 0, Qt::WidgetShortcut);
-
 #ifdef WITH_TOKEN_MOVE_POSITION
     new QShortcut(QKeySequence::MoveToPreviousWord, this, SLOT(moveToPreviousToken()),
                   /*ambiguousMember=*/ 0, Qt::WidgetShortcut);
@@ -829,7 +826,7 @@ void CPPEditor::reformatDocument()
     c.insertText(QString::fromUtf8(str.c_str(), str.length()));
 }
 
-void CPPEditor::renameInPlace()
+void CPPEditor::renameSymbolUnderCursor()
 {
     updateSemanticInfo(m_semanticHighlighter->semanticInfo(currentSource()));
 
@@ -1331,8 +1328,8 @@ void CPPEditor::contextMenuEvent(QContextMenuEvent *e)
     if (lastAction->menu() && QLatin1String(lastAction->menu()->metaObject()->className()) == QLatin1String("QUnicodeControlCharacterMenu"))
         menu->removeAction(lastAction);
 
-    Core::ActionContainer *mcontext =
-        Core::ICore::instance()->actionManager()->actionContainer(CppEditor::Constants::M_CONTEXT);
+    Core::ActionManager *am = Core::ICore::instance()->actionManager();
+    Core::ActionContainer *mcontext = am->actionContainer(CppEditor::Constants::M_CONTEXT);
     QMenu *contextMenu = mcontext->menu();
 
     foreach (QAction *action, contextMenu->actions())
@@ -1341,13 +1338,6 @@ void CPPEditor::contextMenuEvent(QContextMenuEvent *e)
     const QList<QTextEdit::ExtraSelection> selections =
             extraSelections(BaseTextEditor::CodeSemanticsSelection);
 
-    if (! selections.isEmpty()) {
-        const QString name = selections.first().cursor.selectedText();
-        QAction *renameAction = new QAction(tr("Rename '%1'").arg(name), menu);
-        connect(renameAction, SIGNAL(triggered()), this, SLOT(renameInPlace()));
-        menu->addAction(renameAction);
-    }
-
     menu->exec(e->globalPos());
     delete menu;
 }
diff --git a/src/plugins/cppeditor/cppeditor.h b/src/plugins/cppeditor/cppeditor.h
index b13ac2a6366740a06ae5045dbb6902f887c9beac..eefb2b521c389c5f66ec37744c8730fbb55ffe7d 100644
--- a/src/plugins/cppeditor/cppeditor.h
+++ b/src/plugins/cppeditor/cppeditor.h
@@ -197,6 +197,7 @@ public Q_SLOTS:
     void setSortedMethodOverview(bool sort);
     void switchDeclarationDefinition();
     void jumpToDefinition();
+    void renameSymbolUnderCursor();
 
     void moveToPreviousToken();
     void moveToNextToken();
@@ -228,7 +229,6 @@ private Q_SLOTS:
     void updateUsesNow();
     void onDocumentUpdated(CPlusPlus::Document::Ptr doc);
     void reformatDocument();
-    void renameInPlace();
     void onContentsChanged(int position, int charsRemoved, int charsAdded);
 
     void semanticRehighlight();
diff --git a/src/plugins/cppeditor/cppeditorconstants.h b/src/plugins/cppeditor/cppeditorconstants.h
index 3f30d8537b7120b8720a6a3867ccd9bc0340f6a1..ab802531cf079ef290d81e2b027252642673b427 100644
--- a/src/plugins/cppeditor/cppeditorconstants.h
+++ b/src/plugins/cppeditor/cppeditorconstants.h
@@ -38,6 +38,7 @@ const char * const M_CONTEXT    = "CppEditor.ContextMenu";
 const char * const C_CPPEDITOR  = "C++ Editor";
 const char * const CPPEDITOR_KIND = QT_TRANSLATE_NOOP("OpenWith::Editors", "C++ Editor");
 const char * const SWITCH_DECLARATION_DEFINITION = "CppEditor.SwitchDeclarationDefinition";
+const char * const RENAME_SYMBOL_UNDER_CURSOR = "CppEditor.RenameSymbolUnderCursor";
 const char * const JUMP_TO_DEFINITION = "CppEditor.JumpToDefinition";
 
 const char * const HEADER_FILE_TYPE = "CppHeaderFiles";
diff --git a/src/plugins/cppeditor/cppplugin.cpp b/src/plugins/cppeditor/cppplugin.cpp
index b5cc600ffa1fa374ef50bf44947ab2b44b0bef6b..e57e38a06f5061885db2ca7dd985a7fbd1da112f 100644
--- a/src/plugins/cppeditor/cppplugin.cpp
+++ b/src/plugins/cppeditor/cppplugin.cpp
@@ -212,6 +212,14 @@ bool CppPlugin::initialize(const QStringList & /*arguments*/, QString *errorMess
     am->actionContainer(CppEditor::Constants::M_CONTEXT)->addAction(cmd);
     am->actionContainer(CppTools::Constants::M_TOOLS_CPP)->addAction(cmd);
 
+    QAction *renameSymbolUnderCursorAction = new QAction(tr("Rename Symbol under Cursor"), this);
+    cmd = am->registerAction(renameSymbolUnderCursorAction,
+        Constants::RENAME_SYMBOL_UNDER_CURSOR, context);
+    cmd->setDefaultKeySequence(QKeySequence("CTRL+SHIFT+R"));
+    connect(renameSymbolUnderCursorAction, SIGNAL(triggered()), this, SLOT(renameSymbolUnderCursor()));
+    am->actionContainer(CppEditor::Constants::M_CONTEXT)->addAction(cmd);
+    am->actionContainer(CppTools::Constants::M_TOOLS_CPP)->addAction(cmd);
+
     m_actionHandler = new TextEditor::TextEditorActionHandler(CppEditor::Constants::C_CPPEDITOR,
         TextEditor::TextEditorActionHandler::Format
         | TextEditor::TextEditorActionHandler::UnCommentSelection
@@ -265,4 +273,12 @@ void CppPlugin::jumpToDefinition()
         editor->jumpToDefinition();
 }
 
+void CppPlugin::renameSymbolUnderCursor()
+{
+    Core::EditorManager *em = Core::EditorManager::instance();
+    CPPEditor *editor = qobject_cast<CPPEditor*>(em->currentEditor()->widget());
+    if (editor)
+        editor->renameSymbolUnderCursor();
+}
+
 Q_EXPORT_PLUGIN(CppPlugin)
diff --git a/src/plugins/cppeditor/cppplugin.h b/src/plugins/cppeditor/cppplugin.h
index 9e5cc9eeade83d0ce2a1309360fcc19bac73e53d..5e058fa3fc4ed7817fbbe1ed014f8cb2bc8b49b8 100644
--- a/src/plugins/cppeditor/cppplugin.h
+++ b/src/plugins/cppeditor/cppplugin.h
@@ -73,6 +73,7 @@ public slots:
 private slots:
     void switchDeclarationDefinition();
     void jumpToDefinition();
+    void renameSymbolUnderCursor();
 
 private:
     Core::IEditor *createEditor(QWidget *parent);