diff --git a/src/plugins/analyzerbase/analyzermanager.cpp b/src/plugins/analyzerbase/analyzermanager.cpp
index 9b40ed6170ea9b604258ef956f909171ce6e8bfa..1e8d323849397b48f606142b500ba8d6facc0138 100644
--- a/src/plugins/analyzerbase/analyzermanager.cpp
+++ b/src/plugins/analyzerbase/analyzermanager.cpp
@@ -580,7 +580,7 @@ void AnalyzerManagerPrivate::startLocalTool(IAnalyzerTool *tool, StartMode)
     }
 
     m_isRunning = true;
-    pe->runProject(pro, tool->id());
+    pe->runProject(pro, tool->id().toString());
     updateRunActions();
 }
 
@@ -615,8 +615,7 @@ QAction *AnalyzerManagerPrivate::actionFromToolAndMode(IAnalyzerTool *tool, Star
 void AnalyzerManagerPrivate::selectSavedTool()
 {
     const QSettings *settings = Core::ICore::instance()->settings();
-    const QByteArray lastActiveAction =
-        settings->value(QLatin1String(LAST_ACTIVE_TOOL), QString()).toByteArray();
+    const Core::Id lastActiveAction(settings->value(QLatin1String(LAST_ACTIVE_TOOL)).toString());
     foreach (QAction *action, m_actions) {
         IAnalyzerTool *tool = m_toolFromAction.value(action);
         StartMode mode = m_modeFromAction.value(action);
@@ -700,8 +699,8 @@ void AnalyzerManagerPrivate::addTool(IAnalyzerTool *tool, const StartModes &mode
     ActionManager *am = Core::ICore::instance()->actionManager();
     foreach (StartMode mode, modes) {
         QString actionName = tool->actionName(mode);
-        QString menuGroup = tool->menuGroup(mode);
-        Core::Id actionId(QString::fromLatin1(tool->actionId(mode)));
+        Id menuGroup = tool->menuGroup(mode);
+        Id actionId = tool->actionId(mode);
         QAction *action = new QAction(actionName, 0);
         Core::Command *command = am->registerAction(action, actionId,
             Core::Context(Core::Constants::C_GLOBAL));
@@ -742,7 +741,7 @@ void AnalyzerManagerPrivate::loadToolSettings(IAnalyzerTool *tool)
 {
     QTC_ASSERT(m_mainWindow, return);
     QSettings *settings = Core::ICore::instance()->settings();
-    settings->beginGroup(QLatin1String("AnalyzerViewSettings_") + tool->id());
+    settings->beginGroup(QLatin1String("AnalyzerViewSettings_") + tool->id().toString());
     if (settings->value("ToolSettingsSaved", false).toBool())
         m_mainWindow->restoreSettings(settings);
     else
@@ -757,11 +756,11 @@ void AnalyzerManagerPrivate::saveToolSettings(IAnalyzerTool *tool, StartMode mod
     QTC_ASSERT(m_mainWindow, return);
 
     QSettings *settings = Core::ICore::instance()->settings();
-    settings->beginGroup(QLatin1String("AnalyzerViewSettings_") + tool->id());
+    settings->beginGroup(QLatin1String("AnalyzerViewSettings_") + tool->id().toString());
     m_mainWindow->saveSettings(settings);
     settings->setValue("ToolSettingsSaved", true);
     settings->endGroup();
-    settings->setValue(QLatin1String(LAST_ACTIVE_TOOL), tool->actionId(mode));
+    settings->setValue(QLatin1String(LAST_ACTIVE_TOOL), tool->actionId(mode).toString());
 }
 
 void AnalyzerManagerPrivate::updateRunActions()
@@ -770,7 +769,7 @@ void AnalyzerManagerPrivate::updateRunActions()
     Project *project = pe->startupProject();
 
     bool startEnabled = !m_isRunning
-        && m_currentTool && pe->canRun(project, m_currentTool->id());
+        && m_currentTool && pe->canRun(project, m_currentTool->id().toString());
 
     QString disabledReason;
     if (m_isRunning)
@@ -778,7 +777,7 @@ void AnalyzerManagerPrivate::updateRunActions()
     else if (!m_currentTool)
         disabledReason = tr("No analyzer tool selected.");
     else
-        disabledReason = pe->cannotRunReason(project, m_currentTool->id());
+        disabledReason = pe->cannotRunReason(project, m_currentTool->id().toString());
 
     m_startAction->setEnabled(startEnabled);
     m_startAction->setToolTip(disabledReason);
@@ -921,12 +920,12 @@ void AnalyzerManager::handleToolFinished()
     m_instance->d->handleToolFinished();
 }
 
-IAnalyzerTool *AnalyzerManager::toolFromId(const QByteArray &id)
+IAnalyzerTool *AnalyzerManager::toolFromId(const Core::Id &id)
 {
     foreach (IAnalyzerTool *tool, m_instance->d->m_tools)
-        if (id.startsWith(tool->id()))
+        if (id.name().startsWith(tool->id().name()))
             return tool;
-    QTC_ASSERT(false, qDebug() << "NO ANAYLYZER TOOL FOUND FOR ID" << id);
+    QTC_ASSERT(false, qDebug() << "NO ANAYLYZER TOOL FOUND FOR ID" << id.name());
     return 0;
 }
 
diff --git a/src/plugins/analyzerbase/analyzermanager.h b/src/plugins/analyzerbase/analyzermanager.h
index 680fca3096e5f079e61f97b785fdc5e71f5e291c..18dc9566054e4a3cb6496152463395db1e03efa1 100644
--- a/src/plugins/analyzerbase/analyzermanager.h
+++ b/src/plugins/analyzerbase/analyzermanager.h
@@ -37,6 +37,7 @@
 
 #include "analyzerbase_global.h"
 #include "analyzerconstants.h"
+#include <coreplugin/id.h>
 
 #include <QtCore/QObject>
 
@@ -71,8 +72,8 @@ public:
 
     // Register a tool and initialize it.
     static void addTool(IAnalyzerTool *tool, const StartModes &mode);
-    static IAnalyzerTool *toolFromId(const QByteArray &id);
-    static StartMode modeFromId(const QByteArray &id);
+    static IAnalyzerTool *toolFromId(const Core::Id &id);
+    static StartMode modeFromId(const Core::Id &id);
 
     // Dockwidgets are registered to the main window.
     static QDockWidget *createDockWidget(IAnalyzerTool *tool, const QString &title,
diff --git a/src/plugins/analyzerbase/analyzerruncontrol.cpp b/src/plugins/analyzerbase/analyzerruncontrol.cpp
index 7dc5836b58f2d73c34a0ecbeb6397c4bbeab95c5..d2ab127485a9e36c08d45b80495adddfdfbcc716 100644
--- a/src/plugins/analyzerbase/analyzerruncontrol.cpp
+++ b/src/plugins/analyzerbase/analyzerruncontrol.cpp
@@ -80,7 +80,7 @@ AnalyzerRunControl::Private::Private()
 
 AnalyzerRunControl::AnalyzerRunControl(IAnalyzerTool *tool,
         const AnalyzerStartParameters &sp, RunConfiguration *runConfiguration)
-    : RunControl(runConfiguration, tool->id()),
+    : RunControl(runConfiguration, tool->id().toString()),
       d(new Private)
 {
     d->m_engine = tool->createEngine(sp, runConfiguration);
diff --git a/src/plugins/analyzerbase/analyzerstartparameters.h b/src/plugins/analyzerbase/analyzerstartparameters.h
index c398dba172d202f80760e9d9d800d18233a26219..ff0cc60a1de3fc7cb26df99c42d33f5aba665947 100644
--- a/src/plugins/analyzerbase/analyzerstartparameters.h
+++ b/src/plugins/analyzerbase/analyzerstartparameters.h
@@ -38,6 +38,7 @@
 
 #include <QtCore/QMetaType>
 
+#include <coreplugin/id.h>
 #include <utils/ssh/sshconnection.h>
 #include <utils/environment.h>
 
@@ -56,7 +57,7 @@ public:
     StartMode startMode;
     Utils::SshConnectionParameters connParams;
 
-    QByteArray toolId;
+    Core::Id toolId;
     QString debuggee;
     QString debuggeeArgs;
     QString analyzerCmdPrefix;
diff --git a/src/plugins/analyzerbase/ianalyzertool.cpp b/src/plugins/analyzerbase/ianalyzertool.cpp
index 21117f41dc2ce66afb933dc11888f7decd26bf71..96ecd64426c709c1b2518c8a30631ac484dd5553 100644
--- a/src/plugins/analyzerbase/ianalyzertool.cpp
+++ b/src/plugins/analyzerbase/ianalyzertool.cpp
@@ -41,25 +41,25 @@ IAnalyzerTool::IAnalyzerTool(QObject *parent)
     : QObject(parent)
 {}
 
-QByteArray IAnalyzerTool::defaultMenuGroup(StartMode mode)
+Core::Id IAnalyzerTool::defaultMenuGroup(StartMode mode)
 {
     if (mode == StartRemote)
         return Analyzer::Constants::G_ANALYZER_REMOTE_TOOLS;
     return Analyzer::Constants::G_ANALYZER_TOOLS;
 }
 
-QByteArray IAnalyzerTool::defaultActionId(const IAnalyzerTool *tool, StartMode mode)
+Core::Id IAnalyzerTool::defaultActionId(const IAnalyzerTool *tool, StartMode mode)
 {
-    QByteArray id = tool->id();
+    Core::Id id = tool->id();
     switch (mode) {
     case Analyzer::StartLocal:
-        return "Analyzer." + id + ".Local";
+        return Core::Id(("Analyzer." + id.name() + ".Local").data());
     case Analyzer::StartRemote:
-        return "Analyzer." + id + ".Remote";
+        return Core::Id(("Analyzer." + id.name() + ".Remote").data());
     case Analyzer::StartQml:
-        return "Analyzer." + id + ".Qml";
+        return Core::Id(("Analyzer." + id.name() + ".Qml").data());
     }
-    return QByteArray();
+    return Core::Id();
 }
 
 QString IAnalyzerTool::defaultActionName(const IAnalyzerTool *tool, StartMode mode)
diff --git a/src/plugins/analyzerbase/ianalyzertool.h b/src/plugins/analyzerbase/ianalyzertool.h
index b5e50d8dce1bb492bef5e5668057b8f72d470875..ed2954373f3296002d9d32ce78581bca8fba8e9d 100644
--- a/src/plugins/analyzerbase/ianalyzertool.h
+++ b/src/plugins/analyzerbase/ianalyzertool.h
@@ -38,6 +38,8 @@
 #include "analyzerbase_global.h"
 #include "analyzerconstants.h"
 
+#include <coreplugin/id.h>
+
 #include <QtCore/QObject>
 
 namespace ProjectExplorer {
@@ -72,16 +74,16 @@ public:
     explicit IAnalyzerTool(QObject *parent = 0);
 
     /// Returns a unique ID for this tool.
-    virtual QByteArray id() const = 0;
+    virtual Core::Id id() const = 0;
     /// Returns a short user readable display name for this tool.
     virtual QString displayName() const = 0;
     /// Returns a user readable description name for this tool.
     virtual QString description() const = 0;
     /// Returns an id for the start action.
-    virtual QByteArray actionId(StartMode mode) const
+    virtual Core::Id actionId(StartMode mode) const
         { return defaultActionId(this, mode); }
     /// Returns the menu group the start action should go to.
-    virtual QByteArray menuGroup(StartMode mode) const
+    virtual Core::Id menuGroup(StartMode mode) const
         { return defaultMenuGroup(mode); }
     /// Returns a short user readable action name for this tool.
     virtual QString actionName(StartMode mode) const
@@ -102,8 +104,8 @@ public:
     virtual ToolMode toolMode() const = 0;
 
     /// Convenience implementation.
-    static QByteArray defaultMenuGroup(StartMode mode);
-    static QByteArray defaultActionId(const IAnalyzerTool *tool, StartMode mode);
+    static Core::Id defaultMenuGroup(StartMode mode);
+    static Core::Id defaultActionId(const IAnalyzerTool *tool, StartMode mode);
     static QString defaultActionName(const IAnalyzerTool *tool, StartMode mode);
 
     /// This gets called after all analyzation tools where initialized.
diff --git a/src/plugins/coreplugin/actionmanager/actioncontainer.cpp b/src/plugins/coreplugin/actionmanager/actioncontainer.cpp
index add0cc5b0da86ee116f72a0b4ccbd6493655d792..58e1425ef531dff22c7cf3952fcf6187ea469c8f 100644
--- a/src/plugins/coreplugin/actionmanager/actioncontainer.cpp
+++ b/src/plugins/coreplugin/actionmanager/actioncontainer.cpp
@@ -121,7 +121,7 @@ using namespace Core::Internal;
 */
 
 /*!
-    \fn QAction *ActionContainer::insertLocation(const QString &group) const
+    \fn QAction *ActionContainer::insertLocation(const Core::Id &group) const
     Returns an action representing the \a group,
     that could be used with \c{QWidget::insertAction}.
 */
@@ -136,7 +136,7 @@ using namespace Core::Internal;
 */
 
 /*!
-    \fn void ActionContainer::addAction(Core::Command *action, const QString &group)
+    \fn void ActionContainer::addAction(Core::Command *action, const Core::Id &group)
     Add the \a action as a menu item to this action container. The action is added as the
     last item of the specified \a group.
     \sa appendGroup()
@@ -144,7 +144,7 @@ using namespace Core::Internal;
 */
 
 /*!
-    \fn void ActionContainer::addMenu(Core::ActionContainer *menu, const QString &group)
+    \fn void ActionContainer::addMenu(Core::ActionContainer *menu, const Core::Id &group)
     Add the \a menu as a submenu to this action container. The menu is added as the
     last item of the specified \a group.
     \sa appendGroup()
@@ -163,12 +163,12 @@ using namespace Core::Internal;
     \internal
 */
 
-ActionContainerPrivate::ActionContainerPrivate(int id)
+ActionContainerPrivate::ActionContainerPrivate(Id id)
     : m_onAllDisabledBehavior(Disable), m_id(id), m_updateRequested(false)
 {
-    appendGroup(QLatin1String(Constants::G_DEFAULT_ONE));
-    appendGroup(QLatin1String(Constants::G_DEFAULT_TWO));
-    appendGroup(QLatin1String(Constants::G_DEFAULT_THREE));
+    appendGroup(Constants::G_DEFAULT_ONE);
+    appendGroup(Constants::G_DEFAULT_TWO);
+    appendGroup(Constants::G_DEFAULT_THREE);
     scheduleUpdate();
 }
 
@@ -182,12 +182,12 @@ ActionContainer::OnAllDisabledBehavior ActionContainerPrivate::onAllDisabledBeha
     return m_onAllDisabledBehavior;
 }
 
-void ActionContainerPrivate::appendGroup(const QString &groupId)
+void ActionContainerPrivate::appendGroup(const Id &groupId)
 {
     m_groups.append(Group(groupId));
 }
 
-QList<Group>::const_iterator ActionContainerPrivate::findGroup(const QString &groupId) const
+QList<Group>::const_iterator ActionContainerPrivate::findGroup(const Id &groupId) const
 {
     QList<Group>::const_iterator it = m_groups.constBegin();
     while (it != m_groups.constEnd()) {
@@ -199,7 +199,7 @@ QList<Group>::const_iterator ActionContainerPrivate::findGroup(const QString &gr
 }
 
 
-QAction *ActionContainerPrivate::insertLocation(const QString &groupId) const
+QAction *ActionContainerPrivate::insertLocation(const Id &groupId) const
 {
     QList<Group>::const_iterator it = findGroup(groupId);
     QTC_ASSERT(it != m_groups.constEnd(), return 0);
@@ -227,20 +227,15 @@ QAction *ActionContainerPrivate::insertLocation(QList<Group>::const_iterator gro
     return 0;
 }
 
-void ActionContainerPrivate::addAction(Command *command, const QString &groupId)
+void ActionContainerPrivate::addAction(Command *command, const Id &groupId)
 {
     if (!canAddAction(command))
         return;
 
-    QString actualGroupId;
-    if (groupId.isEmpty())
-        actualGroupId = QLatin1String(Constants::G_DEFAULT_TWO);
-    else
-        actualGroupId = groupId;
-
+    const Id actualGroupId = groupId.isValid() ? groupId : Id(Constants::G_DEFAULT_TWO);
     QList<Group>::const_iterator groupIt = findGroup(actualGroupId);
-    QTC_ASSERT(groupIt != m_groups.constEnd(), qDebug() << "Can't find group" << groupId
-               << "in container" << id(); return);
+    QTC_ASSERT(groupIt != m_groups.constEnd(), qDebug() << "Can't find group"
+               << groupId.name() << "in container" << id().name(); return);
     QAction *beforeAction = insertLocation(groupIt);
     m_groups[groupIt-m_groups.constBegin()].items.append(command);
 
@@ -250,19 +245,14 @@ void ActionContainerPrivate::addAction(Command *command, const QString &groupId)
     scheduleUpdate();
 }
 
-void ActionContainerPrivate::addMenu(ActionContainer *menu, const QString &groupId)
+void ActionContainerPrivate::addMenu(ActionContainer *menu, const Id &groupId)
 {
     ActionContainerPrivate *containerPrivate = static_cast<ActionContainerPrivate *>(menu);
     if (!containerPrivate->canBeAddedToMenu())
         return;
-    MenuActionContainer *container = static_cast<MenuActionContainer *>(containerPrivate);
-
-    QString actualGroupId;
-    if (groupId.isEmpty())
-        actualGroupId = QLatin1String(Constants::G_DEFAULT_TWO);
-    else
-        actualGroupId = groupId;
 
+    MenuActionContainer *container = static_cast<MenuActionContainer *>(containerPrivate);
+    const Id actualGroupId = groupId.isValid() ? groupId : Id(Constants::G_DEFAULT_TWO);
     QList<Group>::const_iterator groupIt = findGroup(actualGroupId);
     QTC_ASSERT(groupIt != m_groups.constEnd(), return);
     QAction *beforeAction = insertLocation(groupIt);
@@ -273,19 +263,14 @@ void ActionContainerPrivate::addMenu(ActionContainer *menu, const QString &group
     scheduleUpdate();
 }
 
-void ActionContainerPrivate::addMenu(ActionContainer *before, ActionContainer *menu, const QString &groupId)
+void ActionContainerPrivate::addMenu(ActionContainer *before, ActionContainer *menu, const Id &groupId)
 {
     ActionContainerPrivate *containerPrivate = static_cast<ActionContainerPrivate *>(menu);
     if (!containerPrivate->canBeAddedToMenu())
         return;
-    MenuActionContainer *container = static_cast<MenuActionContainer *>(containerPrivate);
-
-    QString actualGroupId;
-    if (groupId.isEmpty())
-        actualGroupId = QLatin1String(Constants::G_DEFAULT_TWO);
-    else
-        actualGroupId = groupId;
 
+    MenuActionContainer *container = static_cast<MenuActionContainer *>(containerPrivate);
+    const Id actualGroupId = groupId.isValid() ? groupId : Id(Constants::G_DEFAULT_TWO);
     QList<Group>::const_iterator groupIt = findGroup(actualGroupId);
     QTC_ASSERT(groupIt != m_groups.constEnd(), return);
     QAction *beforeAction = before->menu()->menuAction();
@@ -328,7 +313,7 @@ void ActionContainerPrivate::itemDestroyed()
     }
 }
 
-int ActionContainerPrivate::id() const
+Id ActionContainerPrivate::id() const
 {
     return m_id;
 }
@@ -369,7 +354,7 @@ void ActionContainerPrivate::update()
     \internal
 */
 
-MenuActionContainer::MenuActionContainer(int id)
+MenuActionContainer::MenuActionContainer(Id id)
     : ActionContainerPrivate(id), m_menu(0)
 {
     setOnAllDisabledBehavior(Disable);
@@ -471,7 +456,7 @@ bool MenuActionContainer::canBeAddedToMenu() const
     \internal
 */
 
-MenuBarActionContainer::MenuBarActionContainer(int id)
+MenuBarActionContainer::MenuBarActionContainer(Id id)
     : ActionContainerPrivate(id), m_menuBar(0)
 {
     setOnAllDisabledBehavior(Show);
diff --git a/src/plugins/coreplugin/actionmanager/actioncontainer.h b/src/plugins/coreplugin/actionmanager/actioncontainer.h
index 4ea4186b926d7f6cf6985fe6ccf5d96dd063dbfa..bc665e160b454548572de9d209e7c966c4dd8fa1 100644
--- a/src/plugins/coreplugin/actionmanager/actioncontainer.h
+++ b/src/plugins/coreplugin/actionmanager/actioncontainer.h
@@ -33,6 +33,8 @@
 #ifndef ACTIONCONTAINER_H
 #define ACTIONCONTAINER_H
 
+#include "coreplugin/id.h"
+
 #include <QtCore/QObject>
 
 QT_BEGIN_NAMESPACE
@@ -59,21 +61,20 @@ public:
     virtual void setOnAllDisabledBehavior(OnAllDisabledBehavior behavior) = 0;
     virtual ActionContainer::OnAllDisabledBehavior onAllDisabledBehavior() const = 0;
 
-    virtual int id() const = 0;
+    virtual Id id() const = 0;
 
     virtual QMenu *menu() const = 0;
     virtual QMenuBar *menuBar() const = 0;
 
-    virtual QAction *insertLocation(const QString &group) const = 0;
-    virtual void appendGroup(const QString &group) = 0;
-    virtual void addAction(Command *action, const QString &group = QString()) = 0;
-    virtual void addMenu(ActionContainer *menu, const QString &group = QString()) = 0;
-    virtual void addMenu(ActionContainer *before, ActionContainer *menu, const QString &group = QString()) = 0;
+    virtual QAction *insertLocation(const Id &group) const = 0;
+    virtual void appendGroup(const Id &group) = 0;
+    virtual void addAction(Command *action, const Id &group = Id()) = 0;
+    virtual void addMenu(ActionContainer *menu, const Id &group = Id()) = 0;
+    virtual void addMenu(ActionContainer *before, ActionContainer *menu, const Id &group = Id()) = 0;
 
-    // clears this menu and submenus from all actions and submenus
-    // doesn't destroy the submenus and commands, just removes them from their parents
+    // This clears this menu and submenus from all actions and submenus.
+    // It does not destroy the submenus and commands, just removes them from their parents.
     virtual void clear() = 0;
-    virtual ~ActionContainer() {}
 };
 
 } // namespace Core
diff --git a/src/plugins/coreplugin/actionmanager/actioncontainer_p.h b/src/plugins/coreplugin/actionmanager/actioncontainer_p.h
index 231a790ca209ac73d9f599ea79195736f6f8a32b..d46a72f4edc2d8e48259e24f40bc71735ec54134 100644
--- a/src/plugins/coreplugin/actionmanager/actioncontainer_p.h
+++ b/src/plugins/coreplugin/actionmanager/actioncontainer_p.h
@@ -41,9 +41,10 @@
 namespace Core {
 namespace Internal {
 
-struct Group {
-    Group(const QString &id) : id(id) {}
-    QString id;
+struct Group
+{
+    Group(const Id &id) : id(id) {}
+    Id id;
     QList<QObject *> items; // Command * or ActionContainer *
 };
 
@@ -52,20 +53,20 @@ class ActionContainerPrivate : public Core::ActionContainer
     Q_OBJECT
 
 public:
-    ActionContainerPrivate(int id);
-    virtual ~ActionContainerPrivate() {}
+    ActionContainerPrivate(Id id);
+    ~ActionContainerPrivate() {}
 
     void setOnAllDisabledBehavior(OnAllDisabledBehavior behavior);
     ActionContainer::OnAllDisabledBehavior onAllDisabledBehavior() const;
 
-    QAction *insertLocation(const QString &group) const;
-    void appendGroup(const QString &id);
-    void addAction(Command *action, const QString &group = QString());
-    void addMenu(ActionContainer *menu, const QString &group = QString());
-    void addMenu(ActionContainer *before, ActionContainer *menu, const QString &group = QString());
+    QAction *insertLocation(const Id &groupId) const;
+    void appendGroup(const Id &id);
+    void addAction(Command *action, const Id &group = Id());
+    void addMenu(ActionContainer *menu, const Id &group = Id());
+    void addMenu(ActionContainer *before, ActionContainer *menu, const Id &group = Id());
     virtual void clear();
 
-    int id() const;
+    Id id() const;
 
     QMenu *menu() const;
     QMenuBar *menuBar() const;
@@ -92,18 +93,18 @@ private slots:
     void itemDestroyed();
 
 private:
-    QList<Group>::const_iterator findGroup(const QString &groupId) const;
+    QList<Group>::const_iterator findGroup(const Id &groupId) const;
     QAction *insertLocation(QList<Group>::const_iterator group) const;
 
     OnAllDisabledBehavior m_onAllDisabledBehavior;
-    int m_id;
+    Id m_id;
     bool m_updateRequested;
 };
 
 class MenuActionContainer : public ActionContainerPrivate
 {
 public:
-    MenuActionContainer(int id);
+    explicit MenuActionContainer(Id id);
 
     void setMenu(QMenu *menu);
     QMenu *menu() const;
@@ -125,7 +126,7 @@ private:
 class MenuBarActionContainer : public ActionContainerPrivate
 {
 public:
-    MenuBarActionContainer(int id);
+    explicit MenuBarActionContainer(Id id);
 
     void setMenuBar(QMenuBar *menuBar);
     QMenuBar *menuBar() const;
diff --git a/src/plugins/coreplugin/actionmanager/actionmanager.cpp b/src/plugins/coreplugin/actionmanager/actionmanager.cpp
index bc57ea6ca11fe35b7bd05d847fc24f3b24c5928c..cc4de91a0da5e93daf35f42a8b2cbb3a96be0089 100644
--- a/src/plugins/coreplugin/actionmanager/actionmanager.cpp
+++ b/src/plugins/coreplugin/actionmanager/actionmanager.cpp
@@ -306,18 +306,17 @@ bool ActionManagerPrivate::hasContext(const Context &context) const
 
 ActionContainer *ActionManagerPrivate::createMenu(const Id &id)
 {
-    const int uid = id.uniqueIdentifier();
-    const IdContainerMap::const_iterator it = m_idContainerMap.constFind(uid);
+    const IdContainerMap::const_iterator it = m_idContainerMap.constFind(id);
     if (it !=  m_idContainerMap.constEnd())
         return it.value();
 
     QMenu *m = new QMenu(m_mainWnd);
     m->setObjectName(id.name());
 
-    MenuActionContainer *mc = new MenuActionContainer(uid);
+    MenuActionContainer *mc = new MenuActionContainer(id);
     mc->setMenu(m);
 
-    m_idContainerMap.insert(uid, mc);
+    m_idContainerMap.insert(id, mc);
     connect(mc, SIGNAL(destroyed()), this, SLOT(containerDestroyed()));
 
     return mc;
@@ -325,18 +324,17 @@ ActionContainer *ActionManagerPrivate::createMenu(const Id &id)
 
 ActionContainer *ActionManagerPrivate::createMenuBar(const Id &id)
 {
-    const int uid = id.uniqueIdentifier();
-    const IdContainerMap::const_iterator it = m_idContainerMap.constFind(uid);
+    const IdContainerMap::const_iterator it = m_idContainerMap.constFind(id);
     if (it !=  m_idContainerMap.constEnd())
         return it.value();
 
     QMenuBar *mb = new QMenuBar; // No parent (System menu bar on Mac OS X)
     mb->setObjectName(id.toString());
 
-    MenuBarActionContainer *mbc = new MenuBarActionContainer(uid);
+    MenuBarActionContainer *mbc = new MenuBarActionContainer(id);
     mbc->setMenuBar(mb);
 
-    m_idContainerMap.insert(uid, mbc);
+    m_idContainerMap.insert(id, mbc);
     connect(mbc, SIGNAL(destroyed()), this, SLOT(containerDestroyed()));
 
     return mbc;
@@ -392,8 +390,7 @@ Command *ActionManagerPrivate::registerAction(QAction *action, const Id &id, con
 Action *ActionManagerPrivate::overridableAction(const Id &id)
 {
     Action *a = 0;
-    const int uid = id.uniqueIdentifier();
-    if (CommandPrivate *c = m_idCmdMap.value(uid, 0)) {
+    if (CommandPrivate *c = m_idCmdMap.value(id, 0)) {
         a = qobject_cast<Action *>(c);
         if (!a) {
             qWarning() << "registerAction: id" << id.name()
@@ -401,8 +398,8 @@ Action *ActionManagerPrivate::overridableAction(const Id &id)
             return 0;
         }
     } else {
-        a = new Action(uid);
-        m_idCmdMap.insert(uid, a);
+        a = new Action(id);
+        m_idCmdMap.insert(id, a);
         m_mainWnd->addAction(a->action());
         a->action()->setObjectName(id.toString());
         a->action()->setShortcutContext(Qt::ApplicationShortcut);
@@ -418,8 +415,7 @@ Action *ActionManagerPrivate::overridableAction(const Id &id)
 void ActionManagerPrivate::unregisterAction(QAction *action, const Id &id)
 {
     Action *a = 0;
-    const int uid = id.uniqueIdentifier();
-    CommandPrivate *c = m_idCmdMap.value(uid, 0);
+    CommandPrivate *c = m_idCmdMap.value(id, 0);
     QTC_ASSERT(c, return);
     a = qobject_cast<Action *>(c);
     if (!a) {
@@ -433,7 +429,7 @@ void ActionManagerPrivate::unregisterAction(QAction *action, const Id &id)
         // ActionContainers listen to the commands' destroyed signals
         m_mainWnd->removeAction(a->action());
         delete a->action();
-        m_idCmdMap.remove(uid);
+        m_idCmdMap.remove(id);
         delete a;
     }
     emit commandListChanged();
@@ -442,8 +438,7 @@ void ActionManagerPrivate::unregisterAction(QAction *action, const Id &id)
 Command *ActionManagerPrivate::registerShortcut(QShortcut *shortcut, const Id &id, const Context &context, bool scriptable)
 {
     Shortcut *sc = 0;
-    const int uid = id.uniqueIdentifier();
-    if (CommandPrivate *c = m_idCmdMap.value(uid, 0)) {
+    if (CommandPrivate *c = m_idCmdMap.value(id, 0)) {
         sc = qobject_cast<Shortcut *>(c);
         if (!sc) {
             qWarning() << "registerShortcut: id" << id.name()
@@ -451,8 +446,8 @@ Command *ActionManagerPrivate::registerShortcut(QShortcut *shortcut, const Id &i
             return c;
         }
     } else {
-        sc = new Shortcut(uid);
-        m_idCmdMap.insert(uid, sc);
+        sc = new Shortcut(id);
+        m_idCmdMap.insert(id, sc);
     }
 
     if (sc->shortcut()) {
@@ -482,12 +477,11 @@ Command *ActionManagerPrivate::registerShortcut(QShortcut *shortcut, const Id &i
 
 Command *ActionManagerPrivate::command(const Id &id) const
 {
-    const int uid = id.uniqueIdentifier();
-    const IdCmdMap::const_iterator it = m_idCmdMap.constFind(uid);
+    const IdCmdMap::const_iterator it = m_idCmdMap.constFind(id);
     if (it == m_idCmdMap.constEnd()) {
         if (warnAboutFindFailures)
             qWarning() << "ActionManagerPrivate::command(): failed to find :"
-                       << id.name() << '/' << uid;
+                       << id.name();
         return 0;
     }
     return it.value();
@@ -495,36 +489,11 @@ Command *ActionManagerPrivate::command(const Id &id) const
 
 ActionContainer *ActionManagerPrivate::actionContainer(const Id &id) const
 {
-    const int uid = id.uniqueIdentifier();
-    const IdContainerMap::const_iterator it = m_idContainerMap.constFind(uid);
+    const IdContainerMap::const_iterator it = m_idContainerMap.constFind(id);
     if (it == m_idContainerMap.constEnd()) {
         if (warnAboutFindFailures)
             qWarning() << "ActionManagerPrivate::actionContainer(): failed to find :"
-                       << id.name() << '/' << uid;
-        return 0;
-    }
-    return it.value();
-}
-
-Command *ActionManagerPrivate::command(int uid) const
-{
-    const IdCmdMap::const_iterator it = m_idCmdMap.constFind(uid);
-    if (it == m_idCmdMap.constEnd()) {
-        if (warnAboutFindFailures)
-            qWarning() << "ActionManagerPrivate::command(): failed to find :"
-                       <<  Id::fromUniqueIdentifier(uid).toString() << '/' << uid;
-        return 0;
-    }
-    return it.value();
-}
-
-ActionContainer *ActionManagerPrivate::actionContainer(int uid) const
-{
-    const IdContainerMap::const_iterator it = m_idContainerMap.constFind(uid);
-    if (it == m_idContainerMap.constEnd()) {
-        if (warnAboutFindFailures)
-            qWarning() << "ActionManagerPrivate::actionContainer(): failed to find :"
-                       << Id::fromUniqueIdentifier(uid).toString() << uid;
+                       << id.name();
         return 0;
     }
     return it.value();
@@ -540,9 +509,8 @@ void ActionManagerPrivate::initialize()
     const int shortcuts = settings->beginReadArray(QLatin1String(settingsGroup));
     for (int i = 0; i < shortcuts; ++i) {
         settings->setArrayIndex(i);
-        const QString sid = settings->value(QLatin1String(idKey)).toString();
         const QKeySequence key(settings->value(QLatin1String(sequenceKey)).toString());
-        const int id = Id(sid).uniqueIdentifier();
+        const Id id = Id(settings->value(QLatin1String(idKey)).toString());
 
         Command *cmd = command(id);
         if (cmd)
@@ -558,13 +526,12 @@ void ActionManagerPrivate::saveSettings(QSettings *settings)
 
     const IdCmdMap::const_iterator cmdcend = m_idCmdMap.constEnd();
     for (IdCmdMap::const_iterator j = m_idCmdMap.constBegin(); j != cmdcend; ++j) {
-        const int id = j.key();
+        const Id id = j.key();
         CommandPrivate *cmd = j.value();
         QKeySequence key = cmd->keySequence();
         if (key != cmd->defaultKeySequence()) {
-            const QString sid = Id::fromUniqueIdentifier(id).toString();
             settings->setArrayIndex(count);
-            settings->setValue(QLatin1String(idKey), sid);
+            settings->setValue(QLatin1String(idKey), id.toString());
             settings->setValue(QLatin1String(sequenceKey), key.toString());
             count++;
         }
@@ -576,8 +543,7 @@ void ActionManagerPrivate::saveSettings(QSettings *settings)
 void ActionManagerPrivate::unregisterShortcut(const Core::Id &id)
 {
     Shortcut *sc = 0;
-    const int uid = id.uniqueIdentifier();
-    CommandPrivate *c = m_idCmdMap.value(uid, 0);
+    CommandPrivate *c = m_idCmdMap.value(id, 0);
     QTC_ASSERT(c, return);
     sc = qobject_cast<Shortcut *>(c);
     if (!sc) {
@@ -586,7 +552,7 @@ void ActionManagerPrivate::unregisterShortcut(const Core::Id &id)
         return;
     }
     delete sc->shortcut();
-    m_idCmdMap.remove(uid);
+    m_idCmdMap.remove(id);
     delete sc;
     emit commandListChanged();
 }
diff --git a/src/plugins/coreplugin/actionmanager/actionmanager_p.h b/src/plugins/coreplugin/actionmanager/actionmanager_p.h
index dbaf59557856c0386ade4d48dd3f6deee344f276..9063997e407ded925f743c7b915dcd84799d4b50 100644
--- a/src/plugins/coreplugin/actionmanager/actionmanager_p.h
+++ b/src/plugins/coreplugin/actionmanager/actionmanager_p.h
@@ -34,8 +34,7 @@
 #define ACTIONMANAGERPRIVATE_H
 
 #include <coreplugin/actionmanager/actionmanager.h>
-#include "command_p.h"
-
+#include <coreplugin/actionmanager/command_p.h>
 #include <coreplugin/icontext.h>
 
 #include <QtCore/QMap>
@@ -63,31 +62,27 @@ public:
     explicit ActionManagerPrivate(MainWindow *mainWnd);
     ~ActionManagerPrivate();
 
-    void setContext(const Context &context);
     static ActionManagerPrivate *instance();
 
-    void saveSettings(QSettings *settings);
-
-    QList<Command *> commands() const;
+    void initialize();
 
+    void setContext(const Context &context);
     bool hasContext(int context) const;
 
-    Command *command(int uid) const;
-    ActionContainer *actionContainer(int uid) const;
+    void saveSettings(QSettings *settings);
 
-    void initialize();
+    QList<Command *> commands() const;
 
-    //ActionManager Interface
+    Command *command(const Id &id) const;
+    ActionContainer *actionContainer(const Id &id) const;
     ActionContainer *createMenu(const Id &id);
     ActionContainer *createMenuBar(const Id &id);
 
     Command *registerAction(QAction *action, const Id &id,
-        const Context &context, bool scriptable=false);
+        const Context &context, bool scriptable = false);
     Command *registerShortcut(QShortcut *shortcut, const Id &id,
-        const Context &context, bool scriptable=false);
+        const Context &context, bool scriptable = false);
 
-    Core::Command *command(const Id &id) const;
-    Core::ActionContainer *actionContainer(const Id &id) const;
     void unregisterAction(QAction *action, const Id &id);
     void unregisterShortcut(const Id &id);
 
@@ -106,10 +101,10 @@ private:
 
     static ActionManagerPrivate *m_instance;
 
-    typedef QHash<int, CommandPrivate *> IdCmdMap;
+    typedef QHash<Core::Id, CommandPrivate *> IdCmdMap;
     IdCmdMap m_idCmdMap;
 
-    typedef QHash<int, ActionContainerPrivate *> IdContainerMap;
+    typedef QHash<Core::Id, ActionContainerPrivate *> IdContainerMap;
     IdContainerMap m_idContainerMap;
 
 //    typedef QMap<int, int> GlobalGroupMap;
diff --git a/src/plugins/coreplugin/actionmanager/command.cpp b/src/plugins/coreplugin/actionmanager/command.cpp
index f03475182fa1ca6c7c2de0b140e75c063e4b3289..6138612ac7545492c9408379d5fdaebbc8144d9e 100644
--- a/src/plugins/coreplugin/actionmanager/command.cpp
+++ b/src/plugins/coreplugin/actionmanager/command.cpp
@@ -208,6 +208,7 @@
     \internal
 */
 
+using namespace Core;
 using namespace Core::Internal;
 
 /*!
@@ -215,7 +216,7 @@ using namespace Core::Internal;
     \internal
 */
 
-CommandPrivate::CommandPrivate(int id)
+CommandPrivate::CommandPrivate(Id id)
     : m_attributes(0), m_id(id), m_isKeyInitialized(false)
 {
 }
@@ -248,7 +249,7 @@ QString CommandPrivate::defaultText() const
     return m_defaultText;
 }
 
-int CommandPrivate::id() const
+Id CommandPrivate::id() const
 {
     return m_id;
 }
@@ -295,11 +296,9 @@ QString CommandPrivate::stringWithAppendedShortcut(const QString &str) const
     \internal
 */
 
-Shortcut::Shortcut(int id)
+Shortcut::Shortcut(Id id)
     : CommandPrivate(id), m_shortcut(0), m_scriptable(false)
-{
-
-}
+{}
 
 void Shortcut::setShortcut(QShortcut *shortcut)
 {
@@ -387,7 +386,7 @@ void Shortcut::setScriptable(bool value)
   \class Action
   \internal
 */
-Action::Action(int id)
+Action::Action(Id id)
     : CommandPrivate(id),
     m_action(new Utils::ProxyAction(this)),
     m_active(false),
diff --git a/src/plugins/coreplugin/actionmanager/command.h b/src/plugins/coreplugin/actionmanager/command.h
index 58f131ac7f8949326163f76f22e7cc3801f66d5a..9e2c25962af74d5ba215e4f160f6a53324738361 100644
--- a/src/plugins/coreplugin/actionmanager/command.h
+++ b/src/plugins/coreplugin/actionmanager/command.h
@@ -34,6 +34,7 @@
 #define COMMAND_H
 
 #include <coreplugin/core_global.h>
+#include <coreplugin/id.h>
 
 #include <QtCore/QObject>
 
@@ -66,7 +67,7 @@ public:
     virtual void setDefaultText(const QString &text) = 0;
     virtual QString defaultText() const = 0;
 
-    virtual int id() const = 0;
+    virtual Id id() const = 0;
 
     virtual QAction *action() const = 0;
     virtual QShortcut *shortcut() const = 0;
@@ -78,10 +79,7 @@ public:
 
     virtual bool isActive() const = 0;
 
-    virtual ~Command() {}
-
     virtual void setKeySequence(const QKeySequence &key) = 0;
-
     virtual QString stringWithAppendedShortcut(const QString &str) const = 0;
 
     virtual bool isScriptable() const = 0;
diff --git a/src/plugins/coreplugin/actionmanager/command_p.h b/src/plugins/coreplugin/actionmanager/command_p.h
index b3a499c59c765e20137e2322a78f78d334d48807..8c11093f4deeceaee3f8e0b5c51f67079d55dc7d 100644
--- a/src/plugins/coreplugin/actionmanager/command_p.h
+++ b/src/plugins/coreplugin/actionmanager/command_p.h
@@ -35,9 +35,11 @@
 
 #include "command.h"
 
-#include <utils/proxyaction.h>
+#include <coreplugin/id.h>
 #include <coreplugin/icontext.h>
 
+#include <utils/proxyaction.h>
+
 #include <QtCore/QList>
 #include <QtCore/QMultiMap>
 #include <QtCore/QPointer>
@@ -51,7 +53,7 @@ class CommandPrivate : public Core::Command
 {
     Q_OBJECT
 public:
-    CommandPrivate(int id);
+    CommandPrivate(Id id);
     virtual ~CommandPrivate() {}
 
     void setDefaultKeySequence(const QKeySequence &key);
@@ -62,7 +64,7 @@ public:
     void setDefaultText(const QString &text);
     QString defaultText() const;
 
-    int id() const;
+    Id id() const;
 
     QAction *action() const;
     QShortcut *shortcut() const;
@@ -80,7 +82,7 @@ public:
 protected:
     Context m_context;
     CommandAttributes m_attributes;
-    int m_id;
+    Id m_id;
     QKeySequence m_defaultKey;
     QString m_defaultText;
     bool m_isKeyInitialized;
@@ -90,7 +92,7 @@ class Shortcut : public CommandPrivate
 {
     Q_OBJECT
 public:
-    Shortcut(int id);
+    Shortcut(Id id);
 
     void setKeySequence(const QKeySequence &key);
     QKeySequence keySequence() const;
@@ -121,7 +123,7 @@ class Action : public CommandPrivate
 {
     Q_OBJECT
 public:
-    Action(int id);
+    Action(Id id);
 
     void setKeySequence(const QKeySequence &key);
     QKeySequence keySequence() const;
diff --git a/src/plugins/coreplugin/actionmanager/commandsfile.cpp b/src/plugins/coreplugin/actionmanager/commandsfile.cpp
index bb37ed936289f208858166c332a832f80161686f..5de50138ffb8a29840b81235d4f317b63b328480 100644
--- a/src/plugins/coreplugin/actionmanager/commandsfile.cpp
+++ b/src/plugins/coreplugin/actionmanager/commandsfile.cpp
@@ -148,7 +148,7 @@ bool CommandsFile::exportCommands(const QList<ShortcutItem *> &items)
                            QDateTime::currentDateTime().toString(Qt::ISODate)));
         w.writeStartElement(ctx.mappingElement);
         foreach (const ShortcutItem *item, items) {
-            const Id id = Id::fromUniqueIdentifier(item->m_cmd->id());
+            const Id id = item->m_cmd->id();
             if (item->m_key.isEmpty()) {
                 w.writeEmptyElement(ctx.shortCutElement);
                 w.writeAttribute(ctx.idAttribute, id.toString());
diff --git a/src/plugins/coreplugin/dialogs/shortcutsettings.cpp b/src/plugins/coreplugin/dialogs/shortcutsettings.cpp
index f7d6610618b7f17f81e60728d70e9a39746527d3..be517c6628973040714f5ddb7832bb8e5c266bdb 100644
--- a/src/plugins/coreplugin/dialogs/shortcutsettings.cpp
+++ b/src/plugins/coreplugin/dialogs/shortcutsettings.cpp
@@ -227,7 +227,7 @@ void ShortcutSettings::importAction()
         QMap<QString, QKeySequence> mapping = cf.importCommands();
 
         foreach (ShortcutItem *item, m_scitems) {
-            QString sid = Id::fromUniqueIdentifier(item->m_cmd->id()).toString();
+            QString sid = item->m_cmd->id().toString();
             if (mapping.contains(sid)) {
                 item->m_key = mapping.value(sid);
                 item->m_item->setText(2, item->m_key);
@@ -307,10 +307,10 @@ void ShortcutSettings::initialize()
         s->m_cmd = c;
         s->m_item = item;
 
-        const QString identifier = Id::fromUniqueIdentifier(c->id()).toString();
+        const QString identifier = c->id().toString();
         int pos = identifier.indexOf(QLatin1Char('.'));
         const QString section = identifier.left(pos);
-        const QString subId = identifier.mid(pos+1);
+        const QString subId = identifier.mid(pos + 1);
         if (!sections.contains(section)) {
             QTreeWidgetItem *categoryItem = new QTreeWidgetItem(commandList(), QStringList() << section);
             QFont f = categoryItem->font(0);
diff --git a/src/plugins/designer/formeditorw.cpp b/src/plugins/designer/formeditorw.cpp
index ad52eef0b09355c23ab8e4b386c5fadbe44c6614..f11fef75510e3eb26fe1696d090b5f747cc387ee 100644
--- a/src/plugins/designer/formeditorw.cpp
+++ b/src/plugins/designer/formeditorw.cpp
@@ -132,12 +132,12 @@ static inline QIcon designerIcon(const QString &iconName)
 }
 
 // Create a menu separator
-static inline QAction *createSeparator(QObject *parent,
+static QAction *createSeparator(QObject *parent,
                                  Core::ActionManager *am,
                                  const Core::Context &context,
                                  Core::ActionContainer *container,
                                  const Core::Id &id,
-                                 const QString &group = QString())
+                                 const Core::Id &group = Core::Id())
 {
     QAction *actSeparator = new QAction(parent);
     actSeparator->setSeparator(true);
diff --git a/src/plugins/fakevim/fakevimplugin.cpp b/src/plugins/fakevim/fakevimplugin.cpp
index 25cbd9765cfbf62ae6049cf38eadd46b12bbf57d..fc714fe962f30ad1c1e36fc6c4bdc0c0cbbb7c0c 100644
--- a/src/plugins/fakevim/fakevimplugin.cpp
+++ b/src/plugins/fakevim/fakevimplugin.cpp
@@ -390,7 +390,7 @@ void FakeVimExCommandsPage::initialize()
             continue;
 
         QTreeWidgetItem *item = new QTreeWidgetItem;
-        const QString name = Id::fromUniqueIdentifier(c->id()).toString();
+        const QString name = c->id().toString();
         const int pos = name.indexOf(QLatin1Char('.'));
         const QString section = name.left(pos);
         const QString subId = name.mid(pos + 1);
diff --git a/src/plugins/macros/actionmacrohandler.cpp b/src/plugins/macros/actionmacrohandler.cpp
index b0d630e1e593b12ec75ae73eabe2d53a4a2f838d..8253527b55e213d697b284355a9891c39aeec5b6 100644
--- a/src/plugins/macros/actionmacrohandler.cpp
+++ b/src/plugins/macros/actionmacrohandler.cpp
@@ -73,7 +73,7 @@ ActionMacroHandler::ActionMacroHandler():
     QList<Core::Command *> commands = am->commands();
     foreach (Core::Command *command, commands) {
         if (command->isScriptable()) {
-            QString id = Core::Id::fromUniqueIdentifier(command->id()).toString();
+            QString id = command->id().toString();
             registerCommand(id);
         }
     }
diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp
index 3de34a204764df8519e080392c80ebfc722abd5e..9f30d58c3afc20c505399771b255a8a92091742f 100644
--- a/src/plugins/projectexplorer/projectexplorer.cpp
+++ b/src/plugins/projectexplorer/projectexplorer.cpp
@@ -870,7 +870,7 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er
     d->m_projectTreeCollapseAllAction = new QAction(tr("Collapse All"), this);
     cmd = am->registerAction(d->m_projectTreeCollapseAllAction, Constants::PROJECTTREE_COLLAPSE_ALL,
                              projecTreeContext);
-    const QString treeGroup = QLatin1String(Constants::G_PROJECT_TREE);
+    const Core::Id treeGroup = Constants::G_PROJECT_TREE;
     mfileContextMenu->addAction(treeSpacer, treeGroup);
     mfileContextMenu->addAction(cmd, treeGroup);
     msubProjectContextMenu->addAction(treeSpacer, treeGroup);
diff --git a/src/plugins/qmlprofiler/qmlprofilerruncontrolfactory.cpp b/src/plugins/qmlprofiler/qmlprofilerruncontrolfactory.cpp
index 8ccdf1a199b3d3a1913be37244d6b6b61ad53b1d..d9b43c4cc0a002ffd57ec89a409a3342e6a72b17 100644
--- a/src/plugins/qmlprofiler/qmlprofilerruncontrolfactory.cpp
+++ b/src/plugins/qmlprofiler/qmlprofilerruncontrolfactory.cpp
@@ -126,7 +126,7 @@ RunControl *QmlProfilerRunControlFactory::create(RunConfiguration *runConfigurat
         QTC_ASSERT(false, return 0);
     }
 
-    IAnalyzerTool *tool = AnalyzerManager::toolFromId(mode.toLatin1());
+    IAnalyzerTool *tool = AnalyzerManager::toolFromId(Core::Id(mode));
     AnalyzerRunControl *rc = new AnalyzerRunControl(tool, sp, runConfiguration);
     QObject::connect(AnalyzerManager::stopAction(), SIGNAL(triggered()), rc, SLOT(stopIt()));
     return rc;
diff --git a/src/plugins/qmlprofiler/qmlprofilertool.cpp b/src/plugins/qmlprofiler/qmlprofilertool.cpp
index ca7a87260ea61532f722b8bb8171e8c6c85007a4..a676fd1a83366eb32e91ee48b835766758ef241b 100644
--- a/src/plugins/qmlprofiler/qmlprofilertool.cpp
+++ b/src/plugins/qmlprofiler/qmlprofilertool.cpp
@@ -150,7 +150,7 @@ QmlProfilerTool::~QmlProfilerTool()
     delete d;
 }
 
-QByteArray QmlProfilerTool::id() const
+Core::Id QmlProfilerTool::id() const
 {
     return "QmlProfiler";
 }
@@ -566,7 +566,7 @@ static void startRemoteTool(IAnalyzerTool *tool, StartMode mode)
     AnalyzerRunControl *rc = new AnalyzerRunControl(tool, sp, 0);
     QObject::connect(AnalyzerManager::stopAction(), SIGNAL(triggered()), rc, SLOT(stopIt()));
 
-    ProjectExplorerPlugin::instance()->startRunControl(rc, tool->id());
+    ProjectExplorerPlugin::instance()->startRunControl(rc, tool->id().toString());
 }
 
 void QmlProfilerTool::tryToConnect()
@@ -657,7 +657,7 @@ void QmlProfilerTool::startTool(StartMode mode)
         ProjectExplorerPlugin *pe = ProjectExplorerPlugin::instance();
         // ### not sure if we're supposed to check if the RunConFiguration isEnabled
         Project *pro = pe->startupProject();
-        pe->runProject(pro, id());
+        pe->runProject(pro, id().toString());
     } else if (mode == StartRemote) {
         startRemoteTool(this, mode);
     }
diff --git a/src/plugins/qmlprofiler/qmlprofilertool.h b/src/plugins/qmlprofiler/qmlprofilertool.h
index 25c889ba4ad316cc617e3268e66fcda40676ee6a..9c90f7f22acd32a0c5dabcd2e5b1e58a42dded63 100644
--- a/src/plugins/qmlprofiler/qmlprofilertool.h
+++ b/src/plugins/qmlprofiler/qmlprofilertool.h
@@ -51,7 +51,7 @@ public:
     explicit QmlProfilerTool(QObject *parent);
     ~QmlProfilerTool();
 
-    QByteArray id() const;
+    Core::Id id() const;
     QString displayName() const;
     QString description() const;
     ToolMode toolMode() const;
diff --git a/src/plugins/valgrind/callgrindtool.cpp b/src/plugins/valgrind/callgrindtool.cpp
index 1f339048255a68eb7c492df5e3bbe716d76fef5c..8f12f24df5d43aa82b7da9c2f9352b03546deafe 100644
--- a/src/plugins/valgrind/callgrindtool.cpp
+++ b/src/plugins/valgrind/callgrindtool.cpp
@@ -513,7 +513,7 @@ CallgrindTool::~CallgrindTool()
     delete d;
 }
 
-QByteArray CallgrindTool::id() const
+Core::Id CallgrindTool::id() const
 {
     return "Callgrind";
 }
diff --git a/src/plugins/valgrind/callgrindtool.h b/src/plugins/valgrind/callgrindtool.h
index 95b8b08aadacdff1871f72ca28b64f37d8167ad4..e6219e8caefcff735b9f7e90ed0c8e669686449c 100644
--- a/src/plugins/valgrind/callgrindtool.h
+++ b/src/plugins/valgrind/callgrindtool.h
@@ -48,7 +48,7 @@ public:
     CallgrindTool(QObject *parent);
     ~CallgrindTool();
 
-    QByteArray id() const;
+    Core::Id id() const;
     QString displayName() const;
     QString description() const;
     ToolMode toolMode() const;
diff --git a/src/plugins/valgrind/memchecktool.cpp b/src/plugins/valgrind/memchecktool.cpp
index bd5c849b514b84e73cadc586746a9cd69348fe7f..0bbc6e6521a79ecdae452c79aadbf0f95906ea8c 100644
--- a/src/plugins/valgrind/memchecktool.cpp
+++ b/src/plugins/valgrind/memchecktool.cpp
@@ -285,7 +285,7 @@ void MemcheckTool::maybeActiveRunConfigurationChanged()
     m_errorProxyModel->setFilterExternalIssues(memcheckSettings->filterExternalIssues());
 }
 
-QByteArray MemcheckTool::id() const
+Core::Id MemcheckTool::id() const
 {
     return "Memcheck";
 }
diff --git a/src/plugins/valgrind/memchecktool.h b/src/plugins/valgrind/memchecktool.h
index 10689ccbec4c91d5ddca3ceaf8d0fedac468b1b9..5a1dc3fc600da3b3f457f6d12c9d40afd8e5716e 100644
--- a/src/plugins/valgrind/memchecktool.h
+++ b/src/plugins/valgrind/memchecktool.h
@@ -93,7 +93,7 @@ class MemcheckTool : public Analyzer::IAnalyzerTool
 public:
     MemcheckTool(QObject *parent);
 
-    QByteArray id() const;
+    Core::Id id() const;
     QString displayName() const;
     QString description() const;
 
diff --git a/src/plugins/valgrind/valgrindplugin.cpp b/src/plugins/valgrind/valgrindplugin.cpp
index b20e5553225d43e85d4087ed57198e7a1957c786..f551ff86d6fcefc0f2ce333849d190e6bd3d8c7d 100644
--- a/src/plugins/valgrind/valgrindplugin.cpp
+++ b/src/plugins/valgrind/valgrindplugin.cpp
@@ -128,7 +128,7 @@ RunControl *ValgrindRunControlFactory::create(RunConfiguration *runConfiguration
         sp.startMode = StartRemote;
     }
 
-    IAnalyzerTool *tool = AnalyzerManager::toolFromId(mode.toLatin1());
+    IAnalyzerTool *tool = AnalyzerManager::toolFromId(Core::Id(mode));
     AnalyzerRunControl *rc = new AnalyzerRunControl(tool, sp, runConfiguration);
     QObject::connect(AnalyzerManager::stopAction(), SIGNAL(triggered()), rc, SLOT(stopIt()));
     return rc;
@@ -185,7 +185,7 @@ static void startRemoteTool(IAnalyzerTool *tool, StartMode mode)
     //m_currentRunControl = rc;
     QObject::connect(AnalyzerManager::stopAction(), SIGNAL(triggered()), rc, SLOT(stopIt()));
 
-    ProjectExplorerPlugin::instance()->startRunControl(rc, tool->id());
+    ProjectExplorerPlugin::instance()->startRunControl(rc, tool->id().toString());
 }
 
 void ValgrindPlugin::startValgrindTool(IAnalyzerTool *tool, StartMode mode)