diff --git a/src/plugins/analyzerbase/ianalyzertool.cpp b/src/plugins/analyzerbase/ianalyzertool.cpp
index 1223a64bddd117a81fd4e49342116487a14f2f46..875e1f1dc1b3f9bd06812064ec083919b7d2e592 100644
--- a/src/plugins/analyzerbase/ianalyzertool.cpp
+++ b/src/plugins/analyzerbase/ianalyzertool.cpp
@@ -60,20 +60,6 @@ IAnalyzerTool::IAnalyzerTool(QObject *parent)
     : QObject(parent)
 {}
 
-Id IAnalyzerTool::actionId(StartMode mode) const
-{
-    Id id = Id("Analyzer").withSuffix(this->id().toString());
-    switch (mode) {
-    case StartLocal:
-        return id.withSuffix(".Local");
-    case StartRemote:
-        return id.withSuffix(".Remote");
-    case StartQmlRemote:
-        return id.withSuffix(".Qml");
-    }
-    return Id();
-}
-
 Id IAnalyzerTool::menuGroup(StartMode mode) const
 {
     if (mode == StartRemote)
diff --git a/src/plugins/analyzerbase/ianalyzertool.h b/src/plugins/analyzerbase/ianalyzertool.h
index ae34431bc7ac98582123873f12eeb4b9f0827df6..96bd3ecbf0181595df61ebaeb12af64a3f32234b 100644
--- a/src/plugins/analyzerbase/ianalyzertool.h
+++ b/src/plugins/analyzerbase/ianalyzertool.h
@@ -79,7 +79,7 @@ public:
     /// 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;
+    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.
diff --git a/src/plugins/qmlprofiler/qmlprofilertool.cpp b/src/plugins/qmlprofiler/qmlprofilertool.cpp
index 57679536318e5c4297e987cd84f564706d06e673..8a90585acb5cb2a9ab5bfb99cab3867c3868ed46 100644
--- a/src/plugins/qmlprofiler/qmlprofilertool.cpp
+++ b/src/plugins/qmlprofiler/qmlprofilertool.cpp
@@ -213,6 +213,11 @@ 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 5a3989e0e1cfb69fb74c28493b311c53c75d2eea..63e918cec249f514306e9a5b6ede8f451c405e59 100644
--- a/src/plugins/qmlprofiler/qmlprofilertool.h
+++ b/src/plugins/qmlprofiler/qmlprofilertool.h
@@ -52,6 +52,7 @@ 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 1b2ba3d961eb2f379b9e660d89f757189364864b..b5d833cad8eee4980caa965def588ab48a6fe376 100644
--- a/src/plugins/valgrind/callgrindtool.cpp
+++ b/src/plugins/valgrind/callgrindtool.cpp
@@ -535,6 +535,11 @@ 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 14a5b201fb731afab7b9f99663f5a5f215f133d9..a3937a9cb61c2e9aa9ee9b7016cb3546e1f03b69 100644
--- a/src/plugins/valgrind/callgrindtool.h
+++ b/src/plugins/valgrind/callgrindtool.h
@@ -49,6 +49,7 @@ 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 323d8eaf4f15bbd485e2491dcb967aa76aed428d..bb746b4081b5f885d0c8034e0e1eb6bfe3f288fb 100644
--- a/src/plugins/valgrind/memchecktool.cpp
+++ b/src/plugins/valgrind/memchecktool.cpp
@@ -297,6 +297,11 @@ 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 693446596993cff0fec897fa2f84e0cb72035271..a6eec1d2763c51f97bd1dda71d3701626d8159d8 100644
--- a/src/plugins/valgrind/memchecktool.h
+++ b/src/plugins/valgrind/memchecktool.h
@@ -88,6 +88,7 @@ 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();