diff --git a/src/plugins/cpptools/cppfindreferences.cpp b/src/plugins/cpptools/cppfindreferences.cpp
index 6881c7d376eee0848eea486b4332556911b7827c..72677abf6e296ff1e9f18e93e26707fd7bbfa89d 100644
--- a/src/plugins/cpptools/cppfindreferences.cpp
+++ b/src/plugins/cpptools/cppfindreferences.cpp
@@ -350,6 +350,7 @@ void CppFindReferences::displayResult(int index)
 
 void CppFindReferences::searchFinished()
 {
+    _resultWindow->finishSearch();
     emit changed();
 }
 
diff --git a/src/plugins/find/searchresultwindow.cpp b/src/plugins/find/searchresultwindow.cpp
index c60e2d6c9ee1e283c20d8603cb24413a6cab5e5b..5bbf06af5125f9475c1b224074e8f975afbc7170 100644
--- a/src/plugins/find/searchresultwindow.cpp
+++ b/src/plugins/find/searchresultwindow.cpp
@@ -53,7 +53,8 @@ static const QString SETTINGSKEYEXPANDRESULTS("ExpandResults");
 
 SearchResultWindow::SearchResultWindow()
     : m_currentSearch(0),
-    m_isShowingReplaceUI(false)
+    m_isShowingReplaceUI(false),
+    m_focusReplaceEdit(false)
 {
     m_widget = new QStackedWidget;
     m_widget->setWindowTitle(name());
@@ -124,15 +125,13 @@ void SearchResultWindow::setShowReplaceUI(bool show)
     m_isShowingReplaceUI = show;
 }
 
-bool SearchResultWindow::isShowingReplaceUI() const
-{
-    return m_isShowingReplaceUI;
-}
-
 void SearchResultWindow::handleReplaceButton()
 {
     QTC_ASSERT(m_currentSearch, return);
-    m_currentSearch->replaceButtonClicked(m_replaceTextEdit->text(), checkedItems());
+    // check if button is actually enabled, because this is also triggered
+    // by pressing return in replace line edit
+    if (m_replaceButton->isEnabled())
+        m_currentSearch->replaceButtonClicked(m_replaceTextEdit->text(), checkedItems());
 }
 
 QList<SearchResultItem> SearchResultWindow::checkedItems() const
@@ -177,9 +176,19 @@ SearchResult *SearchResultWindow::startNewSearch(SearchMode searchOrSearchAndRep
     return m_currentSearch;
 }
 
+void SearchResultWindow::finishSearch()
+{
+    if (m_items.count()) {
+        m_replaceButton->setEnabled(true);
+    } else {
+        showNoMatchesFound();
+    }
+}
+
 void SearchResultWindow::clearContents()
 {
-    setReplaceUIEnabled(false);
+    m_replaceTextEdit->setEnabled(false);
+    m_replaceButton->setEnabled(false);
     m_replaceTextEdit->clear();
     m_searchResultTreeView->clear();
     m_items.clear();
@@ -189,7 +198,8 @@ void SearchResultWindow::clearContents()
 
 void SearchResultWindow::showNoMatchesFound()
 {
-    setReplaceUIEnabled(false);
+    m_replaceTextEdit->setEnabled(false);
+    m_replaceButton->setEnabled(false);
     m_widget->setCurrentWidget(m_noMatchesFoundDisplay);
 }
 
@@ -220,7 +230,8 @@ void SearchResultWindow::setFocus()
             m_searchResultTreeView->setFocus();
         } else {
             if (!m_widget->focusWidget()
-                    || m_widget->focusWidget() == m_replaceTextEdit) {
+                    || m_widget->focusWidget() == m_replaceTextEdit
+                    || m_focusReplaceEdit) {
                 m_replaceTextEdit->setFocus();
             } else {
                 m_searchResultTreeView->setFocus();
@@ -257,20 +268,16 @@ void SearchResultWindow::addResult(const QString &fileName, int lineNumber, cons
     m_items.append(item);
     m_searchResultTreeView->appendResultLine(index, fileName, lineNumber, rowText, searchTermStart, searchTermLength);
     if (index == 0) {
-        setReplaceUIEnabled(true);
-        // We didn't have an item before, set the focus to the m_searchResultTreeView
+        m_replaceTextEdit->setEnabled(true);
+        // We didn't have an item before, set the focus to the search widget
+        m_focusReplaceEdit = true;
         setFocus();
+        m_focusReplaceEdit = false;
         m_searchResultTreeView->selectionModel()->select(m_searchResultTreeView->model()->index(0, 0, QModelIndex()), QItemSelectionModel::Select);
         emit navigateStateChanged();
     }
 }
 
-void SearchResultWindow::setReplaceUIEnabled(bool enabled)
-{
-    m_replaceTextEdit->setEnabled(enabled);
-    m_replaceButton->setEnabled(enabled);
-}
-
 void SearchResultWindow::handleExpandCollapseToolButton(bool checked)
 {
     m_searchResultTreeView->setAutoExpandResults(checked);
diff --git a/src/plugins/find/searchresultwindow.h b/src/plugins/find/searchresultwindow.h
index c41ca3424f7b1b32a19302f4fd1f844ef135b25b..e8996f8c02963c0bd87a440ee98fb41a87f0e1f9 100644
--- a/src/plugins/find/searchresultwindow.h
+++ b/src/plugins/find/searchresultwindow.h
@@ -103,9 +103,6 @@ public:
 
     void setTextEditorFont(const QFont &font);
 
-    void setShowReplaceUI(bool show);
-    bool isShowingReplaceUI() const;
-
     void setTextToReplace(const QString &textToReplace);
     QString textToReplace() const;
 
@@ -114,17 +111,18 @@ public:
 
 public slots:
     void clearContents();
-    void showNoMatchesFound();
     void addResult(const QString &fileName, int lineNumber, const QString &lineText,
                    int searchTermStart, int searchTermLength, const QVariant &userData = QVariant());
+    void finishSearch();
 
 private slots:
     void handleExpandCollapseToolButton(bool checked);
     void handleJumpToSearchResult(int index, bool checked);
     void handleReplaceButton();
-    void setReplaceUIEnabled(bool enabled);
+    void showNoMatchesFound();
 
 private:
+    void setShowReplaceUI(bool show);
     void readSettings();
     void writeSettings();
     QList<SearchResultItem> checkedItems() const;
@@ -140,6 +138,7 @@ private:
     SearchResult *m_currentSearch;
     QList<SearchResultItem> m_items;
     bool m_isShowingReplaceUI;
+    bool m_focusReplaceEdit;
 };
 
 } // namespace Find
diff --git a/src/plugins/texteditor/basefilefind.cpp b/src/plugins/texteditor/basefilefind.cpp
index 5126d2e96ab064fdff2b8dbccd600a032d2848e8..97479b37c2bfbdbb41490192bb2713266679dbda 100644
--- a/src/plugins/texteditor/basefilefind.cpp
+++ b/src/plugins/texteditor/basefilefind.cpp
@@ -121,6 +121,7 @@ void BaseFileFind::displayResult(int index) {
 
 void BaseFileFind::searchFinished()
 {
+    m_resultWindow->finishSearch();
     m_isSearching = false;
     m_resultLabel = 0;
     emit changed();