diff --git a/src/plugins/cpptools/cppfindreferences.cpp b/src/plugins/cpptools/cppfindreferences.cpp
index d1332f0e0dde63e3398409a7dc84649d45eba4ae..a5d59f30c6c7e1bd09fe65ccb07888773c3572de 100644
--- a/src/plugins/cpptools/cppfindreferences.cpp
+++ b/src/plugins/cpptools/cppfindreferences.cpp
@@ -275,7 +275,7 @@ void CppFindReferences::findAll_helper(Find::SearchResult *search)
 {
     CppFindReferencesParameters parameters = search->userData().value<CppFindReferencesParameters>();
     if (!(parameters.symbol && parameters.symbol->identifier())) {
-        search->finishSearch();
+        search->finishSearch(false);
         return;
     }
     connect(search, SIGNAL(cancelled()), this, SLOT(cancel()));
@@ -313,7 +313,7 @@ void CppFindReferences::searchAgain()
     Snapshot snapshot = CppModelManagerInterface::instance()->snapshot();
     search->restart();
     if (!findSymbol(&parameters, snapshot)) {
-        search->finishSearch();
+        search->finishSearch(false);
         return;
     }
     search->setUserData(qVariantFromValue(parameters));
@@ -498,7 +498,7 @@ void CppFindReferences::searchFinished()
     QFutureWatcher<Usage> *watcher = static_cast<QFutureWatcher<Usage> *>(sender());
     Find::SearchResult *search = m_watchers.value(watcher);
     if (search)
-        search->finishSearch();
+        search->finishSearch(watcher->isCanceled());
     m_watchers.remove(watcher);
 }
 
diff --git a/src/plugins/cpptools/symbolsfindfilter.cpp b/src/plugins/cpptools/symbolsfindfilter.cpp
index 578cbaed959bbc6a2224da836644aa7dc7cb6017..4356af9a221d2a9006b5fa0a5c0ec0febb75db53 100644
--- a/src/plugins/cpptools/symbolsfindfilter.cpp
+++ b/src/plugins/cpptools/symbolsfindfilter.cpp
@@ -217,7 +217,7 @@ void SymbolsFindFilter::finish()
             static_cast<QFutureWatcher<Find::SearchResultItem> *>(sender());
     Find::SearchResult *search = m_watchers.value(watcher);
     if (search)
-        search->finishSearch();
+        search->finishSearch(watcher->isCanceled());
     m_watchers.remove(watcher);
     watcher->deleteLater();
 }
diff --git a/src/plugins/find/searchresultwidget.cpp b/src/plugins/find/searchresultwidget.cpp
index 4d34941f51d7bf748b63548aea509f4f4edd291d..e3c08be56d260eecec86d6b925e149487450c7cf 100644
--- a/src/plugins/find/searchresultwidget.cpp
+++ b/src/plugins/find/searchresultwidget.cpp
@@ -96,6 +96,23 @@ SearchResultWidget::SearchResultWidget(QWidget *parent) :
     QHBoxLayout *topLayout = new QHBoxLayout(topWidget);
     topLayout->setMargin(2);
     topWidget->setLayout(topLayout);
+    layout->addWidget(topWidget);
+
+    m_messageWidget = new QFrame;
+    pal.setColor(QPalette::Window, QColor(255, 255, 225));
+    pal.setColor(QPalette::WindowText, Qt::red);
+    m_messageWidget->setPalette(pal);
+    m_messageWidget->setFrameStyle(QFrame::Panel | QFrame::Raised);
+    m_messageWidget->setLineWidth(1);
+    m_messageWidget->setAutoFillBackground(true);
+    QHBoxLayout *messageLayout = new QHBoxLayout(m_messageWidget);
+    messageLayout->setMargin(2);
+    m_messageWidget->setLayout(messageLayout);
+    QLabel *messageLabel = new QLabel(tr("Search was canceled."));
+    messageLabel->setPalette(pal);
+    messageLayout->addWidget(messageLabel);
+    layout->addWidget(m_messageWidget);
+    m_messageWidget->setVisible(false);
 
     m_searchResultTreeView = new Internal::SearchResultTreeView(this);
     m_searchResultTreeView->setFrameStyle(QFrame::NoFrame);
@@ -104,11 +121,9 @@ SearchResultWidget::SearchResultWidget(QWidget *parent) :
     agg->add(m_searchResultTreeView);
     agg->add(new TreeViewFind(m_searchResultTreeView,
                               ItemDataRoles::ResultLineRole));
-
-    layout->addWidget(topWidget);
     layout->addWidget(m_searchResultTreeView);
 
-    m_infoBarDisplay.setTarget(layout, 1);
+    m_infoBarDisplay.setTarget(layout, 2);
     m_infoBarDisplay.setInfoBar(&m_infoBar);
 
     m_descriptionContainer = new QWidget(topWidget);
@@ -332,6 +347,7 @@ void SearchResultWidget::restart()
     m_count = 0;
     m_cancelButton->setVisible(true);
     m_searchAgainButton->setVisible(false);
+    m_messageWidget->setVisible(false);
     updateMatchesFoundLabel();
     emit restarted();
 }
@@ -347,11 +363,12 @@ void SearchResultWidget::setSearchAgainEnabled(bool enabled)
     m_searchAgainButton->setEnabled(enabled);
 }
 
-void SearchResultWidget::finishSearch()
+void SearchResultWidget::finishSearch(bool canceled)
 {
     m_replaceTextEdit->setEnabled(m_count > 0);
     m_replaceButton->setEnabled(m_count > 0);
     m_cancelButton->setVisible(false);
+    m_messageWidget->setVisible(canceled);
     m_searchAgainButton->setVisible(m_searchAgainSupported);
 }
 
diff --git a/src/plugins/find/searchresultwidget.h b/src/plugins/find/searchresultwidget.h
index be03c3dc6a224a746d5093806bcd9270168cdb0d..55a4efef65bcaed6ba681b370234b7dbb46a6943 100644
--- a/src/plugins/find/searchresultwidget.h
+++ b/src/plugins/find/searchresultwidget.h
@@ -37,6 +37,7 @@
 
 #include <coreplugin/infobar.h>
 
+#include <QFrame>
 #include <QLabel>
 #include <QLineEdit>
 #include <QToolButton>
@@ -89,7 +90,7 @@ public:
     void setSearchAgainEnabled(bool enabled);
 
 public slots:
-    void finishSearch();
+    void finishSearch(bool canceled);
 
 signals:
     void activated(const Find::SearchResultItem &item);
@@ -117,6 +118,7 @@ private:
     SearchResultTreeView *m_searchResultTreeView;
     int m_count;
     QString m_dontAskAgainGroup;
+    QFrame *m_messageWidget;
     Core::InfoBar m_infoBar;
     Core::InfoBarDisplay m_infoBarDisplay;
     bool m_isShowingReplaceUI;
diff --git a/src/plugins/find/searchresultwindow.cpp b/src/plugins/find/searchresultwindow.cpp
index 30daee7dbc81c27a1552c34737e520c5ba294e78..265b405f7dcd19ce917a7023142ec337fd57fbc8 100644
--- a/src/plugins/find/searchresultwindow.cpp
+++ b/src/plugins/find/searchresultwindow.cpp
@@ -669,9 +669,9 @@ void SearchResult::addResults(const QList<SearchResultItem> &items, AddMode mode
     \brief Notifies the search result window that the current search
     has finished, and the UI should reflect that.
 */
-void SearchResult::finishSearch()
+void SearchResult::finishSearch(bool canceled)
 {
-    m_widget->finishSearch();
+    m_widget->finishSearch(canceled);
 }
 
 /*!
diff --git a/src/plugins/find/searchresultwindow.h b/src/plugins/find/searchresultwindow.h
index 4a9d884143af50b45fc3ecbd438da09d50636d85..15db74c590ebb9ecc8378567618116ed0fcd9091 100644
--- a/src/plugins/find/searchresultwindow.h
+++ b/src/plugins/find/searchresultwindow.h
@@ -105,7 +105,7 @@ public slots:
     void addResult(const QString &fileName, int lineNumber, const QString &lineText,
                    int searchTermStart, int searchTermLength, const QVariant &userData = QVariant());
     void addResults(const QList<SearchResultItem> &items, AddMode mode);
-    void finishSearch();
+    void finishSearch(bool canceled);
     void setTextToReplace(const QString &textToReplace);
     void restart();
     void setSearchAgainEnabled(bool enabled);
diff --git a/src/plugins/qmljseditor/qmljsfindreferences.cpp b/src/plugins/qmljseditor/qmljsfindreferences.cpp
index 55b62fa96d9005748d20ae3c479880b70beaaa47..5931634ba14bbff02fb21644a623fcbeee4dbd8a 100644
--- a/src/plugins/qmljseditor/qmljsfindreferences.cpp
+++ b/src/plugins/qmljseditor/qmljsfindreferences.cpp
@@ -958,7 +958,7 @@ void FindReferences::displayResults(int first, int last)
 void FindReferences::searchFinished()
 {
     if (m_currentSearch)
-        m_currentSearch->finishSearch();
+        m_currentSearch->finishSearch(m_watcher.isCanceled());
     m_currentSearch = 0;
     emit changed();
 }
diff --git a/src/plugins/texteditor/basefilefind.cpp b/src/plugins/texteditor/basefilefind.cpp
index accd0327de677fb845c6ce2a20629fcfac3757f4..9676009dcf2724e75639095e22a42e81127b0eee 100644
--- a/src/plugins/texteditor/basefilefind.cpp
+++ b/src/plugins/texteditor/basefilefind.cpp
@@ -216,7 +216,7 @@ void BaseFileFind::searchFinished()
             static_cast<QFutureWatcher<FileSearchResultList> *>(sender());
     SearchResult *search = m_watchers.value(watcher);
     if (search)
-        search->finishSearch();
+        search->finishSearch(watcher->isCanceled());
     m_watchers.remove(watcher);
     watcher->deleteLater();
 }