diff --git a/src/plugins/analyzerbase/ianalyzertool.h b/src/plugins/analyzerbase/ianalyzertool.h
index 3c1a46df52a1f99b2a9c5da545e9fc38745e26e0..87e0106b4669d36e8f2d8377360f88f7b205f5e6 100644
--- a/src/plugins/analyzerbase/ianalyzertool.h
+++ b/src/plugins/analyzerbase/ianalyzertool.h
@@ -123,11 +123,6 @@ public:
     virtual bool canRun(ProjectExplorer::RunConfiguration *runConfiguration,
                         ProjectExplorer::RunMode mode) const = 0;
 
-    /// Create the start parameters for the run control factory
-    virtual AnalyzerStartParameters createStartParameters(
-            ProjectExplorer::RunConfiguration *runConfiguration,
-            ProjectExplorer::RunMode mode) const = 0;
-
     virtual void startTool(StartMode mode) = 0;
 
     /// Called when tools gets selected.
diff --git a/src/plugins/qmlprofiler/qmlprofilerruncontrolfactory.cpp b/src/plugins/qmlprofiler/qmlprofilerruncontrolfactory.cpp
index 10fb74b1baf7b34d0ddfbd6c6b7437f686e848d2..e823a6d2e60b7494e8316884394e2ed5fb92d7b6 100644
--- a/src/plugins/qmlprofiler/qmlprofilerruncontrolfactory.cpp
+++ b/src/plugins/qmlprofiler/qmlprofilerruncontrolfactory.cpp
@@ -37,11 +37,22 @@
 #include <analyzerbase/analyzerruncontrol.h>
 #include <analyzerbase/analyzersettings.h>
 
+#include <debugger/debuggerrunconfigurationaspect.h>
+
+#include <projectexplorer/environmentaspect.h>
 #include <projectexplorer/kitinformation.h>
+#include <projectexplorer/localapplicationrunconfiguration.h>
+#include <projectexplorer/projectexplorer.h>
+#include <projectexplorer/project.h>
+#include <projectexplorer/session.h>
 #include <projectexplorer/target.h>
 
+#include <qmlprojectmanager/qmlprojectrunconfiguration.h>
+
 #include <utils/qtcassert.h>
 
+#include <QTcpServer>
+
 using namespace Analyzer;
 using namespace ProjectExplorer;
 
@@ -63,6 +74,51 @@ bool QmlProfilerRunControlFactory::canRun(RunConfiguration *runConfiguration, Ru
     return false;
 }
 
+static AnalyzerStartParameters createQmlProfilerStartParameters(RunConfiguration *runConfiguration)
+{
+    AnalyzerStartParameters sp;
+    EnvironmentAspect *environment = runConfiguration->extraAspect<EnvironmentAspect>();
+    Debugger::DebuggerRunConfigurationAspect *debugger
+            = runConfiguration->extraAspect<Debugger::DebuggerRunConfigurationAspect>();
+    QTC_ASSERT(debugger, return sp);
+
+    // FIXME: This is only used to communicate the connParams settings.
+    if (QmlProjectManager::QmlProjectRunConfiguration *rc1 =
+            qobject_cast<QmlProjectManager::QmlProjectRunConfiguration *>(runConfiguration)) {
+        // This is a "plain" .qmlproject.
+        if (environment)
+            sp.environment = environment->environment();
+        sp.workingDirectory = rc1->workingDirectory();
+        sp.debuggee = rc1->observerPath();
+        sp.debuggeeArgs = rc1->viewerArguments();
+        sp.displayName = rc1->displayName();
+    } else if (LocalApplicationRunConfiguration *rc2 =
+            qobject_cast<LocalApplicationRunConfiguration *>(runConfiguration)) {
+        if (environment)
+            sp.environment = environment->environment();
+        sp.workingDirectory = rc2->workingDirectory();
+        sp.debuggee = rc2->executable();
+        sp.debuggeeArgs = rc2->commandLineArguments();
+        sp.displayName = rc2->displayName();
+    } else {
+        // What could that be?
+        QTC_ASSERT(false, return sp);
+    }
+    const IDevice::ConstPtr device = DeviceKitInformation::device(runConfiguration->target()->kit());
+    if (device->type() == ProjectExplorer::Constants::DESKTOP_DEVICE_TYPE) {
+        QTcpServer server;
+        if (!server.listen(QHostAddress::LocalHost) && !server.listen(QHostAddress::LocalHostIPv6)) {
+            qWarning() << "Cannot open port on host for QML profiling.";
+            return sp;
+        }
+        sp.analyzerHost = server.serverAddress().toString();
+        sp.analyzerPort = server.serverPort();
+    }
+    sp.startMode = StartQml;
+    sp.toolId = "QmlProfiler";
+    return sp;
+}
+
 RunControl *QmlProfilerRunControlFactory::create(RunConfiguration *runConfiguration, RunMode mode, QString *errorMessage)
 {
     IAnalyzerTool *tool = AnalyzerManager::toolFromRunMode(mode);
@@ -74,12 +130,10 @@ RunControl *QmlProfilerRunControlFactory::create(RunConfiguration *runConfigurat
 
     QTC_ASSERT(canRun(runConfiguration, mode), return 0);
 
-    AnalyzerStartParameters sp = tool->createStartParameters(runConfiguration, mode);
-    sp.toolId = tool->id();
+    AnalyzerStartParameters sp = createQmlProfilerStartParameters(runConfiguration);
 
     // only desktop device is supported
-    const ProjectExplorer::IDevice::ConstPtr device =
-            ProjectExplorer::DeviceKitInformation::device(runConfiguration->target()->kit());
+    const IDevice::ConstPtr device = DeviceKitInformation::device(runConfiguration->target()->kit());
     QTC_ASSERT(device->type() == ProjectExplorer::Constants::DESKTOP_DEVICE_TYPE, return 0);
 
     AnalyzerRunControl *rc = new AnalyzerRunControl(tool, sp, runConfiguration);
diff --git a/src/plugins/qmlprofiler/qmlprofilertool.cpp b/src/plugins/qmlprofiler/qmlprofilertool.cpp
index 8439d0e6018c698ce440128eed4a6268254b3fc0..d1162bc8ee7110c8367378b2ad1e9e0732afce1f 100644
--- a/src/plugins/qmlprofiler/qmlprofilertool.cpp
+++ b/src/plugins/qmlprofiler/qmlprofilertool.cpp
@@ -70,8 +70,6 @@
 #include <coreplugin/actionmanager/actionmanager.h>
 #include <coreplugin/actionmanager/actioncontainer.h>
 
-#include <debugger/debuggerrunconfigurationaspect.h>
-
 #include <qtsupport/qtkitinformation.h>
 
 #include <QApplication>
@@ -285,54 +283,6 @@ static QString sysroot(RunConfiguration *runConfig)
     return QString();
 }
 
-AnalyzerStartParameters QmlProfilerTool::createStartParameters(RunConfiguration *runConfiguration, RunMode mode) const
-{
-    Q_UNUSED(mode);
-
-    AnalyzerStartParameters sp;
-    ProjectExplorer::EnvironmentAspect *environment
-            = runConfiguration->extraAspect<ProjectExplorer::EnvironmentAspect>();
-    Debugger::DebuggerRunConfigurationAspect *debugger
-            = runConfiguration->extraAspect<Debugger::DebuggerRunConfigurationAspect>();
-    QTC_ASSERT(debugger, return sp);
-
-    // FIXME: This is only used to communicate the connParams settings.
-    if (QmlProjectRunConfiguration *rc1 =
-            qobject_cast<QmlProjectRunConfiguration *>(runConfiguration)) {
-        // This is a "plain" .qmlproject.
-        if (environment)
-            sp.environment = environment->environment();
-        sp.workingDirectory = rc1->workingDirectory();
-        sp.debuggee = rc1->observerPath();
-        sp.debuggeeArgs = rc1->viewerArguments();
-        sp.displayName = rc1->displayName();
-    } else if (LocalApplicationRunConfiguration *rc2 =
-            qobject_cast<LocalApplicationRunConfiguration *>(runConfiguration)) {
-        if (environment)
-            sp.environment = environment->environment();
-        sp.workingDirectory = rc2->workingDirectory();
-        sp.debuggee = rc2->executable();
-        sp.debuggeeArgs = rc2->commandLineArguments();
-        sp.displayName = rc2->displayName();
-    } else {
-        // What could that be?
-        QTC_ASSERT(false, return sp);
-    }
-    const ProjectExplorer::IDevice::ConstPtr device =
-            ProjectExplorer::DeviceKitInformation::device(runConfiguration->target()->kit());
-    if (device->type() == ProjectExplorer::Constants::DESKTOP_DEVICE_TYPE) {
-        QTcpServer server;
-        if (!server.listen(QHostAddress::LocalHost) && !server.listen(QHostAddress::LocalHostIPv6)) {
-            qWarning() << "Cannot open port on host for QML profiling.";
-            return sp;
-        }
-        sp.analyzerHost = server.serverAddress().toString();
-        sp.analyzerPort = server.serverPort();
-    }
-    sp.startMode = StartQml;
-    return sp;
-}
-
 QWidget *QmlProfilerTool::createWidgets()
 {
     QTC_ASSERT(!d->m_viewContainer, return 0);
diff --git a/src/plugins/qmlprofiler/qmlprofilertool.h b/src/plugins/qmlprofiler/qmlprofilertool.h
index 412cb6a87f5cff631544eee5b1d8e3bb1cd6c908..27dd2befbcdbfa14b2cbe2bf8aa47549c31a60cd 100644
--- a/src/plugins/qmlprofiler/qmlprofilertool.h
+++ b/src/plugins/qmlprofiler/qmlprofilertool.h
@@ -62,10 +62,6 @@ public:
     bool canRun(ProjectExplorer::RunConfiguration *runConfiguration,
                 ProjectExplorer::RunMode mode) const;
 
-    Analyzer::AnalyzerStartParameters createStartParameters(
-            ProjectExplorer::RunConfiguration *runConfiguration,
-            ProjectExplorer::RunMode mode) const;
-
     QWidget *createWidgets();
     void startTool(Analyzer::StartMode mode);
 
diff --git a/src/plugins/valgrind/valgrindruncontrolfactory.cpp b/src/plugins/valgrind/valgrindruncontrolfactory.cpp
index 4fbbb40ea0397c8fa7cba128a43080bd50689880..2377100f1d68b09cc28b7846e242f7bb22da199b 100644
--- a/src/plugins/valgrind/valgrindruncontrolfactory.cpp
+++ b/src/plugins/valgrind/valgrindruncontrolfactory.cpp
@@ -35,8 +35,19 @@
 #include <analyzerbase/analyzerruncontrol.h>
 #include <analyzerbase/analyzersettings.h>
 
+#include <remotelinux/remotelinuxrunconfiguration.h>
+
+#include <debugger/debuggerrunconfigurationaspect.h>
+#include <projectexplorer/environmentaspect.h>
+#include <projectexplorer/localapplicationrunconfiguration.h>
+#include <projectexplorer/kitinformation.h>
+#include <projectexplorer/projectexplorer.h>
+#include <projectexplorer/target.h>
+
 #include <utils/qtcassert.h>
 
+#include <QTcpServer>
+
 using namespace Analyzer;
 using namespace ProjectExplorer;
 
@@ -58,6 +69,45 @@ bool ValgrindRunControlFactory::canRun(RunConfiguration *runConfiguration, RunMo
     return false;
 }
 
+static AnalyzerStartParameters createValgrindStartParameters(RunConfiguration *runConfiguration)
+{
+    Analyzer::AnalyzerStartParameters sp;
+    sp.displayName = runConfiguration->displayName();
+    if (LocalApplicationRunConfiguration *rc1 =
+            qobject_cast<LocalApplicationRunConfiguration *>(runConfiguration)) {
+        EnvironmentAspect *aspect = runConfiguration->extraAspect<EnvironmentAspect>();
+        if (aspect)
+            sp.environment = aspect->environment();
+        sp.workingDirectory = rc1->workingDirectory();
+        sp.debuggee = rc1->executable();
+        sp.debuggeeArgs = rc1->commandLineArguments();
+        const IDevice::ConstPtr device =
+                DeviceKitInformation::device(runConfiguration->target()->kit());
+        QTC_ASSERT(device, return sp);
+        QTC_ASSERT(device->type() == ProjectExplorer::Constants::DESKTOP_DEVICE_TYPE, return sp);
+        QTcpServer server;
+        if (!server.listen(QHostAddress::LocalHost) && !server.listen(QHostAddress::LocalHostIPv6)) {
+            qWarning() << "Cannot open port on host for profiling.";
+            return sp;
+        }
+        sp.connParams.host = server.serverAddress().toString();
+        sp.connParams.port = server.serverPort();
+        sp.startMode = Analyzer::StartLocal;
+    } else if (RemoteLinux::RemoteLinuxRunConfiguration *rc2 =
+               qobject_cast<RemoteLinux::RemoteLinuxRunConfiguration *>(runConfiguration)) {
+        sp.startMode = Analyzer::StartRemote;
+        sp.debuggee = rc2->remoteExecutableFilePath();
+        sp.connParams = DeviceKitInformation::device(rc2->target()->kit())->sshParameters();
+        sp.analyzerCmdPrefix = rc2->commandPrefix();
+        sp.debuggeeArgs = rc2->arguments();
+    } else {
+        // Might be S60DeviceRunfiguration, or something else ...
+        //sp.startMode = StartRemote;
+        sp.startMode = Analyzer::StartRemote;
+    }
+    return sp;
+}
+
 RunControl *ValgrindRunControlFactory::create(RunConfiguration *runConfiguration, RunMode mode, QString *errorMessage)
 {
     IAnalyzerTool *tool = AnalyzerManager::toolFromRunMode(mode);
@@ -69,7 +119,7 @@ RunControl *ValgrindRunControlFactory::create(RunConfiguration *runConfiguration
 
     QTC_ASSERT(canRun(runConfiguration, mode), return 0);
 
-    AnalyzerStartParameters sp = tool->createStartParameters(runConfiguration, mode);
+    AnalyzerStartParameters sp = createValgrindStartParameters(runConfiguration);
     sp.toolId = tool->id();
 
     AnalyzerRunControl *rc = new AnalyzerRunControl(tool, sp, runConfiguration);
diff --git a/src/plugins/valgrind/valgrindtool.cpp b/src/plugins/valgrind/valgrindtool.cpp
index 041ecd07e69d294584316828300491c05c4581a6..8b58b863b37bfd74209023636f5e8a3b3477564e 100644
--- a/src/plugins/valgrind/valgrindtool.cpp
+++ b/src/plugins/valgrind/valgrindtool.cpp
@@ -29,21 +29,7 @@
 
 #include "valgrindtool.h"
 
-#include <remotelinux/remotelinuxrunconfiguration.h>
-
-#include <debugger/debuggerrunconfigurationaspect.h>
-#include <projectexplorer/environmentaspect.h>
-#include <projectexplorer/localapplicationrunconfiguration.h>
-#include <projectexplorer/kitinformation.h>
-#include <projectexplorer/projectexplorer.h>
-#include <projectexplorer/target.h>
-
-#include <utils/qtcassert.h>
-
-#include <QTcpServer>
-
 using namespace ProjectExplorer;
-using namespace RemoteLinux;
 
 namespace Valgrind {
 namespace Internal {
@@ -58,47 +44,5 @@ bool ValgrindTool::canRun(RunConfiguration *, RunMode mode) const
     return mode == runMode();
 }
 
-Analyzer::AnalyzerStartParameters ValgrindTool::createStartParameters(
-    RunConfiguration *runConfiguration, RunMode mode) const
-{
-    Q_UNUSED(mode);
-
-    Analyzer::AnalyzerStartParameters sp;
-    sp.displayName = runConfiguration->displayName();
-    if (LocalApplicationRunConfiguration *rc1 =
-            qobject_cast<LocalApplicationRunConfiguration *>(runConfiguration)) {
-        EnvironmentAspect *aspect = runConfiguration->extraAspect<EnvironmentAspect>();
-        if (aspect)
-            sp.environment = aspect->environment();
-        sp.workingDirectory = rc1->workingDirectory();
-        sp.debuggee = rc1->executable();
-        sp.debuggeeArgs = rc1->commandLineArguments();
-        const IDevice::ConstPtr device =
-                DeviceKitInformation::device(runConfiguration->target()->kit());
-        QTC_ASSERT(device, return sp);
-        QTC_ASSERT(device->type() == Constants::DESKTOP_DEVICE_TYPE, return sp);
-        QTcpServer server;
-        if (!server.listen(QHostAddress::LocalHost) && !server.listen(QHostAddress::LocalHostIPv6)) {
-            qWarning() << "Cannot open port on host for profiling.";
-            return sp;
-        }
-        sp.connParams.host = server.serverAddress().toString();
-        sp.connParams.port = server.serverPort();
-        sp.startMode = Analyzer::StartLocal;
-    } else if (RemoteLinuxRunConfiguration *rc2 =
-               qobject_cast<RemoteLinuxRunConfiguration *>(runConfiguration)) {
-        sp.startMode = Analyzer::StartRemote;
-        sp.debuggee = rc2->remoteExecutableFilePath();
-        sp.connParams = DeviceKitInformation::device(rc2->target()->kit())->sshParameters();
-        sp.analyzerCmdPrefix = rc2->commandPrefix();
-        sp.debuggeeArgs = rc2->arguments();
-    } else {
-        // Might be S60DeviceRunfiguration, or something else ...
-        //sp.startMode = StartRemote;
-        sp.startMode = Analyzer::StartRemote;
-    }
-    return sp;
-}
-
 } // namespace Internal
 } // namespace Valgrind
diff --git a/src/plugins/valgrind/valgrindtool.h b/src/plugins/valgrind/valgrindtool.h
index 3338155b79b6847e254d8cbb9ae17d42917f469f..fc1d280757c10c0c7894b6c9a0f016a8f50942a8 100644
--- a/src/plugins/valgrind/valgrindtool.h
+++ b/src/plugins/valgrind/valgrindtool.h
@@ -43,10 +43,6 @@ public:
 
     bool canRun(ProjectExplorer::RunConfiguration *runConfiguration,
                 ProjectExplorer::RunMode mode) const;
-
-    Analyzer::AnalyzerStartParameters createStartParameters(
-            ProjectExplorer::RunConfiguration *runConfiguration,
-            ProjectExplorer::RunMode mode) const;
 };
 
 } // namespace Internal