diff --git a/src/plugins/find/findtoolwindow.cpp b/src/plugins/find/findtoolwindow.cpp
index b2f17fa63d3d63f1d3570a355568695f7039773f..eec831775b576ca4c23db8caa64ba4c43fb8384c 100644
--- a/src/plugins/find/findtoolwindow.cpp
+++ b/src/plugins/find/findtoolwindow.cpp
@@ -40,14 +40,15 @@ using namespace Find::Internal;
 FindToolWindow::FindToolWindow(FindPlugin *plugin)
     : QDialog(Core::ICore::instance()->mainWindow()),
     m_plugin(plugin),
-    m_findCompleter(new QCompleter(this))
+    m_findCompleter(new QCompleter(this)),
+    m_currentFilter(0)
 {
     m_ui.setupUi(this);
     connect(m_ui.closeButton, SIGNAL(clicked()), this, SLOT(reject()));
     connect(m_ui.searchButton, SIGNAL(clicked()), this, SLOT(accept()));
     connect(m_ui.matchCase, SIGNAL(toggled(bool)), m_plugin, SLOT(setCaseSensitive(bool)));
     connect(m_ui.wholeWords, SIGNAL(toggled(bool)), m_plugin, SLOT(setWholeWord(bool)));
-    connect(m_ui.filterList, SIGNAL(currentIndexChanged(int)), this, SLOT(setCurrentFilter(int)));
+    connect(m_ui.filterList, SIGNAL(activated(int)), this, SLOT(setCurrentFilter(int)));
     connect(this, SIGNAL(accepted()), this, SLOT(search()));
     m_findCompleter->setModel(m_plugin->findCompletionModel());
     m_ui.searchTerm->setCompleter(m_findCompleter);
@@ -74,6 +75,8 @@ void FindToolWindow::setFindFilters(const QList<IFindFilter *> &filters)
         m_configWidgets.append(filter->createConfigWidget());
     }
     m_ui.filterList->addItems(names);
+    if (m_filters.size() > 0)
+        setCurrentFilter(0);
 }
 
 void FindToolWindow::setFindText(const QString &text)
@@ -83,9 +86,11 @@ void FindToolWindow::setFindText(const QString &text)
 
 void FindToolWindow::open(IFindFilter *filter)
 {
+    if (!filter)
+        filter = m_currentFilter;
     int index = m_filters.indexOf(filter);
     if (index >= 0) {
-        m_ui.filterList->setCurrentIndex(index);
+        setCurrentFilter(index);
     }
     m_ui.matchCase->setChecked(m_plugin->findFlags() & QTextDocument::FindCaseSensitively);
     m_ui.wholeWords->setChecked(m_plugin->findFlags() & QTextDocument::FindWholeWords);
@@ -96,6 +101,7 @@ void FindToolWindow::open(IFindFilter *filter)
 
 void FindToolWindow::setCurrentFilter(int index)
 {
+    m_ui.filterList->setCurrentIndex(index);
     for (int i = 0; i < m_configWidgets.size(); ++i) {
         QWidget *configWidget = m_configWidgets.at(i);
         if (!configWidget)
@@ -112,6 +118,7 @@ void FindToolWindow::setCurrentFilter(int index)
             configWidget->setParent(0);
         }
     }
+    m_currentFilter = m_filters.at(index);
 }
 
 void FindToolWindow::search()
@@ -129,6 +136,7 @@ void FindToolWindow::writeSettings()
 {
     QSettings *settings = Core::ICore::instance()->settings();
     settings->beginGroup("Find");
+    settings->setValue("CurrentFilter", m_currentFilter->id());
     foreach (IFindFilter *filter, m_filters)
         filter->writeSettings(settings);
     settings->endGroup();
@@ -138,7 +146,13 @@ void FindToolWindow::readSettings()
 {
     QSettings *settings = Core::ICore::instance()->settings();
     settings->beginGroup("Find");
-    foreach (IFindFilter *filter, m_filters)
+    const QString currentFilter = settings->value("CurrentFilter").toString();
+    for (int i = 0; i < m_filters.size(); ++i) {
+        IFindFilter *filter = m_filters.at(i);
         filter->readSettings(settings);
+        if (filter->id() == currentFilter) {
+            setCurrentFilter(i);
+        }
+    }
     settings->endGroup();
 }
diff --git a/src/plugins/find/findtoolwindow.h b/src/plugins/find/findtoolwindow.h
index d377c46a1cdcf10350d21b4023b90a77d73bacef..c1b8417c38bafd9bf30a8f2e125f498743822f31 100644
--- a/src/plugins/find/findtoolwindow.h
+++ b/src/plugins/find/findtoolwindow.h
@@ -67,6 +67,7 @@ private:
     QList<IFindFilter *> m_filters;
     QCompleter *m_findCompleter;
     QList<QWidget *> m_configWidgets;
+    IFindFilter *m_currentFilter;
 };
 
 } // namespace Internal
diff --git a/src/plugins/find/ifindfilter.h b/src/plugins/find/ifindfilter.h
index 9859fd75db7d933013890c5b1ed21f78623b6565..69afaa283dd739582e94293aaf5a5ae0c40a301c 100644
--- a/src/plugins/find/ifindfilter.h
+++ b/src/plugins/find/ifindfilter.h
@@ -45,6 +45,7 @@ public:
 
     virtual ~IFindFilter() {}
 
+    virtual QString id() const = 0;
     virtual QString name() const = 0;
     virtual bool isEnabled() const = 0;
     virtual QKeySequence defaultShortcut() const = 0;
diff --git a/src/plugins/projectexplorer/allprojectsfind.cpp b/src/plugins/projectexplorer/allprojectsfind.cpp
index c6448c2f801ae33d924d958e48d9d0d92424dfc3..c4ce7bee5886e90bc6055b3b398f38fe00f3e166 100644
--- a/src/plugins/projectexplorer/allprojectsfind.cpp
+++ b/src/plugins/projectexplorer/allprojectsfind.cpp
@@ -51,6 +51,11 @@ AllProjectsFind::AllProjectsFind(ProjectExplorerPlugin *plugin, SearchResultWind
     connect(m_plugin, SIGNAL(fileListChanged()), this, SIGNAL(changed()));
 }
 
+QString AllProjectsFind::id() const
+{
+    return "All Projects";
+}
+
 QString AllProjectsFind::name() const
 {
     return tr("All Projects");
diff --git a/src/plugins/projectexplorer/allprojectsfind.h b/src/plugins/projectexplorer/allprojectsfind.h
index f801dcfed09e806a9f1044e54621b3f1b951961e..67e64e64c5d2a6aeab6226a799e26c8356b37795 100644
--- a/src/plugins/projectexplorer/allprojectsfind.h
+++ b/src/plugins/projectexplorer/allprojectsfind.h
@@ -50,6 +50,7 @@ class AllProjectsFind : public TextEditor::BaseFileFind
 public:
     AllProjectsFind(ProjectExplorerPlugin *plugin, Find::SearchResultWindow *resultWindow);
 
+    QString id() const;
     QString name() const;
 
     bool isEnabled() const;
diff --git a/src/plugins/projectexplorer/currentprojectfind.cpp b/src/plugins/projectexplorer/currentprojectfind.cpp
index 4fcfc68642e5f5f27717c98aa242730f86143430..c830ea96932169dc44c9c4a0fc869ed22bbecfa5 100644
--- a/src/plugins/projectexplorer/currentprojectfind.cpp
+++ b/src/plugins/projectexplorer/currentprojectfind.cpp
@@ -52,6 +52,11 @@ CurrentProjectFind::CurrentProjectFind(ProjectExplorerPlugin *plugin, SearchResu
             this, SIGNAL(changed()));
 }
 
+QString CurrentProjectFind::id() const
+{
+    return "Current Project";
+}
+
 QString CurrentProjectFind::name() const
 {
     return tr("Current Project");
diff --git a/src/plugins/projectexplorer/currentprojectfind.h b/src/plugins/projectexplorer/currentprojectfind.h
index e9cc264bfdf7f97a9228ae2e7738b8dbff40a7a2..e24b6490a322c43fd381771c027d92cc5ea54087 100644
--- a/src/plugins/projectexplorer/currentprojectfind.h
+++ b/src/plugins/projectexplorer/currentprojectfind.h
@@ -48,6 +48,7 @@ class CurrentProjectFind : public TextEditor::BaseFileFind
 public:
     CurrentProjectFind(ProjectExplorerPlugin *plugin, Find::SearchResultWindow *resultWindow);
 
+    QString id() const;
     QString name() const;
 
     bool isEnabled() const;
diff --git a/src/plugins/texteditor/findinfiles.cpp b/src/plugins/texteditor/findinfiles.cpp
index 335142690611b4157f10ae33994a383a0adf0e5f..e73b04e6bd9b68dc02f33a05c244841b41739ba7 100644
--- a/src/plugins/texteditor/findinfiles.cpp
+++ b/src/plugins/texteditor/findinfiles.cpp
@@ -45,6 +45,11 @@ FindInFiles::FindInFiles(SearchResultWindow *resultWindow)
 {
 }
 
+QString FindInFiles::id() const
+{
+    return "Files on Disk";
+}
+
 QString FindInFiles::name() const
 {
     return tr("Files on Disk");
diff --git a/src/plugins/texteditor/findinfiles.h b/src/plugins/texteditor/findinfiles.h
index 9fc8a2bc02ddb8a38a4dad767f2d778ba88d3b35..0ec9b97d5bc20269702926329ddd0774708eef69 100644
--- a/src/plugins/texteditor/findinfiles.h
+++ b/src/plugins/texteditor/findinfiles.h
@@ -51,6 +51,7 @@ class FindInFiles : public BaseFileFind
 public:
     explicit FindInFiles(Find::SearchResultWindow *resultWindow);
 
+    QString id() const;
     QString name() const;
     QKeySequence defaultShortcut() const;
     void findAll(const QString &txt, QTextDocument::FindFlags findFlags);