diff --git a/src/plugins/help/helpwidget.cpp b/src/plugins/help/helpwidget.cpp
index dfe6790233cb5b4bed1b9597a1c5446d591fef83..a0b87e39c21ba7c85751596ac829d3fa8b94551f 100644
--- a/src/plugins/help/helpwidget.cpp
+++ b/src/plugins/help/helpwidget.cpp
@@ -432,7 +432,7 @@ int HelpWidget::currentIndex() const
     return m_viewerStack->currentIndex();
 }
 
-void HelpWidget::addViewer(HelpViewer *viewer, bool highlightSearchTerms)
+void HelpWidget::addViewer(HelpViewer *viewer)
 {
     m_viewerStack->addWidget(viewer);
     viewer->setFocus(Qt::OtherFocusReason);
@@ -456,8 +456,7 @@ void HelpWidget::addViewer(HelpViewer *viewer, bool highlightSearchTerms)
     if (m_style == ExternalWindow)
         connect(viewer, SIGNAL(titleChanged()), this, SLOT(updateWindowTitle()));
 
-    if (highlightSearchTerms)
-        connect(viewer, &HelpViewer::loadFinished, this, &HelpWidget::highlightSearchTerms);
+    connect(viewer, &HelpViewer::loadFinished, this, &HelpWidget::highlightSearchTerms);
 
     updateCloseButton();
 }
@@ -523,14 +522,14 @@ void HelpWidget::setSource(const QUrl &url)
     viewer->setFocus(Qt::OtherFocusReason);
 }
 
-void HelpWidget::openFromSearch(const QUrl &url, bool newPage)
+void HelpWidget::openFromSearch(const QUrl &url, const QStringList &searchTerms, bool newPage)
 {
+    m_searchTerms = searchTerms;
     if (newPage)
-        OpenPagesManager::instance().createPageFromSearch(url);
+        OpenPagesManager::instance().createPage(url);
     else {
         HelpViewer* viewer = currentViewer();
         QTC_ASSERT(viewer, return);
-        connect(viewer, &HelpViewer::loadFinished, this, &HelpWidget::highlightSearchTerms);
         viewer->setSource(url);
         viewer->setFocus(Qt::OtherFocusReason);
     }
@@ -655,29 +654,13 @@ void HelpWidget::print(HelpViewer *viewer)
 
 void HelpWidget::highlightSearchTerms()
 {
-    if (HelpViewer *viewer = qobject_cast<HelpViewer *>(sender())) {
-        QHelpSearchEngine *searchEngine =
-            LocalHelpManager::helpEngine().searchEngine();
-        QList<QHelpSearchQuery> queryList = searchEngine->query();
-
-        QStringList terms;
-        foreach (const QHelpSearchQuery &query, queryList) {
-            switch (query.fieldName) {
-                default: break;
-                case QHelpSearchQuery::ALL: {
-                case QHelpSearchQuery::PHRASE:
-                case QHelpSearchQuery::DEFAULT:
-                case QHelpSearchQuery::ATLEAST:
-                    foreach (QString term, query.wordList)
-                        terms.append(term.remove(QLatin1Char('"')));
-                }
-            }
-        }
-
-        foreach (const QString& term, terms)
-            viewer->findText(term, 0, false, true);
-        disconnect(viewer, &HelpViewer::loadFinished, this, &HelpWidget::highlightSearchTerms);
-    }
+    if (m_searchTerms.isEmpty())
+        return;
+    HelpViewer *viewer = qobject_cast<HelpViewer *>(sender());
+    QTC_ASSERT(viewer, return);
+    foreach (const QString& term, m_searchTerms)
+        viewer->findText(term, 0, false, true);
+    m_searchTerms.clear();
 }
 
 } // Internal
diff --git a/src/plugins/help/helpwidget.h b/src/plugins/help/helpwidget.h
index daafb849ab6bcbcfc2cef79afca85cb8d5507a7f..addb95dc80f6b01855f47791eced2886d2f055c7 100644
--- a/src/plugins/help/helpwidget.h
+++ b/src/plugins/help/helpwidget.h
@@ -71,7 +71,7 @@ public:
     HelpViewer *currentViewer() const;
     void setCurrentViewer(HelpViewer *viewer);
     int currentIndex() const;
-    void addViewer(HelpViewer *viewer, bool highlightSearchTerms = false);
+    void addViewer(HelpViewer *viewer);
     void removeViewerAt(int index);
 
     void setViewerFont(const QFont &font);
@@ -81,7 +81,7 @@ public:
     HelpViewer *viewerAt(int index) const;
 
     void open(const QUrl &url, bool newPage = false);
-    void openFromSearch(const QUrl &url, bool newPage = false);
+    void openFromSearch(const QUrl &url, const QStringList &searchTerms, bool newPage = false);
     void showTopicChooser(const QMap<QString, QUrl> &links, const QString &key,
                           bool newPage = false);
     void activateSideBarItem(const QString &id);
@@ -148,6 +148,8 @@ private:
     QAction *m_bookmarkAction;
     QAction *m_searchAction;
     QAction *m_openPagesAction;
+
+    QStringList m_searchTerms;
 };
 
 } // Internal
diff --git a/src/plugins/help/openpagesmanager.cpp b/src/plugins/help/openpagesmanager.cpp
index 1d4f98aa88570d586346e2da5ee59d7d5a9a8491..751f78bb1e4fd66888188f3832da7f39ee09f2ac 100644
--- a/src/plugins/help/openpagesmanager.cpp
+++ b/src/plugins/help/openpagesmanager.cpp
@@ -187,12 +187,7 @@ HelpViewer *OpenPagesManager::createPage()
     return createPage(QUrl(Help::Constants::AboutBlank));
 }
 
-HelpViewer *OpenPagesManager::createPageFromSearch(const QUrl &url)
-{
-    return createPage(url, true);
-}
-
-HelpViewer *OpenPagesManager::createPage(const QUrl &url, bool fromSearch)
+HelpViewer *OpenPagesManager::createPage(const QUrl &url)
 {
     if (url.isValid() && HelpViewer::launchWithExternalApp(url))
         return 0;
@@ -201,7 +196,7 @@ HelpViewer *OpenPagesManager::createPage(const QUrl &url, bool fromSearch)
 
     const int index = m_model->rowCount() - 1;
     HelpViewer * const page = m_model->pageAt(index);
-    CentralWidget::instance()->addViewer(page, fromSearch);
+    CentralWidget::instance()->addViewer(page);
 
     emit pagesChanged();
     setCurrentPage(index);
diff --git a/src/plugins/help/openpagesmanager.h b/src/plugins/help/openpagesmanager.h
index b5f0eb56a460a3fece4edb48e2861a3d498103da..2e8d481bd8aaa1c35a5f4035bd8551cd1db43af1 100644
--- a/src/plugins/help/openpagesmanager.h
+++ b/src/plugins/help/openpagesmanager.h
@@ -66,8 +66,7 @@ public:
 
 public slots:
     HelpViewer *createPage();
-    HelpViewer *createPageFromSearch(const QUrl &url);
-    HelpViewer *createPage(const QUrl &url, bool fromSearch = false);
+    HelpViewer *createPage(const QUrl &url);
 
     void setCurrentPage(int index);
     void setCurrentPage(const QModelIndex &index);
diff --git a/src/plugins/help/searchwidget.cpp b/src/plugins/help/searchwidget.cpp
index 706d1138489feb2f66ff22067356880cfb5c88e4..a0e428e0aafe41a5bfa390c959ac60777a66e2a0 100644
--- a/src/plugins/help/searchwidget.cpp
+++ b/src/plugins/help/searchwidget.cpp
@@ -137,7 +137,7 @@ void SearchWidget::showEvent(QShowEvent *event)
         connect(queryWidget, SIGNAL(search()), this, SLOT(search()));
         connect(resultWidget, &QHelpSearchResultWidget::requestShowLink, this,
                 [this](const QUrl &url) {
-                    emit linkActivated(url, false/*newPage*/);
+                    emit linkActivated(url, currentSearchTerms(), false/*newPage*/);
                 });
 
         connect(searchEngine, SIGNAL(searchingStarted()), this,
@@ -232,7 +232,7 @@ bool SearchWidget::eventFilter(QObject *o, QEvent *e)
             bool controlPressed = me->modifiers() & Qt::ControlModifier;
             if ((me->button() == Qt::LeftButton && controlPressed)
                 || (me->button() == Qt::MidButton)) {
-                    emit linkActivated(link, true/*newPage*/);
+                    emit linkActivated(link, currentSearchTerms(), true/*newPage*/);
             }
         }
     }
@@ -269,20 +269,43 @@ void SearchWidget::contextMenuEvent(QContextMenuEvent *contextMenuEvent)
 
     QAction *usedAction = menu.exec(mapToGlobal(contextMenuEvent->pos()));
     if (usedAction == openLink)
-        emit linkActivated(link, false/*newPage*/);
+        emit linkActivated(link, currentSearchTerms(), false/*newPage*/);
     else if (usedAction == openLinkInNewTab)
-        emit linkActivated(link, true/*newPage*/);
+        emit linkActivated(link, currentSearchTerms(), true/*newPage*/);
     else if (usedAction == copyAnchorAction)
         QApplication::clipboard()->setText(link.toString());
 }
 
+QStringList SearchWidget::currentSearchTerms() const
+{
+    QList<QHelpSearchQuery> queryList = searchEngine->query();
+
+    QStringList terms;
+    foreach (const QHelpSearchQuery &query, queryList) {
+        switch (query.fieldName) {
+        case QHelpSearchQuery::ALL:
+        case QHelpSearchQuery::PHRASE:
+        case QHelpSearchQuery::DEFAULT:
+        case QHelpSearchQuery::ATLEAST: {
+                foreach (QString term, query.wordList)
+                    terms.append(term.remove(QLatin1Char('"')));
+            }
+            break;
+        default:
+            break;
+        }
+    }
+    return terms;
+}
+
 // #pragma mark -- SearchSideBarItem
 
 SearchSideBarItem::SearchSideBarItem()
     : SideBarItem(new SearchWidget, QLatin1String(Constants::HELP_SEARCH))
 {
     widget()->setWindowTitle(tr(Constants::SB_SEARCH));
-    connect(widget(), SIGNAL(linkActivated(QUrl,bool)), this, SIGNAL(linkActivated(QUrl,bool)));
+    connect(widget(), SIGNAL(linkActivated(QUrl,QStringList,bool)),
+            this, SIGNAL(linkActivated(QUrl,QStringList,bool)));
 }
 
 QList<QToolButton *> SearchSideBarItem::createToolBarWidgets()
diff --git a/src/plugins/help/searchwidget.h b/src/plugins/help/searchwidget.h
index 58cc403687bad47baf5c885d9204d0d4fab444d1..802efc957af0ed6d994b74a28e418b60e08b64f4 100644
--- a/src/plugins/help/searchwidget.h
+++ b/src/plugins/help/searchwidget.h
@@ -57,7 +57,7 @@ public:
     QList<QToolButton *> createToolBarWidgets();
 
 signals:
-    void linkActivated(const QUrl &url, bool newPage);
+    void linkActivated(const QUrl &url, const QStringList &searchTerms, bool newPage);
 };
 
 class SearchWidget : public QWidget
@@ -77,7 +77,7 @@ public slots:
     void reindexDocumentation();
 
 signals:
-    void linkActivated(const QUrl &link, bool newPage);
+    void linkActivated(const QUrl &link, const QStringList &searchTerms, bool newPage);
 
 protected:
     void showEvent(QShowEvent *event);
@@ -94,6 +94,7 @@ private slots:
 private:
     bool eventFilter(QObject* o, QEvent *e);
     void contextMenuEvent(QContextMenuEvent *contextMenuEvent);
+    QStringList currentSearchTerms() const;
 
 private:
     int zoomCount;
diff --git a/tests/system/suite_HELP/tst_HELP04/test.py b/tests/system/suite_HELP/tst_HELP04/test.py
index 0996d9bebb11ae51c89ebc7d14b815baf9b0b5f7..ea3145d2e333cb43f6537bc77dc3327e04e2f0db 100755
--- a/tests/system/suite_HELP/tst_HELP04/test.py
+++ b/tests/system/suite_HELP/tst_HELP04/test.py
@@ -72,7 +72,7 @@ def getHighlightsInHtml(htmlCode):
 
 def verifySelection(expected):
     selText = str(__getSelectedText__())
-    if test.xverify(selText, "Verify that there is a selection"): # QTCREATORBUG-13239
+    if test.verify(selText, "Verify that there is a selection"):
         # verify if search keyword is found in results
         test.verify(expected.lower() in selText.lower(),
                     "'%s' search result can be found" % expected)