diff --git a/src/plugins/coreplugin/editmode.cpp b/src/plugins/coreplugin/editmode.cpp
index e99bc20469910e80c30236cd3d5240f2f482f124..03c1663c8b8da9ba0111ae097ac1453eb65e90ff 100644
--- a/src/plugins/coreplugin/editmode.cpp
+++ b/src/plugins/coreplugin/editmode.cpp
@@ -56,7 +56,6 @@ EditMode::EditMode(EditorManager *editorManager) :
     QWidget *rightSplitWidget = new QWidget;
     rightSplitWidget->setLayout(m_rightSplitWidgetLayout);
     m_rightSplitWidgetLayout->insertWidget(0, new Core::EditorManagerPlaceHolder(this));
-    m_rightSplitWidgetLayout->addWidget(new Core::FindToolBarPlaceHolder(this));
 
     MiniSplitter *rightPaneSplitter = new MiniSplitter;
     rightPaneSplitter->insertWidget(0, rightSplitWidget);
diff --git a/src/plugins/coreplugin/editormanager/editorview.cpp b/src/plugins/coreplugin/editormanager/editorview.cpp
index c5a211c6ef58f83b7b24d2cd637dce29d49ca47d..bc823fc68fa3b3eed2cb32fa64ff4a4833d69f11 100644
--- a/src/plugins/coreplugin/editormanager/editorview.cpp
+++ b/src/plugins/coreplugin/editormanager/editorview.cpp
@@ -35,6 +35,7 @@
 #include <coreplugin/coreconstants.h>
 #include <coreplugin/actionmanager/actionmanager.h>
 
+#include <coreplugin/findplaceholder.h>
 #include <utils/qtcassert.h>
 #include <utils/styledbar.h>
 
@@ -144,6 +145,9 @@ EditorView::EditorView(OpenEditorsModel *model, QWidget *parent) :
         connect(m_lockButton, SIGNAL(clicked()), this, SLOT(makeEditorWritable()));
         connect(m_closeButton, SIGNAL(clicked()), this, SLOT(closeView()), Qt::QueuedConnection);
     }
+    {
+        tl->addWidget(new FindToolBarPlaceHolder(this));
+    }
     {
         m_infoWidget->setFrameStyle(QFrame::Panel | QFrame::Raised);
         m_infoWidget->setLineWidth(1);
diff --git a/src/plugins/coreplugin/findplaceholder.cpp b/src/plugins/coreplugin/findplaceholder.cpp
index 3036c94167ce72486a1f0a8f56837479c665de8f..001b882bfe565e1f199bbd837c8db10ef922a454 100644
--- a/src/plugins/coreplugin/findplaceholder.cpp
+++ b/src/plugins/coreplugin/findplaceholder.cpp
@@ -30,6 +30,8 @@
 #include "findplaceholder.h"
 #include "modemanager.h"
 
+#include <extensionsystem/pluginmanager.h>
+
 #include <QtGui/QVBoxLayout>
 
 
@@ -37,29 +39,31 @@ using namespace Core;
 
 FindToolBarPlaceHolder *FindToolBarPlaceHolder::m_current = 0;
 
-FindToolBarPlaceHolder::FindToolBarPlaceHolder(Core::IMode *mode, QWidget *parent)
-    : QWidget(parent), m_mode(mode)
+FindToolBarPlaceHolder::FindToolBarPlaceHolder(QWidget *owner, QWidget *parent)
+    : QWidget(parent), m_widget(owner)
 {
     setLayout(new QVBoxLayout);
     setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Maximum);
     layout()->setMargin(0);
-    connect(Core::ModeManager::instance(), SIGNAL(currentModeChanged(Core::IMode *)),
-            this, SLOT(currentModeChanged(Core::IMode *)));
+    ExtensionSystem::PluginManager::instance()->addObject(this);
 }
 
 FindToolBarPlaceHolder::~FindToolBarPlaceHolder()
 {
+    ExtensionSystem::PluginManager::instance()->removeObject(this);
 }
 
-void FindToolBarPlaceHolder::currentModeChanged(Core::IMode *mode)
+QWidget *FindToolBarPlaceHolder::widget() const
 {
-    if (m_current == this)
-        m_current = 0;
-    if (m_mode == mode)
-        m_current = this;
+    return m_widget;
 }
 
 FindToolBarPlaceHolder *FindToolBarPlaceHolder::getCurrent()
 {
     return m_current;
 }
+
+void FindToolBarPlaceHolder::setCurrent(FindToolBarPlaceHolder *placeHolder)
+{
+    m_current = placeHolder;
+}
diff --git a/src/plugins/coreplugin/findplaceholder.h b/src/plugins/coreplugin/findplaceholder.h
index 1c46d3d33a99e2ce9974f2914822f5dccdec0ac6..59cf42d131b47f8301bdda37efef0ad0a160963b 100644
--- a/src/plugins/coreplugin/findplaceholder.h
+++ b/src/plugins/coreplugin/findplaceholder.h
@@ -41,14 +41,15 @@ class CORE_EXPORT FindToolBarPlaceHolder : public QWidget
 {
     Q_OBJECT
 public:
-    FindToolBarPlaceHolder(Core::IMode *mode, QWidget *parent = 0);
+    FindToolBarPlaceHolder(QWidget *owner, QWidget *parent = 0);
     ~FindToolBarPlaceHolder();
+    QWidget *widget() const;
 
     static FindToolBarPlaceHolder *getCurrent();
-private slots:
-    void currentModeChanged(Core::IMode *);
+    static void setCurrent(FindToolBarPlaceHolder *placeHolder);
+
 private:
-    Core::IMode *m_mode;
+    QWidget *m_widget;
     static FindToolBarPlaceHolder *m_current;
 };
 
diff --git a/src/plugins/coreplugin/mainwindow.cpp b/src/plugins/coreplugin/mainwindow.cpp
index be678e721c5b792d3271c7e7cc2ea6e10c15e3e4..eafe8063af5b917df6b24deb5d002aff29050147 100644
--- a/src/plugins/coreplugin/mainwindow.cpp
+++ b/src/plugins/coreplugin/mainwindow.cpp
@@ -303,7 +303,7 @@ bool MainWindow::init(QString *errorMessage)
     oph->setCloseable(false);
     outputModeWidget->layout()->addWidget(oph);
     oph->setVisible(true); // since the output pane placeholder is invisible at startup by default (which makes sense in most cases)
-    outputModeWidget->layout()->addWidget(new Core::FindToolBarPlaceHolder(m_outputMode));
+    outputModeWidget->layout()->addWidget(new Core::FindToolBarPlaceHolder(outputModeWidget));
     outputModeWidget->setFocusProxy(oph);
 
     connect(m_modeManager, SIGNAL(currentModeChanged(Core::IMode*)),
diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp
index 33c204355b15ea15d1952a2b8bd8d3b9474397ec..6319f1f648e25307436e66be7b3bfd0b0c68bf10 100644
--- a/src/plugins/debugger/debuggerplugin.cpp
+++ b/src/plugins/debugger/debuggerplugin.cpp
@@ -798,11 +798,11 @@ bool DebuggerPlugin::initialize(const QStringList &arguments, QString *errorMess
     QBoxLayout *editorHolderLayout = new QVBoxLayout;
     editorHolderLayout->setMargin(0);
     editorHolderLayout->setSpacing(0);
-    editorHolderLayout->addWidget(new EditorManagerPlaceHolder(m_debugMode));
-    editorHolderLayout->addWidget(new FindToolBarPlaceHolder(m_debugMode));
 
     QWidget *editorAndFindWidget = new QWidget;
     editorAndFindWidget->setLayout(editorHolderLayout);
+    editorHolderLayout->addWidget(new EditorManagerPlaceHolder(m_debugMode));
+    editorHolderLayout->addWidget(new FindToolBarPlaceHolder(editorAndFindWidget));
 
     MiniSplitter *rightPaneSplitter = new MiniSplitter;
     rightPaneSplitter->addWidget(editorAndFindWidget);
diff --git a/src/plugins/find/currentdocumentfind.cpp b/src/plugins/find/currentdocumentfind.cpp
index 1fc029a1d96da371fc908f7a553da565b534bf05..f2eb129452d52519030fa2e714d0a3f41f85f36f 100644
--- a/src/plugins/find/currentdocumentfind.cpp
+++ b/src/plugins/find/currentdocumentfind.cpp
@@ -45,7 +45,7 @@ CurrentDocumentFind::CurrentDocumentFind()
   : m_currentFind(0)
 {
     connect(qApp, SIGNAL(focusChanged(QWidget*, QWidget*)),
-            this, SLOT(updateCurrentFindFilter(QWidget*,QWidget*)));
+            this, SLOT(updateCandidateFindFilter(QWidget*,QWidget*)));
 }
 
 void CurrentDocumentFind::removeConnections()
@@ -71,6 +71,11 @@ bool CurrentDocumentFind::isEnabled() const
     return m_currentFind && (!m_currentWidget || m_currentWidget->isVisible());
 }
 
+bool CurrentDocumentFind::candidateIsEnabled() const
+{
+    return (m_candidateFind != 0);
+}
+
 bool CurrentDocumentFind::supportsReplace() const
 {
     QTC_ASSERT(m_currentFind, return false);
@@ -139,7 +144,7 @@ void CurrentDocumentFind::clearFindScope()
     m_currentFind->clearFindScope();
 }
 
-void CurrentDocumentFind::updateCurrentFindFilter(QWidget *old, QWidget *now)
+void CurrentDocumentFind::updateCandidateFindFilter(QWidget *old, QWidget *now)
 {
     Q_UNUSED(old)
     QWidget *candidate = now;
@@ -149,13 +154,20 @@ void CurrentDocumentFind::updateCurrentFindFilter(QWidget *old, QWidget *now)
         if (!impl)
             candidate = candidate->parentWidget();
     }
-    if (!impl || impl == m_currentFind)
+    m_candidateWidget = candidate;
+    m_candidateFind = impl;
+    emit candidateChanged();
+}
+
+void CurrentDocumentFind::acceptCandidate()
+{
+    if (!m_candidateFind || m_candidateFind == m_currentFind)
         return;
     removeFindSupportConnections();
     if (m_currentFind)
         m_currentFind->highlightAll(QString(), 0);
-    m_currentWidget = candidate;
-    m_currentFind = impl;
+    m_currentWidget = m_candidateWidget;
+    m_currentFind = m_candidateFind;
     if (m_currentFind) {
         connect(m_currentFind, SIGNAL(changed()), this, SIGNAL(changed()));
         connect(m_currentFind, SIGNAL(destroyed(QObject*)), SLOT(findSupportDestroyed()));
diff --git a/src/plugins/find/currentdocumentfind.h b/src/plugins/find/currentdocumentfind.h
index eb8bdf38e0c2782817b0b17f018186427392eea8..82f6da9b0c82f1c46e4627a5e0a6432f7a876a1d 100644
--- a/src/plugins/find/currentdocumentfind.h
+++ b/src/plugins/find/currentdocumentfind.h
@@ -53,6 +53,7 @@ public:
     QString completedFindString() const;
 
     bool isEnabled() const;
+    bool candidateIsEnabled() const;
     void highlightAll(const QString &txt, IFindSupport::FindFlags findFlags);
     bool findIncremental(const QString &txt, IFindSupport::FindFlags findFlags);
     bool findStep(const QString &txt, IFindSupport::FindFlags findFlags);
@@ -62,6 +63,7 @@ public:
         IFindSupport::FindFlags findFlags);
     void defineFindScope();
     void clearFindScope();
+    void acceptCandidate();
 
     void removeConnections();
     bool setFocusToCurrentFindSupport();
@@ -70,9 +72,10 @@ public:
 
 signals:
     void changed();
+    void candidateChanged();
 
 private slots:
-    void updateCurrentFindFilter(QWidget *old, QWidget *now);
+    void updateCandidateFindFilter(QWidget *old, QWidget *now);
     void findSupportDestroyed();
 
 private:
@@ -80,6 +83,8 @@ private:
 
     QPointer<IFindSupport> m_currentFind;
     QPointer<QWidget> m_currentWidget;
+    QPointer<IFindSupport> m_candidateFind;
+    QPointer<QWidget> m_candidateWidget;
 };
 
 } // namespace Internal
diff --git a/src/plugins/find/findtoolbar.cpp b/src/plugins/find/findtoolbar.cpp
index 2e8df6b263cfc99721314423b8927465ed9b5c95..482f3fc84062929248e7ebfdc79c10d252d51d76 100644
--- a/src/plugins/find/findtoolbar.cpp
+++ b/src/plugins/find/findtoolbar.cpp
@@ -32,7 +32,6 @@
 #include "textfindconstants.h"
 
 #include <coreplugin/coreconstants.h>
-#include <coreplugin/findplaceholder.h>
 #include <coreplugin/icore.h>
 #include <coreplugin/actionmanager/actionmanager.h>
 #include <coreplugin/actionmanager/actioncontainer.h>
@@ -75,7 +74,7 @@ FindToolBar::FindToolBar(FindPlugin *plugin, CurrentDocumentFind *currentDocumen
     //setup ui
     m_ui.setupUi(this);
     setFocusProxy(m_ui.findEdit);
-    setProperty("topBorder", true);
+//    setProperty("topBorder", true);
     setSingleRow(false);
     m_ui.findEdit->setAttribute(Qt::WA_MacShowFocusRect, false);
     m_ui.replaceEdit->setAttribute(Qt::WA_MacShowFocusRect, false);
@@ -213,8 +212,9 @@ FindToolBar::FindToolBar(FindPlugin *plugin, CurrentDocumentFind *currentDocumen
     connect(m_regularExpressionAction, SIGNAL(triggered(bool)), this, SLOT(setRegularExpressions(bool)));
     lineEditMenu->addAction(m_regularExpressionAction);
 
-    connect(m_currentDocumentFind, SIGNAL(changed()), this, SLOT(updateActions()));
-    updateActions();
+    connect(m_currentDocumentFind, SIGNAL(candidateChanged()), this, SLOT(adaptToCandidate()));
+    connect(m_currentDocumentFind, SIGNAL(changed()), this, SLOT(updateToolBar()));
+    updateToolBar();
 }
 
 FindToolBar::~FindToolBar()
@@ -264,11 +264,31 @@ bool FindToolBar::eventFilter(QObject *obj, QEvent *event)
     return Core::Utils::StyledBar::eventFilter(obj, event);
 }
 
-void FindToolBar::updateActions()
+
+void FindToolBar::removeFromParent()
+{
+    setVisible(false);
+    setParent(0);
+    Core::FindToolBarPlaceHolder::setCurrent(0);
+}
+
+void FindToolBar::adaptToCandidate()
+{
+    updateFindAction();
+    if (findToolBarPlaceHolder() == Core::FindToolBarPlaceHolder::getCurrent()) {
+        m_currentDocumentFind->acceptCandidate();
+    }
+}
+
+void FindToolBar::updateFindAction()
+{
+    m_findInDocumentAction->setEnabled(m_currentDocumentFind->candidateIsEnabled());
+}
+
+void FindToolBar::updateToolBar()
 {
     bool enabled = m_currentDocumentFind->isEnabled();
     bool replaceEnabled = enabled && m_currentDocumentFind->supportsReplace();
-    m_findInDocumentAction->setEnabled(enabled);
     m_findNextAction->setEnabled(enabled);
     m_findPreviousAction->setEnabled(enabled);
 
@@ -507,19 +527,38 @@ void FindToolBar::hideAndResetFocus()
     hide();
 }
 
+Core::FindToolBarPlaceHolder *FindToolBar::findToolBarPlaceHolder() const
+{
+    QList<Core::FindToolBarPlaceHolder*> placeholders = ExtensionSystem::PluginManager::instance()
+                                                        ->getObjects<Core::FindToolBarPlaceHolder>();
+    QWidget *candidate = QApplication::focusWidget();
+    while (candidate) {
+        foreach (Core::FindToolBarPlaceHolder *ph, placeholders) {
+            if (ph->widget() == candidate)
+                return ph;
+        }
+        candidate = candidate->parentWidget();
+    }
+    return 0;
+}
+
 void FindToolBar::openFind()
 {
-    if (!m_currentDocumentFind->isEnabled())
+    if (!m_currentDocumentFind->candidateIsEnabled())
         return;
-    Core::FindToolBarPlaceHolder *holder = Core::FindToolBarPlaceHolder::getCurrent();
-    QLayout *findContainerLayout = holder ? holder->layout() : 0;
-
-    if (findContainerLayout) {
-        findContainerLayout->addWidget(this);
-        holder->setVisible(true);
-        setVisible(true);
-        setFocus();
-    }
+    Core::FindToolBarPlaceHolder *holder = findToolBarPlaceHolder();
+    if (!holder)
+        return;
+    Core::FindToolBarPlaceHolder *previousHolder = Core::FindToolBarPlaceHolder::getCurrent();
+    if (previousHolder)
+        disconnect(previousHolder, SIGNAL(destroyed(QObject*)), this, SLOT(removeFromParent()));
+    Core::FindToolBarPlaceHolder::setCurrent(holder);
+    connect(holder, SIGNAL(destroyed(QObject*)), this, SLOT(removeFromParent()));
+    m_currentDocumentFind->acceptCandidate();
+    holder->layout()->addWidget(this);
+    holder->setVisible(true);
+    setVisible(true);
+    setFocus();
     QString text = m_currentDocumentFind->currentFindString();
     if (!text.isEmpty())
         setFindText(text);
@@ -528,7 +567,6 @@ void FindToolBar::openFind()
     selectFindText();
 }
 
-
 bool FindToolBar::focusNextPrevChild(bool next)
 {
     // close tab order change
diff --git a/src/plugins/find/findtoolbar.h b/src/plugins/find/findtoolbar.h
index 8985b3419c3efce9399a42e2e4805052f20a776a..3008eeed6f148df9d5f9f26174307bc0098ebabd 100644
--- a/src/plugins/find/findtoolbar.h
+++ b/src/plugins/find/findtoolbar.h
@@ -34,6 +34,7 @@
 #include "ifindfilter.h"
 #include "currentdocumentfind.h"
 
+#include <coreplugin/findplaceholder.h>
 #include <utils/styledbar.h>
 
 #include <QtGui/QStringListModel>
@@ -74,13 +75,16 @@ private slots:
 
     void hideAndResetFocus();
     void openFind();
-    void updateActions();
+    void updateFindAction();
+    void updateToolBar();
     void findFlagsChanged();
 
     void setCaseSensitive(bool sensitive);
     void setWholeWord(bool wholeOnly);
     void setRegularExpressions(bool regexp);
 
+    void adaptToCandidate();
+    void removeFromParent();
 protected:
     bool focusNextPrevChild(bool next);
 
@@ -90,6 +94,7 @@ private:
     void setFindFlag(IFindSupport::FindFlag flag, bool enabled);
     bool hasFindFlag(IFindSupport::FindFlag flag);
     IFindSupport::FindFlags effectiveFindFlags();
+    Core::FindToolBarPlaceHolder *FindToolBar::findToolBarPlaceHolder() const;
 
     bool eventFilter(QObject *obj, QEvent *event);
     void setFindText(const QString &text);
diff --git a/src/plugins/find/findwidget.ui b/src/plugins/find/findwidget.ui
index 8fb5973c130605c1667a483d00bb68270fd29dd5..51b0fd45b9749fb9743eb151afdd5dd03e143cd0 100644
--- a/src/plugins/find/findwidget.ui
+++ b/src/plugins/find/findwidget.ui
@@ -24,7 +24,7 @@
     <number>0</number>
    </property>
    <property name="bottomMargin">
-    <number>1</number>
+    <number>2</number>
    </property>
    <property name="horizontalSpacing">
     <number>5</number>
diff --git a/src/plugins/help/helpmode.cpp b/src/plugins/help/helpmode.cpp
index d7a806cc620a1a60585fc8427f439ea5361f79f7..f6fcfc3c56ba7ee3baafa9372564cc372bfaf5b3 100644
--- a/src/plugins/help/helpmode.cpp
+++ b/src/plugins/help/helpmode.cpp
@@ -46,7 +46,7 @@ HelpMode::HelpMode(QWidget *widget, QWidget *centralWidget, QObject *parent)
     setPriority(Constants::P_MODE_HELP);
     setWidget(widget);
     m_centralWidget->layout()->setSpacing(0);
-    m_centralWidget->layout()->addWidget(new Core::FindToolBarPlaceHolder(this));
+    m_centralWidget->layout()->addWidget(new Core::FindToolBarPlaceHolder(m_centralWidget));
 }
 
 
diff --git a/src/plugins/help/helpplugin.cpp b/src/plugins/help/helpplugin.cpp
index c48c7fe02c28a699f55d1ee820c6c90f31f4d881..ee516a3df06b05a45bb48966bd9ef0c409d8c167 100644
--- a/src/plugins/help/helpplugin.cpp
+++ b/src/plugins/help/helpplugin.cpp
@@ -43,17 +43,18 @@
 #include "searchwidget.h"
 
 #include <extensionsystem/pluginmanager.h>
-#include <coreplugin/icore.h>
-#include <coreplugin/coreconstants.h>
-#include <coreplugin/modemanager.h>
-#include <coreplugin/uniqueidmanager.h>
+
 #include <coreplugin/actionmanager/actionmanager.h>
+#include <coreplugin/coreconstants.h>
+#include <coreplugin/editormanager/editormanager.h>
+#include <coreplugin/findplaceholder.h>
+#include <coreplugin/icore.h>
 #include <coreplugin/minisplitter.h>
 #include <coreplugin/modemanager.h>
 #include <coreplugin/rightpane.h>
 #include <coreplugin/sidebar.h>
+#include <coreplugin/uniqueidmanager.h>
 #include <coreplugin/welcomemode.h>
-#include <coreplugin/editormanager/editormanager.h>
 
 #include <texteditor/texteditorconstants.h>
 
@@ -463,11 +464,16 @@ void HelpPlugin::createRightPaneSideBar()
     w->setLayout(hboxLayout);
     connect(closeButton, SIGNAL(clicked()), this, SLOT(slotHideRightPane()));
 
+    m_rightPaneSideBar = new QWidget;
     QVBoxLayout *rightPaneLayout = new QVBoxLayout;
     rightPaneLayout->setMargin(0);
     rightPaneLayout->setSpacing(0);
-    rightPaneLayout->addWidget(w);
+    m_rightPaneSideBar->setLayout(rightPaneLayout);
+    m_rightPaneSideBar->setFocusProxy(m_helpViewerForSideBar);
+    addAutoReleasedObject(new Core::BaseRightPaneWidget(m_rightPaneSideBar));
 
+    rightPaneLayout->addWidget(w);
+    rightPaneLayout->addWidget(new Core::FindToolBarPlaceHolder(m_rightPaneSideBar));
     m_helpViewerForSideBar = new HelpViewer(m_helpEngine, 0);
     Aggregation::Aggregate *agg = new Aggregation::Aggregate();
     agg->add(m_helpViewerForSideBar);
@@ -494,11 +500,6 @@ void HelpPlugin::createRightPaneSideBar()
     connect(copyActionSideBar, SIGNAL(triggered()), this, SLOT(copyFromSideBar()));
     copyActionSideBar->setText(cmd->action()->text());
     copyActionSideBar->setIcon(cmd->action()->icon());
-
-    m_rightPaneSideBar = new QWidget;
-    m_rightPaneSideBar->setLayout(rightPaneLayout);
-    m_rightPaneSideBar->setFocusProxy(m_helpViewerForSideBar);
-    addAutoReleasedObject(new Core::BaseRightPaneWidget(m_rightPaneSideBar));
 }
 
 void HelpPlugin::copyFromSideBar()
diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp
index ea065c539434484fcac9c447eec5a061d74a5ebb..b71afb3835a3f501e68805aefe5253443d570f62 100644
--- a/src/plugins/projectexplorer/projectexplorer.cpp
+++ b/src/plugins/projectexplorer/projectexplorer.cpp
@@ -189,7 +189,7 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er
     mode->setWidget(m_proWindow);
     mode->setContext(QList<int>() << pecontext);
     addAutoReleasedObject(mode);
-    m_proWindow->layout()->addWidget(new Core::FindToolBarPlaceHolder(mode));
+    m_proWindow->layout()->addWidget(new Core::FindToolBarPlaceHolder(m_proWindow));
 
     m_buildManager = new BuildManager(this);
     connect(m_buildManager, SIGNAL(buildStateChanged(ProjectExplorer::Project *)),