diff --git a/src/plugins/cpptools/cppfindreferences.cpp b/src/plugins/cpptools/cppfindreferences.cpp
index f9c27ccdd94ba196933ec9dedcaf0f7297da1b12..95e1b8273dfd78eb60681fde5a5a6539786a8256 100644
--- a/src/plugins/cpptools/cppfindreferences.cpp
+++ b/src/plugins/cpptools/cppfindreferences.cpp
@@ -534,17 +534,24 @@ static void find_helper(QFutureInterface<Utils::FileSearchResult> &future,
 
 void CppFindReferences::findUsages(Symbol *symbol)
 {
-    _resultWindow->clearContents();
+    Find::SearchResult *search = _resultWindow->startNewSearch(Find::SearchResultWindow::SearchOnly);
+
+    connect(search, SIGNAL(activated(Find::SearchResultItem)),
+            this, SLOT(openEditor(Find::SearchResultItem)));
+
     findAll_helper(symbol);
 }
 
 void CppFindReferences::renameUsages(Symbol *symbol)
 {
-    Find::SearchResult *search = _resultWindow->startNewSearch();
+    Find::SearchResult *search = _resultWindow->startNewSearch(Find::SearchResultWindow::SearchAndReplace);
+
     connect(search, SIGNAL(activated(Find::SearchResultItem)),
             this, SLOT(openEditor(Find::SearchResultItem)));
 
-    _resultWindow->setShowReplaceUI(true);
+    connect(search, SIGNAL(replaceButtonClicked(QString,QList<Find::SearchResultItem>)),
+            SLOT(onReplaceButtonClicked(QString,QList<Find::SearchResultItem>)));
+
     findAll_helper(symbol);
 }
 
@@ -567,6 +574,60 @@ void CppFindReferences::findAll_helper(Symbol *symbol)
     connect(progress, SIGNAL(clicked()), _resultWindow, SLOT(popup()));
 }
 
+void CppFindReferences::onReplaceButtonClicked(const QString &text,
+                                               const QList<Find::SearchResultItem> &items)
+{
+    if (text.isEmpty())
+        return;
+
+    QHash<QString, QList<Find::SearchResultItem> > changes;
+
+    foreach (const Find::SearchResultItem &item, items)
+        changes[item.fileName].append(item);
+
+    QHashIterator<QString, QList<Find::SearchResultItem> > it(changes);
+    while (it.hasNext()) {
+        it.next();
+
+        const QString fileName = it.key();
+        QFile file(fileName);
+
+        if (file.open(QFile::ReadOnly)) {
+            QTextStream stream(&file);
+            // ### set the encoding
+            const QString plainText = stream.readAll();
+            file.close();
+
+            QTextDocument doc;
+            doc.setPlainText(plainText);
+
+            QList<QTextCursor> cursors;
+            const QList<Find::SearchResultItem> items = it.value();
+            foreach (const Find::SearchResultItem &item, items) {
+                const int blockNumber = item.lineNumber - 1;
+                QTextCursor tc(doc.findBlockByNumber(blockNumber));
+                tc.setPosition(tc.position() + item.searchTermStart);
+                tc.setPosition(tc.position() + item.searchTermLength,
+                               QTextCursor::KeepAnchor);
+                cursors.append(tc);
+            }
+
+            foreach (QTextCursor tc, cursors)
+                tc.insertText(text);
+
+            QFile newFile(fileName);
+            if (newFile.open(QFile::WriteOnly)) {
+                QTextStream stream(&newFile);
+                // ### set the encoding
+                stream << doc.toPlainText();
+            }
+        }
+    }
+
+    const QStringList fileNames = changes.keys();
+    _modelManager->updateSourceFiles(fileNames);
+}
+
 void CppFindReferences::displayResult(int index)
 {
     Utils::FileSearchResult result = m_watcher.future().resultAt(index);
diff --git a/src/plugins/cpptools/cppfindreferences.h b/src/plugins/cpptools/cppfindreferences.h
index 429a945e2c8c476dd816eb780d1ad50ae77c7d05..4b4a5a9b04b86db4987c94edfb02c0f0f624219f 100644
--- a/src/plugins/cpptools/cppfindreferences.h
+++ b/src/plugins/cpptools/cppfindreferences.h
@@ -70,6 +70,7 @@ private Q_SLOTS:
     void displayResult(int);
     void searchFinished();
     void openEditor(const Find::SearchResultItem &item);
+    void onReplaceButtonClicked(const QString &text, const QList<Find::SearchResultItem> &items);
 
 private:
     void findAll_helper(CPlusPlus::Symbol *symbol);
diff --git a/src/plugins/find/searchresultwindow.cpp b/src/plugins/find/searchresultwindow.cpp
index f9b6caf3cf9225cb1a8f570447743e4926e92a35..2f846cd89c88f95328b25ff00fbb992114df8941 100644
--- a/src/plugins/find/searchresultwindow.cpp
+++ b/src/plugins/find/searchresultwindow.cpp
@@ -87,6 +87,7 @@ SearchResultWindow::SearchResultWindow()
     connect(m_searchResultTreeView, SIGNAL(jumpToSearchResult(int,bool)),
             this, SLOT(handleJumpToSearchResult(int,bool)));
     connect(m_expandCollapseToolButton, SIGNAL(toggled(bool)), this, SLOT(handleExpandCollapseToolButton(bool)));
+    connect(m_replaceTextEdit, SIGNAL(returnPressed()), this, SLOT(handleReplaceButton()));
     connect(m_replaceButton, SIGNAL(clicked()), this, SLOT(handleReplaceButton()));
 
     readSettings();