diff --git a/src/plugins/cmakeprojectmanager/cmakelocatorfilter.cpp b/src/plugins/cmakeprojectmanager/cmakelocatorfilter.cpp
index 16354946e4aaefd8b85723417bb39649d0f0ea83..577c6cf70f67009c8c87cd06a37b50f521d67904 100644
--- a/src/plugins/cmakeprojectmanager/cmakelocatorfilter.cpp
+++ b/src/plugins/cmakeprojectmanager/cmakelocatorfilter.cpp
@@ -45,6 +45,8 @@ using namespace Utils;
 
 CMakeLocatorFilter::CMakeLocatorFilter()
 {
+    setId("Build CMake target");
+    setDisplayName(tr("Build CMake target"));
     setShortcutString(QLatin1String("cm"));
 
     ProjectExplorer::SessionManager *sm = ProjectExplorer::ProjectExplorerPlugin::instance()->session();
diff --git a/src/plugins/cmakeprojectmanager/cmakelocatorfilter.h b/src/plugins/cmakeprojectmanager/cmakelocatorfilter.h
index bc99a1c4fb3d4c484e6f74eb6da7894cac56138f..f790b3e500e8766f0d9527340b56e0374b8c83bc 100644
--- a/src/plugins/cmakeprojectmanager/cmakelocatorfilter.h
+++ b/src/plugins/cmakeprojectmanager/cmakelocatorfilter.h
@@ -45,10 +45,6 @@ public:
     CMakeLocatorFilter();
     ~CMakeLocatorFilter();
 
-    QString displayName() const { return tr("Build CMake target"); }
-    QString id() const { return QLatin1String("Build CMake target"); }
-    Priority priority() const { return Medium; }
-
     QList<Locator::FilterEntry> matchesFor(QFutureInterface<Locator::FilterEntry> &future, const QString &entry);
     void accept(Locator::FilterEntry selection) const;
     void refresh(QFutureInterface<void> &future);
diff --git a/src/plugins/coreplugin/dialogs/settingsdialog.cpp b/src/plugins/coreplugin/dialogs/settingsdialog.cpp
index 9274613aabba35feb802c1fc977adcd233f18c07..e138e915647005345acee3e1968d638eb44f4c0e 100644
--- a/src/plugins/coreplugin/dialogs/settingsdialog.cpp
+++ b/src/plugins/coreplugin/dialogs/settingsdialog.cpp
@@ -270,9 +270,9 @@ public:
 // Helpers to sort by category. id
 bool optionsPageLessThan(const IOptionsPage *p1, const IOptionsPage *p2)
 {
-    if (const int cc = p1->category().toString().compare(p2->category().toString()))
-        return cc < 0;
-    return p1->id().toString().compare(p2->id().toString()) < 0;
+    if (p1->category() != p2->category())
+        return p1->category().alphabeticallyBefore(p2->category());
+    return p1->id().alphabeticallyBefore(p2->id());
 }
 
 static inline QList<Core::IOptionsPage*> sortedOptionsPages()
diff --git a/src/plugins/coreplugin/id.cpp b/src/plugins/coreplugin/id.cpp
index b947cb8229b1a9f2915b38d017fb78caad574998..8cfc02ddfdab375206b4917d44b3aa53e57b8f49 100644
--- a/src/plugins/coreplugin/id.cpp
+++ b/src/plugins/coreplugin/id.cpp
@@ -323,4 +323,9 @@ CORE_EXPORT const char *nameForId(int id)
     return stringFromId.value(id).str;
 }
 
+bool Id::alphabeticallyBefore(Id other) const
+{
+    return toString().compare(other.toString(), Qt::CaseInsensitive) < 0;
+}
+
 } // namespace Core
diff --git a/src/plugins/coreplugin/id.h b/src/plugins/coreplugin/id.h
index d2d3e93456e378651952eea80d58f33e554a0816..98b1b8eb9a6ad15458efd2611eaa0999d39b9c6e 100644
--- a/src/plugins/coreplugin/id.h
+++ b/src/plugins/coreplugin/id.h
@@ -64,6 +64,7 @@ public:
     bool operator!=(const char *name) const { return !operator==(name); }
     bool operator<(Id id) const { return m_id < id.m_id; }
     bool operator>(Id id) const { return m_id > id.m_id; }
+    bool alphabeticallyBefore(Id other) const;
     int uniqueIdentifier() const { return m_id; }
     static Id fromUniqueIdentifier(int uid) { return Id(uid); }
     static Id fromString(const QString &str); // FIXME: avoid.
diff --git a/src/plugins/cpptools/cppclassesfilter.cpp b/src/plugins/cpptools/cppclassesfilter.cpp
index bef718bd8bc22cb7d025bcd4fe32a8383e148607..e354552689228db8cf7400c4e8a883e50ea98531 100644
--- a/src/plugins/cpptools/cppclassesfilter.cpp
+++ b/src/plugins/cpptools/cppclassesfilter.cpp
@@ -35,8 +35,10 @@ using namespace CppTools::Internal;
 CppClassesFilter::CppClassesFilter(CppModelManager *manager)
     : CppLocatorFilter(manager)
 {
+    setId("Classes");
     setShortcutString(QLatin1String("c"));
     setIncludedByDefault(false);
+    setDisplayName(tr("C++ Classes"));
 
     search.setSymbolsToSearchFor(SymbolSearcher::Classes);
     search.setSeparateScope(true);
diff --git a/src/plugins/cpptools/cppclassesfilter.h b/src/plugins/cpptools/cppclassesfilter.h
index 95b66be69f24408ee65535d74bdfbdf68190a7b0..64474e70e4a00756dcb70ed3b1dd235d656a1547 100644
--- a/src/plugins/cpptools/cppclassesfilter.h
+++ b/src/plugins/cpptools/cppclassesfilter.h
@@ -42,10 +42,6 @@ class CPPTOOLS_EXPORT CppClassesFilter : public Internal::CppLocatorFilter
 public:
     CppClassesFilter(Internal::CppModelManager *manager);
     ~CppClassesFilter();
-
-    QString displayName() const { return tr("C++ Classes"); }
-    QString id() const { return QLatin1String("Classes"); }
-    Priority priority() const { return Medium; }
 };
 
 } // namespace CppTools
diff --git a/src/plugins/cpptools/cppcurrentdocumentfilter.cpp b/src/plugins/cpptools/cppcurrentdocumentfilter.cpp
index bfcce051ec10138078e477612b523a057a33b662..26a5ba6ce17a630ec4f451ff8b52d9b1e658707f 100644
--- a/src/plugins/cpptools/cppcurrentdocumentfilter.cpp
+++ b/src/plugins/cpptools/cppcurrentdocumentfilter.cpp
@@ -40,6 +40,8 @@ using namespace CPlusPlus;
 CppCurrentDocumentFilter::CppCurrentDocumentFilter(CppModelManager *manager, Core::EditorManager *editorManager)
     : m_modelManager(manager)
 {
+    setId("Methods in current Document");
+    setDisplayName(tr("C++ Methods in Current Document"));
     setShortcutString(QString(QLatin1Char('.')));
     setIncludedByDefault(false);
 
diff --git a/src/plugins/cpptools/cppcurrentdocumentfilter.h b/src/plugins/cpptools/cppcurrentdocumentfilter.h
index 6e87ac265a401e7f44de7d559c0d8428c690a9f0..9bfde7a3c9bae3bcb6800dbcb5a472fa5e3ed803 100644
--- a/src/plugins/cpptools/cppcurrentdocumentfilter.h
+++ b/src/plugins/cpptools/cppcurrentdocumentfilter.h
@@ -50,9 +50,6 @@ public:
     CppCurrentDocumentFilter(CppModelManager *manager, Core::EditorManager *editorManager);
     ~CppCurrentDocumentFilter() {}
 
-    QString displayName() const { return tr("C++ Methods in Current Document"); }
-    QString id() const { return QLatin1String("Methods in current Document"); }
-    Priority priority() const { return Medium; }
     QList<Locator::FilterEntry> matchesFor(QFutureInterface<Locator::FilterEntry> &future, const QString &entry);
     void accept(Locator::FilterEntry selection) const;
     void refresh(QFutureInterface<void> &future);
diff --git a/src/plugins/cpptools/cppfunctionsfilter.cpp b/src/plugins/cpptools/cppfunctionsfilter.cpp
index 138a1ed65f960397aacb6bbad2d62eb6fb4f1c53..5e41fc800017baf30462832913149aedbb7c5c2c 100644
--- a/src/plugins/cpptools/cppfunctionsfilter.cpp
+++ b/src/plugins/cpptools/cppfunctionsfilter.cpp
@@ -34,6 +34,8 @@ using namespace CppTools::Internal;
 CppFunctionsFilter::CppFunctionsFilter(CppModelManager *manager)
     : CppLocatorFilter(manager)
 {
+    setId("Methods");
+    setDisplayName(tr("C++ Methods and Functions"));
     setShortcutString(QString(QLatin1Char('m')));
     setIncludedByDefault(false);
 
diff --git a/src/plugins/cpptools/cppfunctionsfilter.h b/src/plugins/cpptools/cppfunctionsfilter.h
index 4d04edcf220f2196d93ec0fee36b1de76483de08..85418d4d3c9a14099415a5b308dbb8b429e3bfba 100644
--- a/src/plugins/cpptools/cppfunctionsfilter.h
+++ b/src/plugins/cpptools/cppfunctionsfilter.h
@@ -42,10 +42,6 @@ class CppFunctionsFilter : public CppLocatorFilter
 public:
     CppFunctionsFilter(CppModelManager *manager);
     ~CppFunctionsFilter();
-
-    QString displayName() const { return tr("C++ Methods and Functions"); }
-    QString id() const { return QLatin1String("Methods"); }
-    Priority priority() const { return Medium; }
 };
 
 } // namespace Internal
diff --git a/src/plugins/cpptools/cpplocatorfilter.cpp b/src/plugins/cpptools/cpplocatorfilter.cpp
index 99a0e3659168a5e97cb22a467e3ab46244088ff6..57b81681ebe761a8fca5e442666b20e05292c090 100644
--- a/src/plugins/cpptools/cpplocatorfilter.cpp
+++ b/src/plugins/cpptools/cpplocatorfilter.cpp
@@ -43,6 +43,8 @@ CppLocatorFilter::CppLocatorFilter(CppModelManager *manager)
     : m_manager(manager),
     m_forceNewSearchList(true)
 {
+    setId("Classes and Methods");
+    setDisplayName(tr("C++ Classes and Methods"));
     setShortcutString(QString(QLatin1Char(':')));
     setIncludedByDefault(false);
 
diff --git a/src/plugins/cpptools/cpplocatorfilter.h b/src/plugins/cpptools/cpplocatorfilter.h
index ff7a8ae8c3721eb855fc562b1269a486a84d6df3..da20e875c6dc4ac22c9909c36d807d993c2ea333 100644
--- a/src/plugins/cpptools/cpplocatorfilter.h
+++ b/src/plugins/cpptools/cpplocatorfilter.h
@@ -41,13 +41,11 @@ class CppModelManager;
 class CppLocatorFilter : public Locator::ILocatorFilter
 {
     Q_OBJECT
+
 public:
     CppLocatorFilter(CppModelManager *manager);
     ~CppLocatorFilter();
 
-    QString displayName() const { return tr("C++ Classes and Methods"); }
-    QString id() const { return QLatin1String("Classes and Methods"); }
-    Priority priority() const { return Medium; }
     QList<Locator::FilterEntry> matchesFor(QFutureInterface<Locator::FilterEntry> &future, const QString &entry);
     void accept(Locator::FilterEntry selection) const;
     void refresh(QFutureInterface<void> &future);
diff --git a/src/plugins/help/helpindexfilter.cpp b/src/plugins/help/helpindexfilter.cpp
index b179df0a0421a10d54f055f3f630b6735bc87477..9fc64e44b8fc2f2c175edf66057123d816e4d3f4 100644
--- a/src/plugins/help/helpindexfilter.cpp
+++ b/src/plugins/help/helpindexfilter.cpp
@@ -46,8 +46,11 @@ Q_DECLARE_METATYPE(ILocatorFilter*)
 
 HelpIndexFilter::HelpIndexFilter()
 {
+    setId("HelpIndexFilter");
+    setDisplayName(tr("Help Index"));
     setIncludedByDefault(false);
     setShortcutString(QString(QLatin1Char('?')));
+
     m_icon = QIcon(QLatin1String(":/help/images/bookmark.png"));
 }
 
@@ -55,21 +58,6 @@ HelpIndexFilter::~HelpIndexFilter()
 {
 }
 
-QString HelpIndexFilter::displayName() const
-{
-    return tr("Help Index");
-}
-
-QString HelpIndexFilter::id() const
-{
-    return QLatin1String("HelpIndexFilter");
-}
-
-ILocatorFilter::Priority HelpIndexFilter::priority() const
-{
-    return Medium;
-}
-
 QList<FilterEntry> HelpIndexFilter::matchesFor(QFutureInterface<Locator::FilterEntry> &future, const QString &entry)
 {
     QStringList keywords;
diff --git a/src/plugins/help/helpindexfilter.h b/src/plugins/help/helpindexfilter.h
index 5abf7f2e67e43f565512ed95b253482f175aab07..80cb7b7f89531edda35ff4c3b9b8e6a34a931797 100644
--- a/src/plugins/help/helpindexfilter.h
+++ b/src/plugins/help/helpindexfilter.h
@@ -46,9 +46,6 @@ public:
     ~HelpIndexFilter();
 
     // ILocatorFilter
-    QString displayName() const;
-    QString id() const;
-    Priority priority() const;
     QList<Locator::FilterEntry> matchesFor(QFutureInterface<Locator::FilterEntry> &future, const QString &entry);
     void accept(Locator::FilterEntry selection) const;
     void refresh(QFutureInterface<void> &future);
diff --git a/src/plugins/help/remotehelpfilter.cpp b/src/plugins/help/remotehelpfilter.cpp
index aa6cad21e202afc9ff2ddef9e8009423c8a3421f..12adf8b87fd00660a2b103b740c40440acc789c7 100644
--- a/src/plugins/help/remotehelpfilter.cpp
+++ b/src/plugins/help/remotehelpfilter.cpp
@@ -80,8 +80,11 @@ void RemoteFilterOptions::updateRemoveButton()
 
 RemoteHelpFilter::RemoteHelpFilter()
 {
+    setId("RemoteHelpFilter");
+    setDisplayName(tr("Web Search"));
     setIncludedByDefault(false);
     setShortcutString(QLatin1String("r"));
+
     m_remoteUrls.append(QLatin1String("http://www.bing.com/search?q=%1"));
     m_remoteUrls.append(QLatin1String("http://www.google.com/search?q=%1"));
     m_remoteUrls.append(QLatin1String("http://search.yahoo.com/search?p=%1"));
@@ -93,21 +96,6 @@ RemoteHelpFilter::~RemoteHelpFilter()
 {
 }
 
-QString RemoteHelpFilter::displayName() const
-{
-    return tr("Web Search");
-}
-
-QString RemoteHelpFilter::id() const
-{
-    return QLatin1String("RemoteHelpFilter");
-}
-
-Locator::ILocatorFilter::Priority RemoteHelpFilter::priority() const
-{
-    return Medium;
-}
-
 QList<Locator::FilterEntry> RemoteHelpFilter::matchesFor(QFutureInterface<Locator::FilterEntry> &future, const QString &pattern)
 {
     QList<Locator::FilterEntry> entries;
diff --git a/src/plugins/help/remotehelpfilter.h b/src/plugins/help/remotehelpfilter.h
index c76e4f12cbf0c14fb64a8e88026bb028ffc0b530..5cfe13ab92f54f425f2c8d395f503e49edc7059f 100644
--- a/src/plugins/help/remotehelpfilter.h
+++ b/src/plugins/help/remotehelpfilter.h
@@ -47,9 +47,6 @@ public:
     ~RemoteHelpFilter();
 
     // ILocatorFilter
-    QString displayName() const;
-    QString id() const;
-    Priority priority() const;
     QList<Locator::FilterEntry> matchesFor(QFutureInterface<Locator::FilterEntry> &future, const QString &entry);
     void accept(Locator::FilterEntry selection) const;
     void refresh(QFutureInterface<void> &future);
diff --git a/src/plugins/locator/commandlocator.cpp b/src/plugins/locator/commandlocator.cpp
index 639a9995a418c3a6388fa74264a43c78291076d9..04f5d606f69eb9e878528cdeed33e18ead79de75 100644
--- a/src/plugins/locator/commandlocator.cpp
+++ b/src/plugins/locator/commandlocator.cpp
@@ -31,6 +31,7 @@
 
 #include <coreplugin/actionmanager/command.h>
 #include <coreplugin/icore.h>
+#include <coreplugin/id.h>
 
 #include <utils/qtcassert.h>
 
@@ -38,14 +39,8 @@
 
 namespace Locator {
 
-struct CommandLocatorPrivate {
-    CommandLocatorPrivate(const QString &prefix,
-                          const QString &displayName) :
-        m_prefix(prefix), m_displayName(displayName) {}
-
-    const QString m_prefix;
-    const QString m_displayName;
-
+struct CommandLocatorPrivate
+{
     QList<Core::Command *> commands;
 };
 
@@ -54,8 +49,10 @@ CommandLocator::CommandLocator(const QString &prefix,
                                const QString &shortCutString,
                                QObject *parent) :
     Locator::ILocatorFilter(parent),
-    d(new CommandLocatorPrivate(prefix, displayName))
+    d(new CommandLocatorPrivate)
 {
+    setId(Core::Id::fromString(prefix));
+    setDisplayName(displayName);
     setShortcutString(shortCutString);
 }
 
@@ -69,21 +66,6 @@ void CommandLocator::appendCommand(Core::Command *cmd)
     d->commands.push_back(cmd);
 }
 
-QString CommandLocator::displayName() const
-{
-    return d->m_displayName;
-}
-
-QString CommandLocator::id() const
-{
-    return d->m_prefix;
-}
-
-ILocatorFilter::Priority CommandLocator::priority() const
-{
-    return Medium;
-}
-
 QList<Locator::FilterEntry> CommandLocator::matchesFor(QFutureInterface<Locator::FilterEntry> &future, const QString &entry)
 {
     QList<FilterEntry> filters;
diff --git a/src/plugins/locator/commandlocator.h b/src/plugins/locator/commandlocator.h
index 53e0d3ce181aa5a79cfc4949a241011a3e77717a..556bdd8244b5ed34648c03ea3cdb526bcff2544a 100644
--- a/src/plugins/locator/commandlocator.h
+++ b/src/plugins/locator/commandlocator.h
@@ -32,15 +32,8 @@
 
 #include "locator_global.h"
 #include "ilocatorfilter.h"
-#include <QList>
 
-QT_BEGIN_NAMESPACE
-class QAction;
-QT_END_NAMESPACE
-
-namespace Core {
-    class Command;
-}
+namespace Core { class Command; }
 
 namespace Locator {
 /* Command locators: Provides completion for a set of
@@ -57,27 +50,18 @@ public:
                             const QString &displayName,
                             const QString &shortCutString,
                             QObject *parent = 0);
-    virtual ~CommandLocator();
+    ~CommandLocator();
 
     void appendCommand(Core::Command *cmd);
 
-    virtual QString displayName() const;
-    virtual QString id() const;
-    virtual Priority priority() const;
-    virtual QList<FilterEntry> matchesFor(QFutureInterface<Locator::FilterEntry> &future, const QString &entry);
-    virtual void accept(FilterEntry selection) const;
-    virtual void refresh(QFutureInterface<void> &future);
+    QList<FilterEntry> matchesFor(QFutureInterface<Locator::FilterEntry> &future, const QString &entry);
+    void accept(FilterEntry selection) const;
+    void refresh(QFutureInterface<void> &future);
 
 private:
     CommandLocatorPrivate *d;
 };
 
-inline CommandLocator &operator<<(CommandLocator &locator, Core::Command *cmd)
-{
-    locator.appendCommand(cmd);
-    return locator;
-}
-
 } // namespace Locator
 
 #endif // COMMANDLOCATOR_H
diff --git a/src/plugins/locator/directoryfilter.cpp b/src/plugins/locator/directoryfilter.cpp
index 13db0e9dc8c28a8e9ebddefe18b59d327b401632..8674cd62eddb167a7264d5ba4017de67832684e5 100644
--- a/src/plugins/locator/directoryfilter.cpp
+++ b/src/plugins/locator/directoryfilter.cpp
@@ -43,11 +43,16 @@ using namespace Locator::Internal;
 
 DirectoryFilter::DirectoryFilter()
   : m_name(tr("Generic Directory Filter")),
-    m_filters(QStringList() << QLatin1String("*.h") << QLatin1String("*.cpp")
-                            << QLatin1String("*.ui") << QLatin1String("*.qrc")),
     m_dialog(0)
 {
+    setId(Core::Id::fromString(m_name));
     setIncludedByDefault(true);
+    setDisplayName(m_name);
+
+    m_filters.append(QLatin1String("*.h"));
+    m_filters.append(QLatin1String("*.cpp"));
+    m_filters.append(QLatin1String("*.ui"));
+    m_filters.append(QLatin1String("*.qrc"));
 }
 
 QByteArray DirectoryFilter::saveState() const
diff --git a/src/plugins/locator/directoryfilter.h b/src/plugins/locator/directoryfilter.h
index 932898f10c6e86b485be73640ae3fba0a618ade4..4379daa4cefffb2b58bb66d35a73354f5946df45 100644
--- a/src/plugins/locator/directoryfilter.h
+++ b/src/plugins/locator/directoryfilter.h
@@ -48,9 +48,6 @@ class DirectoryFilter : public BaseFileFilter
 
 public:
     DirectoryFilter();
-    QString displayName() const { return m_name; }
-    QString id() const { return m_name; }
-    Locator::ILocatorFilter::Priority priority() const { return Locator::ILocatorFilter::Medium; }
     QByteArray saveState() const;
     bool restoreState(const QByteArray &state);
     bool openConfigDialog(QWidget *parent, bool &needsRefresh);
diff --git a/src/plugins/locator/executefilter.cpp b/src/plugins/locator/executefilter.cpp
index cd717ab686dd1e0559a542bbe76e1cae01027d65..42c6e6fdc96858f5d281dbc336835501fa8a490f 100644
--- a/src/plugins/locator/executefilter.cpp
+++ b/src/plugins/locator/executefilter.cpp
@@ -41,6 +41,8 @@ using namespace Locator::Internal;
 
 ExecuteFilter::ExecuteFilter()
 {
+    setId("Execute custom commands");
+    setDisplayName(tr("Execute Custom Commands"));
     setShortcutString(QString(QLatin1Char('!')));
     setIncludedByDefault(false);
 
diff --git a/src/plugins/locator/executefilter.h b/src/plugins/locator/executefilter.h
index 13d86d5cf2096872f72e049603dde982887f0137..9fee14a06d61fc69622b7cc2729c63aca7df244d 100644
--- a/src/plugins/locator/executefilter.h
+++ b/src/plugins/locator/executefilter.h
@@ -53,9 +53,6 @@ class ExecuteFilter : public Locator::ILocatorFilter
 
 public:
     ExecuteFilter();
-    QString displayName() const { return tr("Execute Custom Commands"); }
-    QString id() const { return QLatin1String("Execute custom commands"); }
-    Locator::ILocatorFilter::Priority priority() const { return Locator::ILocatorFilter::Medium; }
     QList<Locator::FilterEntry> matchesFor(QFutureInterface<Locator::FilterEntry> &future,
                                            const QString &entry);
     void accept(Locator::FilterEntry selection) const;
diff --git a/src/plugins/locator/filesystemfilter.cpp b/src/plugins/locator/filesystemfilter.cpp
index 4a6381e730be529b842c0808254fbc77e0749c0f..f0da71dd8919058eb4d4776f65e9ad39972d4c34 100644
--- a/src/plugins/locator/filesystemfilter.cpp
+++ b/src/plugins/locator/filesystemfilter.cpp
@@ -41,6 +41,8 @@ using namespace Locator::Internal;
 FileSystemFilter::FileSystemFilter(EditorManager *editorManager, LocatorWidget *locatorWidget)
         : m_editorManager(editorManager), m_locatorWidget(locatorWidget), m_includeHidden(true)
 {
+    setId("Files in file system");
+    setDisplayName(tr("Files in File System"));
     setShortcutString(QString(QLatin1Char('f')));
     setIncludedByDefault(false);
 }
diff --git a/src/plugins/locator/filesystemfilter.h b/src/plugins/locator/filesystemfilter.h
index 40db89aaa92d7d4010c72f742507146f7a250b00..74ce98ada6a43bb64197477e26c4e436c540b5b2 100644
--- a/src/plugins/locator/filesystemfilter.h
+++ b/src/plugins/locator/filesystemfilter.h
@@ -38,9 +38,7 @@
 #include <QByteArray>
 #include <QFutureInterface>
 
-namespace Core {
-    class EditorManager;
-}
+namespace Core { class EditorManager; }
 
 namespace Locator {
 namespace Internal {
@@ -53,9 +51,6 @@ class FileSystemFilter : public Locator::ILocatorFilter
 
 public:
     FileSystemFilter(Core::EditorManager *editorManager, LocatorWidget *locatorWidget);
-    QString displayName() const { return tr("Files in File System"); }
-    QString id() const { return QLatin1String("Files in file system"); }
-    Locator::ILocatorFilter::Priority priority() const { return Locator::ILocatorFilter::Medium; }
     QList<Locator::FilterEntry> matchesFor(QFutureInterface<Locator::FilterEntry> &future, const QString &entry);
     void accept(Locator::FilterEntry selection) const;
     QByteArray saveState() const;
diff --git a/src/plugins/locator/ilocatorfilter.cpp b/src/plugins/locator/ilocatorfilter.cpp
index 445a3a6b679b19b7724723bea4273c92d24f64ad..2a664ac927457f2b78c8b022ae58dfc50e1319a6 100644
--- a/src/plugins/locator/ilocatorfilter.cpp
+++ b/src/plugins/locator/ilocatorfilter.cpp
@@ -40,9 +40,11 @@ using namespace Locator;
 
 ILocatorFilter::ILocatorFilter(QObject *parent):
     QObject(parent),
+    m_priority(Medium),
     m_includedByDefault(false),
     m_hidden(false),
-    m_enabled(true)
+    m_enabled(true),
+    m_isConfigurable(true)
 {
 }
 
@@ -114,9 +116,25 @@ bool ILocatorFilter::openConfigDialog(QWidget *parent, bool &needsRefresh)
     return false;
 }
 
+QString ILocatorFilter::trimWildcards(const QString &str)
+{
+    if (str.isEmpty())
+        return str;
+    int first = 0, last = str.size()-1;
+    const QChar asterisk = QLatin1Char('*');
+    const QChar question = QLatin1Char('?');
+    while (first < str.size() && (str.at(first) == asterisk || str.at(first) == question))
+        ++first;
+    while (last >= 0 && (str.at(last) == asterisk || str.at(last) == question))
+        --last;
+    if (first > last)
+        return QString();
+    return str.mid(first, last-first+1);
+}
+
 bool ILocatorFilter::isConfigurable() const
 {
-    return true;
+    return m_isConfigurable;
 }
 
 bool ILocatorFilter::isIncludedByDefault() const
@@ -144,7 +162,42 @@ bool ILocatorFilter::isEnabled() const
     return m_enabled;
 }
 
+Core::Id ILocatorFilter::id() const
+{
+    return m_id;
+}
+
+QString ILocatorFilter::displayName() const
+{
+    return m_displayName;
+}
+
+ILocatorFilter::Priority ILocatorFilter::priority() const
+{
+    return m_priority;
+}
+
 void ILocatorFilter::setEnabled(bool enabled)
 {
     m_enabled = enabled;
 }
+
+void ILocatorFilter::setId(Core::Id id)
+{
+    m_id = id;
+}
+
+void ILocatorFilter::setPriority(Priority priority)
+{
+    m_priority = priority;
+}
+
+void ILocatorFilter::setDisplayName(const QString &displayString)
+{
+    m_displayName = displayString;
+}
+
+void ILocatorFilter::setConfigurable(bool configurable)
+{
+    m_isConfigurable = configurable;
+}
diff --git a/src/plugins/locator/ilocatorfilter.h b/src/plugins/locator/ilocatorfilter.h
index 2c2336ca0f0927ee1ed12648bd5b7865307b8100..a588ed24955eef1b15050f55ac2cdf0f68d895fe 100644
--- a/src/plugins/locator/ilocatorfilter.h
+++ b/src/plugins/locator/ilocatorfilter.h
@@ -32,6 +32,8 @@
 
 #include "locator_global.h"
 
+#include <coreplugin/id.h>
+
 #include <QVariant>
 #include <QFutureInterface>
 #include <QIcon>
@@ -88,14 +90,14 @@ public:
     ILocatorFilter(QObject *parent = 0);
     virtual ~ILocatorFilter() {}
 
-    /* Visible name. */
-    virtual QString displayName() const = 0;
+    /* Internal Id. */
+    Core::Id id() const;
 
-    /* Internal name. */
-    virtual QString id() const = 0;
+    /* Visible name. */
+    QString displayName() const;
 
     /* Selection list order in case of multiple active filters (high goes on top). */
-    virtual Priority priority() const = 0;
+    Priority priority() const;
 
     /* String to type to use this filter exclusively. */
     QString shortcutString() const;
@@ -124,7 +126,7 @@ public:
 
     /* If there is a configure dialog available for this filter. The default
      * implementation returns true. */
-    virtual bool isConfigurable() const;
+    bool isConfigurable() const;
 
     /* Is this filter used also when the shortcutString is not used? */
     bool isIncludedByDefault() const;
@@ -135,20 +137,7 @@ public:
     /* Returns whether the filter should be enabled and used in menus. */
     bool isEnabled() const;
 
-    static QString trimWildcards(const QString &str) {
-        if (str.isEmpty())
-            return str;
-        int first = 0, last = str.size()-1;
-        const QChar asterisk = QLatin1Char('*');
-        const QChar question = QLatin1Char('?');
-        while (first < str.size() && (str.at(first) == asterisk || str.at(first) == question))
-            ++first;
-        while (last >= 0 && (str.at(last) == asterisk || str.at(last) == question))
-            --last;
-        if (first > last)
-            return QString();
-        return str.mid(first, last-first+1);
-    }
+    static QString trimWildcards(const QString &str);
 
 public slots:
     /* Enable or disable the filter. */
@@ -158,12 +147,20 @@ protected:
     void setShortcutString(const QString &shortcut);
     void setIncludedByDefault(bool includedByDefault);
     void setHidden(bool hidden);
+    void setId(Core::Id id);
+    void setPriority(Priority priority);
+    void setDisplayName(const QString &displayString);
+    void setConfigurable(bool configurable);
 
 private:
+    Core::Id m_id;
     QString m_shortcut;
+    Priority m_priority;
+    QString m_displayName;
     bool m_includedByDefault;
     bool m_hidden;
     bool m_enabled;
+    bool m_isConfigurable;
 };
 
 } // namespace Locator
diff --git a/src/plugins/locator/locatorfiltersfilter.cpp b/src/plugins/locator/locatorfiltersfilter.cpp
index 37304657422075acd7fd6596fbf5a087dd044c09..364ef5376ecce4080f5c2e0731ef0f31ff09d4cf 100644
--- a/src/plugins/locator/locatorfiltersfilter.cpp
+++ b/src/plugins/locator/locatorfiltersfilter.cpp
@@ -44,23 +44,12 @@ LocatorFiltersFilter::LocatorFiltersFilter(LocatorPlugin *plugin,
     m_locatorWidget(locatorWidget),
     m_icon(QIcon(QLatin1String(Core::Constants::ICON_NEXT)))
 {
+    setId("FiltersFilter");
+    setDisplayName(tr("Available filters"));
     setIncludedByDefault(true);
     setHidden(true);
-}
-
-QString LocatorFiltersFilter::displayName() const
-{
-    return tr("Available filters");
-}
-
-QString LocatorFiltersFilter::id() const
-{
-    return QLatin1String("FiltersFilter");
-}
-
-ILocatorFilter::Priority LocatorFiltersFilter::priority() const
-{
-    return High;
+    setPriority(High);
+    setConfigurable(false);
 }
 
 QList<FilterEntry> LocatorFiltersFilter::matchesFor(QFutureInterface<Locator::FilterEntry> &future, const QString &entry)
@@ -104,8 +93,3 @@ void LocatorFiltersFilter::refresh(QFutureInterface<void> &future)
     Q_UNUSED(future)
     // Nothing to refresh
 }
-
-bool LocatorFiltersFilter::isConfigurable() const
-{
-    return false;
-}
diff --git a/src/plugins/locator/locatorfiltersfilter.h b/src/plugins/locator/locatorfiltersfilter.h
index df704452588c4c97daf7ff29aebffe79bd1d8ed5..b456774ce61acb08dab083693cdb2bf400df77a4 100644
--- a/src/plugins/locator/locatorfiltersfilter.h
+++ b/src/plugins/locator/locatorfiltersfilter.h
@@ -53,13 +53,9 @@ public:
                          LocatorWidget *locatorWidget);
 
     // ILocatorFilter
-    QString displayName() const;
-    QString id() const;
-    Priority priority() const;
     QList<FilterEntry> matchesFor(QFutureInterface<Locator::FilterEntry> &future, const QString &entry);
     void accept(FilterEntry selection) const;
     void refresh(QFutureInterface<void> &future);
-    bool isConfigurable() const;
 
 private:
     LocatorPlugin *m_plugin;
diff --git a/src/plugins/locator/locatorplugin.cpp b/src/plugins/locator/locatorplugin.cpp
index 5366f3ad5f8b5262024a97275a9246ce8ce05d8f..871d6ff02f159d144a917ff61201e3710ac21b7d 100644
--- a/src/plugins/locator/locatorplugin.cpp
+++ b/src/plugins/locator/locatorplugin.cpp
@@ -74,9 +74,7 @@ namespace {
             return true;
         if (first->priority() > second->priority())
             return false;
-        if (first->id().compare(second->id(), Qt::CaseInsensitive) < 0)
-            return true;
-        return false;
+        return first->id().alphabeticallyBefore(second->id());
     }
 }
 
@@ -200,7 +198,7 @@ void LocatorPlugin::saveSettings()
         s->setValue(QLatin1String("RefreshInterval"), refreshInterval());
         foreach (ILocatorFilter *filter, m_filters) {
             if (!m_customFilters.contains(filter))
-                s->setValue(filter->id(), filter->saveState());
+                s->setValue(filter->id().toString(), filter->saveState());
         }
         s->beginGroup(QLatin1String("CustomFilters"));
         int i = 0;
diff --git a/src/plugins/locator/locatorplugin.h b/src/plugins/locator/locatorplugin.h
index 4d066080d4eae458f2d5441a1bb132d83a05564f..3465311ed0aacaa78dae609e7ddde645b98f038b 100644
--- a/src/plugins/locator/locatorplugin.h
+++ b/src/plugins/locator/locatorplugin.h
@@ -108,8 +108,8 @@ void LocatorPlugin::loadSettingsHelper(S *settings)
     m_refreshTimer.setInterval(settings->value(QLatin1String("RefreshInterval"), 60).toInt() * 60000);
 
     foreach (ILocatorFilter *filter, m_filters) {
-        if (settings->contains(filter->id())) {
-            const QByteArray state = settings->value(filter->id()).toByteArray();
+        if (settings->contains(filter->id().toString())) {
+            const QByteArray state = settings->value(filter->id().toString()).toByteArray();
             if (!state.isEmpty())
                 filter->restoreState(state);
         }
diff --git a/src/plugins/locator/locatorwidget.cpp b/src/plugins/locator/locatorwidget.cpp
index 27c7d92159611652724fcc98b341c9b5cdd92336..ee44f43b30b4d2f5cac6bce851a61a782a72faa9 100644
--- a/src/plugins/locator/locatorwidget.cpp
+++ b/src/plugins/locator/locatorwidget.cpp
@@ -317,37 +317,36 @@ void LocatorWidget::updateFilterList()
     m_filterMenu->clear();
 
     // update actions and menu
-    QMap<QString, QAction *> actionCopy = m_filterActionMap;
+    QMap<Id, QAction *> actionCopy = m_filterActionMap;
     m_filterActionMap.clear();
     // register new actions, update existent
     foreach (ILocatorFilter *filter, m_locatorPlugin->filters()) {
         if (filter->shortcutString().isEmpty() || filter->isHidden())
             continue;
-        Core::Id locatorId = Core::Id::fromString(QLatin1String("Locator.") + filter->id());
+        Id filterId = filter->id();
+        Id locatorId = filterId.withPrefix("Locator.");
         QAction *action = 0;
-        Core::Command *cmd = 0;
-        if (!actionCopy.contains(filter->id())) {
+        Command *cmd = 0;
+        if (!actionCopy.contains(filterId)) {
             // register new action
             action = new QAction(filter->displayName(), this);
-            cmd = Core::ActionManager::registerAction(action, locatorId,
-                               Core::Context(Core::Constants::C_GLOBAL));
-            cmd->setAttribute(Core::Command::CA_UpdateText);
+            cmd = ActionManager::registerAction(action, locatorId,
+                               Context(Core::Constants::C_GLOBAL));
+            cmd->setAttribute(Command::CA_UpdateText);
             connect(action, SIGNAL(triggered()), this, SLOT(filterSelected()));
             action->setData(qVariantFromValue(filter));
         } else {
-            action = actionCopy.take(filter->id());
-            action->setText(filter->displayName());
-            cmd = Core::ActionManager::command(locatorId);
+            action = actionCopy.take(filterId);
+            action->setText(filterId.toString());
+            cmd = ActionManager::command(locatorId);
         }
-        m_filterActionMap.insert(filter->id(), action);
+        m_filterActionMap.insert(filterId, action);
         m_filterMenu->addAction(cmd->action());
     }
 
     // unregister actions that are deleted now
-    foreach (const QString &id, actionCopy.keys()) {
-        Core::ActionManager::unregisterAction(actionCopy.value(id),
-            Core::Id::fromString(QLatin1String("Locator.") + id));
-    }
+    foreach (const Id id, actionCopy.keys())
+        ActionManager::unregisterAction(actionCopy.value(id), id.withPrefix("Locator."));
     qDeleteAll(actionCopy);
 
     m_filterMenu->addSeparator();
diff --git a/src/plugins/locator/locatorwidget.h b/src/plugins/locator/locatorwidget.h
index 228e7700de1ea3d6f53e5bafd5b934783cd23217..6a6fdf2813626fc9119f728e88d959c371aaa2ca 100644
--- a/src/plugins/locator/locatorwidget.h
+++ b/src/plugins/locator/locatorwidget.h
@@ -95,7 +95,7 @@ private:
     Utils::FilterLineEdit *m_fileLineEdit;
     QTimer *m_showPopupTimer;
     QFutureWatcher<FilterEntry> *m_entriesWatcher;
-    QMap<QString, QAction *> m_filterActionMap;
+    QMap<Core::Id, QAction *> m_filterActionMap;
     bool m_updateRequested;
     bool m_acceptRequested;
     bool m_possibleToolTipRequest;
diff --git a/src/plugins/locator/opendocumentsfilter.cpp b/src/plugins/locator/opendocumentsfilter.cpp
index b69259f6b20e8c2d64b9dadc9ab8facc8cf48586..9f454593ead77777439c9939aaa2414f22135e55 100644
--- a/src/plugins/locator/opendocumentsfilter.cpp
+++ b/src/plugins/locator/opendocumentsfilter.cpp
@@ -44,12 +44,15 @@ using namespace Utils;
 OpenDocumentsFilter::OpenDocumentsFilter(EditorManager *editorManager) :
     m_editorManager(editorManager)
 {
+    setId("Open documents");
+    setDisplayName(tr("Open Documents"));
+    setShortcutString(QString(QLatin1Char('o')));
+    setIncludedByDefault(true);
+
     connect(m_editorManager, SIGNAL(editorOpened(Core::IEditor*)),
             this, SLOT(refreshInternally()));
     connect(m_editorManager, SIGNAL(editorsClosed(QList<Core::IEditor*>)),
             this, SLOT(refreshInternally()));
-    setShortcutString(QString(QLatin1Char('o')));
-    setIncludedByDefault(true);
 }
 
 QList<FilterEntry> OpenDocumentsFilter::matchesFor(QFutureInterface<Locator::FilterEntry> &future, const QString &entry_)
diff --git a/src/plugins/locator/opendocumentsfilter.h b/src/plugins/locator/opendocumentsfilter.h
index f04c64d10f75fb46b70d2d109ef48879d4adadbe..152a5346977ab38a5fcc4117f68af9f82913e38f 100644
--- a/src/plugins/locator/opendocumentsfilter.h
+++ b/src/plugins/locator/opendocumentsfilter.h
@@ -52,9 +52,6 @@ class OpenDocumentsFilter : public Locator::ILocatorFilter
 
 public:
     explicit OpenDocumentsFilter(Core::EditorManager *editorManager);
-    QString displayName() const { return tr("Open Documents"); }
-    QString id() const { return QLatin1String("Open documents"); }
-    Locator::ILocatorFilter::Priority priority() const { return Locator::ILocatorFilter::Medium; }
     QList<Locator::FilterEntry> matchesFor(QFutureInterface<Locator::FilterEntry> &future, const QString &entry);
     void accept(Locator::FilterEntry selection) const;
     void refresh(QFutureInterface<void> &future);
diff --git a/src/plugins/macros/macrolocatorfilter.cpp b/src/plugins/macros/macrolocatorfilter.cpp
index e5755f34a7dbb417029553aa7627609ea9765e87..2a24f08716be8224c0b7e1a3d865b8f9e23f86c5 100644
--- a/src/plugins/macros/macrolocatorfilter.cpp
+++ b/src/plugins/macros/macrolocatorfilter.cpp
@@ -43,6 +43,8 @@ using namespace Macros::Internal;
 MacroLocatorFilter::MacroLocatorFilter():
     m_icon(QPixmap(QLatin1String(":/macros/images/macro.png")))
 {
+    setId("Macros");
+    setDisplayName(tr("Macros"));
     setShortcutString(QLatin1String("rm"));
 }
 
diff --git a/src/plugins/macros/macrolocatorfilter.h b/src/plugins/macros/macrolocatorfilter.h
index 2a9804625a0b1b8d11edb09b001e2146dccc462e..aeb1094b694a35b1eba2babab260bf5e4bfdb3f3 100644
--- a/src/plugins/macros/macrolocatorfilter.h
+++ b/src/plugins/macros/macrolocatorfilter.h
@@ -48,10 +48,6 @@ public:
     MacroLocatorFilter();
     ~MacroLocatorFilter();
 
-    QString displayName() const { return tr("Macros"); }
-    QString id() const { return QLatin1String("Macros"); }
-    Priority priority() const { return Medium; }
-
     QList<Locator::FilterEntry> matchesFor(QFutureInterface<Locator::FilterEntry> &future, const QString &entry);
     void accept(Locator::FilterEntry selection) const;
     void refresh(QFutureInterface<void> &future);
diff --git a/src/plugins/projectexplorer/allprojectsfilter.cpp b/src/plugins/projectexplorer/allprojectsfilter.cpp
index e30e05d6f8e5f45da183b7f27c0ccb567aa8434f..01c2ff02bab78e641c5edb9c9fe6066744b4d60a 100644
--- a/src/plugins/projectexplorer/allprojectsfilter.cpp
+++ b/src/plugins/projectexplorer/allprojectsfilter.cpp
@@ -42,10 +42,14 @@ using namespace ProjectExplorer::Internal;
 AllProjectsFilter::AllProjectsFilter(ProjectExplorerPlugin *pe)
     : m_projectExplorer(pe), m_filesUpToDate(false)
 {
-    connect(m_projectExplorer, SIGNAL(fileListChanged()),
-            this, SLOT(markFilesAsOutOfDate()));
+    setId("Files in any project");
+    setDisplayName(tr("Files in Any Project"));
     setShortcutString(QString(QLatin1Char('a')));
+    setPriority(Low);
     setIncludedByDefault(true);
+
+    connect(m_projectExplorer, SIGNAL(fileListChanged()),
+            this, SLOT(markFilesAsOutOfDate()));
 }
 
 void AllProjectsFilter::markFilesAsOutOfDate()
diff --git a/src/plugins/projectexplorer/allprojectsfilter.h b/src/plugins/projectexplorer/allprojectsfilter.h
index d17e28b9dbe98fdf458751fe0db220cc5741317b..05b07533123d1a803458a379c750d8e1fe35b01d 100644
--- a/src/plugins/projectexplorer/allprojectsfilter.h
+++ b/src/plugins/projectexplorer/allprojectsfilter.h
@@ -47,9 +47,6 @@ class AllProjectsFilter : public Locator::BaseFileFilter
 
 public:
     explicit AllProjectsFilter(ProjectExplorerPlugin *pe);
-    QString displayName() const { return tr("Files in Any Project"); }
-    QString id() const { return QLatin1String("Files in any project"); }
-    Locator::ILocatorFilter::Priority priority() const { return Locator::ILocatorFilter::Low; }
     void refresh(QFutureInterface<void> &future);
 
 protected:
diff --git a/src/plugins/projectexplorer/currentprojectfilter.cpp b/src/plugins/projectexplorer/currentprojectfilter.cpp
index ab74f3481485a34d9ef2876d0f00762e049f4309..d817a716cb17ad554b53c40abc248da86d1e6fe1 100644
--- a/src/plugins/projectexplorer/currentprojectfilter.cpp
+++ b/src/plugins/projectexplorer/currentprojectfilter.cpp
@@ -41,12 +41,14 @@ using namespace ProjectExplorer::Internal;
 CurrentProjectFilter::CurrentProjectFilter(ProjectExplorerPlugin *pe)
   : BaseFileFilter(), m_projectExplorer(pe), m_project(0), m_filesUpToDate(false)
 {
-    m_projectExplorer = pe;
+    setId("Files in current project");
+    setDisplayName(tr("Files in Current Project"));
+    setPriority(Low);
+    setShortcutString(QString(QLatin1Char('p')));
+    setIncludedByDefault(false);
 
     connect(m_projectExplorer, SIGNAL(currentProjectChanged(ProjectExplorer::Project*)),
             this, SLOT(currentProjectChanged(ProjectExplorer::Project*)));
-    setShortcutString(QString(QLatin1Char('p')));
-    setIncludedByDefault(false);
 }
 
 void CurrentProjectFilter::markFilesAsOutOfDate()
diff --git a/src/plugins/projectexplorer/currentprojectfilter.h b/src/plugins/projectexplorer/currentprojectfilter.h
index a358e16bcb542d1c0bbcb56216751401189f1ce5..c0dc262e6e813260d7892119f6e7d7ec705f142c 100644
--- a/src/plugins/projectexplorer/currentprojectfilter.h
+++ b/src/plugins/projectexplorer/currentprojectfilter.h
@@ -47,9 +47,6 @@ class CurrentProjectFilter : public Locator::BaseFileFilter
 
 public:
     CurrentProjectFilter(ProjectExplorerPlugin *pe);
-    QString displayName() const { return tr("Files in Current Project"); }
-    QString id() const { return QLatin1String("Files in current project"); }
-    Locator::ILocatorFilter::Priority priority() const { return Locator::ILocatorFilter::Low; }
     void refresh(QFutureInterface<void> &future);
 
 protected:
@@ -60,7 +57,6 @@ private slots:
     void markFilesAsOutOfDate();
 
 private:
-
     ProjectExplorerPlugin *m_projectExplorer;
     Project *m_project;
     bool m_filesUpToDate;
diff --git a/src/plugins/qmljstools/qmljsfunctionfilter.cpp b/src/plugins/qmljstools/qmljsfunctionfilter.cpp
index 97dc5478d8ba4ff542cc578712e9fdbd5c3c41f9..c7689cd9354cb3c177085d18dca9881b83b973ee 100644
--- a/src/plugins/qmljstools/qmljsfunctionfilter.cpp
+++ b/src/plugins/qmljstools/qmljsfunctionfilter.cpp
@@ -43,6 +43,8 @@ FunctionFilter::FunctionFilter(LocatorData *data, QObject *parent)
     : Locator::ILocatorFilter(parent)
     , m_data(data)
 {
+    setId("Functions");
+    setDisplayName(tr("QML Methods and Functions"));
     setShortcutString(QString(QLatin1Char('m')));
     setIncludedByDefault(false);
 }
diff --git a/src/plugins/qmljstools/qmljsfunctionfilter.h b/src/plugins/qmljstools/qmljsfunctionfilter.h
index 55c9bb3a2c25a64d8d23be0ce843a0b01b840215..2f89cd64962855cc69c59d28cc19dd0b2f413de1 100644
--- a/src/plugins/qmljstools/qmljsfunctionfilter.h
+++ b/src/plugins/qmljstools/qmljsfunctionfilter.h
@@ -40,13 +40,11 @@ class LocatorData;
 class FunctionFilter : public Locator::ILocatorFilter
 {
     Q_OBJECT
+
 public:
     explicit FunctionFilter(LocatorData *data, QObject *parent = 0);
     ~FunctionFilter();
 
-    QString displayName() const { return tr("QML Methods and Functions"); }
-    QString id() const { return QLatin1String("Functions"); }
-    Priority priority() const { return Medium; }
     QList<Locator::FilterEntry> matchesFor(QFutureInterface<Locator::FilterEntry> &future, const QString &entry);
     void accept(Locator::FilterEntry selection) const;
     void refresh(QFutureInterface<void> &future);
diff --git a/src/plugins/texteditor/linenumberfilter.cpp b/src/plugins/texteditor/linenumberfilter.cpp
index 79e06e5bdd95895de65aca4e58480c0935ffbe64..3b356e7633e97cde5f921745098bf0233f938638 100644
--- a/src/plugins/texteditor/linenumberfilter.cpp
+++ b/src/plugins/texteditor/linenumberfilter.cpp
@@ -44,6 +44,9 @@ using namespace TextEditor::Internal;
 LineNumberFilter::LineNumberFilter(QObject *parent)
   : ILocatorFilter(parent)
 {
+    setId("Line in current document");
+    setDisplayName(tr("Line in Current Document"));
+    setPriority(High);
     setShortcutString(QString(QLatin1Char('l')));
     setIncludedByDefault(true);
 }
diff --git a/src/plugins/texteditor/linenumberfilter.h b/src/plugins/texteditor/linenumberfilter.h
index 5d4a9a6a22f6dff98713a2f25377b79e0ed0bbc0..b137876548271d84207ca27fda876937f10a0ebb 100644
--- a/src/plugins/texteditor/linenumberfilter.h
+++ b/src/plugins/texteditor/linenumberfilter.h
@@ -49,9 +49,6 @@ class LineNumberFilter : public Locator::ILocatorFilter
 public:
     explicit LineNumberFilter(QObject *parent = 0);
 
-    QString displayName() const { return tr("Line in Current Document"); }
-    QString id() const { return QLatin1String("Line in current document"); }
-    Locator::ILocatorFilter::Priority priority() const { return Locator::ILocatorFilter::High; }
     QList<Locator::FilterEntry> matchesFor(QFutureInterface<Locator::FilterEntry> &future, const QString &entry);
     void accept(Locator::FilterEntry selection) const;
     void refresh(QFutureInterface<void> &) {}