diff --git a/src/plugins/analyzerbase/analyzermanager.cpp b/src/plugins/analyzerbase/analyzermanager.cpp
index 0c7f747912553c7518494b8d57dbe0ca668fb7e6..2aa73d8fc2566ed636fce8c0ba9892d5a9261e1e 100644
--- a/src/plugins/analyzerbase/analyzermanager.cpp
+++ b/src/plugins/analyzerbase/analyzermanager.cpp
@@ -81,6 +81,7 @@ namespace Analyzer {
 namespace Internal {
 
 const char LAST_ACTIVE_TOOL[] = "Analyzer.Plugin.LastActiveTool";
+const char LAST_ACTIVE_MODE[] = "Analyzer.Plugin.LastActiveMode";
 const char INITIAL_DOCK_AREA[] = "initial_dock_area";
 
 ////////////////////////////////////////////////////////////////////
@@ -470,12 +471,11 @@ void AnalyzerManagerPrivate::selectSavedTool()
     const QSettings *settings = ICore::settings();
 
     if (settings->contains(QLatin1String(LAST_ACTIVE_TOOL))) {
-        const Id lastActiveAction = Id::fromSetting(settings->value(QLatin1String(LAST_ACTIVE_TOOL)));
-        foreach (QAction *action, m_actions) {
-            IAnalyzerTool *tool = m_toolFromAction.value(action);
-            StartMode mode = m_modeFromAction.value(action);
-            if (tool->actionId(mode) == lastActiveAction) {
-                selectTool(tool, mode);
+        const Id lastTool = Id::fromSetting(settings->value(QLatin1String(LAST_ACTIVE_TOOL)));
+        const StartMode lastMode = StartMode(settings->value(QLatin1String(LAST_ACTIVE_MODE)).toInt());
+        foreach (IAnalyzerTool *tool, m_tools) {
+            if (tool->id() == lastTool) {
+                selectTool(tool, lastMode);
                 return;
             }
         }
@@ -554,9 +554,13 @@ void AnalyzerManagerPrivate::addTool(IAnalyzerTool *tool, const StartModes &mode
 
     const bool blocked = m_toolBox->blockSignals(true); // Do not make current.
     foreach (StartMode mode, modes) {
-        QString actionName = tool->actionName(mode);
-        Id menuGroup = tool->menuGroup(mode);
-        Id actionId = tool->actionId(mode);
+        QString actionName = tool->displayName();
+        Id menuGroup = Constants::G_ANALYZER_TOOLS;
+        if (mode == StartRemote) {
+            actionName += IAnalyzerTool::tr(" (External)");
+            menuGroup = Constants::G_ANALYZER_REMOTE_TOOLS;
+        }
+        Id actionId = tool->id().withSuffix(mode);
         QAction *action = new QAction(actionName, this);
         Command *command = Core::ActionManager::registerAction(action, actionId, Context(C_GLOBAL));
         m_menu->addAction(command, menuGroup);
@@ -610,7 +614,8 @@ void AnalyzerManagerPrivate::saveToolSettings(IAnalyzerTool *tool, StartMode mod
     m_mainWindow->saveSettings(settings);
     settings->setValue(QLatin1String("ToolSettingsSaved"), true);
     settings->endGroup();
-    settings->setValue(QLatin1String(LAST_ACTIVE_TOOL), tool->actionId(mode).toString());
+    settings->setValue(QLatin1String(LAST_ACTIVE_TOOL), tool->id().toString());
+    settings->setValue(QLatin1String(LAST_ACTIVE_MODE), int(mode));
 }
 
 void AnalyzerManagerPrivate::updateRunActions()
diff --git a/src/plugins/analyzerbase/ianalyzertool.cpp b/src/plugins/analyzerbase/ianalyzertool.cpp
index 875e1f1dc1b3f9bd06812064ec083919b7d2e592..57a7f0379e02f18eca51e185ee5ea2b89910911d 100644
--- a/src/plugins/analyzerbase/ianalyzertool.cpp
+++ b/src/plugins/analyzerbase/ianalyzertool.cpp
@@ -60,21 +60,6 @@ IAnalyzerTool::IAnalyzerTool(QObject *parent)
     : QObject(parent)
 {}
 
-Id IAnalyzerTool::menuGroup(StartMode mode) const
-{
-    if (mode == StartRemote)
-        return Constants::G_ANALYZER_REMOTE_TOOLS;
-    return Constants::G_ANALYZER_TOOLS;
-}
-
-QString IAnalyzerTool::actionName(StartMode mode) const
-{
-    QString base = displayName();
-    if (mode == StartRemote)
-        return base + tr(" (External)");
-    return base;
-}
-
 AbstractAnalyzerSubConfig *IAnalyzerTool::createGlobalSettings()
 {
     return 0;
diff --git a/src/plugins/analyzerbase/ianalyzertool.h b/src/plugins/analyzerbase/ianalyzertool.h
index 96bd3ecbf0181595df61ebaeb12af64a3f32234b..b81566597070f50211833d14c0e3178a466846c9 100644
--- a/src/plugins/analyzerbase/ianalyzertool.h
+++ b/src/plugins/analyzerbase/ianalyzertool.h
@@ -78,12 +78,6 @@ public:
     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 Core::Id actionId(StartMode mode) const = 0;
-    /// Returns the menu group the start action should go to.
-    virtual Core::Id menuGroup(StartMode mode) const;
-    /// Returns a short user readable action name for this tool.
-    virtual QString actionName(StartMode mode) const;
 
     /**
      * The mode in which this tool should preferably be run
diff --git a/src/plugins/qmlprofiler/qmlprofilertool.cpp b/src/plugins/qmlprofiler/qmlprofilertool.cpp
index 8a90585acb5cb2a9ab5bfb99cab3867c3868ed46..57679536318e5c4297e987cd84f564706d06e673 100644
--- a/src/plugins/qmlprofiler/qmlprofilertool.cpp
+++ b/src/plugins/qmlprofiler/qmlprofilertool.cpp
@@ -213,11 +213,6 @@ QString QmlProfilerTool::description() const
               "applications using QML.");
 }
 
-Core::Id QmlProfilerTool::actionId(StartMode mode) const
-{
-    return mode == StartLocal ? "Analyzer.QmlProfiler.Local" : "Analyzer.QmlProfiler.Remote";
-}
-
 IAnalyzerTool::ToolMode QmlProfilerTool::toolMode() const
 {
     return AnyMode;
diff --git a/src/plugins/qmlprofiler/qmlprofilertool.h b/src/plugins/qmlprofiler/qmlprofilertool.h
index 63e918cec249f514306e9a5b6ede8f451c405e59..5a3989e0e1cfb69fb74c28493b311c53c75d2eea 100644
--- a/src/plugins/qmlprofiler/qmlprofilertool.h
+++ b/src/plugins/qmlprofiler/qmlprofilertool.h
@@ -52,7 +52,6 @@ public:
     ProjectExplorer::RunMode runMode() const;
     QString displayName() const;
     QString description() const;
-    Core::Id actionId(Analyzer::StartMode mode) const;
     ToolMode toolMode() const;
 
     void extensionsInitialized() {}
diff --git a/src/plugins/valgrind/callgrindtool.cpp b/src/plugins/valgrind/callgrindtool.cpp
index b5d833cad8eee4980caa965def588ab48a6fe376..1b2ba3d961eb2f379b9e660d89f757189364864b 100644
--- a/src/plugins/valgrind/callgrindtool.cpp
+++ b/src/plugins/valgrind/callgrindtool.cpp
@@ -535,11 +535,6 @@ QString CallgrindTool::description() const
               "record function calls when a program runs.");
 }
 
-Core::Id CallgrindTool::actionId(StartMode mode) const
-{
-    return mode == StartLocal ? "Analyzer.Callgrind.Local" : "Analyzer.Callgrind.Remote";
-}
-
 IAnalyzerTool::ToolMode CallgrindTool::toolMode() const
 {
     return ReleaseMode;
diff --git a/src/plugins/valgrind/callgrindtool.h b/src/plugins/valgrind/callgrindtool.h
index a3937a9cb61c2e9aa9ee9b7016cb3546e1f03b69..14a5b201fb731afab7b9f99663f5a5f215f133d9 100644
--- a/src/plugins/valgrind/callgrindtool.h
+++ b/src/plugins/valgrind/callgrindtool.h
@@ -49,7 +49,6 @@ public:
     ProjectExplorer::RunMode runMode() const;
     QString displayName() const;
     QString description() const;
-    Core::Id actionId(Analyzer::StartMode mode) const;
     ToolMode toolMode() const;
 
     void extensionsInitialized();
diff --git a/src/plugins/valgrind/memchecktool.cpp b/src/plugins/valgrind/memchecktool.cpp
index bb746b4081b5f885d0c8034e0e1eb6bfe3f288fb..323d8eaf4f15bbd485e2491dcb967aa76aed428d 100644
--- a/src/plugins/valgrind/memchecktool.cpp
+++ b/src/plugins/valgrind/memchecktool.cpp
@@ -297,11 +297,6 @@ QString MemcheckTool::description() const
               "memory leaks");
 }
 
-Core::Id MemcheckTool::actionId(StartMode mode) const
-{
-    return mode == StartLocal ? "Analyzer.Memcheck.Local" : "Analyzer.Memcheck.Remote";
-}
-
 AbstractAnalyzerSubConfig *MemcheckTool::createGlobalSettings()
 {
     return new ValgrindGlobalSettings();
diff --git a/src/plugins/valgrind/memchecktool.h b/src/plugins/valgrind/memchecktool.h
index a6eec1d2763c51f97bd1dda71d3701626d8159d8..693446596993cff0fec897fa2f84e0cb72035271 100644
--- a/src/plugins/valgrind/memchecktool.h
+++ b/src/plugins/valgrind/memchecktool.h
@@ -88,7 +88,6 @@ public:
     ProjectExplorer::RunMode runMode() const;
     QString displayName() const;
     QString description() const;
-    Core::Id actionId(Analyzer::StartMode mode) const;
 
     // Create the valgrind settings (for all valgrind tools)
     Analyzer::AbstractAnalyzerSubConfig *createGlobalSettings();