diff --git a/src/plugins/bineditor/bineditorplugin.cpp b/src/plugins/bineditor/bineditorplugin.cpp
index fab5586963b72f14cd22428cd14b26563ca10dfb..99a1b2868193a701c550f9f6687ede8041ee639b 100644
--- a/src/plugins/bineditor/bineditorplugin.cpp
+++ b/src/plugins/bineditor/bineditorplugin.cpp
@@ -63,6 +63,11 @@ public:
     ~BinEditorFind() {}
 
     bool supportsReplace() const { return false; }
+    IFindSupport::FindFlags supportedFindFlags() const
+    {
+        return IFindSupport::FindBackward | IFindSupport::FindCaseSensitively;
+    }
+
     void resetIncrementalSearch() { m_incrementalStartPos = -1; }
     void clearResults() { m_editor->highlightSearchResults(QByteArray()); }
     QString currentFindString() const { return QString(); }
diff --git a/src/plugins/find/basetextfind.cpp b/src/plugins/find/basetextfind.cpp
index 4f055e12a245c7bade78e74ab15a9ab6b8ee8b0d..da3c1de3d9d0170d2feeea622b2ff13739ba6b9a 100644
--- a/src/plugins/find/basetextfind.cpp
+++ b/src/plugins/find/basetextfind.cpp
@@ -75,6 +75,12 @@ bool BaseTextFind::supportsReplace() const
     return !isReadOnly();
 }
 
+IFindSupport::FindFlags BaseTextFind::supportedFindFlags() const
+{
+    return IFindSupport::FindBackward | IFindSupport::FindCaseSensitively
+            | IFindSupport::FindRegularExpression | IFindSupport::FindWholeWords;
+}
+
 void BaseTextFind::resetIncrementalSearch()
 {
     m_incrementalStartPos = -1;
diff --git a/src/plugins/find/basetextfind.h b/src/plugins/find/basetextfind.h
index f0718738cccfe9ba560d55dd4886e15c17770304..bad6e4d8c8d437a5b54f3ae838f1679200dfb1a0 100644
--- a/src/plugins/find/basetextfind.h
+++ b/src/plugins/find/basetextfind.h
@@ -47,6 +47,7 @@ public:
     BaseTextFind(QTextEdit *editor);
 
     bool supportsReplace() const;
+    IFindSupport::FindFlags supportedFindFlags() const;
     void resetIncrementalSearch();
     void clearResults();
     QString currentFindString() const;
diff --git a/src/plugins/find/currentdocumentfind.cpp b/src/plugins/find/currentdocumentfind.cpp
index f9e57e1e4a54df0d5a987f8ba028eb50ed5a82c7..dbd9071240d40e5993489b7b9eec07208744dbab 100644
--- a/src/plugins/find/currentdocumentfind.cpp
+++ b/src/plugins/find/currentdocumentfind.cpp
@@ -77,6 +77,12 @@ bool CurrentDocumentFind::supportsReplace() const
     return m_currentFind->supportsReplace();
 }
 
+IFindSupport::FindFlags CurrentDocumentFind::supportedFindFlags() const
+{
+    QTC_ASSERT(m_currentFind, return 0);
+    return m_currentFind->supportedFindFlags();
+}
+
 QString CurrentDocumentFind::currentFindString() const
 {
     QTC_ASSERT(m_currentFind, return QString());
diff --git a/src/plugins/find/currentdocumentfind.h b/src/plugins/find/currentdocumentfind.h
index 59d734dcd23e495aa9d9a46773ddcb0bf3a4e248..eb8bdf38e0c2782817b0b17f018186427392eea8 100644
--- a/src/plugins/find/currentdocumentfind.h
+++ b/src/plugins/find/currentdocumentfind.h
@@ -48,6 +48,7 @@ public:
     void resetIncrementalSearch();
     void clearResults();
     bool supportsReplace() const;
+    IFindSupport::FindFlags supportedFindFlags() const;
     QString currentFindString() const;
     QString completedFindString() const;
 
diff --git a/src/plugins/find/findtoolbar.cpp b/src/plugins/find/findtoolbar.cpp
index 49fcd0d9258bff9d6e30effb330e97d301784487..8b7a4bb6af0949429c197a2a3673de99f8107a6b 100644
--- a/src/plugins/find/findtoolbar.cpp
+++ b/src/plugins/find/findtoolbar.cpp
@@ -228,7 +228,6 @@ FindToolBar::FindToolBar(FindPlugin *plugin, CurrentDocumentFind *currentDocumen
 
     connect(m_currentDocumentFind, SIGNAL(changed()), this, SLOT(updateActions()));
     updateActions();
-    updateIcons();
 }
 
 FindToolBar::~FindToolBar()
@@ -300,6 +299,8 @@ void FindToolBar::updateActions()
     m_ui.replaceLabel->setEnabled(replaceEnabled);
     if (!replaceEnabled && enabled && replaceFocus)
         m_ui.findEdit->setFocus();
+    updateIcons();
+    updateFlagMenus();
 }
 
 void FindToolBar::invokeFindEnter()
@@ -365,7 +366,7 @@ void FindToolBar::invokeFindStep()
 {
     if (m_currentDocumentFind->isEnabled()) {
         m_plugin->updateFindCompletion(getFindText());
-        m_currentDocumentFind->findStep(getFindText(), m_findFlags);
+        m_currentDocumentFind->findStep(getFindText(), effectiveFindFlags());
     }
 }
 
@@ -373,7 +374,7 @@ void FindToolBar::invokeFindIncremental()
 {
     if (m_currentDocumentFind->isEnabled()) {
         QString text = getFindText();
-        m_currentDocumentFind->findIncremental(text, m_findFlags);
+        m_currentDocumentFind->findIncremental(text, effectiveFindFlags());
         if (text.isEmpty())
             m_currentDocumentFind->clearResults();
     }
@@ -396,7 +397,7 @@ void FindToolBar::invokeReplaceStep()
     if (m_currentDocumentFind->isEnabled() && m_currentDocumentFind->supportsReplace()) {
         m_plugin->updateFindCompletion(getFindText());
         m_plugin->updateReplaceCompletion(getReplaceText());
-        m_currentDocumentFind->replaceStep(getFindText(), getReplaceText(), m_findFlags);
+        m_currentDocumentFind->replaceStep(getFindText(), getReplaceText(), effectiveFindFlags());
     }
 }
 
@@ -405,7 +406,7 @@ void FindToolBar::invokeReplaceAll()
     m_plugin->updateFindCompletion(getFindText());
     m_plugin->updateReplaceCompletion(getReplaceText());
     if (m_currentDocumentFind->isEnabled() && m_currentDocumentFind->supportsReplace()) {
-        m_currentDocumentFind->replaceAll(getFindText(), getReplaceText(), m_findFlags);
+        m_currentDocumentFind->replaceAll(getFindText(), getReplaceText(), effectiveFindFlags());
     }
 }
 
@@ -442,9 +443,10 @@ void FindToolBar::findFlagsChanged()
 
 void FindToolBar::updateIcons()
 {
-    bool casesensitive = m_findFlags & IFindSupport::FindCaseSensitively;
-    bool wholewords = m_findFlags & IFindSupport::FindWholeWords;
-    bool regexp = m_findFlags & IFindSupport::FindRegularExpression;
+    IFindSupport::FindFlags effectiveFlags = effectiveFindFlags();
+    bool casesensitive = effectiveFlags & IFindSupport::FindCaseSensitively;
+    bool wholewords = effectiveFlags & IFindSupport::FindWholeWords;
+    bool regexp = effectiveFlags & IFindSupport::FindRegularExpression;
     QPixmap pixmap(17, 17);
     QPainter painter(&pixmap);
     painter.eraseRect(0, 0, 17, 17);
@@ -468,6 +470,16 @@ void FindToolBar::updateIcons()
     m_ui.findEdit->setPixmap(pixmap);
 }
 
+IFindSupport::FindFlags FindToolBar::effectiveFindFlags()
+{
+    IFindSupport::FindFlags supportedFlags;
+    if (m_currentDocumentFind->isEnabled())
+        supportedFlags = m_currentDocumentFind->supportedFindFlags();
+    else
+        supportedFlags = (IFindSupport::FindFlags)0xFFFFFF;
+    return supportedFlags & m_findFlags;
+}
+
 void FindToolBar::updateFlagMenus()
 {
     bool wholeOnly = ((m_findFlags & IFindSupport::FindWholeWords));
@@ -479,6 +491,12 @@ void FindToolBar::updateFlagMenus()
         m_caseSensitiveAction->setChecked(sensitive);
     if (m_regularExpressionAction->isChecked() != regexp)
         m_regularExpressionAction->setChecked(regexp);
+    IFindSupport::FindFlags supportedFlags;
+    if (m_currentDocumentFind->isEnabled())
+        supportedFlags = m_currentDocumentFind->supportedFindFlags();
+    m_wholeWordAction->setEnabled(supportedFlags & IFindSupport::FindWholeWords);
+    m_caseSensitiveAction->setEnabled(supportedFlags & IFindSupport::FindCaseSensitively);
+    m_regularExpressionAction->setEnabled(supportedFlags & IFindSupport::FindRegularExpression);
 }
 
 bool FindToolBar::setFocusToCurrentFindSupport()
@@ -509,7 +527,7 @@ void FindToolBar::openFind()
     if (!text.isEmpty())
         setFindText(text);
     m_currentDocumentFind->defineFindScope();
-    m_currentDocumentFind->highlightAll(getFindText(), m_findFlags);
+    m_currentDocumentFind->highlightAll(getFindText(), effectiveFindFlags());
     selectFindText();
 }
 
diff --git a/src/plugins/find/findtoolbar.h b/src/plugins/find/findtoolbar.h
index 44e96b6ad0fc10c4a4183fcd8c1fb6f86ea17a4c..4b85c1a9e831580fd2eb2c5c95d99531e933b886 100644
--- a/src/plugins/find/findtoolbar.h
+++ b/src/plugins/find/findtoolbar.h
@@ -88,6 +88,7 @@ private:
     bool setFocusToCurrentFindSupport();
     void setFindFlag(IFindSupport::FindFlag flag, bool enabled);
     bool hasFindFlag(IFindSupport::FindFlag flag);
+    IFindSupport::FindFlags effectiveFindFlags();
 
     bool eventFilter(QObject *obj, QEvent *event);
     void setFindText(const QString &text);
diff --git a/src/plugins/find/ifindsupport.h b/src/plugins/find/ifindsupport.h
index 977dc831687fd124668892c6be46c2e29f9a8d0e..c61ab3bda0e21abc162eef374a9b6400494d2aeb 100644
--- a/src/plugins/find/ifindsupport.h
+++ b/src/plugins/find/ifindsupport.h
@@ -54,6 +54,7 @@ public:
     virtual ~IFindSupport() {}
 
     virtual bool supportsReplace() const = 0;
+    virtual FindFlags supportedFindFlags() const = 0;
     virtual void resetIncrementalSearch() = 0;
     virtual void clearResults() = 0;
     virtual QString currentFindString() const = 0;
diff --git a/src/plugins/help/helpfindsupport.cpp b/src/plugins/help/helpfindsupport.cpp
index 80f3f17baa06d4131bd0b5d1abe55c566e0562fa..abc7e2d239c7dd3d44a49e98582e0ec1fb3fcf5c 100644
--- a/src/plugins/help/helpfindsupport.cpp
+++ b/src/plugins/help/helpfindsupport.cpp
@@ -48,6 +48,12 @@ bool HelpFindSupport::isEnabled() const
     return true;
 }
 
+Find::IFindSupport::FindFlags HelpFindSupport::supportedFindFlags() const
+{
+    return Find::IFindSupport::FindBackward | Find::IFindSupport::FindCaseSensitively
+            | Find::IFindSupport::FindWholeWords;
+}
+
 QString HelpFindSupport::currentFindString() const
 {
     QTC_ASSERT(m_centralWidget, return QString());
@@ -84,6 +90,12 @@ HelpViewerFindSupport::HelpViewerFindSupport(HelpViewer *viewer)
 {
 }
 
+Find::IFindSupport::FindFlags HelpViewerFindSupport::supportedFindFlags() const
+{
+    return Find::IFindSupport::FindBackward | Find::IFindSupport::FindCaseSensitively
+            | Find::IFindSupport::FindWholeWords;
+}
+
 QString HelpViewerFindSupport::currentFindString() const
 {
     QTC_ASSERT(m_viewer, return QString());
diff --git a/src/plugins/help/helpfindsupport.h b/src/plugins/help/helpfindsupport.h
index 789c15a77dd5711b20fd0d68ccef5c0998085fe1..ce57be8acb0359a6e39ba3b573d3acd6c53eb609 100644
--- a/src/plugins/help/helpfindsupport.h
+++ b/src/plugins/help/helpfindsupport.h
@@ -50,6 +50,8 @@ public:
 
     bool isEnabled() const;
     bool supportsReplace() const { return false; }
+    IFindSupport::FindFlags supportedFindFlags() const;
+
     void resetIncrementalSearch() {}
     void clearResults() {}
     QString currentFindString() const;
@@ -76,6 +78,7 @@ public:
 
     bool isEnabled() const { return true; }
     bool supportsReplace() const { return false; }
+    IFindSupport::FindFlags supportedFindFlags() const;
     void resetIncrementalSearch() {}
     void clearResults() {}
     QString currentFindString() const;