diff --git a/src/plugins/analyzerbase/analyzermanager.cpp b/src/plugins/analyzerbase/analyzermanager.cpp
index f939c410692d4bdf33b35379142d9108a9279b5d..1c9caaefe1acc2e2488c933f2d7b8bca44600f82 100644
--- a/src/plugins/analyzerbase/analyzermanager.cpp
+++ b/src/plugins/analyzerbase/analyzermanager.cpp
@@ -42,8 +42,6 @@
 #include "analyzerutils.h"
 #include "ianalyzertool.h"
 
-#include "startremotedialog.h"
-
 #include <coreplugin/coreconstants.h>
 #include <coreplugin/findplaceholder.h>
 #include <coreplugin/icore.h>
@@ -848,6 +846,11 @@ void AnalyzerManager::stopTool()
     stopAction()->trigger();
 }
 
+void AnalyzerManager::startLocalTool(IAnalyzerTool *tool, StartMode mode)
+{
+    m_instance->d->startLocalTool(tool, mode);
+}
+
 QAction *AnalyzerManager::stopAction()
 {
     return m_instance->d->m_stopAction;
@@ -867,36 +870,6 @@ IAnalyzerTool *AnalyzerManager::toolFromId(const QByteArray &id)
     return 0;
 }
 
-static void startRemoteTool(IAnalyzerTool *tool, StartMode mode)
-{
-    StartRemoteDialog dlg;
-    if (dlg.exec() != QDialog::Accepted)
-        return;
-
-    AnalyzerStartParameters sp;
-    sp.toolId = tool->id();
-    sp.startMode = mode;
-    sp.connParams = dlg.sshParams();
-    sp.debuggee = dlg.executable();
-    sp.debuggeeArgs = dlg.arguments();
-    sp.displayName = dlg.executable();
-    sp.workingDirectory = dlg.workingDirectory();
-
-    AnalyzerRunControl *rc = new AnalyzerRunControl(tool, sp, 0);
-    QObject::connect(AnalyzerManager::stopAction(), SIGNAL(triggered()), rc, SLOT(stopIt()));
-
-    ProjectExplorer::ProjectExplorerPlugin::instance()->startRunControl(rc, tool->id());
-}
-
-void AnalyzerManager::defaultStartTool(IAnalyzerTool *tool, StartMode mode)
-{
-    if (mode == StartLocal)
-        m_instance->d->startLocalTool(tool, mode);
-    if (mode == StartRemote)
-        startRemoteTool(tool, mode);
-    //    m_instance->d->startRemoteTool(tool, mode);
-}
-
 } // namespace Analyzer
 
 #include "analyzermanager.moc"
diff --git a/src/plugins/analyzerbase/analyzermanager.h b/src/plugins/analyzerbase/analyzermanager.h
index 68a81611de42b38d1b4e4a87736b406a9734bbca..26bb66a0a86718be2f318870e1d125a7bff20a14 100644
--- a/src/plugins/analyzerbase/analyzermanager.h
+++ b/src/plugins/analyzerbase/analyzermanager.h
@@ -84,8 +84,7 @@ public:
     static void stopTool();
 
     // Convenience functions.
-    //static void startLocalTool(IAnalyzerTool *tool, StartMode mode);
-    static void defaultStartTool(IAnalyzerTool *tool, StartMode mode);
+    static void startLocalTool(IAnalyzerTool *tool, StartMode mode);
 
     static QString msgToolStarted(const QString &name);
     static QString msgToolFinished(const QString &name, int issuesFound);
diff --git a/src/plugins/analyzerbase/analyzerplugin.cpp b/src/plugins/analyzerbase/analyzerplugin.cpp
index 05e10f2389fcbd2486df8580689d9e709490d10f..e914130f0dd0efd374994b8d5926363f7e2f03de 100644
--- a/src/plugins/analyzerbase/analyzerplugin.cpp
+++ b/src/plugins/analyzerbase/analyzerplugin.cpp
@@ -33,14 +33,8 @@
 **************************************************************************/
 
 #include "analyzerplugin.h"
-
 #include "analyzerconstants.h"
 #include "analyzermanager.h"
-#include "analyzerruncontrol.h"
-#include "analyzersettings.h"
-#include "analyzerstartparameters.h"
-#include "analyzerrunconfigwidget.h"
-#include "startremotedialog.h"
 #include "ianalyzertool.h"
 
 #include <coreplugin/icore.h>
@@ -49,152 +43,19 @@
 #include <coreplugin/editormanager/editormanager.h>
 
 #include <extensionsystem/pluginmanager.h>
-
-#include <projectexplorer/applicationrunconfiguration.h>
-#include <projectexplorer/projectexplorer.h>
 #include <projectexplorer/task.h>
 #include <projectexplorer/taskhub.h>
 
-#include <remotelinux/linuxdeviceconfiguration.h>
-#include <remotelinux/remotelinuxrunconfiguration.h>
-
-#include <utils/qtcassert.h>
-
 #include <QtCore/QtPlugin>
-#include <QtGui/QAction>
 #include <QtGui/QMessageBox>
 #include <QtGui/QMainWindow>
 #include <QtGui/QApplication>
 
 using namespace Analyzer;
 using namespace Analyzer::Internal;
-using namespace ProjectExplorer;
 
 static AnalyzerPlugin *m_instance = 0;
 
-namespace Analyzer {
-namespace Internal {
-
-/////////////////////////////////////////////////////////////////////////////////
-//
-// AnalyzerRunControlFactory
-//
-/////////////////////////////////////////////////////////////////////////////////
-
-static AnalyzerStartParameters localStartParameters(RunConfiguration *runConfiguration)
-{
-    AnalyzerStartParameters sp;
-    QTC_ASSERT(runConfiguration, return sp);
-    LocalApplicationRunConfiguration *rc =
-            qobject_cast<LocalApplicationRunConfiguration *>(runConfiguration);
-    QTC_ASSERT(rc, return sp);
-
-    sp.startMode = StartLocal;
-    sp.environment = rc->environment();
-    sp.workingDirectory = rc->workingDirectory();
-    sp.debuggee = rc->executable();
-    sp.debuggeeArgs = rc->commandLineArguments();
-    sp.displayName = rc->displayName();
-    sp.connParams.host = QLatin1String("localhost");
-    sp.connParams.port = rc->qmlDebugServerPort();
-    return sp;
-}
-
-static AnalyzerStartParameters remoteLinuxStartParameters(RunConfiguration *runConfiguration)
-{
-    AnalyzerStartParameters sp;
-    RemoteLinux::RemoteLinuxRunConfiguration * const rc
-        = qobject_cast<RemoteLinux::RemoteLinuxRunConfiguration *>(runConfiguration);
-    QTC_ASSERT(rc, return sp);
-
-    sp.startMode = StartRemote;
-    sp.debuggee = rc->remoteExecutableFilePath();
-    sp.debuggeeArgs = rc->arguments();
-    sp.connParams = rc->deviceConfig()->sshParameters();
-    sp.analyzerCmdPrefix = rc->commandPrefix();
-    sp.displayName = rc->displayName();
-    return sp;
-}
-
-
-class AnalyzerRunControlFactory : public ProjectExplorer::IRunControlFactory
-{
-    Q_OBJECT
-
-public:
-    AnalyzerRunControlFactory(QObject *parent = 0);
-
-    typedef ProjectExplorer::RunConfiguration RunConfiguration;
-    typedef ProjectExplorer::RunControl RunControl;
-
-    // IRunControlFactory
-    bool canRun(RunConfiguration *runConfiguration, const QString &mode) const;
-    RunControl *create(RunConfiguration *runConfiguration, const QString &mode);
-    QString displayName() const;
-
-    ProjectExplorer::IRunConfigurationAspect *createRunConfigurationAspect();
-    ProjectExplorer::RunConfigWidget *createConfigurationWidget(RunConfiguration *runConfiguration);
-};
-
-AnalyzerRunControlFactory::AnalyzerRunControlFactory(QObject *parent)
-    : IRunControlFactory(parent)
-{
-    setObjectName(QLatin1String("AnalyzerRunControlFactory"));
-}
-
-bool AnalyzerRunControlFactory::canRun(RunConfiguration *runConfiguration, const QString &mode) const
-{
-    Q_UNUSED(runConfiguration);
-    // FIXME: This is not generic.
-    return mode.startsWith("Callgrind") || mode.startsWith("Memcheck") || mode == "QmlProfiler";
-}
-
-RunControl *AnalyzerRunControlFactory::create(RunConfiguration *runConfiguration, const QString &mode)
-{
-    QTC_ASSERT(canRun(runConfiguration, mode), return 0);
-
-    AnalyzerStartParameters sp;
-    if (qobject_cast<ProjectExplorer::LocalApplicationRunConfiguration *>(runConfiguration)) {
-        sp = localStartParameters(runConfiguration);
-    } else if (qobject_cast<RemoteLinux::RemoteLinuxRunConfiguration *>(runConfiguration)) {
-        sp = remoteLinuxStartParameters(runConfiguration);
-    } else {
-        // Might be S60DeviceRunfiguration, or something else ...
-        //sp.startMode = StartRemote;
-        sp.startMode = StartRemote;
-    }
-
-    IAnalyzerTool *tool = AnalyzerManager::toolFromId(mode.toLatin1());
-    AnalyzerRunControl *rc = new AnalyzerRunControl(tool, sp, runConfiguration);
-    QObject::connect(AnalyzerManager::stopAction(), SIGNAL(triggered()), rc, SLOT(stopIt()));
-    //m_isRunning = true;
-    return rc;
-}
-
-QString AnalyzerRunControlFactory::displayName() const
-{
-    return tr("Analyzer");
-}
-
-IRunConfigurationAspect *AnalyzerRunControlFactory::createRunConfigurationAspect()
-{
-    return new AnalyzerProjectSettings;
-}
-
-RunConfigWidget *AnalyzerRunControlFactory::createConfigurationWidget(RunConfiguration *runConfiguration)
-{
-    LocalApplicationRunConfiguration *localRc =
-        qobject_cast<LocalApplicationRunConfiguration *>(runConfiguration);
-    if (!localRc)
-        return 0;
-    AnalyzerProjectSettings *settings = runConfiguration->extraAspect<AnalyzerProjectSettings>();
-    if (!settings)
-        return 0;
-
-    AnalyzerRunConfigWidget *ret = new AnalyzerRunConfigWidget;
-    ret->setRunConfiguration(runConfiguration);
-    return ret;
-}
 
 ////////////////////////////////////////////////////////////////////////
 //
@@ -245,9 +106,6 @@ bool AnalyzerPlugin::initialize(const QStringList &arguments, QString *errorStri
     //: Category under which Analyzer tasks are listed in build issues view
     hub->addCategory(QLatin1String(Constants::ANALYZERTASK_ID), tr("Analyzer"));
 
-    AnalyzerRunControlFactory *factory = new AnalyzerRunControlFactory();
-    addAutoReleasedObject(factory);
-
     return true;
 }
 
@@ -267,9 +125,4 @@ AnalyzerPlugin *AnalyzerPlugin::instance()
     return m_instance;
 }
 
-} // namespace Internal
-} // namespace Analyzer
-
 Q_EXPORT_PLUGIN(AnalyzerPlugin)
-
-#include "analyzerplugin.moc"
diff --git a/src/plugins/analyzerbase/ianalyzertool.cpp b/src/plugins/analyzerbase/ianalyzertool.cpp
index 3945fdb9a7ff505bc99f4264b38e8ddaaceccd8b..f0dce04541c886df563cecd45bea86c747759ce6 100644
--- a/src/plugins/analyzerbase/ianalyzertool.cpp
+++ b/src/plugins/analyzerbase/ianalyzertool.cpp
@@ -64,9 +64,4 @@ QString IAnalyzerTool::defaultActionName(const IAnalyzerTool *tool, StartMode mo
     return base;
 }
 
-void IAnalyzerTool::defaultStartTool(IAnalyzerTool *tool, StartMode mode)
-{
-    AnalyzerManager::defaultStartTool(tool, mode);
-}
-
 } // namespace Analyzer
diff --git a/src/plugins/analyzerbase/ianalyzertool.h b/src/plugins/analyzerbase/ianalyzertool.h
index 180e15cd76aeba12fa6409a00debecfd2d774cff..5ddcde892a4961486a5cbe8efe631ec0250195f6 100644
--- a/src/plugins/analyzerbase/ianalyzertool.h
+++ b/src/plugins/analyzerbase/ianalyzertool.h
@@ -105,7 +105,6 @@ public:
     static QByteArray defaultMenuGroup(StartMode mode);
     static QByteArray defaultActionId(const IAnalyzerTool *tool, StartMode mode);
     static QString defaultActionName(const IAnalyzerTool *tool, StartMode mode);
-    static void defaultStartTool(IAnalyzerTool *tool, StartMode mode);
 
     /// This gets called after all analyzation tools where initialized.
     virtual void extensionsInitialized() = 0;
@@ -125,7 +124,7 @@ public:
     virtual IAnalyzerEngine *createEngine(const AnalyzerStartParameters &sp,
         ProjectExplorer::RunConfiguration *runConfiguration = 0) = 0;
 
-    virtual void startTool(StartMode mode) { defaultStartTool(this, mode); }
+    virtual void startTool(StartMode mode) = 0;
 
     /// Called when tools gets selected.
     virtual void toolSelected() const {}
diff --git a/src/plugins/qmlprofiler/qmlprofilertool.cpp b/src/plugins/qmlprofiler/qmlprofilertool.cpp
index 716d4f332ede97ce97b69942ad1b75ef8bc61007..3360dea0a222e7e868a69e7b78545123ef10f121 100644
--- a/src/plugins/qmlprofiler/qmlprofilertool.cpp
+++ b/src/plugins/qmlprofiler/qmlprofilertool.cpp
@@ -537,3 +537,11 @@ void QmlProfilerTool::updateRecordingState()
     if (d->m_traceWindow->isRecording())
         clearDisplay();
 }
+
+void QmlProfilerTool::startTool(StartMode mode)
+{
+    if (mode == StartLocal)
+        AnalyzerManager::startLocalTool(this, mode);
+    if (mode == StartRemote)
+        AnalyzerManager::startLocalTool(this, mode);
+}
diff --git a/src/plugins/qmlprofiler/qmlprofilertool.h b/src/plugins/qmlprofiler/qmlprofilertool.h
index 50e3d1d55c096237732e6f9707c94c725239b4a2..f3d9b3063ea3e398846d71f05ac3800db24aaed6 100644
--- a/src/plugins/qmlprofiler/qmlprofilertool.h
+++ b/src/plugins/qmlprofiler/qmlprofilertool.h
@@ -62,6 +62,7 @@ public:
         ProjectExplorer::RunConfiguration *runConfiguration = 0);
 
     QWidget *createControlWidget();
+    void startTool(Analyzer::StartMode mode);
 
 public slots:
     void connectClient(int port);
diff --git a/src/plugins/valgrind/callgrindtool.cpp b/src/plugins/valgrind/callgrindtool.cpp
index c74dbd4a0034c9a67b01108daf6eb87397bd3beb..7e0ea98b19533e3d5b71a69a784ba09b4d679bd5 100644
--- a/src/plugins/valgrind/callgrindtool.cpp
+++ b/src/plugins/valgrind/callgrindtool.cpp
@@ -680,6 +680,11 @@ IAnalyzerEngine *CallgrindToolPrivate::createEngine(const AnalyzerStartParameter
     return engine;
 }
 
+void CallgrindTool::startTool(StartMode mode)
+{
+    ValgrindPlugin::startValgrindTool(this, mode);
+}
+
 QWidget *CallgrindTool::createControlWidget()
 {
     return d->createControlWidget();
diff --git a/src/plugins/valgrind/callgrindtool.h b/src/plugins/valgrind/callgrindtool.h
index 517753287f337335f7662beb4cb2c460304cae00..64b034d6409d6a79b0155eaac7391f67750c1d3f 100644
--- a/src/plugins/valgrind/callgrindtool.h
+++ b/src/plugins/valgrind/callgrindtool.h
@@ -60,6 +60,8 @@ public:
         ProjectExplorer::RunConfiguration *runConfiguration = 0);
     QWidget *createControlWidget();
 
+    void startTool(Analyzer::StartMode mode);
+
 private:
     CallgrindToolPrivate *d;
 };
diff --git a/src/plugins/valgrind/memchecktool.cpp b/src/plugins/valgrind/memchecktool.cpp
index a3a1079e99e33e239c479a93c9f6514fba378482..52ad2a8aa02a9ab9669b6ea6fbb5ac0ae6df58ee 100644
--- a/src/plugins/valgrind/memchecktool.cpp
+++ b/src/plugins/valgrind/memchecktool.cpp
@@ -467,6 +467,11 @@ IAnalyzerEngine *MemcheckTool::createEngine(const AnalyzerStartParameters &sp,
     return engine;
 }
 
+void MemcheckTool::startTool(StartMode mode)
+{
+    ValgrindPlugin::startValgrindTool(this, mode);
+}
+
 void MemcheckTool::engineStarting(const IAnalyzerEngine *engine)
 {
     clearErrorView();
diff --git a/src/plugins/valgrind/memchecktool.h b/src/plugins/valgrind/memchecktool.h
index 3035c0d7c3c066ce91022035e8002ec087c417ca..6f00fa70f9c4f35de9f3ea1aec7c051e670e0911 100644
--- a/src/plugins/valgrind/memchecktool.h
+++ b/src/plugins/valgrind/memchecktool.h
@@ -118,6 +118,7 @@ private:
 
     Analyzer::IAnalyzerEngine *createEngine(const Analyzer::AnalyzerStartParameters &sp,
                                ProjectExplorer::RunConfiguration *runConfiguration = 0);
+    void startTool(Analyzer::StartMode mode);
 
     void clearErrorView();
 
diff --git a/src/plugins/valgrind/valgrindplugin.cpp b/src/plugins/valgrind/valgrindplugin.cpp
index 83190143a45a40a4b2ed60f81c3e2efa0023fef1..04aee6c0b57499add4c1381022b3e992106f189f 100644
--- a/src/plugins/valgrind/valgrindplugin.cpp
+++ b/src/plugins/valgrind/valgrindplugin.cpp
@@ -42,6 +42,17 @@
 
 #include <analyzerbase/analyzerconstants.h>
 #include <analyzerbase/analyzermanager.h>
+#include <analyzerbase/analyzerrunconfigwidget.h>
+#include <analyzerbase/analyzerruncontrol.h>
+#include <analyzerbase/analyzersettings.h>
+#include <analyzerbase/analyzerstartparameters.h>
+#include <analyzerbase/startremotedialog.h>
+
+#include <projectexplorer/applicationrunconfiguration.h>
+#include <projectexplorer/projectexplorer.h>
+
+#include <remotelinux/linuxdeviceconfiguration.h>
+#include <remotelinux/remotelinuxrunconfiguration.h>
 
 #include <utils/qtcassert.h>
 
@@ -51,16 +62,168 @@
 #include <QtGui/QAction>
 
 using namespace Analyzer;
+using namespace Valgrind::Internal;
+using namespace ProjectExplorer;
+
+/////////////////////////////////////////////////////////////////////////////////
+//
+// ValgrindRunControlFactory
+//
+/////////////////////////////////////////////////////////////////////////////////
 
 namespace Valgrind {
 namespace Internal {
 
+static AnalyzerStartParameters localStartParameters(RunConfiguration *runConfiguration)
+{
+    AnalyzerStartParameters sp;
+    QTC_ASSERT(runConfiguration, return sp);
+    LocalApplicationRunConfiguration *rc =
+            qobject_cast<LocalApplicationRunConfiguration *>(runConfiguration);
+    QTC_ASSERT(rc, return sp);
+
+    sp.startMode = StartLocal;
+    sp.environment = rc->environment();
+    sp.workingDirectory = rc->workingDirectory();
+    sp.debuggee = rc->executable();
+    sp.debuggeeArgs = rc->commandLineArguments();
+    sp.displayName = rc->displayName();
+    sp.connParams.host = QLatin1String("localhost");
+    sp.connParams.port = rc->qmlDebugServerPort();
+    return sp;
+}
+
+static AnalyzerStartParameters remoteLinuxStartParameters(RunConfiguration *runConfiguration)
+{
+    AnalyzerStartParameters sp;
+    RemoteLinux::RemoteLinuxRunConfiguration * const rc
+        = qobject_cast<RemoteLinux::RemoteLinuxRunConfiguration *>(runConfiguration);
+    QTC_ASSERT(rc, return sp);
+
+    sp.startMode = StartRemote;
+    sp.debuggee = rc->remoteExecutableFilePath();
+    sp.debuggeeArgs = rc->arguments();
+    sp.connParams = rc->deviceConfig()->sshParameters();
+    sp.analyzerCmdPrefix = rc->commandPrefix();
+    sp.displayName = rc->displayName();
+    return sp;
+}
+
+
+class ValgrindRunControlFactory: public ProjectExplorer::IRunControlFactory
+{
+    Q_OBJECT
+
+public:
+    ValgrindRunControlFactory(QObject *parent = 0);
+
+    typedef ProjectExplorer::RunConfiguration RunConfiguration;
+    typedef ProjectExplorer::RunControl RunControl;
+
+    // IRunControlFactory
+    bool canRun(RunConfiguration *runConfiguration, const QString &mode) const;
+    RunControl *create(RunConfiguration *runConfiguration, const QString &mode);
+    QString displayName() const;
+
+    ProjectExplorer::IRunConfigurationAspect *createRunConfigurationAspect();
+    ProjectExplorer::RunConfigWidget *createConfigurationWidget(RunConfiguration *runConfiguration);
+};
+
+ValgrindRunControlFactory::ValgrindRunControlFactory(QObject *parent)
+    : IRunControlFactory(parent)
+{
+    setObjectName(QLatin1String("ValgrindRunControlFactory"));
+}
+
+bool ValgrindRunControlFactory::canRun(RunConfiguration *runConfiguration, const QString &mode) const
+{
+    Q_UNUSED(runConfiguration);
+    return mode.startsWith("Callgrind") || mode.startsWith("Memcheck");
+}
+
+RunControl *ValgrindRunControlFactory::create(RunConfiguration *runConfiguration, const QString &mode)
+{
+    QTC_ASSERT(canRun(runConfiguration, mode), return 0);
+
+    AnalyzerStartParameters sp;
+    if (qobject_cast<ProjectExplorer::LocalApplicationRunConfiguration *>(runConfiguration)) {
+        sp = localStartParameters(runConfiguration);
+    } else if (qobject_cast<RemoteLinux::RemoteLinuxRunConfiguration *>(runConfiguration)) {
+        sp = remoteLinuxStartParameters(runConfiguration);
+    } else {
+        // Might be S60DeviceRunfiguration, or something else ...
+        //sp.startMode = StartRemote;
+        sp.startMode = StartRemote;
+    }
+
+    IAnalyzerTool *tool = AnalyzerManager::toolFromId(mode.toLatin1());
+    AnalyzerRunControl *rc = new AnalyzerRunControl(tool, sp, runConfiguration);
+    QObject::connect(AnalyzerManager::stopAction(), SIGNAL(triggered()), rc, SLOT(stopIt()));
+    //m_isRunning = true;
+    return rc;
+}
+
+QString ValgrindRunControlFactory::displayName() const
+{
+    return tr("Analyzer");
+}
+
+IRunConfigurationAspect *ValgrindRunControlFactory::createRunConfigurationAspect()
+{
+    return new AnalyzerProjectSettings;
+}
+
+RunConfigWidget *ValgrindRunControlFactory::createConfigurationWidget(RunConfiguration *runConfiguration)
+{
+    LocalApplicationRunConfiguration *localRc =
+        qobject_cast<LocalApplicationRunConfiguration *>(runConfiguration);
+    if (!localRc)
+        return 0;
+    AnalyzerProjectSettings *settings = runConfiguration->extraAspect<AnalyzerProjectSettings>();
+    if (!settings)
+        return 0;
+
+    AnalyzerRunConfigWidget *ret = new AnalyzerRunConfigWidget;
+    ret->setRunConfiguration(runConfiguration);
+    return ret;
+}
+
 /////////////////////////////////////////////////////////////////////////////////
 //
 // ValgrindPlugin
 //
 /////////////////////////////////////////////////////////////////////////////////
 
+static void startRemoteTool(IAnalyzerTool *tool, StartMode mode)
+{
+    Q_UNUSED(tool);
+    StartRemoteDialog dlg;
+    if (dlg.exec() != QDialog::Accepted)
+        return;
+
+    AnalyzerStartParameters sp;
+    sp.toolId = tool->id();
+    sp.startMode = mode;
+    sp.connParams = dlg.sshParams();
+    sp.debuggee = dlg.executable();
+    sp.debuggeeArgs = dlg.arguments();
+    sp.displayName = dlg.executable();
+    sp.workingDirectory = dlg.workingDirectory();
+
+    AnalyzerRunControl *rc = new AnalyzerRunControl(tool, sp, 0);
+    //m_currentRunControl = rc;
+    QObject::connect(AnalyzerManager::stopAction(), SIGNAL(triggered()), rc, SLOT(stopIt()));
+
+    ProjectExplorer::ProjectExplorerPlugin::instance()->startRunControl(rc, tool->id());
+}
+
+void ValgrindPlugin::startValgrindTool(IAnalyzerTool *tool, StartMode mode)
+{
+    if (mode == StartLocal)
+        AnalyzerManager::startLocalTool(tool, mode);
+    if (mode == StartRemote)
+        startRemoteTool(tool, mode);
+}
 
 static AbstractAnalyzerSubConfig *valgrindConfigFactory()
 {
@@ -102,6 +265,9 @@ bool ValgrindPlugin::initialize(const QStringList &, QString *)
     AnalyzerManager::addTool(new MemcheckTool(this), modes);
     AnalyzerManager::addTool(new CallgrindTool(this), modes);
 
+    ValgrindRunControlFactory *factory = new ValgrindRunControlFactory();
+    addAutoReleasedObject(factory);
+
     return true;
 }
 
diff --git a/src/plugins/valgrind/valgrindplugin.h b/src/plugins/valgrind/valgrindplugin.h
index e07961d559f2f2abbd19cca8dcde0c6277a51f18..9598572bd3295e60bc0308123b56103eada9e18c 100644
--- a/src/plugins/valgrind/valgrindplugin.h
+++ b/src/plugins/valgrind/valgrindplugin.h
@@ -51,6 +51,7 @@ public:
     virtual bool initialize(const QStringList &arguments, QString *errorString);
     virtual void extensionsInitialized() {}
 
+    static void startValgrindTool(Analyzer::IAnalyzerTool *tool, Analyzer::StartMode mode);
 };
 
 } // namespace Internal