diff --git a/src/plugins/analyzerbase/analyzermanager.cpp b/src/plugins/analyzerbase/analyzermanager.cpp
index c5cb496feef410db7731e4d9161faf0dd7a97d45..dc6ff406657ddde00c377cd27970dbfc0407f64c 100644
--- a/src/plugins/analyzerbase/analyzermanager.cpp
+++ b/src/plugins/analyzerbase/analyzermanager.cpp
@@ -436,7 +436,7 @@ void AnalyzerManagerPrivate::activateDock(Qt::DockWidgetArea area, QDockWidget *
     QAction *toggleViewAction = dockWidget->toggleViewAction();
     toggleViewAction->setText(dockWidget->windowTitle());
     Command *cmd = am->registerAction(toggleViewAction,
-        QString("Analyzer." + dockWidget->objectName()), globalContext);
+        Core::Id("Analyzer." + dockWidget->objectName()), globalContext);
     cmd->setAttribute(Command::CA_Hide);
 
     ActionContainer *viewsMenu =
@@ -448,7 +448,7 @@ void AnalyzerManagerPrivate::deactivateDock(QDockWidget *dockWidget)
 {
     ActionManager *am = ICore::instance()->actionManager();
     QAction *toggleViewAction = dockWidget->toggleViewAction();
-    am->unregisterAction(toggleViewAction, QString("Analyzer." + dockWidget->objectName()));
+    am->unregisterAction(toggleViewAction, Core::Id("Analyzer." + dockWidget->objectName()));
     m_mainWindow->removeDockWidget(dockWidget);
     dockWidget->hide();
     // Prevent saveState storing the data of the wrong children.
@@ -701,7 +701,7 @@ void AnalyzerManagerPrivate::addTool(IAnalyzerTool *tool, const StartModes &mode
     foreach (StartMode mode, modes) {
         QString actionName = tool->actionName(mode);
         QString menuGroup = tool->menuGroup(mode);
-        QString actionId = tool->actionId(mode);
+        Core::Id actionId(QString::fromLatin1(tool->actionId(mode)));
         QAction *action = new QAction(actionName, 0);
         Core::Command *command = am->registerAction(action, actionId,
             Core::Context(Core::Constants::C_GLOBAL));
diff --git a/src/plugins/bineditor/bineditorplugin.cpp b/src/plugins/bineditor/bineditorplugin.cpp
index 7f6081c62bfdab00b3c0635bd7bdb32cfdfa2a96..62a22eae5d120e259e8bc4e6e10aba445e235683 100644
--- a/src/plugins/bineditor/bineditorplugin.cpp
+++ b/src/plugins/bineditor/bineditorplugin.cpp
@@ -374,7 +374,7 @@ public:
         return m_file->open(errorString, fileName);
     }
     Core::IFile *file() { return m_file; }
-    QString id() const { return QLatin1String(Core::Constants::K_DEFAULT_BINARY_EDITOR_ID); }
+    Core::Id id() const { return Core::Constants::K_DEFAULT_BINARY_EDITOR_ID; }
     QString displayName() const { return m_displayName; }
     void setDisplayName(const QString &title) { m_displayName = title; emit changed(); }
 
@@ -477,7 +477,7 @@ BinEditorPlugin::~BinEditorPlugin()
 QAction *BinEditorPlugin::registerNewAction(const QString &id, const QString &title)
 {
     QAction *result = new QAction(title, this);
-    Core::ICore::instance()->actionManager()->registerAction(result, id, m_context);
+    Core::ICore::instance()->actionManager()->registerAction(result, Core::Id(id), m_context);
     return result;
 }
 
diff --git a/src/plugins/classview/classviewmanager.cpp b/src/plugins/classview/classviewmanager.cpp
index a8ad2ffe8c08ad19681c6827b6ada9c895667cd2..d9149ce261766f7bf5fce79eb800f6917fa2231d 100644
--- a/src/plugins/classview/classviewmanager.cpp
+++ b/src/plugins/classview/classviewmanager.cpp
@@ -293,7 +293,7 @@ void Manager::onDocumentUpdated(CPlusPlus::Document::Ptr doc)
 void Manager::gotoLocation(const QString &fileName, int line, int column)
 {
     bool newEditor = false;
-    TextEditor::BaseTextEditorWidget::openEditorAt(fileName, line, column, QString(),
+    TextEditor::BaseTextEditorWidget::openEditorAt(fileName, line, column, Core::Id(),
                                              Core::EditorManager::IgnoreNavigationHistory,
                                              &newEditor);
 }
diff --git a/src/plugins/cmakeprojectmanager/cmakeeditor.cpp b/src/plugins/cmakeprojectmanager/cmakeeditor.cpp
index e21c752b55cbb708b1bb1960b052f77ef8c266a6..fe7b962e7eee719ada0c109eb6216888f4a7f2bb 100644
--- a/src/plugins/cmakeprojectmanager/cmakeeditor.cpp
+++ b/src/plugins/cmakeprojectmanager/cmakeeditor.cpp
@@ -72,9 +72,9 @@ Core::IEditor *CMakeEditor::duplicate(QWidget *parent)
     return ret->editor();
 }
 
-QString CMakeEditor::id() const
+Core::Id CMakeEditor::id() const
 {
-    return QLatin1String(CMakeProjectManager::Constants::CMAKE_EDITOR_ID);
+    return CMakeProjectManager::Constants::CMAKE_EDITOR_ID;
 }
 
 void CMakeEditor::markAsChanged()
diff --git a/src/plugins/cmakeprojectmanager/cmakeeditor.h b/src/plugins/cmakeprojectmanager/cmakeeditor.h
index 3b328b3262a7bffdcd4d797597c341c78f2cbb47..39efbbb3ea60a58eab5dc8588722580ba051edbd 100644
--- a/src/plugins/cmakeprojectmanager/cmakeeditor.h
+++ b/src/plugins/cmakeprojectmanager/cmakeeditor.h
@@ -59,7 +59,7 @@ public:
 
     bool duplicateSupported() const { return true; }
     Core::IEditor *duplicate(QWidget *parent);
-    QString id() const;
+    Core::Id id() const;
     bool isTemporary() const { return false; }
 
 private slots:
diff --git a/src/plugins/coreplugin/editormanager/editormanager.cpp b/src/plugins/coreplugin/editormanager/editormanager.cpp
index 337f67ed7af68bf4d3a5faf6c73057b87229a066..018872687ab37ad33a78d3cd193bca1ca80977d4 100644
--- a/src/plugins/coreplugin/editormanager/editormanager.cpp
+++ b/src/plugins/coreplugin/editormanager/editormanager.cpp
@@ -278,12 +278,11 @@ static EditorManager *m_instance = 0;
 EditorManager *EditorManager::instance() { return m_instance; }
 
 static Command *createSeparator(ActionManager *am, QObject *parent,
-                                const QString &name,
-                                const Context &context)
+                                const Id &id, const Context &context)
 {
     QAction *tmpaction = new QAction(parent);
     tmpaction->setSeparator(true);
-    Command *cmd = am->registerAction(tmpaction, name, context);
+    Command *cmd = am->registerAction(tmpaction, id, context);
     return cmd;
 }
 
@@ -458,13 +457,13 @@ EditorManager::EditorManager(ICore *core, QWidget *parent) :
     advancedMenu->appendGroup(Constants::G_EDIT_EDITOR);
 
     // Advanced menu separators
-    cmd = createSeparator(am, this, QLatin1String("QtCreator.Edit.Sep.Collapsing"), editManagerContext);
+    cmd = createSeparator(am, this, Id("QtCreator.Edit.Sep.Collapsing"), editManagerContext);
     advancedMenu->addAction(cmd, Constants::G_EDIT_COLLAPSING);
-    cmd = createSeparator(am, this, QLatin1String("QtCreator.Edit.Sep.Blocks"), editManagerContext);
+    cmd = createSeparator(am, this, Id("QtCreator.Edit.Sep.Blocks"), editManagerContext);
     advancedMenu->addAction(cmd, Constants::G_EDIT_BLOCKS);
-    cmd = createSeparator(am, this, QLatin1String("QtCreator.Edit.Sep.Font"), editManagerContext);
+    cmd = createSeparator(am, this, Id("QtCreator.Edit.Sep.Font"), editManagerContext);
     advancedMenu->addAction(cmd, Constants::G_EDIT_FONT);
-    cmd = createSeparator(am, this, QLatin1String("QtCreator.Edit.Sep.Editor"), editManagerContext);
+    cmd = createSeparator(am, this, Id("QtCreator.Edit.Sep.Editor"), editManagerContext);
     advancedMenu->addAction(cmd, Constants::G_EDIT_EDITOR);
 
     // other setup
@@ -1221,9 +1220,9 @@ Core::Id EditorManager::getOpenWithEditorId(const QString &fileName,
     // Collect editors that can open the file
     const MimeType mt = d->m_core->mimeDatabase()->findByFile(fileName);
     if (!mt)
-        return QString();
+        return Id();
     QStringList allEditorIds;
-    QStringList externalEditorIds;
+    QList<Id> externalEditorIds;
     // Built-in
     const EditorFactoryList editors = editorFactories(mt, false);
     const int size = editors.size();
@@ -1234,18 +1233,18 @@ Core::Id EditorManager::getOpenWithEditorId(const QString &fileName,
     const ExternalEditorList exEditors = externalEditors(mt, false);
     const int esize = exEditors.size();
     for (int i = 0; i < esize; i++) {
-        externalEditorIds.push_back(exEditors.at(i)->id().toString());
+        externalEditorIds.push_back(exEditors.at(i)->id());
         allEditorIds.push_back(exEditors.at(i)->id().toString());
     }
     if (allEditorIds.empty())
-        return QString();
+        return Id();
     // Run dialog.
     OpenWithDialog dialog(fileName, d->m_core->mainWindow());
     dialog.setEditors(allEditorIds);
     dialog.setCurrentEditor(0);
     if (dialog.exec() != QDialog::Accepted)
-        return QString();
-    const QString selectedId = dialog.editor();
+        return Id();
+    const Id selectedId = Id(dialog.editor());
     if (isExternalEditor)
         *isExternalEditor = externalEditorIds.contains(selectedId);
     return selectedId;
@@ -1318,7 +1317,7 @@ IEditor *EditorManager::openEditor(Core::Internal::EditorView *view, const QStri
     // If we could not open the file in the requested editor, fall
     // back to the default editor:
     if (!editor)
-        editor = createEditor(QString(), fn);
+        editor = createEditor(Id(), fn);
     if (!editor) // Internal error
         return 0;
 
@@ -1604,7 +1603,7 @@ bool EditorManager::saveFileAs(IFile *fileParam)
 void EditorManager::addFileToRecentFiles(IFile *file)
 {
     bool isTemporary = true;
-    QString editorId;
+    Id editorId;
     QList<IEditor *> editors = editorsForFile(file);
     foreach (IEditor *editor, editors) {
         if (!editor->isTemporary()) {
@@ -1943,9 +1942,9 @@ bool EditorManager::restoreState(const QByteArray &state)
                 continue;
             QFileInfo rfi(autoSaveName(fileName));
             if (rfi.exists() && fi.lastModified() < rfi.lastModified()) {
-                openEditor(fileName, QString::fromUtf8(id));
+                openEditor(fileName, Id(QString::fromUtf8(id)));
             } else {
-                d->m_editorModel->addRestoredEditor(fileName, displayName, QString::fromUtf8(id));
+                d->m_editorModel->addRestoredEditor(fileName, displayName, Id(QString::fromUtf8(id)));
             }
         }
     }
diff --git a/src/plugins/coreplugin/editormanager/editorview.cpp b/src/plugins/coreplugin/editormanager/editorview.cpp
index 3367e2930c5d772736db5c4d802ec55e38f05cc1..1ed9c6f965f274b5b1aca8223ec461e5a99a2886 100644
--- a/src/plugins/coreplugin/editormanager/editorview.cpp
+++ b/src/plugins/coreplugin/editormanager/editorview.cpp
@@ -756,10 +756,10 @@ QByteArray SplitterOrView::saveState() const
             stream << QByteArray("empty");
         } else if (e == em->currentEditor()) {
             stream << QByteArray("currenteditor")
-                    << e->file()->fileName() << e->id() << e->saveState();
+                    << e->file()->fileName() << e->id().toString() << e->saveState();
         } else {
             stream << QByteArray("editor")
-                    << e->file()->fileName() << e->id() << e->saveState();
+                    << e->file()->fileName() << e->id().toString() << e->saveState();
         }
     }
     return bytes;
diff --git a/src/plugins/coreplugin/editormanager/editorview.h b/src/plugins/coreplugin/editormanager/editorview.h
index 50d9a74e34956065b3883101eef45868b13314ab..7a60fa08914be4386c487867ae673feb5ffa0193 100644
--- a/src/plugins/coreplugin/editormanager/editorview.h
+++ b/src/plugins/coreplugin/editormanager/editorview.h
@@ -33,6 +33,8 @@
 #ifndef EDITORVIEW_H
 #define EDITORVIEW_H
 
+#include "coreplugin/id.h"
+
 #include <QtCore/QMap>
 #include <QtCore/QList>
 #include <QtCore/QString>
@@ -64,7 +66,7 @@ namespace Internal {
 struct EditLocation {
     QPointer<IFile> file;
     QString fileName;
-    QString id;
+    Id id;
     QVariant state;
 };
 
diff --git a/src/plugins/coreplugin/editormanager/ieditor.h b/src/plugins/coreplugin/editormanager/ieditor.h
index 11862e0a11907fc89226bed18d5cf301d09face2..ac8dd116c913791f773e7b97ebf2773ccc09daa3 100644
--- a/src/plugins/coreplugin/editormanager/ieditor.h
+++ b/src/plugins/coreplugin/editormanager/ieditor.h
@@ -35,6 +35,8 @@
 
 #include <coreplugin/core_global.h>
 #include <coreplugin/icontext.h>
+#include <coreplugin/id.h>
+
 #include <QtCore/QMetaType>
 
 namespace Core {
@@ -52,7 +54,7 @@ public:
     virtual bool createNew(const QString &contents = QString()) = 0;
     virtual bool open(QString *errorString, const QString &fileName, const QString &realFileName) = 0;
     virtual IFile *file() = 0;
-    virtual QString id() const = 0;
+    virtual Core::Id id() const = 0;
     virtual QString displayName() const = 0;
     virtual void setDisplayName(const QString &title) = 0;
 
diff --git a/src/plugins/coreplugin/editormanager/openeditorsmodel.cpp b/src/plugins/coreplugin/editormanager/openeditorsmodel.cpp
index 1cf7b6a4ff8ebaad56310ff92d9cf895eee27da5..1c8da974a2eb4565d2837fe7be2ee9cc2cee4f7f 100644
--- a/src/plugins/coreplugin/editormanager/openeditorsmodel.cpp
+++ b/src/plugins/coreplugin/editormanager/openeditorsmodel.cpp
@@ -131,7 +131,7 @@ void OpenEditorsModel::addEditor(IEditor *editor, bool isDuplicate)
     addEntry(entry);
 }
 
-void OpenEditorsModel::addRestoredEditor(const QString &fileName, const QString &displayName, const QString &id)
+void OpenEditorsModel::addRestoredEditor(const QString &fileName, const QString &displayName, const Id &id)
 {
     Entry entry;
     entry.m_fileName = fileName;
diff --git a/src/plugins/coreplugin/editormanager/openeditorsmodel.h b/src/plugins/coreplugin/editormanager/openeditorsmodel.h
index 8c69825bc6bf257f8fd6aaa6dc7d4a7f7b22ff1a..96329ce7938dc2f0d6d683954b3e9f12fe838d7a 100644
--- a/src/plugins/coreplugin/editormanager/openeditorsmodel.h
+++ b/src/plugins/coreplugin/editormanager/openeditorsmodel.h
@@ -64,7 +64,7 @@ public:
     QModelIndex index(int row, int column = 0, const QModelIndex &parent = QModelIndex()) const;
 
     void addEditor(IEditor *editor, bool isDuplicate = false);
-    void addRestoredEditor(const QString &fileName, const QString &displayName, const QString &id);
+    void addRestoredEditor(const QString &fileName, const QString &displayName, const Id &id);
     QModelIndex firstRestoredEditor() const;
 
     struct CORE_EXPORT Entry {
diff --git a/src/plugins/coreplugin/filemanager.cpp b/src/plugins/coreplugin/filemanager.cpp
index 562199489e7ed5ed093dd6226cc1bafecfaeafb8..b54f18d8f67228b552bdc9be29499e1bf1d16082 100644
--- a/src/plugins/coreplugin/filemanager.cpp
+++ b/src/plugins/coreplugin/filemanager.cpp
@@ -1059,7 +1059,7 @@ void FileManager::syncWithEditor(Core::IContext *context)
     \a editorId defaults to the empty id, which means to let the system figure out
     the best editor itself.
 */
-void FileManager::addToRecentFiles(const QString &fileName, const QString &editorId)
+void FileManager::addToRecentFiles(const QString &fileName, const Id &editorId)
 {
     if (fileName.isEmpty())
         return;
@@ -1103,7 +1103,7 @@ void FileManager::saveSettings()
     QStringList recentEditorIds;
     foreach (const RecentFile &file, d->m_recentFiles) {
         recentFiles.append(file.first);
-        recentEditorIds.append(file.second);
+        recentEditorIds.append(file.second.toString());
     }
 
     QSettings *s = Core::ICore::instance()->settings();
@@ -1133,7 +1133,7 @@ void FileManager::readSettings()
             editorId = ids.next();
         if (QFileInfo(fileName).isFile())
             d->m_recentFiles.append(RecentFile(QDir::fromNativeSeparators(fileName), // from native to guard against old settings
-                                               editorId));
+                                               Id(editorId)));
     }
 
     s->beginGroup(QLatin1String(directoryGroupC));
diff --git a/src/plugins/coreplugin/filemanager.h b/src/plugins/coreplugin/filemanager.h
index a5ecd4dffc576d0a31d6e2221c45877ea2dce516..3add5a0cb422d41c292553ca8f21a78a0d8ea0fd 100644
--- a/src/plugins/coreplugin/filemanager.h
+++ b/src/plugins/coreplugin/filemanager.h
@@ -33,7 +33,7 @@
 #ifndef FILEMANAGER_H
 #define FILEMANAGER_H
 
-#include <coreplugin/core_global.h>
+#include <coreplugin/id.h>
 
 #include <QtCore/QObject>
 #include <QtCore/QStringList>
@@ -64,7 +64,7 @@ public:
         KeepLinks
     };
 
-    typedef QPair<QString, QString> RecentFile;
+    typedef QPair<QString, Id> RecentFile;
 
     explicit FileManager(QMainWindow *ew);
     virtual ~FileManager();
@@ -83,7 +83,7 @@ public:
     void unexpectFileChange(const QString &fileName);
 
     // recent files
-    void addToRecentFiles(const QString &fileName, const QString &editorId = QString());
+    void addToRecentFiles(const QString &fileName, const Id &editorId = Id());
     Q_SLOT void clearRecentFiles();
     QList<RecentFile> recentFiles() const;
 
diff --git a/src/plugins/coreplugin/generatedfile.cpp b/src/plugins/coreplugin/generatedfile.cpp
index 6ad5473f90d70d35459a8a5562bea8e02c889c9f..4caa0929510a8f31a749dd40efd29cbb9f2e7169 100644
--- a/src/plugins/coreplugin/generatedfile.cpp
+++ b/src/plugins/coreplugin/generatedfile.cpp
@@ -61,7 +61,7 @@ public:
     explicit GeneratedFilePrivate(const QString &p);
     QString path;
     QByteArray contents;
-    QString editorId;
+    Id editorId;
     bool binary;
     GeneratedFile::Attributes attributes;
 };
@@ -139,14 +139,14 @@ void GeneratedFile::setBinary(bool b)
     m_d->binary = b;
 }
 
-QString GeneratedFile::editorId() const
+Id GeneratedFile::editorId() const
 {
     return m_d->editorId;
 }
 
-void GeneratedFile::setEditorId(const QString &k)
+void GeneratedFile::setEditorId(const Id &id)
 {
-    m_d->editorId = k;
+    m_d->editorId = id;
 }
 
 bool GeneratedFile::write(QString *errorMessage) const
diff --git a/src/plugins/coreplugin/generatedfile.h b/src/plugins/coreplugin/generatedfile.h
index 65e53210e82b18e731ce8d5a320b0468fd11f78c..b01ea295ec146b7a8634a2b5684f17c2e3d984f6 100644
--- a/src/plugins/coreplugin/generatedfile.h
+++ b/src/plugins/coreplugin/generatedfile.h
@@ -34,7 +34,7 @@
 #ifndef CORE_GENERATEDFILE_H
 #define CORE_GENERATEDFILE_H
 
-#include "core_global.h"
+#include "coreplugin/id.h"
 
 #include <QtCore/QSharedDataPointer>
 #include <QtCore/QList>
@@ -79,8 +79,8 @@ public:
     void setBinary(bool b);
 
     // Id of editor to open the file with
-    QString editorId() const;
-    void setEditorId(const QString &k);
+    Id editorId() const;
+    void setEditorId(const Id &id);
 
     bool write(QString *errorMessage) const;
 
diff --git a/src/plugins/coreplugin/id.cpp b/src/plugins/coreplugin/id.cpp
index 131920b9cc49562024fe0521e15628557c814a7d..7d3523a929287491d08d895b910fc26573780e3d 100644
--- a/src/plugins/coreplugin/id.cpp
+++ b/src/plugins/coreplugin/id.cpp
@@ -37,7 +37,6 @@
 #include <utils/qtcassert.h>
 
 #include <QtCore/QHash>
-#include <QtCore/QDebug>
 
 namespace Core {
 
diff --git a/src/plugins/coreplugin/id.h b/src/plugins/coreplugin/id.h
index 972166869507d00fe11498969a23172a8775b1e8..d044cb3c740a891db96d0d6e35b7d2d2d83e3849 100644
--- a/src/plugins/coreplugin/id.h
+++ b/src/plugins/coreplugin/id.h
@@ -47,7 +47,7 @@ public:
     Id() : m_id(0) {}
     Id(const char *name);
     // FIXME: Replace with QByteArray
-    Id(const QString &name);
+    explicit Id(const QString &name);
     QByteArray name() const;
     QString toString() const;
     bool isValid() const { return m_id; }
@@ -67,6 +67,6 @@ CORE_EXPORT inline uint qHash(const Id &id) { return id.uniqueIdentifier(); }
 
 } // namespace Core
 
-Q_DECLARE_METATYPE(Core::Id);
+Q_DECLARE_METATYPE(Core::Id)
 
 #endif // CORE_ID_H
diff --git a/src/plugins/coreplugin/mainwindow.cpp b/src/plugins/coreplugin/mainwindow.cpp
index af1557c3b960c4e78d9695abf942bfb576534b7b..8d7ba92155ad08a7eda226721527e107c91a5b9b 100644
--- a/src/plugins/coreplugin/mainwindow.cpp
+++ b/src/plugins/coreplugin/mainwindow.cpp
@@ -537,12 +537,11 @@ void MainWindow::registerDefaultContainers()
 }
 
 static Command *createSeparator(ActionManager *am, QObject *parent,
-                                const QString &name,
-                                const Context &context)
+                                const Id &id, const Context &context)
 {
     QAction *tmpaction = new QAction(parent);
     tmpaction->setSeparator(true);
-    Command *cmd = am->registerAction(tmpaction, name, context);
+    Command *cmd = am->registerAction(tmpaction, id, context);
     return cmd;
 }
 
@@ -558,30 +557,30 @@ void MainWindow::registerDefaultActions()
     Context globalContext(Constants::C_GLOBAL);
 
     // File menu separators
-    Command *cmd = createSeparator(am, this, QLatin1String("QtCreator.File.Sep.Save"), globalContext);
+    Command *cmd = createSeparator(am, this, Id("QtCreator.File.Sep.Save"), globalContext);
     mfile->addAction(cmd, Constants::G_FILE_SAVE);
 
-    cmd =  createSeparator(am, this, QLatin1String("QtCreator.File.Sep.Print"), globalContext);
+    cmd =  createSeparator(am, this, Id("QtCreator.File.Sep.Print"), globalContext);
     QIcon icon = QIcon::fromTheme(QLatin1String("edit-cut"), QIcon(Constants::ICON_CUT));
     mfile->addAction(cmd, Constants::G_FILE_PRINT);
 
-    cmd =  createSeparator(am, this, QLatin1String("QtCreator.File.Sep.Close"), globalContext);
+    cmd =  createSeparator(am, this, Id("QtCreator.File.Sep.Close"), globalContext);
     mfile->addAction(cmd, Constants::G_FILE_CLOSE);
 
-    cmd = createSeparator(am, this, QLatin1String("QtCreator.File.Sep.Other"), globalContext);
+    cmd = createSeparator(am, this, Id("QtCreator.File.Sep.Other"), globalContext);
     mfile->addAction(cmd, Constants::G_FILE_OTHER);
 
     // Edit menu separators
-    cmd = createSeparator(am, this, QLatin1String("QtCreator.Edit.Sep.CopyPaste"), globalContext);
+    cmd = createSeparator(am, this, Id("QtCreator.Edit.Sep.CopyPaste"), globalContext);
     medit->addAction(cmd, Constants::G_EDIT_COPYPASTE);
 
-    cmd = createSeparator(am, this, QLatin1String("QtCreator.Edit.Sep.SelectAll"), globalContext);
+    cmd = createSeparator(am, this, Id("QtCreator.Edit.Sep.SelectAll"), globalContext);
     medit->addAction(cmd, Constants::G_EDIT_SELECTALL);
 
-    cmd = createSeparator(am, this, QLatin1String("QtCreator.Edit.Sep.Find"), globalContext);
+    cmd = createSeparator(am, this, Id("QtCreator.Edit.Sep.Find"), globalContext);
     medit->addAction(cmd, Constants::G_EDIT_FIND);
 
-    cmd = createSeparator(am, this, QLatin1String("QtCreator.Edit.Sep.Advanced"), globalContext);
+    cmd = createSeparator(am, this, Id("QtCreator.Edit.Sep.Advanced"), globalContext);
     medit->addAction(cmd, Constants::G_EDIT_ADVANCED);
 
     // Return to editor shortcut: Note this requires Qt to fix up
@@ -728,7 +727,7 @@ void MainWindow::registerDefaultActions()
 
     // Options Action
     mtools->appendGroup(Constants::G_TOOLS_OPTIONS);
-    cmd = createSeparator(am, this, QLatin1String("QtCreator.Tools.Sep.Options"), globalContext);
+    cmd = createSeparator(am, this, Id("QtCreator.Tools.Sep.Options"), globalContext);
     mtools->addAction(cmd, Constants::G_TOOLS_OPTIONS);
     m_optionsAction = new QAction(tr("&Options..."), this);
     cmd = am->registerAction(m_optionsAction, Constants::OPTIONS, globalContext);
@@ -754,7 +753,7 @@ void MainWindow::registerDefaultActions()
     connect(m_zoomAction, SIGNAL(triggered()), this, SLOT(showMaximized()));
 
     // Window separator
-    cmd = createSeparator(am, this, QLatin1String("QtCreator.Window.Sep.Size"), globalContext);
+    cmd = createSeparator(am, this, Id("QtCreator.Window.Sep.Size"), globalContext);
     mwindow->addAction(cmd, Constants::G_WINDOW_SIZE);
 #endif
 
@@ -884,7 +883,7 @@ void MainWindow::openFiles(const QStringList &fileNames, ICore::OpenFilesFlags f
                 emFlags = EditorManager::ModeSwitch;
             if (flags & ICore::CanContainLineNumbers)
                 emFlags |=  EditorManager::CanContainLineNumber;
-            Core::IEditor *editor = editorManager()->openEditor(absoluteFilePath, QString(), emFlags);
+            Core::IEditor *editor = editorManager()->openEditor(absoluteFilePath, Id(), emFlags);
             if (!editor && (flags & ICore::StopOnLoadFail))
                 return;
         }
diff --git a/src/plugins/coreplugin/modemanager.cpp b/src/plugins/coreplugin/modemanager.cpp
index 43dd6ac5f0dd475a9e6f441c7261d56b11bd856b..8938e055b748715b91391ffb0421ca2d1cfcf7ec 100644
--- a/src/plugins/coreplugin/modemanager.cpp
+++ b/src/plugins/coreplugin/modemanager.cpp
@@ -203,7 +203,7 @@ void ModeManager::objectAdded(QObject *obj)
 
     // Register mode shortcut
     ActionManager *am = d->m_mainWindow->actionManager();
-    const QString shortcutId = QLatin1String("QtCreator.Mode.") + mode->id();
+    const Id shortcutId(QLatin1String("QtCreator.Mode.") + mode->id());
     QShortcut *shortcut = new QShortcut(d->m_mainWindow);
     shortcut->setWhatsThis(tr("Switch to <b>%1</b> mode").arg(mode->displayName()));
     Command *cmd = am->registerShortcut(shortcut, shortcutId, Context(Constants::C_GLOBAL));
diff --git a/src/plugins/coreplugin/outputpanemanager.cpp b/src/plugins/coreplugin/outputpanemanager.cpp
index 782a64914bdf56d215ff394fa1ac9498dd0f3e78..00022bd3c2d3922dbe3d3f87a8c1b577c46b76c1 100644
--- a/src/plugins/coreplugin/outputpanemanager.cpp
+++ b/src/plugins/coreplugin/outputpanemanager.cpp
@@ -274,7 +274,7 @@ void OutputPaneManager::init()
         actionId.remove(QLatin1Char(' '));
         QAction *action = new QAction(outPane->displayName(), this);
 
-        Command *cmd = am->registerAction(action, actionId, Context(Constants::C_GLOBAL));
+        Command *cmd = am->registerAction(action, Id(actionId), Context(Constants::C_GLOBAL));
 
         mpanes->addAction(cmd, "Coreplugin.OutputPane.PanesGroup");
         m_actions.insert(cmd->action(), idx);
diff --git a/src/plugins/cpaster/cpasterplugin.cpp b/src/plugins/cpaster/cpasterplugin.cpp
index 9308be349b48316c9200e9c8df776aff90dc27d2..e40453d27d88289243ab1ca00066318edfa43ebc 100644
--- a/src/plugins/cpaster/cpasterplugin.cpp
+++ b/src/plugins/cpaster/cpasterplugin.cpp
@@ -366,7 +366,7 @@ void CodepasterPlugin::finishFetch(const QString &titleDescription,
     const QString fileName = saver.fileName();
     m_fetchedSnippets.push_back(fileName);
     // Open editor with title.
-    Core::IEditor* editor = EditorManager::instance()->openEditor(fileName, QString(), EditorManager::ModeSwitch);
+    Core::IEditor* editor = EditorManager::instance()->openEditor(fileName, Core::Id(), EditorManager::ModeSwitch);
     QTC_ASSERT(editor, return)
     editor->setDisplayName(titleDescription);
 }
diff --git a/src/plugins/cppeditor/cppeditor.cpp b/src/plugins/cppeditor/cppeditor.cpp
index 7fa66457c1e330980b9d9699684ae31e8cd1ee9d..9eb3aea3e0256833339143afbb191c6854150e27 100644
--- a/src/plugins/cppeditor/cppeditor.cpp
+++ b/src/plugins/cppeditor/cppeditor.cpp
@@ -1639,9 +1639,9 @@ Core::IEditor *CPPEditor::duplicate(QWidget *parent)
     return newEditor->editor();
 }
 
-QString CPPEditor::id() const
+Core::Id CPPEditor::id() const
 {
-    return QLatin1String(CppEditor::Constants::CPPEDITOR_ID);
+    return CppEditor::Constants::CPPEDITOR_ID;
 }
 
 bool CPPEditor::open(QString *errorString, const QString &fileName, const QString &realFileName)
diff --git a/src/plugins/cppeditor/cppeditor.h b/src/plugins/cppeditor/cppeditor.h
index e2a986c6a957e0fa7b8aaee6e18fc3b3e98a5108..05682c6df5cc2aed3dec1172c0269f6add360e5b 100644
--- a/src/plugins/cppeditor/cppeditor.h
+++ b/src/plugins/cppeditor/cppeditor.h
@@ -152,10 +152,10 @@ public:
 
     bool duplicateSupported() const { return true; }
     Core::IEditor *duplicate(QWidget *parent);
-    QString id() const;
+    Core::Id id() const;
 
     bool isTemporary() const { return false; }
-    virtual bool open(QString *errorString, const QString &fileName, const QString &realFileName);
+    bool open(QString *errorString, const QString &fileName, const QString &realFileName);
 };
 
 class CPPEditorWidget : public TextEditor::BaseTextEditorWidget
diff --git a/src/plugins/cppeditor/cppquickfixassistant.cpp b/src/plugins/cppeditor/cppquickfixassistant.cpp
index 9f02ddb066a4dac265a6f60f7078b6de830ec9d6..22f21baeeab184b463bc6989109220205460fa17 100644
--- a/src/plugins/cppeditor/cppquickfixassistant.cpp
+++ b/src/plugins/cppeditor/cppquickfixassistant.cpp
@@ -65,9 +65,9 @@ using namespace CPlusPlus;
 // -------------------------
 // CppQuickFixAssistProvider
 // -------------------------
-bool CppQuickFixAssistProvider::supportsEditor(const QString &editorId) const
+bool CppQuickFixAssistProvider::supportsEditor(const Core::Id &editorId) const
 {
-    return editorId == QLatin1String(CppEditor::Constants::CPPEDITOR_ID);
+    return editorId == CppEditor::Constants::CPPEDITOR_ID;
 }
 
 IAssistProcessor *CppQuickFixAssistProvider::createProcessor() const
diff --git a/src/plugins/cppeditor/cppquickfixassistant.h b/src/plugins/cppeditor/cppquickfixassistant.h
index 44dd5add8ef9fe7a08a69c673fba8884024919d4..1548b7d1fe6dabe93b1192fb326534b5c3a06327 100644
--- a/src/plugins/cppeditor/cppquickfixassistant.h
+++ b/src/plugins/cppeditor/cppquickfixassistant.h
@@ -91,7 +91,7 @@ private:
 class CppQuickFixAssistProvider : public TextEditor::QuickFixAssistProvider
 {
 public:
-    virtual bool supportsEditor(const QString &editorId) const;
+    virtual bool supportsEditor(const Core::Id &editorId) const;
     virtual TextEditor::IAssistProcessor *createProcessor() const;
 
     virtual QList<TextEditor::QuickFixFactory *> quickFixFactories() const;
diff --git a/src/plugins/cpptools/cppcompletionassist.cpp b/src/plugins/cpptools/cppcompletionassist.cpp
index 61aa6d1c116fa39a9f483b7081e96b533433f365..e54cfab2007ff08b39dfb35436024c9c5efb8ed1 100644
--- a/src/plugins/cpptools/cppcompletionassist.cpp
+++ b/src/plugins/cpptools/cppcompletionassist.cpp
@@ -495,9 +495,9 @@ int CppFunctionHintModel::activeArgument(const QString &prefix) const
 // ---------------------------
 // CppCompletionAssistProvider
 // ---------------------------
-bool CppCompletionAssistProvider::supportsEditor(const QString &editorId) const
+bool CppCompletionAssistProvider::supportsEditor(const Core::Id &editorId) const
 {
-    return editorId == QLatin1String(CppEditor::Constants::CPPEDITOR_ID);
+    return editorId == Core::Id(CppEditor::Constants::CPPEDITOR_ID);
 }
 
 int CppCompletionAssistProvider::activationCharSequenceLength() const
diff --git a/src/plugins/cpptools/cppcompletionassist.h b/src/plugins/cpptools/cppcompletionassist.h
index 073c4619c91573244b8a8b0655f0dd305d88781e..ee29d55b0422b510bfa545f49d8d10f2a54c8dd3 100644
--- a/src/plugins/cpptools/cppcompletionassist.h
+++ b/src/plugins/cpptools/cppcompletionassist.h
@@ -66,7 +66,7 @@ class CppAssistProposalModel;
 class CppCompletionAssistProvider : public TextEditor::CompletionAssistProvider
 {
 public:
-    virtual bool supportsEditor(const QString &editorId) const;
+    virtual bool supportsEditor(const Core::Id &editorId) const;
     virtual int activationCharSequenceLength() const;
     virtual bool isActivationCharSequence(const QString &sequence) const;
     virtual TextEditor::IAssistProcessor *createProcessor() const;
diff --git a/src/plugins/cpptools/cppcurrentdocumentfilter.cpp b/src/plugins/cpptools/cppcurrentdocumentfilter.cpp
index e59734d7c85725298d36c0b38ced2786f3ca46c9..440976a270d5072bb66261ce321175755055ebe6 100644
--- a/src/plugins/cpptools/cppcurrentdocumentfilter.cpp
+++ b/src/plugins/cpptools/cppcurrentdocumentfilter.cpp
@@ -113,7 +113,7 @@ void CppCurrentDocumentFilter::accept(Locator::FilterEntry selection) const
 {
     ModelItemInfo info = qvariant_cast<CppTools::Internal::ModelItemInfo>(selection.internalData);
     TextEditor::BaseTextEditorWidget::openEditorAt(info.fileName, info.line, info.column,
-                                             QString(), Core::EditorManager::ModeSwitch);
+                                             Core::Id(), Core::EditorManager::ModeSwitch);
 }
 
 void CppCurrentDocumentFilter::refresh(QFutureInterface<void> &future)
diff --git a/src/plugins/cpptools/cppfindreferences.cpp b/src/plugins/cpptools/cppfindreferences.cpp
index 16e62d0f13971459f57be6c37586ce7a2024978a..d78597c26c2966107f8a4a1a019db26330c522ed 100644
--- a/src/plugins/cpptools/cppfindreferences.cpp
+++ b/src/plugins/cpptools/cppfindreferences.cpp
@@ -327,10 +327,10 @@ void CppFindReferences::openEditor(const Find::SearchResultItem &item)
 {
     if (item.path.size() > 0) {
         TextEditor::BaseTextEditorWidget::openEditorAt(item.path.first(), item.lineNumber, item.textMarkPos,
-                                                 QString(),
+                                                 Core::Id(),
                                                  Core::EditorManager::ModeSwitch);
     } else {
-        Core::EditorManager::instance()->openEditor(item.text, QString(), Core::EditorManager::ModeSwitch);
+        Core::EditorManager::instance()->openEditor(item.text, Core::Id(), Core::EditorManager::ModeSwitch);
     }
 }
 
diff --git a/src/plugins/cpptools/cpplocatorfilter.cpp b/src/plugins/cpptools/cpplocatorfilter.cpp
index d34c9e89e8ca1b5ba9dda794f8c808f763df1c1f..e64b64431e223ee27eed9ccdb496d2002b468b81 100644
--- a/src/plugins/cpptools/cpplocatorfilter.cpp
+++ b/src/plugins/cpptools/cpplocatorfilter.cpp
@@ -131,7 +131,7 @@ void CppLocatorFilter::accept(Locator::FilterEntry selection) const
 {
     ModelItemInfo info = qvariant_cast<CppTools::Internal::ModelItemInfo>(selection.internalData);
     TextEditor::BaseTextEditorWidget::openEditorAt(info.fileName, info.line, info.column,
-                                             QString(), Core::EditorManager::ModeSwitch);
+                                             Core::Id(), Core::EditorManager::ModeSwitch);
 }
 
 void CppLocatorFilter::reset()
diff --git a/src/plugins/cvs/cvsplugin.cpp b/src/plugins/cvs/cvsplugin.cpp
index 5f29923d5ba62e2a4ec003d03d80e86a578eebcf..fb1f02753140b9702966551610f5a288bcf10e97 100644
--- a/src/plugins/cvs/cvsplugin.cpp
+++ b/src/plugins/cvs/cvsplugin.cpp
@@ -1284,9 +1284,10 @@ Core::IEditor * CVSPlugin::showOutputInEditor(const QString& title, const QStrin
 {
     const VCSBase::VCSBaseEditorParameters *params = findType(editorType);
     QTC_ASSERT(params, return 0);
-    const QString id = params->id;
+    const Core::Id id = params->id;
     if (CVS::Constants::debug)
-        qDebug() << "CVSPlugin::showOutputInEditor" << title << id <<  "source=" << source << "Size= " << output.size() <<  " Type=" << editorType << debugCodec(codec);
+        qDebug() << "CVSPlugin::showOutputInEditor" << title << id.name()
+                 <<  "source=" << source << "Size= " << output.size() <<  " Type=" << editorType << debugCodec(codec);
     QString s = title;
     Core::IEditor *editor = Core::EditorManager::instance()->openEditorWithContents(id, &s, output.toLocal8Bit());
     connect(editor, SIGNAL(annotateRevisionRequested(QString,QString,int)),
diff --git a/src/plugins/debugger/debuggerengine.cpp b/src/plugins/debugger/debuggerengine.cpp
index eb6feae023f251fd4ea7d5e146ece2f17eb829e8..6b30828d0eed1952d5d4019b1dfe681657e08403 100644
--- a/src/plugins/debugger/debuggerengine.cpp
+++ b/src/plugins/debugger/debuggerengine.cpp
@@ -567,7 +567,7 @@ void DebuggerEngine::gotoLocation(const Location &loc)
     QList<IEditor *> editors = editorManager->editorsForFileName(file);
     IEditor *editor = 0;
     if (editors.isEmpty()) {
-        editor = editorManager->openEditor(file, QString(),
+        editor = editorManager->openEditor(file, Core::Id(),
             EditorManager::IgnoreNavigationHistory);
         if (editor) {
             editors.append(editor);
diff --git a/src/plugins/debugger/debuggermainwindow.cpp b/src/plugins/debugger/debuggermainwindow.cpp
index 91bddc318ae5d51a6d1fa01e4b399a66655960c7..e5d1787a0ca75919659d6a4354005aef15dd5b00 100644
--- a/src/plugins/debugger/debuggermainwindow.cpp
+++ b/src/plugins/debugger/debuggermainwindow.cpp
@@ -427,7 +427,7 @@ QDockWidget *DebuggerMainWindow::createDockWidget(const DebuggerLanguage &langua
     ActionManager *am = ICore::instance()->actionManager();
     QAction *toggleViewAction = dockWidget->toggleViewAction();
     Command *cmd = am->registerAction(toggleViewAction,
-             QString("Debugger." + widget->objectName()), globalContext);
+             Core::Id("Debugger." + widget->objectName()), globalContext);
     cmd->setAttribute(Command::CA_Hide);
     d->m_viewsMenu->addAction(cmd);
 
diff --git a/src/plugins/designer/formeditorw.cpp b/src/plugins/designer/formeditorw.cpp
index 48228baf27286fd351be468c4e05c7d8e1341609..0dcf746406f14ef0857b490b6a88e915d261577f 100644
--- a/src/plugins/designer/formeditorw.cpp
+++ b/src/plugins/designer/formeditorw.cpp
@@ -136,12 +136,12 @@ static inline QAction *createSeparator(QObject *parent,
                                  Core::ActionManager *am,
                                  const Core::Context &context,
                                  Core::ActionContainer *container,
-                                 const QString &name = QString(),
+                                 const Core::Id &id,
                                  const QString &group = QString())
 {
     QAction *actSeparator = new QAction(parent);
     actSeparator->setSeparator(true);
-    Core::Command *command = am->registerAction(actSeparator, name, context);
+    Core::Command *command = am->registerAction(actSeparator, id, context);
     container->addAction(command, group);
     return actSeparator;
 }
@@ -238,7 +238,7 @@ FormEditorW::~FormEditorW()
 void FormEditorW::addDockViewAction(Core::ActionManager *am,
                                     Core::ActionContainer *viewMenu,
                                     int index, const Core::Context &context,
-                                    const QString &title, const QString &id)
+                                    const QString &title, const Core::Id &id)
 {
     if (const QDockWidget *dw = m_editorWidget->designerDockWidgets()[index]) {
         QAction *action = dw->toggleViewAction();
@@ -256,30 +256,30 @@ void FormEditorW::setupViewActions()
     QTC_ASSERT(viewMenu, return)
 
     addDockViewAction(am, viewMenu, WidgetBoxSubWindow, m_contexts,
-                      tr("Widget box"), QLatin1String("FormEditor.WidgetBox"));
+                      tr("Widget box"), Core::Id("FormEditor.WidgetBox"));
 
     addDockViewAction(am, viewMenu, ObjectInspectorSubWindow, m_contexts,
-                      tr("Object Inspector"), QLatin1String("FormEditor.ObjectInspector"));
+                      tr("Object Inspector"), Core::Id("FormEditor.ObjectInspector"));
 
     addDockViewAction(am, viewMenu, PropertyEditorSubWindow, m_contexts,
-                      tr("Property Editor"), QLatin1String("FormEditor.PropertyEditor"));
+                      tr("Property Editor"), Core::Id("FormEditor.PropertyEditor"));
 
     addDockViewAction(am, viewMenu, SignalSlotEditorSubWindow, m_contexts,
-                      tr("Signals && Slots Editor"), QLatin1String("FormEditor.SignalsAndSlotsEditor"));
+                      tr("Signals && Slots Editor"), Core::Id("FormEditor.SignalsAndSlotsEditor"));
 
     addDockViewAction(am, viewMenu, ActionEditorSubWindow, m_contexts,
-                      tr("Action Editor"), QLatin1String("FormEditor.ActionEditor"));
+                      tr("Action Editor"), Core::Id("FormEditor.ActionEditor"));
     // Lock/Reset
-    Core::Command *cmd = addToolAction(m_editorWidget->menuSeparator1(), am, m_contexts, QLatin1String("FormEditor.SeparatorLock"), viewMenu, QString());
+    Core::Command *cmd = addToolAction(m_editorWidget->menuSeparator1(), am, m_contexts, Core::Id("FormEditor.SeparatorLock"), viewMenu, QString());
     cmd->setAttribute(Core::Command::CA_Hide);
 
-    cmd = addToolAction(m_editorWidget->toggleLockedAction(), am, m_contexts, QLatin1String("FormEditor.Locked"), viewMenu, QString());
+    cmd = addToolAction(m_editorWidget->toggleLockedAction(), am, m_contexts, Core::Id("FormEditor.Locked"), viewMenu, QString());
     cmd->setAttribute(Core::Command::CA_Hide);
 
-    cmd = addToolAction(m_editorWidget->menuSeparator2(), am, m_contexts, QLatin1String("FormEditor.SeparatorReset"), viewMenu, QString());
+    cmd = addToolAction(m_editorWidget->menuSeparator2(), am, m_contexts, Core::Id("FormEditor.SeparatorReset"), viewMenu, QString());
     cmd->setAttribute(Core::Command::CA_Hide);
 
-    cmd = addToolAction(m_editorWidget->resetLayoutAction(), am, m_contexts, QLatin1String("FormEditor.ResetToDefaultLayout"), viewMenu, QString());
+    cmd = addToolAction(m_editorWidget->resetLayoutAction(), am, m_contexts, Core::Id("FormEditor.ResetToDefaultLayout"), viewMenu, QString());
     connect(m_editorWidget, SIGNAL(resetLayout()), m_editorWidget, SLOT(resetToDefaultLayout()));
     cmd->setAttribute(Core::Command::CA_Hide);
 }
@@ -479,77 +479,77 @@ void FormEditorW::setupActions()
     command = am->registerAction(m_modeActionSeparator, Core::Id("FormEditor.Sep.ModeActions"), m_contexts);
     medit->addAction(command, Core::Constants::G_EDIT_OTHER);
 
-    m_toolActionIds.push_back(QLatin1String("FormEditor.WidgetEditor"));
+    m_toolActionIds.push_back(Core::Id("FormEditor.WidgetEditor"));
     createEditModeAction(m_actionGroupEditMode, m_contexts, am, medit,
                          tr("Edit Widgets"), m_toolActionIds.back(),
                          EditModeWidgetEditor, QLatin1String("widgettool.png"), tr("F3"));
 
-    m_toolActionIds.push_back(QLatin1String("FormEditor.SignalsSlotsEditor"));
+    m_toolActionIds.push_back(Core::Id("FormEditor.SignalsSlotsEditor"));
     createEditModeAction(m_actionGroupEditMode, m_contexts, am, medit,
                          tr("Edit Signals/Slots"), m_toolActionIds.back(),
                          EditModeSignalsSlotEditor, QLatin1String("signalslottool.png"), tr("F4"));
 
-    m_toolActionIds.push_back(QLatin1String("FormEditor.BuddyEditor"));
+    m_toolActionIds.push_back(Core::Id("FormEditor.BuddyEditor"));
     createEditModeAction(m_actionGroupEditMode, m_contexts, am, medit,
                          tr("Edit Buddies"), m_toolActionIds.back(),
                          EditModeBuddyEditor, QLatin1String("buddytool.png"));
 
-    m_toolActionIds.push_back(QLatin1String("FormEditor.TabOrderEditor"));
+    m_toolActionIds.push_back(Core::Id("FormEditor.TabOrderEditor"));
     createEditModeAction(m_actionGroupEditMode, m_contexts, am, medit,
                          tr("Edit Tab Order"),  m_toolActionIds.back(),
                          EditModeTabOrderEditor, QLatin1String("tabordertool.png"));
 
     //tool actions
-    m_toolActionIds.push_back(QLatin1String("FormEditor.LayoutHorizontally"));
+    m_toolActionIds.push_back(Core::Id("FormEditor.LayoutHorizontally"));
     const QString horizLayoutShortcut = osMac ? tr("Meta+H") : tr("Ctrl+H");
     addToolAction(m_fwm->actionHorizontalLayout(), am, m_contexts,
                   m_toolActionIds.back(), mformtools, horizLayoutShortcut);
 
-    m_toolActionIds.push_back(QLatin1String("FormEditor.LayoutVertically"));
+    m_toolActionIds.push_back(Core::Id("FormEditor.LayoutVertically"));
     const QString vertLayoutShortcut = osMac ? tr("Meta+L") : tr("Ctrl+L");
     addToolAction(m_fwm->actionVerticalLayout(), am, m_contexts,
                   m_toolActionIds.back(),  mformtools, vertLayoutShortcut);
 
-    m_toolActionIds.push_back(QLatin1String("FormEditor.SplitHorizontal"));
+    m_toolActionIds.push_back(Core::Id("FormEditor.SplitHorizontal"));
     addToolAction(m_fwm->actionSplitHorizontal(), am, m_contexts,
                   m_toolActionIds.back(), mformtools);
 
-    m_toolActionIds.push_back(QLatin1String("FormEditor.SplitVertical"));
+    m_toolActionIds.push_back(Core::Id("FormEditor.SplitVertical"));
     addToolAction(m_fwm->actionSplitVertical(), am, m_contexts,
                   m_toolActionIds.back(), mformtools);
 
-    m_toolActionIds.push_back(QLatin1String("FormEditor.LayoutForm"));
+    m_toolActionIds.push_back(Core::Id("FormEditor.LayoutForm"));
     addToolAction(m_fwm->actionFormLayout(), am, m_contexts,
                   m_toolActionIds.back(),  mformtools);
 
-    m_toolActionIds.push_back(QLatin1String("FormEditor.LayoutGrid"));
+    m_toolActionIds.push_back(Core::Id("FormEditor.LayoutGrid"));
     const QString gridShortcut = osMac ? tr("Meta+G") : tr("Ctrl+G");
     addToolAction(m_fwm->actionGridLayout(), am, m_contexts,
                   m_toolActionIds.back(),  mformtools, gridShortcut);
 
-    m_toolActionIds.push_back(QLatin1String("FormEditor.LayoutBreak"));
+    m_toolActionIds.push_back(Core::Id("FormEditor.LayoutBreak"));
     addToolAction(m_fwm->actionBreakLayout(), am, m_contexts,
                   m_toolActionIds.back(), mformtools);
 
-    m_toolActionIds.push_back(QLatin1String("FormEditor.LayoutAdjustSize"));
+    m_toolActionIds.push_back(Core::Id("FormEditor.LayoutAdjustSize"));
     const QString adjustShortcut = osMac ? tr("Meta+J") : tr("Ctrl+J");
     addToolAction(m_fwm->actionAdjustSize(), am, m_contexts,
                   m_toolActionIds.back(),  mformtools, adjustShortcut);
 
-    m_toolActionIds.push_back(QLatin1String("FormEditor.SimplifyLayout"));
+    m_toolActionIds.push_back(Core::Id("FormEditor.SimplifyLayout"));
     addToolAction(m_fwm->actionSimplifyLayout(), am, m_contexts,
                   m_toolActionIds.back(),  mformtools);
 
-    createSeparator(this, am, m_contexts, mformtools, QLatin1String("FormEditor.Menu.Tools.Separator1"));
+    createSeparator(this, am, m_contexts, mformtools, Core::Id("FormEditor.Menu.Tools.Separator1"));
 
     addToolAction(m_fwm->actionLower(), am, m_contexts,
-                  QLatin1String("FormEditor.Lower"), mformtools);
+                  Core::Id("FormEditor.Lower"), mformtools);
 
     addToolAction(m_fwm->actionRaise(), am, m_contexts,
-                  QLatin1String("FormEditor.Raise"), mformtools);
+                  Core::Id("FormEditor.Raise"), mformtools);
 
     // Commands that do not go into the editor toolbar
-    createSeparator(this, am, m_contexts, mformtools, QLatin1String("FormEditor.Menu.Tools.Separator2"));
+    createSeparator(this, am, m_contexts, mformtools, Core::Id("FormEditor.Menu.Tools.Separator2"));
 
 #if QT_VERSION >= 0x050000
     m_actionPreview = m_fwm->action(QDesignerFormWindowManagerInterface::DefaultPreviewAction);
@@ -558,7 +558,7 @@ void FormEditorW::setupActions()
 #endif
     QTC_ASSERT(m_actionPreview, return);
     addToolAction(m_actionPreview,  am,  m_contexts,
-                   QLatin1String("FormEditor.Preview"), mformtools, tr("Alt+Shift+R"));
+                   Core::Id("FormEditor.Preview"), mformtools, tr("Alt+Shift+R"));
 
     // Preview in style...
 #if QT_VERSION >= 0x050000
@@ -573,9 +573,9 @@ void FormEditorW::setupActions()
     setPreviewMenuEnabled(false);
 
     // Form settings
-    createSeparator(this, am, m_contexts,  medit, QLatin1String("FormEditor.Edit.Separator2"), Core::Constants::G_EDIT_OTHER);
+    createSeparator(this, am, m_contexts,  medit, Core::Id("FormEditor.Edit.Separator2"), Core::Constants::G_EDIT_OTHER);
 
-    createSeparator(this, am, m_contexts, mformtools, QLatin1String("FormEditor.Menu.Tools.Separator3"));
+    createSeparator(this, am, m_contexts, mformtools, Core::Id("FormEditor.Menu.Tools.Separator3"));
 
     m_actionSwitchSource = new QAction(tr("Switch Source/Form"), this);
     connect(m_actionSwitchSource, SIGNAL(triggered()), this, SLOT(switchSourceForm()));
@@ -583,21 +583,21 @@ void FormEditorW::setupActions()
     // Switch form/source in editor/design contexts.
     Core::Context switchContexts = m_contexts;
     switchContexts.add(Core::Constants::C_EDITORMANAGER);
-    addToolAction(m_actionSwitchSource, am, switchContexts, QLatin1String("FormEditor.FormSwitchSource"), mformtools,
+    addToolAction(m_actionSwitchSource, am, switchContexts, Core::Id("FormEditor.FormSwitchSource"), mformtools,
                   tr("Shift+F4"));
 
-    createSeparator(this, am, m_contexts, mformtools, QLatin1String("FormEditor.Menu.Tools.Separator4"));
+    createSeparator(this, am, m_contexts, mformtools, Core::Id("FormEditor.Menu.Tools.Separator4"));
 #if QT_VERSION >= 0x050000
     QAction *actionFormSettings = m_fwm->action(QDesignerFormWindowManagerInterface::FormWindowSettingsDialogAction);
 #else
     QAction *actionFormSettings = m_fwm->actionShowFormWindowSettingsDialog();
 #endif
-    addToolAction(actionFormSettings, am, m_contexts, QLatin1String("FormEditor.FormSettings"), mformtools);
+    addToolAction(actionFormSettings, am, m_contexts, Core::Id("FormEditor.FormSettings"), mformtools);
 
-    createSeparator(this, am, m_contexts, mformtools, QLatin1String("FormEditor.Menu.Tools.Separator5"));
+    createSeparator(this, am, m_contexts, mformtools, Core::Id("FormEditor.Menu.Tools.Separator5"));
     m_actionAboutPlugins = new QAction(tr("About Qt Designer plugins...."), this);
     addToolAction(m_actionAboutPlugins,  am,  m_contexts,
-                   QLatin1String("FormEditor.AboutPlugins"), mformtools);
+                   Core::Id("FormEditor.AboutPlugins"), mformtools);
     connect(m_actionAboutPlugins,  SIGNAL(triggered()), m_fwm,
 #if QT_VERSION >= 0x050000
             SLOT(showPluginDialog())
@@ -615,8 +615,8 @@ QToolBar *FormEditorW::createEditorToolBar() const
 {
     QToolBar *editorToolBar = new QToolBar;
     Core::ActionManager *am = m_core->actionManager();
-    const QStringList::const_iterator cend = m_toolActionIds.constEnd();
-    for (QStringList::const_iterator it = m_toolActionIds.constBegin(); it != cend; ++it) {
+    const QList<Core::Id>::const_iterator cend = m_toolActionIds.constEnd();
+    for (QList<Core::Id>::const_iterator it = m_toolActionIds.constBegin(); it != cend; ++it) {
         Core::Command *cmd = am->command(*it);
         QTC_ASSERT(cmd, continue);
         QAction *action = cmd->action();
@@ -633,7 +633,7 @@ Core::ActionContainer *FormEditorW::createPreviewStyleMenu(Core::ActionManager *
                                                             QActionGroup *actionGroup)
 {
     const QString menuId = QLatin1String(M_FORMEDITOR_PREVIEW);
-    Core::ActionContainer *menuPreviewStyle = am->createMenu(menuId);
+    Core::ActionContainer *menuPreviewStyle = am->createMenu(M_FORMEDITOR_PREVIEW);
     menuPreviewStyle->menu()->setTitle(tr("Preview in"));
 
     // The preview menu is a list of invisible actions for the embedded design
@@ -655,7 +655,7 @@ Core::ActionContainer *FormEditorW::createPreviewStyleMenu(Core::ActionManager *
             name += dot;
         }
         name += data.toString();
-        Core::Command *command = am->registerAction(a, name, m_contexts);
+        Core::Command *command = am->registerAction(a, Core::Id(name), m_contexts);
         bindShortcut(command, a);
         if (isDeviceProfile) {
             command->setAttribute(Core::Command::CA_UpdateText);
@@ -700,7 +700,7 @@ QAction *FormEditorW::createEditModeAction(QActionGroup *ag,
                                      Core::ActionManager *am,
                                      Core::ActionContainer *medit,
                                      const QString &actionName,
-                                     const QString &name,
+                                     const Core::Id &id,
                                      int toolNumber,
                                      const QString &iconName,
                                      const QString &keySequence)
@@ -709,7 +709,7 @@ QAction *FormEditorW::createEditModeAction(QActionGroup *ag,
     rc->setCheckable(true);
     if (!iconName.isEmpty())
          rc->setIcon(designerIcon(iconName));
-    Core::Command *command = am->registerAction(rc, name, context);
+    Core::Command *command = am->registerAction(rc, id, context);
     command->setAttribute(Core::Command::CA_Hide);
     if (!keySequence.isEmpty())
         command->setDefaultKeySequence(QKeySequence(keySequence));
@@ -722,10 +722,10 @@ QAction *FormEditorW::createEditModeAction(QActionGroup *ag,
 
 // Create a tool action
 Core::Command *FormEditorW::addToolAction(QAction *a, Core::ActionManager *am,
-                                          const Core::Context &context, const QString &name,
+                                          const Core::Context &context, const Core::Id &id,
                                           Core::ActionContainer *c1, const QString &keySequence)
 {
-    Core::Command *command = am->registerAction(a, name, context);
+    Core::Command *command = am->registerAction(a, id, context);
     if (!keySequence.isEmpty())
         command->setDefaultKeySequence(QKeySequence(keySequence));
     if (!a->isSeparator())
@@ -784,7 +784,7 @@ void FormEditorW::currentEditorChanged(Core::IEditor *editor)
     if (Designer::Constants::Internal::debug)
         qDebug() << Q_FUNC_INFO << editor << " of " << m_fwm->formWindowCount();
 
-    if (editor && editor->id() == QLatin1String(Constants::K_DESIGNER_XML_EDITOR_ID)) {
+    if (editor && editor->id() == Core::Id(Constants::K_DESIGNER_XML_EDITOR_ID)) {
         FormWindowEditor *xmlEditor = qobject_cast<FormWindowEditor *>(editor);
         QTC_ASSERT(xmlEditor, return);
         ensureInitStage(FullyInitialized);
@@ -955,7 +955,7 @@ void FormEditorW::switchSourceForm()
     Core::EditorManager *em = Core::EditorManager::instance();
     const QString fileToOpen = otherFile(em);
     if (!fileToOpen.isEmpty())
-        em->openEditor(fileToOpen, QString(), Core::EditorManager::ModeSwitch);
+        em->openEditor(fileToOpen, Core::Id(), Core::EditorManager::ModeSwitch);
 }
 
 } // namespace Internal
diff --git a/src/plugins/designer/formeditorw.h b/src/plugins/designer/formeditorw.h
index 61c27a2bdb7b9bb104a52400fdf9f8920afa0b45..4185d97a2fe1dc85c69c1caf09e2335c320883b5 100644
--- a/src/plugins/designer/formeditorw.h
+++ b/src/plugins/designer/formeditorw.h
@@ -68,9 +68,10 @@ QT_END_NAMESPACE
 namespace Core {
 class ActionManager;
 class ActionContainer;
+class Command;
 class ICore;
 class IEditor;
-class Command;
+class Id;
 class DesignMode;
 class EditorToolBar;
 }
@@ -151,7 +152,7 @@ private:
                            Core::ActionContainer *viewMenu,
                            int index,
                            const Core::Context &context,
-                           const QString &title, const QString &id);
+                           const QString &title, const Core::Id &id);
 
     Core::ActionContainer *createPreviewStyleMenu(Core::ActionManager *am,
                                                    QActionGroup *actionGroup);
@@ -163,12 +164,12 @@ private:
                                          Core::ActionManager *am,
                                          Core::ActionContainer *medit,
                                          const QString &actionName,
-                                         const QString &name,
+                                         const Core::Id &id,
                                          int toolNumber,
                                          const QString &iconName = QString(),
                                          const QString &keySequence = QString());
     Core::Command *addToolAction(QAction *a, Core::ActionManager *am,
-                                 const Core::Context &context, const QString &name,
+                                 const Core::Context &context, const Core::Id &id,
                                  Core::ActionContainer *c1, const QString &keySequence = QString());
     QToolBar *createEditorToolBar() const;
 
@@ -204,7 +205,7 @@ private:
     DesignerContext *m_context;
     Core::Context m_contexts;
 
-    QStringList m_toolActionIds;
+    QList<Core::Id> m_toolActionIds;
     QWidget *m_modeWidget;
     EditorWidget *m_editorWidget;
     Core::DesignMode *m_designMode;
diff --git a/src/plugins/designer/formwindoweditor.cpp b/src/plugins/designer/formwindoweditor.cpp
index ee485fec9ee0d47f9c8fd588e7cfae8324fe2ddd..45fb5f007475dbd865a6f9480824fb22a6a09a8f 100644
--- a/src/plugins/designer/formwindoweditor.cpp
+++ b/src/plugins/designer/formwindoweditor.cpp
@@ -209,9 +209,9 @@ Core::IFile *FormWindowEditor::file()
     return &d->m_file;
 }
 
-QString FormWindowEditor::id() const
+Core::Id FormWindowEditor::id() const
 {
-    return QLatin1String(Designer::Constants::K_DESIGNER_XML_EDITOR_ID);
+    return Designer::Constants::K_DESIGNER_XML_EDITOR_ID;
 }
 
 QString FormWindowEditor::displayName() const
diff --git a/src/plugins/designer/formwindoweditor.h b/src/plugins/designer/formwindoweditor.h
index b348a2ffd6bc78b55905b7b81608860f1c1cb391..c21e640a91dbbd6cb166cf1777466cb34e2ba8e5 100644
--- a/src/plugins/designer/formwindoweditor.h
+++ b/src/plugins/designer/formwindoweditor.h
@@ -73,7 +73,7 @@ public:
     virtual bool createNew(const QString &contents = QString());
     virtual bool open(QString *errorString, const QString &fileName, const QString &realFileName);
     virtual Core::IFile *file();
-    virtual QString id() const;
+    virtual Core::Id id() const;
     virtual QString displayName() const;
     virtual void setDisplayName(const QString &title);
 
diff --git a/src/plugins/fakevim/fakevimplugin.cpp b/src/plugins/fakevim/fakevimplugin.cpp
index 14166c14139b7b8d39eb27f918c767b650d0a3cf..40e92350c7a5c4625bc012bbcaa9f0b213d0155e 100644
--- a/src/plugins/fakevim/fakevimplugin.cpp
+++ b/src/plugins/fakevim/fakevimplugin.cpp
@@ -630,12 +630,12 @@ void FakeVimUserCommandsPage::apply()
 class FakeVimCompletionAssistProvider : public TextEditor::CompletionAssistProvider
 {
 public:
-    virtual bool supportsEditor(const QString &) const
+    bool supportsEditor(const Core::Id &) const
     {
         return false;
     }
 
-    virtual TextEditor::IAssistProcessor *createProcessor() const;
+    TextEditor::IAssistProcessor *createProcessor() const;
 
     void setActive(const QString &needle, bool forward, FakeVimHandler *handler)
     {
@@ -844,8 +844,8 @@ private:
     FakeVimUserCommandsPage *m_fakeVimUserCommandsPage;
     QHash<Core::IEditor *, FakeVimHandler *> m_editorToHandler;
 
-    void triggerAction(const QString &code);
-    void setActionChecked(const QString &code, bool check);
+    void triggerAction(const Core::Id &id);
+    void setActionChecked(const Core::Id &id, bool check);
 
     typedef int (*DistFunction)(const QRect &cursor, const QRect &other);
     void moveSomewhere(DistFunction f);
@@ -995,7 +995,7 @@ bool FakeVimPluginPrivate::initialize()
         act->setData(i);
         QString id = QString("FakeVim.UserAction%1").arg(i);
         QString keys = QString("Alt+V,%1").arg(i);
-        cmd = actionManager->registerAction(act, id, globalcontext);
+        cmd = actionManager->registerAction(act, Core::Id(id), globalcontext);
         cmd->setDefaultKeySequence(QKeySequence(keys));
         connect(act, SIGNAL(triggered()), SLOT(userActionTriggered()));
     }
@@ -1148,22 +1148,22 @@ void FakeVimPluginPrivate::showSettingsDialog()
         _(Constants::SETTINGS_ID));
 }
 
-void FakeVimPluginPrivate::triggerAction(const QString &code)
+void FakeVimPluginPrivate::triggerAction(const Id &id)
 {
     Core::ActionManager *am = ICore::instance()->actionManager();
     QTC_ASSERT(am, return);
-    Core::Command *cmd = am->command(code);
-    QTC_ASSERT(cmd, qDebug() << "UNKNOWN CODE: " << code; return);
+    Core::Command *cmd = am->command(id);
+    QTC_ASSERT(cmd, qDebug() << "UNKNOWN CODE: " << id.name(); return);
     QAction *action = cmd->action();
     QTC_ASSERT(action, return);
     action->trigger();
 }
 
-void FakeVimPluginPrivate::setActionChecked(const QString &code, bool check)
+void FakeVimPluginPrivate::setActionChecked(const Id &id, bool check)
 {
     Core::ActionManager *am = ICore::instance()->actionManager();
     QTC_ASSERT(am, return);
-    Core::Command *cmd = am->command(code);
+    Core::Command *cmd = am->command(id);
     QTC_ASSERT(cmd, return);
     QAction *action = cmd->action();
     QTC_ASSERT(action, return);
@@ -1583,7 +1583,7 @@ void FakeVimPluginPrivate::handleExCommand(bool *handled, const ExCommand &cmd)
             const QString &id = it.key();
             const QRegExp &re = it.value();
             if (!re.pattern().isEmpty() && re.indexIn(cmd.cmd) != -1) {
-                triggerAction(id);
+                triggerAction(Core::Id(id));
                 return;
             }
         }
diff --git a/src/plugins/find/findplugin.cpp b/src/plugins/find/findplugin.cpp
index ce6fc6f85861c1e5b408335415f0fa06e9411543..69945d11a0c8843eac60cc9b7aef0aa9e0d08372 100644
--- a/src/plugins/find/findplugin.cpp
+++ b/src/plugins/find/findplugin.cpp
@@ -244,7 +244,7 @@ void FindPlugin::setupFilterMenuItems()
             haveEnabledFilters = true;
         action->setEnabled(isEnabled);
         action->setData(qVariantFromValue(filter));
-        cmd = am->registerAction(action, QString(QLatin1String("FindFilter.")+filter->id()), globalcontext);
+        cmd = am->registerAction(action, Core::Id(QLatin1String("FindFilter.")+filter->id()), globalcontext);
         cmd->setDefaultKeySequence(filter->defaultShortcut());
         mfindadvanced->addAction(cmd);
         d->m_filterActions.insert(filter, action);
diff --git a/src/plugins/genericprojectmanager/genericprojectfileseditor.cpp b/src/plugins/genericprojectmanager/genericprojectfileseditor.cpp
index 766608746f4f9796434c20ee9b41f6a3372f5b60..e07f5abc9717e9945ea607a7040f260c7661a18e 100644
--- a/src/plugins/genericprojectmanager/genericprojectfileseditor.cpp
+++ b/src/plugins/genericprojectmanager/genericprojectfileseditor.cpp
@@ -105,9 +105,9 @@ ProjectFilesEditor::ProjectFilesEditor(ProjectFilesEditorWidget *editor)
    setContext(Core::Context(Constants::C_FILESEDITOR));
 }
 
-QString ProjectFilesEditor::id() const
+Core::Id ProjectFilesEditor::id() const
 {
-    return QLatin1String(Constants::FILES_EDITOR_ID);
+    return Constants::FILES_EDITOR_ID;
 }
 
 bool ProjectFilesEditor::duplicateSupported() const
diff --git a/src/plugins/genericprojectmanager/genericprojectfileseditor.h b/src/plugins/genericprojectmanager/genericprojectfileseditor.h
index 6e389a33f65f62faff77462a5e8c6ba7f73a159e..ab3d4645264e21a2237e489337920d3a7660593b 100644
--- a/src/plugins/genericprojectmanager/genericprojectfileseditor.h
+++ b/src/plugins/genericprojectmanager/genericprojectfileseditor.h
@@ -80,7 +80,7 @@ class ProjectFilesEditor : public TextEditor::BaseTextEditor
 public:
     ProjectFilesEditor(ProjectFilesEditorWidget *editorWidget);
 
-    virtual QString id() const;
+    virtual Core::Id id() const;
     virtual bool duplicateSupported() const;
     virtual Core::IEditor *duplicate(QWidget *parent);
     virtual bool isTemporary() const { return false; }
diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp
index 687fce8abe9426fce7df32c7af65ff943a2713de..fd679c2f2475e1019676dd5363b54e9880e18f13 100644
--- a/src/plugins/git/gitclient.cpp
+++ b/src/plugins/git/gitclient.cpp
@@ -348,7 +348,7 @@ VCSBase::VCSBaseEditorWidget *GitClient::findExistingVCSEditor(const char *regis
  * (using the file's codec). Makes use of a dynamic property to find an
  * existing instance and to reuse it (in case, say, 'git diff foo' is
  * already open). */
-VCSBase::VCSBaseEditorWidget *GitClient::createVCSEditor(const QString &id,
+VCSBase::VCSBaseEditorWidget *GitClient::createVCSEditor(const Core::Id &id,
                                                          QString title,
                                                          // Source file or directory
                                                          const QString &source,
@@ -393,7 +393,7 @@ void GitClient::diff(const QString &workingDirectory,
                      const QStringList &stagedFileNames)
 {
     const QString binary = settings()->stringValue(GitSettings::binaryPathKey);
-    const QString editorId = QLatin1String(Git::Constants::GIT_DIFF_EDITOR_ID);
+    const Core::Id editorId = Git::Constants::GIT_DIFF_EDITOR_ID;
     const QString title = tr("Git Diff");
 
     VCSBase::VCSBaseEditorWidget *editor = findExistingVCSEditor("originalFileName", workingDirectory);
@@ -452,7 +452,7 @@ void GitClient::diff(const QString &workingDirectory,
                      const QStringList &diffArgs,
                      const QString &fileName)
 {
-    const QString editorId = QLatin1String(Git::Constants::GIT_DIFF_EDITOR_ID);
+    const Core::Id editorId = Git::Constants::GIT_DIFF_EDITOR_ID;
     const QString title = tr("Git Diff \"%1\"").arg(fileName);
     const QString sourceFile = VCSBase::VCSBaseEditorWidget::getSource(workingDirectory, fileName);
 
@@ -482,7 +482,7 @@ void GitClient::diffBranch(const QString &workingDirectory,
                            const QStringList &diffArgs,
                            const QString &branchName)
 {
-    const QString editorId = QLatin1String(Git::Constants::GIT_DIFF_EDITOR_ID);
+    const Core::Id editorId = Git::Constants::GIT_DIFF_EDITOR_ID;
     const QString title = tr("Git Diff Branch \"%1\"").arg(branchName);
     const QString sourceFile = VCSBase::VCSBaseEditorWidget::getSource(workingDirectory, QStringList());
 
@@ -535,7 +535,7 @@ void GitClient::graphLog(const QString &workingDirectory, const QString & branch
         title = tr("Git Log \"%1\"").arg(branch);
         arguments << branch;
     }
-    const QString editorId = QLatin1String(Git::Constants::GIT_LOG_EDITOR_ID);
+    const Core::Id editorId = Git::Constants::GIT_LOG_EDITOR_ID;
     const QString sourceFile = VCSBase::VCSBaseEditorWidget::getSource(workingDirectory, QStringList());
     VCSBase::VCSBaseEditorWidget *editor = findExistingVCSEditor("logFileName", sourceFile);
     if (!editor)
@@ -560,7 +560,7 @@ void GitClient::log(const QString &workingDirectory, const QStringList &fileName
     const QString msgArg = fileNames.empty() ? workingDirectory :
                            fileNames.join(QString(", "));
     const QString title = tr("Git Log \"%1\"").arg(msgArg);
-    const QString editorId = QLatin1String(Git::Constants::GIT_LOG_EDITOR_ID);
+    const Core::Id editorId = Git::Constants::GIT_LOG_EDITOR_ID;
     const QString sourceFile = VCSBase::VCSBaseEditorWidget::getSource(workingDirectory, fileNames);
     VCSBase::VCSBaseEditorWidget *editor = findExistingVCSEditor("logFileName", sourceFile);
     if (!editor)
@@ -592,7 +592,7 @@ void GitClient::show(const QString &source, const QString &id, const QStringList
     }
 
     const QString title = tr("Git Show \"%1\"").arg(id);
-    const QString editorId = QLatin1String(Git::Constants::GIT_DIFF_EDITOR_ID);
+    const Core::Id editorId = Git::Constants::GIT_DIFF_EDITOR_ID;
     VCSBase::VCSBaseEditorWidget *editor = findExistingVCSEditor("show", id);
     if (!editor)
         editor = createVCSEditor(editorId, title, source, CodecLogOutput, "show", id,
@@ -634,7 +634,7 @@ void GitClient::blame(const QString &workingDirectory,
                       const QString &revision,
                       int lineNumber)
 {
-    const QString editorId = QLatin1String(Git::Constants::GIT_BLAME_EDITOR_ID);
+    const Core::Id editorId = Git::Constants::GIT_BLAME_EDITOR_ID;
     const QString id = VCSBase::VCSBaseEditorWidget::getTitleId(workingDirectory, QStringList(fileName), revision);
     const QString title = tr("Git Blame \"%1\"").arg(id);
     const QString sourceFile = VCSBase::VCSBaseEditorWidget::getSource(workingDirectory, fileName);
@@ -1956,7 +1956,7 @@ void GitClient::subversionLog(const QString &workingDirectory)
 
     // Create a command editor, no highlighting or interaction.
     const QString title = tr("Git SVN Log");
-    const QString editorId = QLatin1String(Git::Constants::C_GIT_COMMAND_LOG_EDITOR);
+    const Core::Id editorId = Git::Constants::C_GIT_COMMAND_LOG_EDITOR;
     const QString sourceFile = VCSBase::VCSBaseEditorWidget::getSource(workingDirectory, QStringList());
     VCSBase::VCSBaseEditorWidget *editor = findExistingVCSEditor("svnLog", sourceFile);
     if (!editor)
diff --git a/src/plugins/git/gitclient.h b/src/plugins/git/gitclient.h
index fff6aa6b0bf1798e923d20b1cd0f1e153ed49680..0144c2455b55f322d2a1e207eb17dd6f7d84bedb 100644
--- a/src/plugins/git/gitclient.h
+++ b/src/plugins/git/gitclient.h
@@ -236,7 +236,7 @@ private:
     VCSBase::VCSBaseEditorWidget *findExistingVCSEditor(const char *registerDynamicProperty,
                                                   const QString &dynamicPropertyValue) const;
     enum CodecType { CodecSource, CodecLogOutput, CodecNone };
-    VCSBase::VCSBaseEditorWidget *createVCSEditor(const QString &kind,
+    VCSBase::VCSBaseEditorWidget *createVCSEditor(const Core::Id &kind,
                                             QString title,
                                             const QString &source,
                                             CodecType codecType,
diff --git a/src/plugins/git/gitplugin.cpp b/src/plugins/git/gitplugin.cpp
index 7ff41b4b98f7fa0cf357aa417af99238ec155019..66e537ec866837560d45eeabbc378d3dfb64039c 100644
--- a/src/plugins/git/gitplugin.cpp
+++ b/src/plugins/git/gitplugin.cpp
@@ -194,7 +194,7 @@ static Core::Command *createSeparator(Core::ActionManager *am,
 ParameterActionCommandPair
         GitPlugin::createParameterAction(Core::ActionManager *am, Core::ActionContainer *ac,
                                          const QString &defaultText, const QString &parameterText,
-                                         const QString &id, const Core::Context &context,
+                                         const Core::Id &id, const Core::Context &context,
                                          bool addToLocator)
 {
     Utils::ParameterAction *action = new Utils::ParameterAction(defaultText, parameterText,
@@ -212,7 +212,7 @@ ParameterActionCommandPair
 ParameterActionCommandPair
         GitPlugin::createFileAction(Core::ActionManager *am, Core::ActionContainer *ac,
                                     const QString &defaultText, const QString &parameterText,
-                                    const QString &id, const Core::Context &context, bool addToLocator,
+                                    const Core::Id &id, const Core::Context &context, bool addToLocator,
                                     const char *pluginSlot)
 {
     const ParameterActionCommandPair rc = createParameterAction(am, ac, defaultText, parameterText, id, context, addToLocator);
@@ -225,7 +225,7 @@ ParameterActionCommandPair
 ParameterActionCommandPair
         GitPlugin::createProjectAction(Core::ActionManager *am, Core::ActionContainer *ac,
                                        const QString &defaultText, const QString &parameterText,
-                                       const QString &id, const Core::Context &context, bool addToLocator,
+                                       const Core::Id &id, const Core::Context &context, bool addToLocator,
                                        const char *pluginSlot)
 {
     const ParameterActionCommandPair rc = createParameterAction(am, ac, defaultText, parameterText, id, context, addToLocator);
@@ -237,7 +237,7 @@ ParameterActionCommandPair
 // Create an action to act on the repository
 ActionCommandPair
         GitPlugin::createRepositoryAction(Core::ActionManager *am, Core::ActionContainer *ac,
-                                          const QString &text, const QString &id,
+                                          const QString &text, const Core::Id &id,
                                           const Core::Context &context, bool addToLocator)
 {
     QAction  *action = new QAction(text, this);
@@ -252,7 +252,7 @@ ActionCommandPair
 // Create an action to act on the repository with slot
 ActionCommandPair
         GitPlugin::createRepositoryAction(Core::ActionManager *am, Core::ActionContainer *ac,
-                                          const QString &text, const QString &id,
+                                          const QString &text, const Core::Id &id,
                                           const Core::Context &context, bool addToLocator,
                                           const char *pluginSlot)
 {
@@ -265,7 +265,7 @@ ActionCommandPair
 // taking the directory. Store the member function as data on the action.
 ActionCommandPair
         GitPlugin::createRepositoryAction(Core::ActionManager *am, Core::ActionContainer *ac,
-                                          const QString &text, const QString &id,
+                                          const QString &text, const Core::Id &id,
                                           const Core::Context &context, bool addToLocator,
                                           GitClientMemberFunc func)
 {
@@ -317,8 +317,7 @@ bool GitPlugin::initialize(const QStringList &arguments, QString *errorMessage)
     Core::ActionContainer *toolsContainer =
         actionManager->actionContainer(Core::Constants::M_TOOLS);
 
-    Core::ActionContainer *gitContainer =
-        actionManager->createMenu(description);
+    Core::ActionContainer *gitContainer = actionManager->createMenu("Git");
     gitContainer->menu()->setTitle(tr("&Git"));
     toolsContainer->addMenu(gitContainer);
     m_menuAction = gitContainer->menu()->menuAction();
@@ -326,21 +325,21 @@ bool GitPlugin::initialize(const QStringList &arguments, QString *errorMessage)
     ParameterActionCommandPair parameterActionCommand
             = createFileAction(actionManager, gitContainer,
                                tr("Blame Current File"), tr("Blame for \"%1\""),
-                               QLatin1String("Git.Blame"),
+                               Core::Id("Git.Blame"),
                                globalcontext, true, SLOT(blameFile()));
     parameterActionCommand.second->setDefaultKeySequence(QKeySequence(tr("Alt+G,Alt+B")));
 
     parameterActionCommand
             = createFileAction(actionManager, gitContainer,
                                tr("Diff Current File"), tr("Diff of \"%1\""),
-                               QLatin1String("Git.Diff"), globalcontext, true,
+                               Core::Id("Git.Diff"), globalcontext, true,
                                SLOT(diffCurrentFile()));
     parameterActionCommand.second->setDefaultKeySequence(QKeySequence(tr("Alt+G,Alt+D")));
 
     parameterActionCommand
             = createFileAction(actionManager, gitContainer,
                                tr("Log Current File"), tr("Log of \"%1\""),
-                               QLatin1String("Git.Log"), globalcontext, true, SLOT(logFile()));
+                               Core::Id("Git.Log"), globalcontext, true, SLOT(logFile()));
     parameterActionCommand.second->setDefaultKeySequence(QKeySequence(tr("Alt+G,Alt+L")));
 
 
@@ -350,24 +349,24 @@ bool GitPlugin::initialize(const QStringList &arguments, QString *errorMessage)
     parameterActionCommand
             = createFileAction(actionManager, gitContainer,
                                tr("Stage File for Commit"), tr("Stage \"%1\" for Commit"),
-                               QLatin1String("Git.Stage"), globalcontext, true, SLOT(stageFile()));
+                               Core::Id("Git.Stage"), globalcontext, true, SLOT(stageFile()));
     parameterActionCommand.second->setDefaultKeySequence(QKeySequence(tr("Alt+G,Alt+A")));
 
     parameterActionCommand
             = createFileAction(actionManager, gitContainer,
                                tr("Unstage File from Commit"), tr("Unstage \"%1\" from Commit"),
-                               QLatin1String("Git.Unstage"), globalcontext, true, SLOT(unstageFile()));
+                               Core::Id("Git.Unstage"), globalcontext, true, SLOT(unstageFile()));
 
     parameterActionCommand
             = createFileAction(actionManager, gitContainer,
                                tr("Undo Unstaged Changes"), tr("Undo Unstaged Changes for \"%1\""),
-                               QLatin1String("Git.UndoUnstaged"), globalcontext,
+                               Core::Id("Git.UndoUnstaged"), globalcontext,
                                true, SLOT(undoUnstagedFileChanges()));
 
     parameterActionCommand
             = createFileAction(actionManager, gitContainer,
                                tr("Undo Uncommitted Changes"), tr("Undo Uncommitted Changes for \"%1\""),
-                               QLatin1String("Git.Undo"), globalcontext,
+                               Core::Id("Git.Undo"), globalcontext,
                                true, SLOT(undoFileChanges()));
     parameterActionCommand.second->setDefaultKeySequence(QKeySequence(tr("Alt+G,Alt+U")));
 
@@ -378,7 +377,7 @@ bool GitPlugin::initialize(const QStringList &arguments, QString *errorMessage)
     parameterActionCommand
             = createProjectAction(actionManager, gitContainer,
                                   tr("Diff Current Project"), tr("Diff Project \"%1\""),
-                                  QLatin1String("Git.DiffProject"),
+                                  Core::Id("Git.DiffProject"),
                                   globalcontext, true,
                                   SLOT(diffCurrentProject()));
     parameterActionCommand.second->setDefaultKeySequence(QKeySequence("Alt+G,Alt+Shift+D"));
@@ -386,14 +385,14 @@ bool GitPlugin::initialize(const QStringList &arguments, QString *errorMessage)
     parameterActionCommand
             = createProjectAction(actionManager, gitContainer,
                                   tr("Log Project"), tr("Log Project \"%1\""),
-                                  QLatin1String("Git.LogProject"), globalcontext, true,
+                                  Core::Id("Git.LogProject"), globalcontext, true,
                                   SLOT(logProject()));
     parameterActionCommand.second->setDefaultKeySequence(QKeySequence(tr("Alt+G,Alt+K")));
 
     parameterActionCommand
                 = createProjectAction(actionManager, gitContainer,
                                       tr("Clean Project..."), tr("Clean Project \"%1\"..."),
-                                      QLatin1String("Git.CleanProject"), globalcontext,
+                                      Core::Id("Git.CleanProject"), globalcontext,
                                       true, SLOT(cleanProject()));
 
 
@@ -401,24 +400,24 @@ bool GitPlugin::initialize(const QStringList &arguments, QString *errorMessage)
     gitContainer->addAction(createSeparator(actionManager, globalcontext, Core::Id("Git.Sep.Repository"), this));
 
     createRepositoryAction(actionManager, gitContainer,
-                           tr("Diff"), QLatin1String("Git.DiffRepository"),
+                           tr("Diff"), Core::Id("Git.DiffRepository"),
                            globalcontext, true, SLOT(diffRepository()));
 
     createRepositoryAction(actionManager, gitContainer,
-                           tr("Log"), QLatin1String("Git.LogRepository"),
+                           tr("Log"), Core::Id("Git.LogRepository"),
                            globalcontext, true, &GitClient::graphLog);
 
     createRepositoryAction(actionManager, gitContainer,
-                           tr("Status"), QLatin1String("Git.StatusRepository"),
+                           tr("Status"), Core::Id("Git.StatusRepository"),
                            globalcontext, true, &GitClient::status);
 
     createRepositoryAction(actionManager, gitContainer,
-                           tr("Undo Uncommited Changes..."), QLatin1String("Git.UndoRepository"),
+                           tr("Undo Uncommited Changes..."), Core::Id("Git.UndoRepository"),
                            globalcontext, false, SLOT(undoRepositoryChanges()));
 
 
     createRepositoryAction(actionManager, gitContainer,
-                           tr("Clean..."), QLatin1String("Git.CleanRepository"),
+                           tr("Clean..."), Core::Id("Git.CleanRepository"),
                            globalcontext, true, SLOT(cleanRepository()));
 
     m_createRepositoryAction = new QAction(tr("Create Repository..."), this);
@@ -430,15 +429,15 @@ bool GitPlugin::initialize(const QStringList &arguments, QString *errorMessage)
     gitContainer->addAction(createSeparator(actionManager, globalcontext, Core::Id("Git.Sep.Info"), this));
 
     createRepositoryAction(actionManager, gitContainer,
-                           tr("Launch gitk"), QLatin1String("Git.LaunchGitK"),
+                           tr("Launch gitk"), Core::Id("Git.LaunchGitK"),
                            globalcontext, true, &GitClient::launchGitK);
 
     createRepositoryAction(actionManager, gitContainer,
-                           tr("Branches..."), QLatin1String("Git.BranchList"),
+                           tr("Branches..."), Core::Id("Git.BranchList"),
                            globalcontext, true, SLOT(branchList()));
 
     createRepositoryAction(actionManager, gitContainer,
-                           tr("Remotes..."), QLatin1String("Git.RemoteList"),
+                           tr("Remotes..."), Core::Id("Git.RemoteList"),
                            globalcontext, false, SLOT(remoteList()));
 
     m_showAction = new QAction(tr("Show Commit..."), this);
@@ -458,14 +457,14 @@ bool GitPlugin::initialize(const QStringList &arguments, QString *errorMessage)
     parameterActionCommand =
             createParameterAction(actionManager, patchMenu,
                                   tr("Apply from Editor"), tr("Apply \"%1\""),
-                                  QLatin1String("Git.ApplyCurrentFilePatch"),
+                                  Core::Id("Git.ApplyCurrentFilePatch"),
                                   globalcontext, true);
     m_applyCurrentFilePatchAction = parameterActionCommand.first;
     connect(m_applyCurrentFilePatchAction, SIGNAL(triggered()), this,
             SLOT(applyCurrentFilePatch()));
 
     createRepositoryAction(actionManager, patchMenu,
-                           tr("Apply from File..."), QLatin1String("Git.ApplyPatch"),
+                           tr("Apply from File..."), Core::Id("Git.ApplyPatch"),
                            globalcontext, true, SLOT(promptApplyPatch()));
 
     Core::ActionContainer *stashMenu = actionManager->createMenu(Core::Id("Git.StashMenu"));
@@ -473,26 +472,26 @@ bool GitPlugin::initialize(const QStringList &arguments, QString *errorMessage)
     gitContainer->addMenu(stashMenu);
 
     createRepositoryAction(actionManager, stashMenu,
-                           tr("Stashes..."), QLatin1String("Git.StashList"),
+                           tr("Stashes..."), Core::Id("Git.StashList"),
                            globalcontext, false, SLOT(stashList()));
 
     stashMenu->addAction(createSeparator(actionManager, globalcontext, Core::Id("Git.Sep.StashMenuPush"), this));
 
     ActionCommandPair actionCommand =
             createRepositoryAction(actionManager, stashMenu,
-                                   tr("Stash"), QLatin1String("Git.Stash"),
+                                   tr("Stash"), Core::Id("Git.Stash"),
                                    globalcontext, true, SLOT(stash()));
     actionCommand.first->setToolTip(tr("Saves the current state of your work and resets the repository."));
 
     actionCommand = createRepositoryAction(actionManager, stashMenu,
-                                           tr("Take Snapshot..."), QLatin1String("Git.StashSnapshot"),
+                                           tr("Take Snapshot..."), Core::Id("Git.StashSnapshot"),
                                            globalcontext, true, SLOT(stashSnapshot()));
     actionCommand.first->setToolTip(tr("Saves the current state of your work."));
 
     stashMenu->addAction(createSeparator(actionManager, globalcontext, Core::Id("Git.Sep.StashMenuPop"), this));
 
     actionCommand = createRepositoryAction(actionManager, stashMenu,
-                                           tr("Stash Pop"), QLatin1String("Git.StashPop"),
+                                           tr("Stash Pop"), Core::Id("Git.StashPop"),
                                            globalcontext, true, &GitClient::stashPop);
     actionCommand.first->setToolTip(tr("Restores changes saved to the stash list using \"Stash\"."));
 
@@ -501,11 +500,11 @@ bool GitPlugin::initialize(const QStringList &arguments, QString *errorMessage)
     gitContainer->addMenu(subversionMenu);
 
     createRepositoryAction(actionManager, subversionMenu,
-                           tr("Log"), QLatin1String("Git.Subversion.Log"),
+                           tr("Log"), Core::Id("Git.Subversion.Log"),
                            globalcontext, false, &GitClient::subversionLog);
 
     createRepositoryAction(actionManager, subversionMenu,
-                           tr("Fetch"), QLatin1String("Git.Subversion.Fetch"),
+                           tr("Fetch"), Core::Id("Git.Subversion.Fetch"),
                            globalcontext, false, &GitClient::synchronousSubversionFetch);
 
     gitContainer->addAction(createSeparator(actionManager, globalcontext, Core::Id("Git.Sep.PushPull"), this));
@@ -513,24 +512,24 @@ bool GitPlugin::initialize(const QStringList &arguments, QString *errorMessage)
     gitContainer->addAction(createSeparator(actionManager, globalcontext, Core::Id("Git.Sep.Global"), this));
 
     createRepositoryAction(actionManager, gitContainer,
-                           tr("Fetch"), QLatin1String("Git.Fetch"),
+                           tr("Fetch"), Core::Id("Git.Fetch"),
                            globalcontext, true, SLOT(fetch()));
 
     createRepositoryAction(actionManager, gitContainer,
-                           tr("Pull"), QLatin1String("Git.Pull"),
+                           tr("Pull"), Core::Id("Git.Pull"),
                            globalcontext, true, SLOT(pull()));
 
     actionCommand = createRepositoryAction(actionManager, gitContainer,
-                                           tr("Push"), QLatin1String("Git.Push"),
+                                           tr("Push"), Core::Id("Git.Push"),
                                            globalcontext, true, SLOT(push()));
 
     actionCommand = createRepositoryAction(actionManager, gitContainer,
-                                           tr("Commit..."), QLatin1String("Git.Commit"),
+                                           tr("Commit..."), Core::Id("Git.Commit"),
                                            globalcontext, true, SLOT(startCommit()));
     actionCommand.second->setDefaultKeySequence(QKeySequence(tr("Alt+G,Alt+C")));
 
     createRepositoryAction(actionManager, gitContainer,
-                           tr("Amend Last Commit..."), QLatin1String("Git.AmendCommit"),
+                           tr("Amend Last Commit..."), Core::Id("Git.AmendCommit"),
                            globalcontext, true, SLOT(startAmendCommit()));
 
     // Subversion in a submenu.
@@ -542,7 +541,7 @@ bool GitPlugin::initialize(const QStringList &arguments, QString *errorMessage)
         for (int i = 0; i < count; i++) {
             Core::Command *tCommand
                     = actionManager->registerAction(snapShotActions.at(i),
-                                                    QString(QLatin1String("Git.Snapshot.") + QString::number(i)),
+                                                    Core::Id(QLatin1String("Git.Snapshot.") + QString::number(i)),
                                                     globalcontext);
             gitContainer->addAction(tCommand);
         }
diff --git a/src/plugins/git/gitplugin.h b/src/plugins/git/gitplugin.h
index 658c299c5bd5c092a445c75a7a12b9a594b96591..59b847c6fefe60d21a0247b7729951b0734bf038 100644
--- a/src/plugins/git/gitplugin.h
+++ b/src/plugins/git/gitplugin.h
@@ -143,35 +143,35 @@ private:
     inline ParameterActionCommandPair
             createParameterAction(Core::ActionManager *am, Core::ActionContainer *ac,
                                   const QString &defaultText, const QString &parameterText,
-                                  const QString &id, const Core::Context &context, bool addToLocator);
+                                  const Core::Id &id, const Core::Context &context, bool addToLocator);
 
     inline ParameterActionCommandPair
             createFileAction(Core::ActionManager *am, Core::ActionContainer *ac,
                              const QString &defaultText, const QString &parameterText,
-                             const QString &id, const Core::Context &context, bool addToLocator,
+                             const Core::Id &id, const Core::Context &context, bool addToLocator,
                              const char *pluginSlot);
 
     inline ParameterActionCommandPair
             createProjectAction(Core::ActionManager *am, Core::ActionContainer *ac,
                                 const QString &defaultText, const QString &parameterText,
-                                const QString &id, const Core::Context &context, bool addToLocator);
+                                const Core::Id &id, const Core::Context &context, bool addToLocator);
 
     inline ParameterActionCommandPair
                 createProjectAction(Core::ActionManager *am, Core::ActionContainer *ac,
                                     const QString &defaultText, const QString &parameterText,
-                                    const QString &id, const Core::Context &context, bool addToLocator,
+                                    const Core::Id &id, const Core::Context &context, bool addToLocator,
                                     const char *pluginSlot);
 
 
     inline ActionCommandPair createRepositoryAction(Core::ActionManager *am, Core::ActionContainer *ac,
-                                           const QString &text, const QString &id,
+                                           const QString &text, const Core::Id &id,
                                            const Core::Context &context, bool addToLocator);
     inline ActionCommandPair createRepositoryAction(Core::ActionManager *am, Core::ActionContainer *ac,
-                                           const QString &text, const QString &id,
+                                           const QString &text, const Core::Id &id,
                                            const Core::Context &context,
                                            bool addToLocator, const char *pluginSlot);
     inline ActionCommandPair createRepositoryAction(Core::ActionManager *am, Core::ActionContainer *ac,
-                                           const QString &text, const QString &id,
+                                           const QString &text, const Core::Id &id,
                                            const Core::Context &context,
                                            bool addToLocator, GitClientMemberFunc);
 
diff --git a/src/plugins/glsleditor/glslcompletionassist.cpp b/src/plugins/glsleditor/glslcompletionassist.cpp
index 125dbad66fa5f0c7dc2935d2ab687409b4a21059..8218a1a199ccfbac662219fab074eec5dc1d54dd 100644
--- a/src/plugins/glsleditor/glslcompletionassist.cpp
+++ b/src/plugins/glsleditor/glslcompletionassist.cpp
@@ -122,9 +122,9 @@ bool checkStartOfIdentifier(const QString &word)
 // ----------------------------
 // GLSLCompletionAssistProvider
 // ----------------------------
-bool GLSLCompletionAssistProvider::supportsEditor(const QString &editorId) const
+bool GLSLCompletionAssistProvider::supportsEditor(const Core::Id &editorId) const
 {
-    return editorId == QLatin1String(Constants::C_GLSLEDITOR_ID);
+    return editorId == Core::Id(Constants::C_GLSLEDITOR_ID);
 }
 
 IAssistProcessor *GLSLCompletionAssistProvider::createProcessor() const
diff --git a/src/plugins/glsleditor/glslcompletionassist.h b/src/plugins/glsleditor/glslcompletionassist.h
index 92be9c8463010567295a006029a326b1daecbe55..8a0d5ddd43d4d5f1bd893fa07a80188dd200524f 100644
--- a/src/plugins/glsleditor/glslcompletionassist.h
+++ b/src/plugins/glsleditor/glslcompletionassist.h
@@ -59,7 +59,7 @@ class GLSLCompletionAssistInterface;
 class GLSLCompletionAssistProvider : public TextEditor::CompletionAssistProvider
 {
 public:
-    virtual bool supportsEditor(const QString &editorId) const;
+    virtual bool supportsEditor(const Core::Id &editorId) const;
     virtual TextEditor::IAssistProcessor *createProcessor() const;
 
     virtual int activationCharSequenceLength() const;
diff --git a/src/plugins/glsleditor/glsleditor.cpp b/src/plugins/glsleditor/glsleditor.cpp
index 81bb7ab96608ec4ca19787e35284d14a7d6a7e0d..4c384d1ad430f727b900c357fdc6a30a1540bd73 100644
--- a/src/plugins/glsleditor/glsleditor.cpp
+++ b/src/plugins/glsleditor/glsleditor.cpp
@@ -201,9 +201,9 @@ Core::IEditor *GLSLEditorEditable::duplicate(QWidget *parent)
     return newEditor->editor();
 }
 
-QString GLSLEditorEditable::id() const
+Core::Id GLSLEditorEditable::id() const
 {
-    return QLatin1String(GLSLEditor::Constants::C_GLSLEDITOR_ID);
+    return GLSLEditor::Constants::C_GLSLEDITOR_ID;
 }
 
 bool GLSLEditorEditable::open(QString *errorString, const QString &fileName, const QString &realFileName)
diff --git a/src/plugins/glsleditor/glsleditoreditable.h b/src/plugins/glsleditor/glsleditoreditable.h
index 5be119b72042a93682f2b588080b6d8872424edd..fbe8d672b4af226eb1a20d13218fe3d2c8db4c6b 100644
--- a/src/plugins/glsleditor/glsleditoreditable.h
+++ b/src/plugins/glsleditor/glsleditoreditable.h
@@ -49,10 +49,10 @@ public:
 
     bool duplicateSupported() const { return true; }
     Core::IEditor *duplicate(QWidget *parent);
-    QString id() const;
+    Core::Id id() const;
     bool isTemporary() const { return false; }
-    virtual bool open(QString *errorString, const QString &fileName, const QString &realFileName);
-    virtual QString preferredModeType() const;
+    bool open(QString *errorString, const QString &fileName, const QString &realFileName);
+    QString preferredModeType() const;
 };
 
 } // namespace Internal
diff --git a/src/plugins/glsleditor/glsleditorplugin.cpp b/src/plugins/glsleditor/glsleditorplugin.cpp
index 8d23361039263ce3030cb79f15e8e74b8031a2d9..b852649e0d6d52274f5f0e6042799f4d1361ae6d 100644
--- a/src/plugins/glsleditor/glsleditorplugin.cpp
+++ b/src/plugins/glsleditor/glsleditorplugin.cpp
@@ -240,12 +240,11 @@ void GLSLEditorPlugin::initializeEditor(GLSLEditor::GLSLTextEditorWidget *editor
     TextEditor::TextEditorSettings::instance()->initializeEditor(editor);
 }
 
-
 Core::Command *GLSLEditorPlugin::addToolAction(QAction *a, Core::ActionManager *am,
-                                               Core::Context &context, const QString &name,
+                                               Core::Context &context, const Core::Id &id,
                                                Core::ActionContainer *c1, const QString &keySequence)
 {
-    Core::Command *command = am->registerAction(a, name, context);
+    Core::Command *command = am->registerAction(a, id, context);
     if (!keySequence.isEmpty())
         command->setDefaultKeySequence(QKeySequence(keySequence));
     c1->addAction(command);
diff --git a/src/plugins/glsleditor/glsleditorplugin.h b/src/plugins/glsleditor/glsleditorplugin.h
index 92befb9f1dd00ffc58810ccff0599a1b79d400f8..5d5d90b7311751236f21dee9b7d4ef6968124256 100644
--- a/src/plugins/glsleditor/glsleditorplugin.h
+++ b/src/plugins/glsleditor/glsleditorplugin.h
@@ -35,6 +35,7 @@
 
 #include <extensionsystem/iplugin.h>
 #include <coreplugin/icontext.h>
+#include <coreplugin/id.h>
 #include <QtCore/QPointer>
 #include <glsl/glsl.h>
 
@@ -105,7 +106,8 @@ private:
     QByteArray glslFile(const QString &fileName);
     void parseGlslFile(const QString &fileName, InitFile *initFile);
 
-    Core::Command *addToolAction(QAction *a, Core::ActionManager *am, Core::Context &context, const QString &name,
+    // FIXME: Unused?
+    Core::Command *addToolAction(QAction *a, Core::ActionManager *am, Core::Context &context, const Core::Id &name,
                                  Core::ActionContainer *c1, const QString &keySequence);
 
     static GLSLEditorPlugin *m_instance;
diff --git a/src/plugins/imageviewer/imageviewer.cpp b/src/plugins/imageviewer/imageviewer.cpp
index 24846e7300ada927bc45e6c57fd55327e79906a7..94bc6495871736bd75e9382345267837e9a5655f 100644
--- a/src/plugins/imageviewer/imageviewer.cpp
+++ b/src/plugins/imageviewer/imageviewer.cpp
@@ -136,9 +136,9 @@ Core::IFile *ImageViewer::file()
     return d->file;
 }
 
-QString ImageViewer::id() const
+Core::Id ImageViewer::id() const
 {
-    return QLatin1String(Constants::IMAGEVIEWER_ID);
+    return Core::Id(Constants::IMAGEVIEWER_ID);
 }
 
 QString ImageViewer::displayName() const
diff --git a/src/plugins/imageviewer/imageviewer.h b/src/plugins/imageviewer/imageviewer.h
index dd9d80c688b94e2429ad1b17552ece76d9d1a17a..c22a310548dcec08274aeb68bd13fafa06c2db94 100644
--- a/src/plugins/imageviewer/imageviewer.h
+++ b/src/plugins/imageviewer/imageviewer.h
@@ -60,7 +60,7 @@ public:
     bool createNew(const QString &contents = QString());
     bool open(QString *errorString, const QString &fileName, const QString &realFileName);
     Core::IFile *file();
-    QString id() const;
+    Core::Id id() const;
     QString displayName() const;
     void setDisplayName(const QString &title);
 
diff --git a/src/plugins/locator/basefilefilter.cpp b/src/plugins/locator/basefilefilter.cpp
index e13a6d5f8cde5ae0edfe3573607cc995364e7d94..dd5ff52cc6a394ffec983fbd938ff19e6cb620a8 100644
--- a/src/plugins/locator/basefilefilter.cpp
+++ b/src/plugins/locator/basefilefilter.cpp
@@ -100,7 +100,7 @@ QList<FilterEntry> BaseFileFilter::matchesFor(QFutureInterface<Locator::FilterEn
 void BaseFileFilter::accept(Locator::FilterEntry selection) const
 {
     Core::EditorManager *em = Core::EditorManager::instance();
-    em->openEditor(selection.internalData.toString(), QString(), Core::EditorManager::ModeSwitch);
+    em->openEditor(selection.internalData.toString(), Id(), Core::EditorManager::ModeSwitch);
 }
 
 void BaseFileFilter::generateFileNames()
diff --git a/src/plugins/locator/filesystemfilter.cpp b/src/plugins/locator/filesystemfilter.cpp
index 30ef23710e0e106754a9267b0ee523883d90c9f3..c8ecea9fbd80fc45254616ac92f53257d53378a1 100644
--- a/src/plugins/locator/filesystemfilter.cpp
+++ b/src/plugins/locator/filesystemfilter.cpp
@@ -109,7 +109,7 @@ void FileSystemFilter::accept(FilterEntry selection) const
         m_locatorWidget->show(value, value.length());
         return;
     }
-    m_editorManager->openEditor(selection.internalData.toString(), QString(),
+    m_editorManager->openEditor(selection.internalData.toString(), Id(),
                                 Core::EditorManager::ModeSwitch);
 }
 
diff --git a/src/plugins/locator/locatorwidget.cpp b/src/plugins/locator/locatorwidget.cpp
index cd759106a9465fecab2da801404441fb630ba2e9..14a7182a4c8f8501ff0ec7b3ba2fcecbf5a987b5 100644
--- a/src/plugins/locator/locatorwidget.cpp
+++ b/src/plugins/locator/locatorwidget.cpp
@@ -362,7 +362,7 @@ void LocatorWidget::updateFilterList()
     foreach (ILocatorFilter *filter, m_locatorPlugin->filters()) {
         if (filter->shortcutString().isEmpty() || filter->isHidden())
             continue;
-        QString locatorId = QLatin1String("Locator.") + filter->id();
+        Core::Id locatorId = Core::Id(QLatin1String("Locator.") + filter->id());
         QAction *action = 0;
         Core::Command *cmd = 0;
         if (!actionCopy.contains(filter->id())) {
@@ -384,7 +384,7 @@ void LocatorWidget::updateFilterList()
 
     // unregister actions that are deleted now
     foreach (const QString &id, actionCopy.keys()) {
-        am->unregisterAction(actionCopy.value(id), QString(QLatin1String("Locator.") + id));
+        am->unregisterAction(actionCopy.value(id), Core::Id(QLatin1String("Locator.") + id));
     }
     qDeleteAll(actionCopy);
 
diff --git a/src/plugins/macros/actionmacrohandler.cpp b/src/plugins/macros/actionmacrohandler.cpp
index 174a730054286082658df636f7099fc0d33b4ba1..72bb8c494bd6693499eaa4b8ba2a44b768b1b312 100644
--- a/src/plugins/macros/actionmacrohandler.cpp
+++ b/src/plugins/macros/actionmacrohandler.cpp
@@ -89,7 +89,7 @@ bool ActionMacroHandler::executeEvent(const MacroEvent &macroEvent)
     const Core::ICore *core = Core::ICore::instance();
     const Core::ActionManager *am = core->actionManager();
 
-    QAction *action = am->command(macroEvent.value(ACTIONNAME).toString())->action();
+    QAction *action = am->command(Core::Id(macroEvent.value(ACTIONNAME).toString()))->action();
     if (!action)
         return false;
 
@@ -104,7 +104,7 @@ void ActionMacroHandler::addActionEvent(const QString &id)
 
     const Core::ICore *core = Core::ICore::instance();
     const Core::ActionManager *am = core->actionManager();
-    const Core::Command *cmd = am->command(id);
+    const Core::Command *cmd = am->command(Core::Id(id));
     if (cmd->isScriptable(cmd->context())) {
         MacroEvent e;
         e.setId(EVENTNAME);
@@ -119,13 +119,13 @@ void ActionMacroHandler::registerCommand(const QString &id)
         m_commandIds.insert(id);
         const Core::ICore *core = Core::ICore::instance();
         const Core::ActionManager *am = core->actionManager();
-        QAction* action = am->command(id)->action();
+        QAction* action = am->command(Core::Id(id))->action();
         if (action) {
             connect(action, SIGNAL(triggered()), m_mapper, SLOT(map()));
             m_mapper->setMapping(action, id);
             return;
         }
-        QShortcut* shortcut = am->command(id)->shortcut();
+        QShortcut* shortcut = am->command(Core::Id(id))->shortcut();
         if (shortcut) {
             connect(shortcut, SIGNAL(activated()), m_mapper, SLOT(map()));
             m_mapper->setMapping(shortcut, id);
@@ -137,6 +137,6 @@ void ActionMacroHandler::addCommand(const QString &id)
 {
     const Core::ICore *core = Core::ICore::instance();
     const Core::ActionManager *am = core->actionManager();
-    if (am->command(id)->isScriptable())
+    if (am->command(Core::Id(id))->isScriptable())
         registerCommand(id);
 }
diff --git a/src/plugins/macros/macromanager.cpp b/src/plugins/macros/macromanager.cpp
index 9d584f8be3b3b142c4514ea6a98dbf84d31288f4..a979594bbce0d045c7f906b3234ead2a66bd5b64 100644
--- a/src/plugins/macros/macromanager.cpp
+++ b/src/plugins/macros/macromanager.cpp
@@ -167,7 +167,7 @@ void MacroManager::MacroManagerPrivate::addMacro(Macro *macro)
     Core::ActionManager *am = core->actionManager();
     QShortcut *shortcut = new QShortcut(core->mainWindow());
     shortcut->setWhatsThis(macro->description());
-    const QString macroId = QLatin1String(Constants::PREFIX_MACRO) + macro->displayName();
+    const Core::Id macroId(QLatin1String(Constants::PREFIX_MACRO) + macro->displayName());
     am->registerShortcut(shortcut, macroId, context);
     connect(shortcut, SIGNAL(activated()), mapper, SLOT(map()));
     mapper->setMapping(shortcut, macro->displayName());
diff --git a/src/plugins/madde/maemopackagecreationwidget.cpp b/src/plugins/madde/maemopackagecreationwidget.cpp
index 0874cd8170aea10d2d84ec7e90bafce3bd825c19..5dffb67b91399d714b3cc585dc93693f76fcb30b 100644
--- a/src/plugins/madde/maemopackagecreationwidget.cpp
+++ b/src/plugins/madde/maemopackagecreationwidget.cpp
@@ -275,7 +275,7 @@ void MaemoPackageCreationWidget::editSpecFile()
 
 void MaemoPackageCreationWidget::editFile(const QString &filePath)
 {
-    Core::EditorManager::instance()->openEditor(filePath, QString(),
+    Core::EditorManager::instance()->openEditor(filePath, Core::Id(),
         Core::EditorManager::ModeSwitch);
 }
 
diff --git a/src/plugins/perforce/perforceplugin.cpp b/src/plugins/perforce/perforceplugin.cpp
index b3a74bec1247953faa5cbcdc83eeba083de89ba5..23b90e28663b053fa8988222f57ae5c2c94fa334 100644
--- a/src/plugins/perforce/perforceplugin.cpp
+++ b/src/plugins/perforce/perforceplugin.cpp
@@ -1186,16 +1186,17 @@ PerforceResponse PerforcePlugin::runP4Cmd(const QString &workingDir,
     return response;
 }
 
-Core::IEditor * PerforcePlugin::showOutputInEditor(const QString& title, const QString output,
+Core::IEditor *PerforcePlugin::showOutputInEditor(const QString &title, const QString output,
                                                    int editorType,
                                                    const QString &source,
                                                    QTextCodec *codec)
 {
     const VCSBase::VCSBaseEditorParameters *params = findType(editorType);
     QTC_ASSERT(params, return 0);
-    const QString id = params->id;
+    const Core::Id id(params->id);
     if (Perforce::Constants::debug)
-        qDebug() << "PerforcePlugin::showOutputInEditor" << title << id <<  "Size= " << output.size() <<  " Type=" << editorType << debugCodec(codec);
+        qDebug() << "PerforcePlugin::showOutputInEditor" << title << id.name()
+                 <<  "Size= " << output.size() <<  " Type=" << editorType << debugCodec(codec);
     QString s = title;
     Core::IEditor *editor = Core::EditorManager::instance()->openEditorWithContents(id, &s, output);
     connect(editor, SIGNAL(annotateRevisionRequested(QString,QString,int)),
diff --git a/src/plugins/projectexplorer/foldernavigationwidget.cpp b/src/plugins/projectexplorer/foldernavigationwidget.cpp
index 6a87cd23c99ed1a4e1695dc5021a9a40cb686ea2..344af6d69e8933653787c4ab547dd20e0559eb0b 100644
--- a/src/plugins/projectexplorer/foldernavigationwidget.cpp
+++ b/src/plugins/projectexplorer/foldernavigationwidget.cpp
@@ -272,7 +272,7 @@ void FolderNavigationWidget::openItem(const QModelIndex &srcIndex)
     }
     // Open file.
     Core::EditorManager *editorManager = Core::EditorManager::instance();
-    editorManager->openEditor(m_fileSystemModel->filePath(srcIndex), QString(), Core::EditorManager::ModeSwitch);
+    editorManager->openEditor(m_fileSystemModel->filePath(srcIndex), Core::Id(), Core::EditorManager::ModeSwitch);
 }
 
 void FolderNavigationWidget::setCurrentTitle(QString dirName, const QString &fullPath)
diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp
index cf2a800f3b840f473ccc47419f94eddc0ae278e9..1ce2bc95bfbe1cbfc4262bf74c4abf9529d102c8 100644
--- a/src/plugins/projectexplorer/projectexplorer.cpp
+++ b/src/plugins/projectexplorer/projectexplorer.cpp
@@ -2612,7 +2612,7 @@ void ProjectExplorerPlugin::openFile()
 {
     QTC_ASSERT(d->m_currentNode, return)
     Core::EditorManager *em = Core::EditorManager::instance();
-    em->openEditor(d->m_currentNode->path(), QString(), Core::EditorManager::ModeSwitch);
+    em->openEditor(d->m_currentNode->path(), Core::Id(), Core::EditorManager::ModeSwitch);
 }
 
 void ProjectExplorerPlugin::searchOnFileSystem()
diff --git a/src/plugins/qmljseditor/qmljscompletionassist.cpp b/src/plugins/qmljseditor/qmljscompletionassist.cpp
index 330d857ea8f580f92368ed54d161c87b66643553..115602caecb43d695c1058bec7d1ba3d1ea73913 100644
--- a/src/plugins/qmljseditor/qmljscompletionassist.cpp
+++ b/src/plugins/qmljseditor/qmljscompletionassist.cpp
@@ -429,9 +429,9 @@ int FunctionHintProposalModel::activeArgument(const QString &prefix) const
 // -----------------------------
 // QmlJSCompletionAssistProvider
 // -----------------------------
-bool QmlJSCompletionAssistProvider::supportsEditor(const QString &editorId) const
+bool QmlJSCompletionAssistProvider::supportsEditor(const Core::Id &editorId) const
 {
-    return editorId == QLatin1String(Constants::C_QMLJSEDITOR_ID);
+    return editorId == Core::Id(Constants::C_QMLJSEDITOR_ID);
 }
 
 int QmlJSCompletionAssistProvider::activationCharSequenceLength() const
diff --git a/src/plugins/qmljseditor/qmljscompletionassist.h b/src/plugins/qmljseditor/qmljscompletionassist.h
index 3d63948fe3fdddd2232306c75dbd9833054e43c2..5c8d2ea76826e4fa960ba223c374db73f6448f05 100644
--- a/src/plugins/qmljseditor/qmljscompletionassist.h
+++ b/src/plugins/qmljseditor/qmljscompletionassist.h
@@ -80,7 +80,7 @@ public:
 class QmlJSCompletionAssistProvider : public TextEditor::CompletionAssistProvider
 {
 public:
-    virtual bool supportsEditor(const QString &editorId) const;
+    virtual bool supportsEditor(const Core::Id &editorId) const;
     virtual TextEditor::IAssistProcessor *createProcessor() const;
 
     virtual int activationCharSequenceLength() const;
diff --git a/src/plugins/qmljseditor/qmljseditor.cpp b/src/plugins/qmljseditor/qmljseditor.cpp
index ee4bf997dc0eca3b21c485808a60a50c444995af..61310a3066483fa998ac03dd14069f5bea50fc73 100644
--- a/src/plugins/qmljseditor/qmljseditor.cpp
+++ b/src/plugins/qmljseditor/qmljseditor.cpp
@@ -787,9 +787,9 @@ Core::IEditor *QmlJSEditorEditable::duplicate(QWidget *parent)
     return newEditor->editor();
 }
 
-QString QmlJSEditorEditable::id() const
+Core::Id QmlJSEditorEditable::id() const
 {
-    return QLatin1String(QmlJSEditor::Constants::C_QMLJSEDITOR_ID);
+    return QmlJSEditor::Constants::C_QMLJSEDITOR_ID;
 }
 
 bool QmlJSEditorEditable::open(QString *errorString, const QString &fileName, const QString &realFileName)
diff --git a/src/plugins/qmljseditor/qmljseditoreditable.h b/src/plugins/qmljseditor/qmljseditoreditable.h
index 4cdbfdb28a8edbf5a7b6fd47856a1b41804e5e55..fefb6f7c6b7ca56b33fb91834c3727df1e9a70eb 100644
--- a/src/plugins/qmljseditor/qmljseditoreditable.h
+++ b/src/plugins/qmljseditor/qmljseditoreditable.h
@@ -48,10 +48,10 @@ public:
 
     bool duplicateSupported() const { return true; }
     Core::IEditor *duplicate(QWidget *parent);
-    QString id() const;
+    Core::Id id() const;
     bool isTemporary() const { return false; }
-    virtual bool open(QString *errorString, const QString &fileName, const QString &realFileName);
-    virtual QString preferredModeType() const;
+    bool open(QString *errorString, const QString &fileName, const QString &realFileName);
+    QString preferredModeType() const;
     void setTextCodec(QTextCodec *codec, TextCodecReason = TextCodecOtherReason);
 };
 
diff --git a/src/plugins/qmljseditor/qmljseditorplugin.cpp b/src/plugins/qmljseditor/qmljseditorplugin.cpp
index 75ed12cfc6133b35adb3e642c74f3c2920abcd03..ca041661cc97bb4a0c6996902c52882a72ff9c0b 100644
--- a/src/plugins/qmljseditor/qmljseditorplugin.cpp
+++ b/src/plugins/qmljseditor/qmljseditorplugin.cpp
@@ -310,10 +310,10 @@ void QmlJSEditorPlugin::showContextPane()
 }
 
 Core::Command *QmlJSEditorPlugin::addToolAction(QAction *a, Core::ActionManager *am,
-                                          Core::Context &context, const QString &name,
+                                          Core::Context &context, const Core::Id &id,
                                           Core::ActionContainer *c1, const QString &keySequence)
 {
-    Core::Command *command = am->registerAction(a, name, context);
+    Core::Command *command = am->registerAction(a, id, context);
     if (!keySequence.isEmpty())
         command->setDefaultKeySequence(QKeySequence(keySequence));
     c1->addAction(command);
diff --git a/src/plugins/qmljseditor/qmljseditorplugin.h b/src/plugins/qmljseditor/qmljseditorplugin.h
index a63e91163b2cfd815d5c92669b614236b08a3697..2c107ee37dd85e5e5af994c24c4c05ffd4650758 100644
--- a/src/plugins/qmljseditor/qmljseditorplugin.h
+++ b/src/plugins/qmljseditor/qmljseditorplugin.h
@@ -35,10 +35,10 @@
 
 #include <extensionsystem/iplugin.h>
 #include <coreplugin/icontext.h>
+#include <coreplugin/id.h>
 #include <QtCore/QPointer>
 
 QT_FORWARD_DECLARE_CLASS(QAction)
-QT_FORWARD_DECLARE_CLASS(QTimer)
 
 namespace TextEditor {
 class TextEditorActionHandler;
@@ -102,7 +102,7 @@ private Q_SLOTS:
     void runSemanticScan();
 
 private:
-    Core::Command *addToolAction(QAction *a, Core::ActionManager *am, Core::Context &context, const QString &name,
+    Core::Command *addToolAction(QAction *a, Core::ActionManager *am, Core::Context &context, const Core::Id &id,
                                  Core::ActionContainer *c1, const QString &keySequence);
 
     static QmlJSEditorPlugin *m_instance;
diff --git a/src/plugins/qmljseditor/qmljsfindreferences.cpp b/src/plugins/qmljseditor/qmljsfindreferences.cpp
index 5f197a73ce1213e125e5a31457cb14050541ea64..e65cf774109b9e2f53dfeb266d18ee8c03325c3c 100644
--- a/src/plugins/qmljseditor/qmljsfindreferences.cpp
+++ b/src/plugins/qmljseditor/qmljsfindreferences.cpp
@@ -971,10 +971,10 @@ void FindReferences::openEditor(const Find::SearchResultItem &item)
 {
     if (item.path.size() > 0) {
         TextEditor::BaseTextEditorWidget::openEditorAt(item.path.first(), item.lineNumber, item.textMarkPos,
-                                                 QString(),
+                                                 Core::Id(),
                                                  Core::EditorManager::ModeSwitch);
     } else {
-        Core::EditorManager::instance()->openEditor(item.text, QString(), Core::EditorManager::ModeSwitch);
+        Core::EditorManager::instance()->openEditor(item.text, Core::Id(), Core::EditorManager::ModeSwitch);
     }
 }
 
diff --git a/src/plugins/qmljseditor/qmljsquickfixassist.cpp b/src/plugins/qmljseditor/qmljsquickfixassist.cpp
index 30a0dda51d74863174dd243724ffb938d4310bd2..37900b6219a1677cb85215312077b1596b34bf18 100644
--- a/src/plugins/qmljseditor/qmljsquickfixassist.cpp
+++ b/src/plugins/qmljseditor/qmljsquickfixassist.cpp
@@ -96,9 +96,9 @@ QmlJSQuickFixAssistProvider::QmlJSQuickFixAssistProvider()
 QmlJSQuickFixAssistProvider::~QmlJSQuickFixAssistProvider()
 {}
 
-bool QmlJSQuickFixAssistProvider::supportsEditor(const QString &editorId) const
+bool QmlJSQuickFixAssistProvider::supportsEditor(const Core::Id &editorId) const
 {
-    return editorId == QLatin1String(Constants::C_QMLJSEDITOR_ID);
+    return editorId == Core::Id(Constants::C_QMLJSEDITOR_ID);
 }
 
 IAssistProcessor *QmlJSQuickFixAssistProvider::createProcessor() const
diff --git a/src/plugins/qmljseditor/qmljsquickfixassist.h b/src/plugins/qmljseditor/qmljsquickfixassist.h
index 51a21e35b9fcc7ed0da33631cbe0afcbfd561c01..de58f12b2c10c899b0019ed591c24b33795d03a2 100644
--- a/src/plugins/qmljseditor/qmljsquickfixassist.h
+++ b/src/plugins/qmljseditor/qmljsquickfixassist.h
@@ -80,7 +80,7 @@ public:
     QmlJSQuickFixAssistProvider();
     virtual ~QmlJSQuickFixAssistProvider();
 
-    virtual bool supportsEditor(const QString &editorId) const;
+    virtual bool supportsEditor(const Core::Id &editorId) const;
     virtual TextEditor::IAssistProcessor *createProcessor() const;
 
     virtual QList<TextEditor::QuickFixFactory *> quickFixFactories() const;
diff --git a/src/plugins/qmljstools/qmljsfunctionfilter.cpp b/src/plugins/qmljstools/qmljsfunctionfilter.cpp
index fb87d2b5da7a29400c31bb75b0d14b993dc31cf1..e5cf984227977ced2bffc35d23bebdd9b679bfb1 100644
--- a/src/plugins/qmljstools/qmljsfunctionfilter.cpp
+++ b/src/plugins/qmljstools/qmljsfunctionfilter.cpp
@@ -114,5 +114,5 @@ void FunctionFilter::accept(Locator::FilterEntry selection) const
 {
     const LocatorData::Entry entry = qvariant_cast<LocatorData::Entry>(selection.internalData);
     TextEditor::BaseTextEditorWidget::openEditorAt(entry.fileName, entry.line, entry.column,
-                                             QString(), Core::EditorManager::ModeSwitch);
+                                             Core::Id(), Core::EditorManager::ModeSwitch);
 }
diff --git a/src/plugins/qt4projectmanager/profilecompletionassist.cpp b/src/plugins/qt4projectmanager/profilecompletionassist.cpp
index 2d6b25fb019c1c8563201182ab00bcab2443e095..2a10d3422e00cf8f7ccb2d3164db38a1c104e089 100644
--- a/src/plugins/qt4projectmanager/profilecompletionassist.cpp
+++ b/src/plugins/qt4projectmanager/profilecompletionassist.cpp
@@ -109,9 +109,9 @@ ProFileCompletionAssistProvider::ProFileCompletionAssistProvider()
 ProFileCompletionAssistProvider::~ProFileCompletionAssistProvider()
 {}
 
-bool ProFileCompletionAssistProvider::supportsEditor(const QString &editorId) const
+bool ProFileCompletionAssistProvider::supportsEditor(const Core::Id &editorId) const
 {
-    return editorId == QLatin1String(Qt4ProjectManager::Constants::PROFILE_EDITOR_ID);
+    return editorId == Core::Id(Qt4ProjectManager::Constants::PROFILE_EDITOR_ID);
 }
 
 bool ProFileCompletionAssistProvider::isAsynchronous() const
diff --git a/src/plugins/qt4projectmanager/profilecompletionassist.h b/src/plugins/qt4projectmanager/profilecompletionassist.h
index 0569a572817ae1fbdfd065ad3fdbaa5b4f018f42..6d4082c5a56bd1fc7fffd785f7be175e60e8396e 100644
--- a/src/plugins/qt4projectmanager/profilecompletionassist.h
+++ b/src/plugins/qt4projectmanager/profilecompletionassist.h
@@ -61,7 +61,7 @@ public:
     ProFileCompletionAssistProvider();
     virtual ~ProFileCompletionAssistProvider();
 
-    virtual bool supportsEditor(const QString &editorId) const;
+    virtual bool supportsEditor(const Core::Id &editorId) const;
     virtual TextEditor::IAssistProcessor *createProcessor() const;
 
     virtual bool isAsynchronous() const;
diff --git a/src/plugins/qt4projectmanager/profileeditor.cpp b/src/plugins/qt4projectmanager/profileeditor.cpp
index 1f1fc47d058c7ad5250e7ac1b60cfd64022e6308..6e1bf16ce4c30f24235fb418a1219e739beb9dea 100644
--- a/src/plugins/qt4projectmanager/profileeditor.cpp
+++ b/src/plugins/qt4projectmanager/profileeditor.cpp
@@ -74,9 +74,9 @@ Core::IEditor *ProFileEditor::duplicate(QWidget *parent)
     return ret->editor();
 }
 
-QString ProFileEditor::id() const
+Core::Id ProFileEditor::id() const
 {
-    return QLatin1String(Qt4ProjectManager::Constants::PROFILE_EDITOR_ID);
+    return Qt4ProjectManager::Constants::PROFILE_EDITOR_ID;
 }
 
 //
diff --git a/src/plugins/qt4projectmanager/profileeditor.h b/src/plugins/qt4projectmanager/profileeditor.h
index 86cc67fc107e7e0ac549f1573a0a7719d8551043..225ad5b0c07ebc22e81fe0e4f61fc5d49c7d696e 100644
--- a/src/plugins/qt4projectmanager/profileeditor.h
+++ b/src/plugins/qt4projectmanager/profileeditor.h
@@ -63,7 +63,7 @@ public:
 
     bool duplicateSupported() const { return true; }
     Core::IEditor *duplicate(QWidget *parent);
-    QString id() const;
+    Core::Id id() const;
     bool isTemporary() const { return false; }
 };
 
diff --git a/src/plugins/qt4projectmanager/wizards/abstractmobileappwizard.cpp b/src/plugins/qt4projectmanager/wizards/abstractmobileappwizard.cpp
index 6fd4fe7e645c1fa97ff7be787f336521de5a4d37..af4fa2ab9e984a7176fcb6b9f5d25c19465feb05 100644
--- a/src/plugins/qt4projectmanager/wizards/abstractmobileappwizard.cpp
+++ b/src/plugins/qt4projectmanager/wizards/abstractmobileappwizard.cpp
@@ -281,7 +281,7 @@ bool AbstractMobileAppWizard::postGenerateFiles(const QWizard *w,
         if (success) {
             const QString fileToOpen = fileToOpenPostGeneration();
             if (!fileToOpen.isEmpty()) {
-                Core::EditorManager::instance()->openEditor(fileToOpen, QString(), Core::EditorManager::ModeSwitch);
+                Core::EditorManager::instance()->openEditor(fileToOpen, Core::Id(), Core::EditorManager::ModeSwitch);
                 ProjectExplorer::ProjectExplorerPlugin::instance()->setCurrentFile(0, fileToOpen);
             }
         }
diff --git a/src/plugins/remotelinux/remotelinuxdeployconfigurationwidget.cpp b/src/plugins/remotelinux/remotelinuxdeployconfigurationwidget.cpp
index ff663e79a2d683fc2906c92ea317c3a1b2c367fd..df37e8ff0bbac06232e267583ce2e4809ccc70ae 100644
--- a/src/plugins/remotelinux/remotelinuxdeployconfigurationwidget.cpp
+++ b/src/plugins/remotelinux/remotelinuxdeployconfigurationwidget.cpp
@@ -205,7 +205,7 @@ void RemoteLinuxDeployConfigurationWidget::openProjectFile()
         return;
     const DeployableFilesPerProFile * const proFileInfo =
         d->deployConfiguration->deploymentInfo()->modelAt(row);
-    Core::EditorManager::instance()->openEditor(proFileInfo->proFilePath(), QString(),
+    Core::EditorManager::instance()->openEditor(proFileInfo->proFilePath(), Core::Id(),
         Core::EditorManager::ModeSwitch);
 }
 
diff --git a/src/plugins/resourceeditor/resourceeditorw.cpp b/src/plugins/resourceeditor/resourceeditorw.cpp
index d307a6f7c56fb967d6e46b3ab9f6430b0a6803ab..f57517acfbbfa79d2997d2dae7c53d862fde8f07 100644
--- a/src/plugins/resourceeditor/resourceeditorw.cpp
+++ b/src/plugins/resourceeditor/resourceeditorw.cpp
@@ -184,8 +184,9 @@ void ResourceEditorFile::rename(const QString &newName)
     emit changed();
 }
 
-QString ResourceEditorW::id() const {
-    return QLatin1String(ResourceEditor::Constants::RESOURCEEDITOR_ID);
+Core::Id ResourceEditorW::id() const
+{
+    return Core::Id(ResourceEditor::Constants::RESOURCEEDITOR_ID);
 }
 
 QString ResourceEditorFile::fileName() const
diff --git a/src/plugins/resourceeditor/resourceeditorw.h b/src/plugins/resourceeditor/resourceeditorw.h
index 25c3bd7e8e4e111f7b176a4bfcd6b22dafc6f696..0e4c1a9133ce4688960d017fd0e01c9cf5e45c76 100644
--- a/src/plugins/resourceeditor/resourceeditorw.h
+++ b/src/plugins/resourceeditor/resourceeditorw.h
@@ -90,7 +90,7 @@ public:
     bool duplicateSupported() const { return false; }
     Core::IEditor *duplicate(QWidget *) { return 0; }
     Core::IFile *file() { return m_resourceFile; }
-    QString id() const;
+    Core::Id id() const;
     QString displayName() const { return m_displayName; }
     void setDisplayName(const QString &title) { m_displayName = title; emit changed(); }
     QWidget *toolBar() { return 0; }
diff --git a/src/plugins/subversion/subversionplugin.cpp b/src/plugins/subversion/subversionplugin.cpp
index ff030e96df7e4b2cf15b33f325bf9db74c5b5711..6590e789e4578f4d6d38b87061000c40a271f341 100644
--- a/src/plugins/subversion/subversionplugin.cpp
+++ b/src/plugins/subversion/subversionplugin.cpp
@@ -1162,15 +1162,16 @@ SubversionResponse SubversionPlugin::runSvn(const QString &workingDir,
     return response;
 }
 
-Core::IEditor * SubversionPlugin::showOutputInEditor(const QString& title, const QString &output,
+Core::IEditor *SubversionPlugin::showOutputInEditor(const QString &title, const QString &output,
                                                      int editorType, const QString &source,
                                                      QTextCodec *codec)
 {
     const VCSBase::VCSBaseEditorParameters *params = findType(editorType);
     QTC_ASSERT(params, return 0);
-    const QString id = params->id;
+    const Core::Id id = params->id;
     if (Subversion::Constants::debug)
-        qDebug() << "SubversionPlugin::showOutputInEditor" << title << id <<  "Size= " << output.size() <<  " Type=" << editorType << debugCodec(codec);
+        qDebug() << "SubversionPlugin::showOutputInEditor" << title << id.name()
+                 <<  "Size= " << output.size() <<  " Type=" << editorType << debugCodec(codec);
     QString s = title;
     Core::IEditor *editor = Core::EditorManager::instance()->openEditorWithContents(id, &s, output);
     connect(editor, SIGNAL(annotateRevisionRequested(QString,QString,int)),
diff --git a/src/plugins/texteditor/basefilefind.cpp b/src/plugins/texteditor/basefilefind.cpp
index f9ac3a9a063f18913e9b156addc2e3eff54097ef..e7a2bf130f92879f201d7c6f4bdab05cc1627dae 100644
--- a/src/plugins/texteditor/basefilefind.cpp
+++ b/src/plugins/texteditor/basefilefind.cpp
@@ -288,10 +288,10 @@ void BaseFileFind::openEditor(const Find::SearchResultItem &item)
         openedEditor = TextEditor::BaseTextEditorWidget::openEditorAt(QDir::fromNativeSeparators(item.path.first()),
                                                                       item.lineNumber,
                                                                       item.textMarkPos,
-                                                                      QString(),
+                                                                      Core::Id(),
                                                                       Core::EditorManager::ModeSwitch);
     } else {
-        openedEditor = Core::EditorManager::instance()->openEditor(item.text, QString(),
+        openedEditor = Core::EditorManager::instance()->openEditor(item.text, Core::Id(),
                                                                    Core::EditorManager::ModeSwitch);
     }
     if (m_currentFindSupport)
diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp
index a94d4852960be6a9ae1b65e427fb5746086e1ca9..6dda7a312a01c1ce06731309d2404cd3b6c87003 100644
--- a/src/plugins/texteditor/basetexteditor.cpp
+++ b/src/plugins/texteditor/basetexteditor.cpp
@@ -161,7 +161,7 @@ protected:
 } // namespace TextEditor
 
 Core::IEditor *BaseTextEditorWidget::openEditorAt(const QString &fileName, int line, int column,
-                                 const QString &editorKind,
+                                 const Core::Id &editorKind,
                                  Core::EditorManager::OpenEditorFlags flags,
                                  bool *newEditor)
 {
@@ -4700,7 +4700,7 @@ bool BaseTextEditorWidget::openLink(const Link &link)
         return true;
     }
 
-    return openEditorAt(link.fileName, link.line, link.column, QString(),
+    return openEditorAt(link.fileName, link.line, link.column, Core::Id(),
                           Core::EditorManager::IgnoreNavigationHistory
                         | Core::EditorManager::ModeSwitch);
 }
diff --git a/src/plugins/texteditor/basetexteditor.h b/src/plugins/texteditor/basetexteditor.h
index 48ceca3c7ba47494bd8a79b1e9f5b6cf6a242b9e..5d90b1e8cb7a76dde3ab2fe662af9eb018e3abcb 100644
--- a/src/plugins/texteditor/basetexteditor.h
+++ b/src/plugins/texteditor/basetexteditor.h
@@ -132,7 +132,7 @@ public:
     ~BaseTextEditorWidget();
 
     static Core::IEditor *openEditorAt(const QString &fileName, int line, int column = 0,
-                                     const QString &editorId =  QString(),
+                                     const Core::Id &editorId =  Core::Id(),
                                      Core::EditorManager::OpenEditorFlags flags = Core::EditorManager::IgnoreNavigationHistory,
                                      bool *newEditor = 0);
 
diff --git a/src/plugins/texteditor/codeassist/codeassistant.cpp b/src/plugins/texteditor/codeassist/codeassistant.cpp
index 42487639f67ffabf73aaebc51dc6d44ad7f18c56..a73b9baa90314202055124339082c25621002fba 100644
--- a/src/plugins/texteditor/codeassist/codeassistant.cpp
+++ b/src/plugins/texteditor/codeassist/codeassistant.cpp
@@ -57,7 +57,7 @@ using namespace Internal;
 namespace {
 
 template <class T>
-void filterEditorSpecificProviders(QList<T *> *providers, const QString &editorId)
+void filterEditorSpecificProviders(QList<T *> *providers, const Core::Id &editorId)
 {
     typename QList<T *>::iterator it = providers->begin();
     while (it != providers->end()) {
diff --git a/src/plugins/texteditor/codeassist/iassistprovider.cpp b/src/plugins/texteditor/codeassist/iassistprovider.cpp
index d96c5a63efd45d6febe63e58f9ade7db810b6acd..9504fa86c966773d77da1ecff713bb896ca67057 100644
--- a/src/plugins/texteditor/codeassist/iassistprovider.cpp
+++ b/src/plugins/texteditor/codeassist/iassistprovider.cpp
@@ -52,12 +52,6 @@ using namespace TextEditor;
     \sa IAssistProposal, IAssistProcessor
 */
 
-IAssistProvider::IAssistProvider()
-{}
-
-IAssistProvider::~IAssistProvider()
-{}
-
 /*!
     \fn bool TextEditor::IAssistProvider::supportsEditor(const QString &editorId) const
 
diff --git a/src/plugins/texteditor/codeassist/iassistprovider.h b/src/plugins/texteditor/codeassist/iassistprovider.h
index 88d04c64860a203a67816c096ddd461624016c50..fcd574d0ee8a5eec3f33278f5ac0c5f4dc511048 100644
--- a/src/plugins/texteditor/codeassist/iassistprovider.h
+++ b/src/plugins/texteditor/codeassist/iassistprovider.h
@@ -34,6 +34,7 @@
 #define IASSISTPROVIDER_H
 
 #include <texteditor/texteditor_global.h>
+#include <coreplugin/id.h>
 
 #include <QtCore/QObject>
 
@@ -46,10 +47,9 @@ class TEXTEDITOR_EXPORT IAssistProvider : public QObject
     Q_OBJECT
 
 public:
-    IAssistProvider();
-    virtual ~IAssistProvider();
+    IAssistProvider() {}
 
-    virtual bool supportsEditor(const QString &editorId) const = 0;
+    virtual bool supportsEditor(const Core::Id &editorId) const = 0;
     virtual IAssistProcessor *createProcessor() const = 0;
 };
 
diff --git a/src/plugins/texteditor/plaintexteditor.cpp b/src/plugins/texteditor/plaintexteditor.cpp
index d2925ff0d703af53e7939ae84a4ab013b302c54b..7c518557b390c813346639b8a5cda7a22cfa4dca 100644
--- a/src/plugins/texteditor/plaintexteditor.cpp
+++ b/src/plugins/texteditor/plaintexteditor.cpp
@@ -92,9 +92,9 @@ Core::IEditor *PlainTextEditor::duplicate(QWidget *parent)
     return newWidget->editor();
 }
 
-QString PlainTextEditor::id() const
+Core::Id PlainTextEditor::id() const
 {
-    return QLatin1String(Core::Constants::K_DEFAULT_TEXT_EDITOR_ID);
+    return Core::Constants::K_DEFAULT_TEXT_EDITOR_ID;
 }
 
 void PlainTextEditorWidget::unCommentSelection()
diff --git a/src/plugins/texteditor/plaintexteditor.h b/src/plugins/texteditor/plaintexteditor.h
index a886b1616b75f46c096d8903afa97fe2946e2a10..898387fdb1384be867fcd9b968e359671ee20de0 100644
--- a/src/plugins/texteditor/plaintexteditor.h
+++ b/src/plugins/texteditor/plaintexteditor.h
@@ -55,7 +55,7 @@ public:
     bool duplicateSupported() const { return true; }
     Core::IEditor *duplicate(QWidget *parent);
     bool isTemporary() const { return false; }
-    virtual QString id() const;
+    Core::Id id() const;
 };
 
 class TEXTEDITOR_EXPORT PlainTextEditorWidget : public BaseTextEditorWidget
diff --git a/src/plugins/texteditor/refactoringchanges.cpp b/src/plugins/texteditor/refactoringchanges.cpp
index c3e440dd5bb3c5164f5f1f9971bff6673a1769cd..657ac83e4974514c3ee5ee895078d681856221e2 100644
--- a/src/plugins/texteditor/refactoringchanges.cpp
+++ b/src/plugins/texteditor/refactoringchanges.cpp
@@ -154,7 +154,7 @@ BaseTextEditorWidget *RefactoringChanges::openEditor(const QString &fileName, bo
         column -= 1;
     }
     Core::IEditor *editor = BaseTextEditorWidget::openEditorAt(
-                fileName, line, column, QString(), flags);
+                fileName, line, column, Core::Id(), flags);
     return qobject_cast<BaseTextEditorWidget *>(editor->widget());
 }
 
diff --git a/src/plugins/texteditor/snippets/snippeteditor.cpp b/src/plugins/texteditor/snippets/snippeteditor.cpp
index 7a38c58a75231e58013b76499886a903ceeffc79..824a06369aa52af2937f51326d593f7d819a609d 100644
--- a/src/plugins/texteditor/snippets/snippeteditor.cpp
+++ b/src/plugins/texteditor/snippets/snippeteditor.cpp
@@ -54,7 +54,7 @@ SnippetEditor::SnippetEditor(SnippetEditorWidget *editor)
     setContext(Core::Context(Constants::SNIPPET_EDITOR_ID, Constants::C_TEXTEDITOR));
 }
 
-QString SnippetEditor::id() const
+Core::Id SnippetEditor::id() const
 {
     return Constants::SNIPPET_EDITOR_ID;
 }
diff --git a/src/plugins/texteditor/snippets/snippeteditor.h b/src/plugins/texteditor/snippets/snippeteditor.h
index 23afb5b665a2d9d1a604bc110411a722c54dd27a..f04bb999db668db3dd85e602a00ed9cddc3efb56 100644
--- a/src/plugins/texteditor/snippets/snippeteditor.h
+++ b/src/plugins/texteditor/snippets/snippeteditor.h
@@ -54,7 +54,7 @@ public:
     bool duplicateSupported() const { return false; }
     Core::IEditor *duplicate(QWidget * /* parent */ ) { return 0; }
     bool isTemporary() const { return false; }
-    virtual QString id() const;
+    Core::Id id() const;
 };
 
 class TEXTEDITOR_EXPORT SnippetEditorWidget : public BaseTextEditorWidget
diff --git a/src/plugins/texteditor/texteditoractionhandler.cpp b/src/plugins/texteditor/texteditoractionhandler.cpp
index c686750f3c2b2e048c08ba65912ee99b5271eadb..82b72a17c7f746f42d20dd7df8da83fbc856bc93 100644
--- a/src/plugins/texteditor/texteditoractionhandler.cpp
+++ b/src/plugins/texteditor/texteditoractionhandler.cpp
@@ -134,17 +134,17 @@ void TextEditorActionHandler::initializeActions()
 
 void TextEditorActionHandler::createActions()
 {
-    m_undoAction      = registerNewAction(QLatin1String(Core::Constants::UNDO),      this, SLOT(undoAction()),
+    m_undoAction      = registerNewAction(Core::Constants::UNDO,      this, SLOT(undoAction()),
                                           true, tr("&Undo"));
-    m_redoAction      = registerNewAction(QLatin1String(Core::Constants::REDO),      this, SLOT(redoAction()),
+    m_redoAction      = registerNewAction(Core::Constants::REDO,      this, SLOT(redoAction()),
                                           true, tr("&Redo"));
-    m_copyAction      = registerNewAction(QLatin1String(Core::Constants::COPY),      this, SLOT(copyAction()), true);
-    m_cutAction       = registerNewAction(QLatin1String(Core::Constants::CUT),       this, SLOT(cutAction()), true);
-    m_pasteAction     = registerNewAction(QLatin1String(Core::Constants::PASTE),     this, SLOT(pasteAction()), true);
+    m_copyAction      = registerNewAction(Core::Constants::COPY,      this, SLOT(copyAction()), true);
+    m_cutAction       = registerNewAction(Core::Constants::CUT,       this, SLOT(cutAction()), true);
+    m_pasteAction     = registerNewAction(Core::Constants::PASTE,     this, SLOT(pasteAction()), true);
     m_modifyingActions << m_pasteAction;
-    m_selectAllAction = registerNewAction(QLatin1String(Core::Constants::SELECTALL), this, SLOT(selectAllAction()), true);
-    m_gotoAction      = registerNewAction(QLatin1String(Core::Constants::GOTO),      this, SLOT(gotoAction()));
-    m_printAction     = registerNewAction(QLatin1String(Core::Constants::PRINT),     this, SLOT(printAction()));
+    m_selectAllAction = registerNewAction(Core::Constants::SELECTALL, this, SLOT(selectAllAction()), true);
+    m_gotoAction      = registerNewAction(Core::Constants::GOTO,      this, SLOT(gotoAction()));
+    m_printAction     = registerNewAction(Core::Constants::PRINT,     this, SLOT(printAction()));
 
     Core::ActionManager *am = Core::ICore::instance()->actionManager();
 
@@ -434,12 +434,12 @@ void TextEditorActionHandler::createActions()
 
 }
 
-bool TextEditorActionHandler::supportsAction(const QString & /*id */) const
+bool TextEditorActionHandler::supportsAction(const Core::Id & /*id */) const
 {
     return true;
 }
 
-QAction *TextEditorActionHandler::registerNewAction(const QString &id, bool scriptable, const QString &title)
+QAction *TextEditorActionHandler::registerNewAction(const Core::Id &id, bool scriptable, const QString &title)
 {
     if (!supportsAction(id))
         return 0;
@@ -449,7 +449,7 @@ QAction *TextEditorActionHandler::registerNewAction(const QString &id, bool scri
     return result;
 }
 
-QAction *TextEditorActionHandler::registerNewAction(const QString &id,
+QAction *TextEditorActionHandler::registerNewAction(const Core::Id &id,
                                                     QObject *receiver,
                                                     const char *slot,
                                                     bool scriptable,
diff --git a/src/plugins/texteditor/texteditoractionhandler.h b/src/plugins/texteditor/texteditoractionhandler.h
index 5ad702682dac20643ad5e9dfe6db9aa0a3ead32a..d3f4e56730d7c147b01ddb929f2411c1a1ab4737 100644
--- a/src/plugins/texteditor/texteditoractionhandler.h
+++ b/src/plugins/texteditor/texteditoractionhandler.h
@@ -36,6 +36,7 @@
 #include "texteditor_global.h"
 
 #include <coreplugin/icontext.h>
+#include <coreplugin/id.h>
 
 #include <QtCore/QObject>
 #include <QtCore/QPointer>
@@ -80,15 +81,15 @@ public slots:
 
 protected:
     const QPointer<BaseTextEditorWidget> &currentEditor() const;
-    QAction *registerNewAction(const QString &id, bool scriptable=false, const QString &title = QString());
-    QAction *registerNewAction(const QString &id, QObject *receiver, const char *slot, bool scriptable = false,
+    QAction *registerNewAction(const Core::Id &id, bool scriptable = false, const QString &title = QString());
+    QAction *registerNewAction(const Core::Id &id, QObject *receiver, const char *slot, bool scriptable = false,
                                const QString &title = QString());
 
     enum UpdateMode { ReadOnlyMode, WriteMode };
     UpdateMode updateMode() const;
 
     virtual void createActions();
-    virtual bool supportsAction(const QString &id) const;
+    virtual bool supportsAction(const Core::Id &id) const;
     virtual void updateActions(UpdateMode um);
 
 private slots:
diff --git a/src/plugins/vcsbase/basevcseditorfactory.cpp b/src/plugins/vcsbase/basevcseditorfactory.cpp
index f491e33bcf08a75d572f7a392ef3231f377d2cc8..f8b0992a2c11d990d07db4bf2e8da9c08a585ef7 100644
--- a/src/plugins/vcsbase/basevcseditorfactory.cpp
+++ b/src/plugins/vcsbase/basevcseditorfactory.cpp
@@ -55,7 +55,7 @@ struct BaseVCSEditorFactoryPrivate
     BaseVCSEditorFactoryPrivate(const VCSBaseEditorParameters *t);
 
     const VCSBaseEditorParameters *m_type;
-    const QString m_id;
+    const Core::Id m_id;
     QString m_displayName;
     const QStringList m_mimeTypes;
     TextEditor::TextEditorActionHandler *m_editorHandler;
diff --git a/src/plugins/vcsbase/cleandialog.cpp b/src/plugins/vcsbase/cleandialog.cpp
index ddf756acaf550620f749388078f8a0ba3cb9ad6f..4a1cb1592146642c69ffb7dff395f67dd0023182 100644
--- a/src/plugins/vcsbase/cleandialog.cpp
+++ b/src/plugins/vcsbase/cleandialog.cpp
@@ -266,7 +266,7 @@ void CleanDialog::slotDoubleClicked(const QModelIndex &index)
     if (const QStandardItem *item = d->m_filesModel->itemFromIndex(index))
         if (!item->data(isDirectoryRole).toBool()) {
             const QString fname = item->data(fileNameRole).toString();
-            Core::EditorManager::instance()->openEditor(fname, QString(), Core::EditorManager::ModeSwitch);
+            Core::EditorManager::instance()->openEditor(fname, Core::Id(), Core::EditorManager::ModeSwitch);
     }
 }
 
diff --git a/src/plugins/vcsbase/vcsbaseclient.cpp b/src/plugins/vcsbase/vcsbaseclient.cpp
index e522ce37b9feb86e108b646a53f8a88c11a3dd3e..a770b6954e7dd970e337af971f826e1c95a76906 100644
--- a/src/plugins/vcsbase/vcsbaseclient.cpp
+++ b/src/plugins/vcsbase/vcsbaseclient.cpp
@@ -574,7 +574,7 @@ VCSBase::VCSBaseEditorWidget *VCSBaseClient::createVCSEditor(const QString &kind
         baseEditor = VCSBase::VCSBaseEditorWidget::getVcsBaseEditor(outputEditor);
         QTC_ASSERT(baseEditor, return 0);
     } else {
-        outputEditor = d->m_core->editorManager()->openEditorWithContents(kind, &title, progressMsg);
+        outputEditor = d->m_core->editorManager()->openEditorWithContents(Core::Id(kind), &title, progressMsg);
         outputEditor->file()->setProperty(registerDynamicProperty, dynamicPropertyValue);
         baseEditor = VCSBase::VCSBaseEditorWidget::getVcsBaseEditor(outputEditor);
         connect(baseEditor, SIGNAL(annotateRevisionRequested(QString,QString,int)),
diff --git a/src/plugins/vcsbase/vcsbaseeditor.cpp b/src/plugins/vcsbase/vcsbaseeditor.cpp
index b4b636bae99cd73b1098141e466caf8efe34afdd..601068f6647594767d9fb9b74b7ed24dfcb8bf1c 100644
--- a/src/plugins/vcsbase/vcsbaseeditor.cpp
+++ b/src/plugins/vcsbase/vcsbaseeditor.cpp
@@ -160,7 +160,7 @@ public:
 
     bool duplicateSupported() const { return false; }
     Core::IEditor *duplicate(QWidget * /*parent*/) { return 0; }
-    QString id() const { return m_id; }
+    Core::Id id() const { return m_id; }
 
     bool isTemporary() const { return m_temporary; }
     void setTemporary(bool t) { m_temporary = t; }
@@ -170,7 +170,7 @@ signals:
     void annotateRevisionRequested(const QString &source, const QString &change, int line);
 
 private:
-    QString m_id;
+    Core::Id m_id;
     bool m_temporary;
 };
 
@@ -773,7 +773,7 @@ void VCSBaseEditorWidget::jumpToChangeFromDiff(QTextCursor cursor)
         return;
 
     Core::EditorManager *em = Core::EditorManager::instance();
-    Core::IEditor *ed = em->openEditor(fileName, QString(), Core::EditorManager::ModeSwitch);
+    Core::IEditor *ed = em->openEditor(fileName, Core::Id(), Core::EditorManager::ModeSwitch);
     if (TextEditor::ITextEditor *editor = qobject_cast<TextEditor::ITextEditor *>(ed))
         editor->gotoLine(chunkStart + lineCount);
 }
diff --git a/src/plugins/vcsbase/vcsbaseoutputwindow.cpp b/src/plugins/vcsbase/vcsbaseoutputwindow.cpp
index f4486e74ce28171b1af2b7964affec90cc21181c..b4454064f87301a08f2d10e6eba2eff4f042c85f 100644
--- a/src/plugins/vcsbase/vcsbaseoutputwindow.cpp
+++ b/src/plugins/vcsbase/vcsbaseoutputwindow.cpp
@@ -192,7 +192,7 @@ void OutputWindowPlainTextEdit::contextMenuEvent(QContextMenuEvent *event)
         }
         if (action == openAction) {
             const QString fileName = action->data().toString();
-            Core::EditorManager::instance()->openEditor(fileName, QString(), Core::EditorManager::ModeSwitch);
+            Core::EditorManager::instance()->openEditor(fileName, Core::Id(), Core::EditorManager::ModeSwitch);
         }
     }
     delete menu;
diff --git a/src/plugins/vcsbase/vcsbaseplugin.cpp b/src/plugins/vcsbase/vcsbaseplugin.cpp
index 337c1418970b59185bf9a4339ac58e3a74087399..9d180a78b0b183d0beaf9c0450471fd0d5e46dbc 100644
--- a/src/plugins/vcsbase/vcsbaseplugin.cpp
+++ b/src/plugins/vcsbase/vcsbaseplugin.cpp
@@ -485,12 +485,13 @@ VCSBASE_EXPORT QDebug operator<<(QDebug in, const VCSBasePluginState &state)
     the virtual submitEditorAboutToClose() to trigger the submit process.
 */
 
-struct VCSBasePluginPrivate {
+struct VCSBasePluginPrivate
+{
     explicit VCSBasePluginPrivate(const QString &submitEditorId);
 
     inline bool supportsRepositoryCreation() const;
 
-    const QString m_submitEditorId;
+    const Core::Id m_submitEditorId;
     Core::IVersionControl *m_versionControl;
     VCSBasePluginState m_state;
     int m_actionState;
@@ -557,7 +558,7 @@ void VCSBasePlugin::extensionsInitialized()
 void VCSBasePlugin::slotSubmitEditorAboutToClose(VCSBaseSubmitEditor *submitEditor, bool *result)
 {
     if (debug)
-        qDebug() << this << d->m_submitEditorId << "Closing submit editor" << submitEditor << submitEditor->id();
+        qDebug() << this << d->m_submitEditorId.name() << "Closing submit editor" << submitEditor << submitEditor->id().name();
     if (submitEditor->id() == d->m_submitEditorId)
         *result = submitEditorAboutToClose(submitEditor);
 }
diff --git a/src/plugins/vcsbase/vcsbasesubmiteditor.cpp b/src/plugins/vcsbase/vcsbasesubmiteditor.cpp
index 6d60ed038e113ec5cc4abb6c9ec4730c067c9c85..b975136e6f6fb0166b69ee5fa4a6d595a0827221 100644
--- a/src/plugins/vcsbase/vcsbasesubmiteditor.cpp
+++ b/src/plugins/vcsbase/vcsbasesubmiteditor.cpp
@@ -385,7 +385,7 @@ Core::IEditor *VCSBaseSubmitEditor::duplicate(QWidget * /*parent*/)
     return 0;
 }
 
-QString VCSBaseSubmitEditor::id() const
+Core::Id VCSBaseSubmitEditor::id() const
 {
     return d->m_parameters->id;
 }
diff --git a/src/plugins/vcsbase/vcsbasesubmiteditor.h b/src/plugins/vcsbase/vcsbasesubmiteditor.h
index 1fa3438d1de0cfc71dab67584674c97157be32ec..6c740a0327688d918ae83fe25f6736b11e5b554f 100644
--- a/src/plugins/vcsbase/vcsbasesubmiteditor.h
+++ b/src/plugins/vcsbase/vcsbasesubmiteditor.h
@@ -125,7 +125,7 @@ public:
     virtual void setDisplayName(const QString &title);
     virtual bool duplicateSupported() const;
     virtual Core::IEditor *duplicate(QWidget * parent);
-    virtual QString id() const;
+    virtual Core::Id id() const;
 
     virtual QWidget *toolBar();