diff --git a/src/plugins/analyzerbase/analyzerbase.pro b/src/plugins/analyzerbase/analyzerbase.pro
index e42ee34fa8c9298ac7b383f3de4de304e5e31289..e735e82d01b11672c11e113f129ffe48cdc8be23 100644
--- a/src/plugins/analyzerbase/analyzerbase.pro
+++ b/src/plugins/analyzerbase/analyzerbase.pro
@@ -20,7 +20,8 @@ SOURCES += \
     analyzeroptionspage.cpp \
     analyzerrunconfigwidget.cpp \
     analyzerutils.cpp \
-    startremotedialog.cpp
+    startremotedialog.cpp \
+    analyzerruncontrolfactory.cpp
 
 HEADERS += \
     ianalyzerengine.h \
@@ -35,7 +36,8 @@ HEADERS += \
     analyzeroptionspage.h \
     analyzerrunconfigwidget.h \
     analyzerutils.h \
-    startremotedialog.h
+    startremotedialog.h \
+    analyzerruncontrolfactory.h
 
 FORMS += \
     startremotedialog.ui
diff --git a/src/plugins/analyzerbase/analyzermanager.cpp b/src/plugins/analyzerbase/analyzermanager.cpp
index cb24fb00087fc42f90b897853614013cf0d88f53..e57110177dd6cc04126969244f816cc752855148 100644
--- a/src/plugins/analyzerbase/analyzermanager.cpp
+++ b/src/plugins/analyzerbase/analyzermanager.cpp
@@ -908,7 +908,6 @@ IAnalyzerTool *AnalyzerManager::toolFromId(const Core::Id &id)
     foreach (IAnalyzerTool *tool, m_instance->d->m_tools)
         if (id.name().startsWith(tool->id().name()))
             return tool;
-    QTC_ASSERT(false, qDebug() << "NO ANAYLYZER TOOL FOUND FOR ID" << id.name());
     return 0;
 }
 
diff --git a/src/plugins/analyzerbase/analyzerplugin.cpp b/src/plugins/analyzerbase/analyzerplugin.cpp
index c9a8b8237f52fda55331043bafafb3e437265f5c..b9fab35a2f36926f9c51bd8977683b46bc28ba5f 100644
--- a/src/plugins/analyzerbase/analyzerplugin.cpp
+++ b/src/plugins/analyzerbase/analyzerplugin.cpp
@@ -36,6 +36,7 @@
 #include "analyzerconstants.h"
 #include "analyzermanager.h"
 #include "ianalyzertool.h"
+#include "analyzerruncontrolfactory.h"
 
 #include <coreplugin/icore.h>
 #include <coreplugin/imode.h>
@@ -79,6 +80,8 @@ bool AnalyzerPlugin::initialize(const QStringList &arguments, QString *errorStri
 
     (void) new AnalyzerManager(this);
 
+    addAutoReleasedObject(new AnalyzerRunControlFactory());
+
     // Task integration.
     ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
     ProjectExplorer::TaskHub *hub = pm->getObject<ProjectExplorer::TaskHub>();
diff --git a/src/plugins/analyzerbase/analyzerrunconfigwidget.cpp b/src/plugins/analyzerbase/analyzerrunconfigwidget.cpp
index cc7a6220bdc3ba677fa401d69a2b32241ab05261..88117b2a2a417407cb1f87c44b3c3bec5840ebca 100644
--- a/src/plugins/analyzerbase/analyzerrunconfigwidget.cpp
+++ b/src/plugins/analyzerbase/analyzerrunconfigwidget.cpp
@@ -34,7 +34,6 @@
 
 #include "analyzerrunconfigwidget.h"
 
-#include <utils/detailswidget.h>
 #include <utils/qtcassert.h>
 
 #include <QtCore/QDebug>
@@ -45,18 +44,31 @@
 #include <QtGui/QPushButton>
 
 namespace Analyzer {
+namespace Internal {
+
+AnalyzerToolDetailWidget::AnalyzerToolDetailWidget(AbstractAnalyzerSubConfig *config, QWidget *parent)
+    : Utils::DetailsWidget(parent)
+{
+    QTC_ASSERT(config!=0, return);
+
+    // update summary text
+    setSummaryText(tr("<strong>%1</strong> settings").arg(config->displayName()));
+
+    // create config widget
+    QWidget *configWidget = config->createConfigWidget(this);
+    setWidget(configWidget);
+}
 
 AnalyzerRunConfigWidget::AnalyzerRunConfigWidget()
-    : m_detailsWidget(new Utils::DetailsWidget(this))
 {
-    QWidget *mainWidget = new QWidget(this);
-    new QVBoxLayout(mainWidget);
-    m_detailsWidget->setWidget(mainWidget);
+    QVBoxLayout *layout = new QVBoxLayout(this);
+    layout->setContentsMargins(0, 0, 0, 0);
 
-    QWidget *globalSetting = new QWidget(mainWidget);
+    QWidget *globalSetting = new QWidget(this);
     QHBoxLayout *globalSettingLayout = new QHBoxLayout(globalSetting);
-    mainWidget->layout()->addWidget(globalSetting);
-    QLabel *label = new QLabel(displayName(), globalSetting);
+    globalSettingLayout->setContentsMargins(0, 0, 0, 0);
+    layout->addWidget(globalSetting);
+    QLabel *label = new QLabel(tr("Analyzer Settings:"), globalSetting);
     globalSettingLayout->addWidget(label);
     m_settingsCombo = new QComboBox(globalSetting);
     m_settingsCombo->addItems(QStringList()
@@ -72,13 +84,9 @@ AnalyzerRunConfigWidget::AnalyzerRunConfigWidget()
     connect(m_restoreButton, SIGNAL(clicked()), this, SLOT(restoreGlobal()));
     globalSettingLayout->addStretch(2);
 
-    m_subConfigWidget = new QWidget(mainWidget);
-    mainWidget->layout()->addWidget(m_subConfigWidget);
+    m_subConfigWidget = new QWidget(this);
     new QVBoxLayout(m_subConfigWidget);
-
-    QVBoxLayout *layout = new QVBoxLayout(this);
-    layout->setContentsMargins(0, 0, 0, 0);
-    layout->addWidget(m_detailsWidget);
+    layout->addWidget(m_subConfigWidget);
 }
 
 QString AnalyzerRunConfigWidget::displayName() const
@@ -93,29 +101,28 @@ void AnalyzerRunConfigWidget::setRunConfiguration(ProjectExplorer::RunConfigurat
     m_settings = rc->extraAspect<AnalyzerProjectSettings>();
     QTC_ASSERT(m_settings, return);
 
-    // update summary text
-    QStringList tools;
-    foreach (AbstractAnalyzerSubConfig *config, m_settings->subConfigs()) {
-        tools << QString("<strong>%1</strong>").arg(config->displayName());
-    }
-    m_detailsWidget->setSummaryText(tr("Available settings: %1").arg(tools.join(", ")));
-
-    // add group boxes for each sub config
-    QLayout *layout = m_subConfigWidget->layout();
+    // add config widget for each sub config
     foreach (AbstractAnalyzerSubConfig *config, m_settings->customSubConfigs()) {
-        QWidget *widget = config->createConfigWidget(this);
-        layout->addWidget(widget);
+        QWidget *widget = new AnalyzerToolDetailWidget(config);
+        m_subConfigWidget->layout()->addWidget(widget);
     }
-    m_subConfigWidget->setEnabled(!m_settings->isUsingGlobalSettings());
+    setDetailEnabled(!m_settings->isUsingGlobalSettings());
     m_settingsCombo->setCurrentIndex(m_settings->isUsingGlobalSettings() ? 0 : 1);
     m_restoreButton->setEnabled(!m_settings->isUsingGlobalSettings());
 }
 
+void AnalyzerRunConfigWidget::setDetailEnabled(bool value)
+{
+    QList<AnalyzerToolDetailWidget*> details = findChildren<AnalyzerToolDetailWidget*>();
+    foreach (AnalyzerToolDetailWidget *detail, details)
+        detail->widget()->setEnabled(value);
+}
+
 void AnalyzerRunConfigWidget::chooseSettings(int setting)
 {
     QTC_ASSERT(m_settings, return);
+    setDetailEnabled(setting != 0);
     m_settings->setUsingGlobalSettings(setting == 0);
-    m_subConfigWidget->setEnabled(!m_settings->isUsingGlobalSettings());
     m_restoreButton->setEnabled(!m_settings->isUsingGlobalSettings());
 }
 
@@ -125,4 +132,5 @@ void AnalyzerRunConfigWidget::restoreGlobal()
     m_settings->resetCustomToGlobalSettings();
 }
 
+} // namespace Internal
 } // namespace Analyzer
diff --git a/src/plugins/analyzerbase/analyzerrunconfigwidget.h b/src/plugins/analyzerbase/analyzerrunconfigwidget.h
index 9d4469f8f95ad3d104ed545b9555bd57a29040f6..66d17b106515b3fdaedfd80316141f66de23bc0e 100644
--- a/src/plugins/analyzerbase/analyzerrunconfigwidget.h
+++ b/src/plugins/analyzerbase/analyzerrunconfigwidget.h
@@ -35,11 +35,12 @@
 #ifndef ANALYZER_INTERNAL_ANALYZERRUNCONFIGWIDGET_H
 #define ANALYZER_INTERNAL_ANALYZERRUNCONFIGWIDGET_H
 
-#include "analyzerbase_global.h"
 #include "analyzersettings.h"
 
 #include <projectexplorer/runconfiguration.h>
 
+#include <utils/detailswidget.h>
+
 QT_BEGIN_NAMESPACE
 class QComboBox;
 class QPushButton;
@@ -52,8 +53,19 @@ class DetailsWidget;
 namespace Analyzer {
 
 class AnalyzerSettings;
+class AbstractAnalyzerSubConfig;
+
+namespace Internal {
+
+class AnalyzerToolDetailWidget : public Utils::DetailsWidget
+{
+    Q_OBJECT
 
-class ANALYZER_EXPORT AnalyzerRunConfigWidget : public ProjectExplorer::RunConfigWidget
+public:
+    explicit AnalyzerToolDetailWidget(AbstractAnalyzerSubConfig *config, QWidget *parent=0);
+};
+
+class AnalyzerRunConfigWidget : public ProjectExplorer::RunConfigWidget
 {
     Q_OBJECT
 
@@ -64,18 +76,21 @@ public:
 
     void setRunConfiguration(ProjectExplorer::RunConfiguration *rc);
 
+private:
+    void setDetailEnabled(bool value);
+
 private slots:
     void chooseSettings(int setting);
     void restoreGlobal();
 
 private:
-    Utils::DetailsWidget *m_detailsWidget;
     QWidget *m_subConfigWidget;
     AnalyzerProjectSettings *m_settings;
     QComboBox *m_settingsCombo;
     QPushButton *m_restoreButton;
 };
 
+} // namespace Internal
 } // namespace Analyzer
 
 #endif // ANALYZER_INTERNAL_ANALYZERRUNCONFIGWIDGET_H
diff --git a/src/plugins/analyzerbase/analyzerruncontrolfactory.cpp b/src/plugins/analyzerbase/analyzerruncontrolfactory.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..c27140c165fe7aae252603ead17c4e111eb00f43
--- /dev/null
+++ b/src/plugins/analyzerbase/analyzerruncontrolfactory.cpp
@@ -0,0 +1,104 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (C) 2011 Kläralvdalens Datakonsult AB, a KDAB Group company.
+**
+** Contact: Kläralvdalens Datakonsult AB (info@kdab.com)
+**
+**
+** GNU Lesser General Public License Usage
+**
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this file.
+** Please review the following information to ensure the GNU Lesser General
+** Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** Other Usage
+**
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at info@qt.nokia.com.
+**
+**************************************************************************/
+
+#include "analyzerruncontrolfactory.h"
+#include "analyzersettings.h"
+#include "analyzerruncontrol.h"
+#include "analyzerrunconfigwidget.h"
+#include "analyzermanager.h"
+#include "ianalyzertool.h"
+#include "analyzerstartparameters.h"
+
+#include <projectexplorer/applicationrunconfiguration.h>
+#include <projectexplorer/projectexplorer.h>
+
+#include <utils/qtcassert.h>
+
+#include <QAction>
+
+using namespace ProjectExplorer;
+
+namespace Analyzer {
+namespace Internal {
+
+AnalyzerRunControlFactory::AnalyzerRunControlFactory(QObject *parent) :
+    IRunControlFactory(parent)
+{
+}
+
+QString AnalyzerRunControlFactory::displayName() const
+{
+    return tr("Analyzer");
+}
+
+bool AnalyzerRunControlFactory::canRun(RunConfiguration *runConfiguration, const QString &mode) const
+{
+    IAnalyzerTool *tool = AnalyzerManager::toolFromId(Core::Id(mode));
+    if (tool)
+        return tool->canRun(runConfiguration, mode);
+    return false;
+}
+
+RunControl *AnalyzerRunControlFactory::create(RunConfiguration *runConfiguration, const QString &mode)
+{
+    IAnalyzerTool *tool = AnalyzerManager::toolFromId(Core::Id(mode));
+    if (!tool)
+        return 0;
+
+    QTC_ASSERT(canRun(runConfiguration, mode), return 0);
+
+    AnalyzerStartParameters sp = tool->createStartParameters(runConfiguration, mode);
+    sp.toolId = tool->id();
+
+    AnalyzerRunControl *rc = new AnalyzerRunControl(tool, sp, runConfiguration);
+    QObject::connect(AnalyzerManager::stopAction(), SIGNAL(triggered()), rc, SLOT(stopIt()));
+    return rc;
+}
+
+IRunConfigurationAspect *AnalyzerRunControlFactory::createRunConfigurationAspect()
+{
+    return new AnalyzerProjectSettings;
+}
+
+RunConfigWidget *AnalyzerRunControlFactory::createConfigurationWidget(RunConfiguration *runConfiguration)
+{
+    AnalyzerProjectSettings *settings = runConfiguration->extraAspect<AnalyzerProjectSettings>();
+    if (!settings)
+        return 0;
+
+    AnalyzerRunConfigWidget *ret = new AnalyzerRunConfigWidget;
+    ret->setRunConfiguration(runConfiguration);
+    return ret;
+}
+
+} // namespace Internal
+} // namespace Analyzer
diff --git a/src/plugins/qmlprofiler/qmlprofilerruncontrolfactory.h b/src/plugins/analyzerbase/analyzerruncontrolfactory.h
similarity index 77%
rename from src/plugins/qmlprofiler/qmlprofilerruncontrolfactory.h
rename to src/plugins/analyzerbase/analyzerruncontrolfactory.h
index 5c87c1c2507c5cc5be69463aae69163e72f1ab41..0c43027e68c9ed29805753030047d10ed0f42203 100644
--- a/src/plugins/qmlprofiler/qmlprofilerruncontrolfactory.h
+++ b/src/plugins/analyzerbase/analyzerruncontrolfactory.h
@@ -2,9 +2,9 @@
 **
 ** This file is part of Qt Creator
 **
-** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** Copyright (C) 2011 Kläralvdalens Datakonsult AB, a KDAB Group company.
 **
-** Contact: Nokia Corporation (qt-info@nokia.com)
+** Contact: Kläralvdalens Datakonsult AB (info@kdab.com)
 **
 **
 ** GNU Lesser General Public License Usage
@@ -26,27 +26,26 @@
 ** conditions contained in a signed written agreement between you and Nokia.
 **
 ** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
+** Nokia at info@qt.nokia.com.
 **
 **************************************************************************/
 
-#ifndef QMLPROFILERRUNCONTROLFACTORY_H
-#define QMLPROFILERRUNCONTROLFACTORY_H
+#ifndef ANALYZERRUNCONTROLFACTORY_H
+#define ANALYZERRUNCONTROLFACTORY_H
 
 #include <analyzerbase/analyzerruncontrol.h>
 #include <projectexplorer/runconfiguration.h>
 
-namespace QmlProfiler {
+namespace Analyzer {
 namespace Internal {
 
-class QmlProfilerRunControlFactory : public ProjectExplorer::IRunControlFactory
+class AnalyzerRunControlFactory : public ProjectExplorer::IRunControlFactory
 {
     Q_OBJECT
-
 public:
     typedef ProjectExplorer::RunConfiguration RunConfiguration;
 
-    QmlProfilerRunControlFactory(QObject *parent = 0);
+    explicit AnalyzerRunControlFactory(QObject *parent = 0);
 
     // IRunControlFactory implementation
     QString displayName() const;
@@ -55,11 +54,9 @@ public:
     ProjectExplorer::IRunConfigurationAspect *createRunConfigurationAspect();
     ProjectExplorer::RunConfigWidget *createConfigurationWidget(RunConfiguration *runConfiguration);
 
-signals:
-    void runControlCreated(Analyzer::AnalyzerRunControl *);
 };
 
 } // namespace Internal
-} // namespace QmlProfiler
+} // namespace Analyzer
 
-#endif // QMLPROFILERRUNCONTROLFACTORY_H
+#endif // ANALYZERRUNCONTROLFACTORY_H
diff --git a/src/plugins/analyzerbase/ianalyzertool.h b/src/plugins/analyzerbase/ianalyzertool.h
index ed2954373f3296002d9d32ce78581bca8fba8e9d..8ceafae63ed44415af05f876bbe89d26bf86c466 100644
--- a/src/plugins/analyzerbase/ianalyzertool.h
+++ b/src/plugins/analyzerbase/ianalyzertool.h
@@ -37,6 +37,7 @@
 
 #include "analyzerbase_global.h"
 #include "analyzerconstants.h"
+#include "analyzerstartparameters.h"
 
 #include <coreplugin/id.h>
 
@@ -48,7 +49,6 @@ class RunConfiguration;
 
 namespace Analyzer {
 
-class AnalyzerStartParameters;
 class IAnalyzerOutputPaneAdapter;
 class IAnalyzerEngine;
 
@@ -121,6 +121,15 @@ public:
     virtual IAnalyzerEngine *createEngine(const AnalyzerStartParameters &sp,
         ProjectExplorer::RunConfiguration *runConfiguration = 0) = 0;
 
+    /// Returns true if the tool can be run
+    virtual bool canRun(ProjectExplorer::RunConfiguration *runConfiguration,
+                        const QString &mode) const = 0;
+
+    /// Create the start parameters for the run control factory
+    virtual AnalyzerStartParameters createStartParameters(
+            ProjectExplorer::RunConfiguration *runConfiguration,
+            const QString &mode) const = 0;
+
     virtual void startTool(StartMode mode) = 0;
 
     /// Called when tools gets selected.
diff --git a/src/plugins/qmlprofiler/qmlprofiler.pro b/src/plugins/qmlprofiler/qmlprofiler.pro
index 88b732031c0bd0297167c13376a1bf356dc43b64..d6807a64105f80d038052fa859252ab81dcdae2d 100644
--- a/src/plugins/qmlprofiler/qmlprofiler.pro
+++ b/src/plugins/qmlprofiler/qmlprofiler.pro
@@ -26,8 +26,7 @@ SOURCES += \
     localqmlprofilerrunner.cpp \
     codaqmlprofilerrunner.cpp \
     remotelinuxqmlprofilerrunner.cpp \
-    qmlprofilereventview.cpp \
-    qmlprofilerruncontrolfactory.cpp
+    qmlprofilereventview.cpp
 
 HEADERS += \
     qmlprofilerconstants.h \
@@ -42,8 +41,7 @@ HEADERS += \
     localqmlprofilerrunner.h \
     codaqmlprofilerrunner.h \
     remotelinuxqmlprofilerrunner.h \
-    qmlprofilereventview.h \
-    qmlprofilerruncontrolfactory.h
+    qmlprofilereventview.h
 
 RESOURCES += \
     qml/qmlprofiler.qrc
diff --git a/src/plugins/qmlprofiler/qmlprofilerplugin.cpp b/src/plugins/qmlprofiler/qmlprofilerplugin.cpp
index 4080a34ef2543447fc4a5384bc1ec8769d70c3da..69e39097511d43aca45be26b8ef48d2bb61a172a 100644
--- a/src/plugins/qmlprofiler/qmlprofilerplugin.cpp
+++ b/src/plugins/qmlprofiler/qmlprofilerplugin.cpp
@@ -33,7 +33,6 @@
 #include "qmlprofilerplugin.h"
 
 #include "qmlprofilertool.h"
-#include "qmlprofilerruncontrolfactory.h"
 
 #include <analyzerbase/analyzermanager.h>
 
@@ -48,11 +47,12 @@ bool QmlProfilerPlugin::initialize(const QStringList &arguments, QString *errorS
 {
     Q_UNUSED(arguments)
     Q_UNUSED(errorString)
-    addAutoReleasedObject(new QmlProfilerRunControlFactory());
+
     StartModes modes;
     modes.append(StartMode(StartLocal));
     modes.append(StartMode(StartRemote));
     AnalyzerManager::addTool(new QmlProfilerTool(this), modes);
+
     return true;
 }
 
diff --git a/src/plugins/qmlprofiler/qmlprofilerruncontrolfactory.cpp b/src/plugins/qmlprofiler/qmlprofilerruncontrolfactory.cpp
deleted file mode 100644
index d9b43c4cc0a002ffd57ec89a409a3342e6a72b17..0000000000000000000000000000000000000000
--- a/src/plugins/qmlprofiler/qmlprofilerruncontrolfactory.cpp
+++ /dev/null
@@ -1,160 +0,0 @@
-/**************************************************************************
-**
-** This file is part of Qt Creator
-**
-** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
-**
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-**
-** GNU Lesser General Public License Usage
-**
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this file.
-** Please review the following information to ensure the GNU Lesser General
-** Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** Other Usage
-**
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**************************************************************************/
-
-#include "qmlprofilerruncontrolfactory.h"
-#include "qmlprojectmanager/qmlprojectrunconfiguration.h"
-
-#include <analyzerbase/analyzerstartparameters.h>
-#include <analyzerbase/analyzermanager.h>
-#include <analyzerbase/analyzersettings.h>
-#include <analyzerbase/analyzerrunconfigwidget.h>
-
-#include <projectexplorer/applicationrunconfiguration.h>
-#include <projectexplorer/projectexplorer.h>
-#include <projectexplorer/target.h>
-
-#include <remotelinux/linuxdeviceconfiguration.h>
-#include <remotelinux/remotelinuxrunconfiguration.h>
-#include <qt4projectmanager/qt-s60/s60devicedebugruncontrol.h>
-#include <qt4projectmanager/qt-s60/s60devicerunconfiguration.h>
-#include <qt4projectmanager/qt-s60/s60deployconfiguration.h>
-
-#include <utils/qtcassert.h>
-
-#include <QtGui/QAction>
-
-using namespace Analyzer;
-using namespace ProjectExplorer;
-using namespace QmlProfiler::Internal;
-using namespace QmlProjectManager;
-
-QmlProfilerRunControlFactory::QmlProfilerRunControlFactory(QObject *parent)
-    : IRunControlFactory(parent)
-{
-    setObjectName(QLatin1String("QmlProfilerRunControlFactory"));
-}
-
-bool QmlProfilerRunControlFactory::canRun(RunConfiguration *runConfiguration, const QString &mode) const
-{
-    // FIXME: Should this just accept all  mode == QLatin1String("QmlProfiler"); ?
-    if (qobject_cast<QmlProjectRunConfiguration *>(runConfiguration))
-        return mode == QLatin1String("QmlProfiler");
-    if (qobject_cast<RemoteLinux::RemoteLinuxRunConfiguration *>(runConfiguration))
-        return mode == QLatin1String("QmlProfiler");
-    if (qobject_cast<LocalApplicationRunConfiguration *>(runConfiguration))
-        return mode == QLatin1String("QmlProfiler");
-    if (qobject_cast<Qt4ProjectManager::S60DeviceRunConfiguration *>(runConfiguration))
-        return mode == QLatin1String("QmlProfiler");
-    return false;
-}
-
-RunControl *QmlProfilerRunControlFactory::create(RunConfiguration *runConfiguration, const QString &mode)
-{
-    QTC_ASSERT(canRun(runConfiguration, mode), return 0);
-    AnalyzerStartParameters sp;
-    sp.toolId = "QmlProfiler";
-    sp.startMode = StartQml; // FIXME: The parameter struct is not needed/not used.
-
-
-    // FIXME: This is only used to communicate the connParams settings.
-    if (QmlProjectRunConfiguration *rc1 =
-            qobject_cast<QmlProjectRunConfiguration *>(runConfiguration)) {
-        // This is a "plain" .qmlproject.
-        sp.environment = rc1->environment();
-        sp.workingDirectory = rc1->workingDirectory();
-        sp.debuggee = rc1->observerPath();
-        sp.debuggeeArgs = rc1->viewerArguments();
-        sp.displayName = rc1->displayName();
-        sp.connParams.host = QLatin1String("localhost");
-        sp.connParams.port = rc1->qmlDebugServerPort();
-    } else if (LocalApplicationRunConfiguration *rc2 =
-            qobject_cast<LocalApplicationRunConfiguration *>(runConfiguration)) {
-        sp.environment = rc2->environment();
-        sp.workingDirectory = rc2->workingDirectory();
-        sp.debuggee = rc2->executable();
-        sp.debuggeeArgs = rc2->commandLineArguments();
-        sp.displayName = rc2->displayName();
-        sp.connParams.host = QLatin1String("localhost");
-        sp.connParams.port = rc2->qmlDebugServerPort();
-    } else if (RemoteLinux::RemoteLinuxRunConfiguration *rc3 =
-            qobject_cast<RemoteLinux::RemoteLinuxRunConfiguration *>(runConfiguration)) {
-        sp.debuggee = rc3->remoteExecutableFilePath();
-        sp.debuggeeArgs = rc3->arguments();
-        sp.connParams = rc3->deviceConfig()->sshParameters();
-        sp.analyzerCmdPrefix = rc3->commandPrefix();
-        sp.displayName = rc3->displayName();
-    } else if (Qt4ProjectManager::S60DeviceRunConfiguration *rc4 =
-        qobject_cast<Qt4ProjectManager::S60DeviceRunConfiguration *>(runConfiguration)) {
-        Qt4ProjectManager::S60DeployConfiguration *deployConf =
-                qobject_cast<Qt4ProjectManager::S60DeployConfiguration *>(runConfiguration->target()->activeDeployConfiguration());
-
-        sp.debuggeeArgs = rc4->commandLineArguments();
-        sp.displayName = rc4->displayName();
-        sp.connParams.host = deployConf->deviceAddress();
-        sp.connParams.port = rc4->qmlDebugServerPort();
-    } else {
-        // What could that be?
-        QTC_ASSERT(false, return 0);
-    }
-
-    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;
-}
-
-QString QmlProfilerRunControlFactory::displayName() const
-{
-    return tr("QML Profiler");
-}
-
-IRunConfigurationAspect *QmlProfilerRunControlFactory::createRunConfigurationAspect()
-{
-    return new AnalyzerProjectSettings;
-}
-
-RunConfigWidget *QmlProfilerRunControlFactory::createConfigurationWidget(RunConfiguration *runConfiguration)
-{
-    QmlProjectManager::QmlProjectRunConfiguration *localRc =
-        qobject_cast<QmlProjectManager::QmlProjectRunConfiguration *>(runConfiguration);
-    if (!localRc)
-        return 0;
-
-    AnalyzerProjectSettings *settings = runConfiguration->extraAspect<AnalyzerProjectSettings>();
-    if (!settings)
-        return 0;
-
-    Analyzer::AnalyzerRunConfigWidget *ret = new Analyzer::AnalyzerRunConfigWidget;
-
-    ret->setRunConfiguration(runConfiguration);
-    return ret;
-}
diff --git a/src/plugins/qmlprofiler/qmlprofilertool.cpp b/src/plugins/qmlprofiler/qmlprofilertool.cpp
index 694049913b75ca5e57dca9aaba4fe79754ef681a..80fb530037bc2840c944b6f72257ff503b322e29 100644
--- a/src/plugins/qmlprofiler/qmlprofilertool.cpp
+++ b/src/plugins/qmlprofiler/qmlprofilertool.cpp
@@ -60,6 +60,10 @@
 #include <projectexplorer/project.h>
 #include <projectexplorer/target.h>
 #include <projectexplorer/session.h>
+#include <projectexplorer/applicationrunconfiguration.h>
+
+#include <remotelinux/remotelinuxrunconfiguration.h>
+#include <remotelinux/linuxdeviceconfiguration.h>
 
 #include <texteditor/itexteditor.h>
 #include <coreplugin/coreconstants.h>
@@ -74,6 +78,8 @@
 #include <coreplugin/actionmanager/actioncontainer.h>
 
 #include <qt4projectmanager/qt4buildconfiguration.h>
+#include <qt4projectmanager/qt-s60/s60devicedebugruncontrol.h>
+#include <qt4projectmanager/qt-s60/s60devicerunconfiguration.h>
 #include <qt4projectmanager/qt-s60/s60deployconfiguration.h>
 
 #include <QtCore/QFile>
@@ -95,6 +101,8 @@ using namespace Analyzer::Constants;
 using namespace QmlProfiler::Internal;
 using namespace QmlJsDebugClient;
 using namespace ProjectExplorer;
+using namespace QmlProjectManager;
+using namespace RemoteLinux;
 
 class QmlProfilerTool::QmlProfilerToolPrivate
 {
@@ -357,6 +365,68 @@ IAnalyzerEngine *QmlProfilerTool::createEngine(const AnalyzerStartParameters &sp
     return engine;
 }
 
+bool QmlProfilerTool::canRun(RunConfiguration *runConfiguration, const QString &mode) const
+{
+    Q_UNUSED(mode);
+
+    if (qobject_cast<QmlProjectRunConfiguration *>(runConfiguration)
+            || qobject_cast<RemoteLinuxRunConfiguration *>(runConfiguration)
+            || qobject_cast<LocalApplicationRunConfiguration *>(runConfiguration)
+            || qobject_cast<Qt4ProjectManager::S60DeviceRunConfiguration *>(runConfiguration))
+        return true;
+    return false;
+}
+
+AnalyzerStartParameters QmlProfilerTool::createStartParameters(RunConfiguration *runConfiguration, const QString &mode) const
+{
+    Q_UNUSED(mode);
+
+    AnalyzerStartParameters sp;
+    sp.startMode = StartQml; // FIXME: The parameter struct is not needed/not used.
+
+    // FIXME: This is only used to communicate the connParams settings.
+    if (QmlProjectRunConfiguration *rc1 =
+            qobject_cast<QmlProjectRunConfiguration *>(runConfiguration)) {
+        // This is a "plain" .qmlproject.
+        sp.environment = rc1->environment();
+        sp.workingDirectory = rc1->workingDirectory();
+        sp.debuggee = rc1->observerPath();
+        sp.debuggeeArgs = rc1->viewerArguments();
+        sp.displayName = rc1->displayName();
+        sp.connParams.host = QLatin1String("localhost");
+        sp.connParams.port = rc1->qmlDebugServerPort();
+    } else if (LocalApplicationRunConfiguration *rc2 =
+            qobject_cast<LocalApplicationRunConfiguration *>(runConfiguration)) {
+        sp.environment = rc2->environment();
+        sp.workingDirectory = rc2->workingDirectory();
+        sp.debuggee = rc2->executable();
+        sp.debuggeeArgs = rc2->commandLineArguments();
+        sp.displayName = rc2->displayName();
+        sp.connParams.host = QLatin1String("localhost");
+        sp.connParams.port = rc2->qmlDebugServerPort();
+    } else if (RemoteLinux::RemoteLinuxRunConfiguration *rc3 =
+            qobject_cast<RemoteLinux::RemoteLinuxRunConfiguration *>(runConfiguration)) {
+        sp.debuggee = rc3->remoteExecutableFilePath();
+        sp.debuggeeArgs = rc3->arguments();
+        sp.connParams = rc3->deviceConfig()->sshParameters();
+        sp.analyzerCmdPrefix = rc3->commandPrefix();
+        sp.displayName = rc3->displayName();
+    } else if (Qt4ProjectManager::S60DeviceRunConfiguration *rc4 =
+        qobject_cast<Qt4ProjectManager::S60DeviceRunConfiguration *>(runConfiguration)) {
+        Qt4ProjectManager::S60DeployConfiguration *deployConf =
+                qobject_cast<Qt4ProjectManager::S60DeployConfiguration *>(runConfiguration->target()->activeDeployConfiguration());
+
+        sp.debuggeeArgs = rc4->commandLineArguments();
+        sp.displayName = rc4->displayName();
+        sp.connParams.host = deployConf->deviceAddress();
+        sp.connParams.port = rc4->qmlDebugServerPort();
+    } else {
+        // What could that be?
+        QTC_ASSERT(false, return sp);
+    }
+    return sp;
+}
+
 QWidget *QmlProfilerTool::createWidgets()
 {
     QTC_ASSERT(!d->m_traceWindow, return 0);
diff --git a/src/plugins/qmlprofiler/qmlprofilertool.h b/src/plugins/qmlprofiler/qmlprofilertool.h
index 12755645b1678c92613f8d6d60e2ca5467ee9139..b81bb83f2965d8e8fef4de9a7a023cb4736f8a4d 100644
--- a/src/plugins/qmlprofiler/qmlprofilertool.h
+++ b/src/plugins/qmlprofiler/qmlprofilertool.h
@@ -61,6 +61,13 @@ public:
     Analyzer::IAnalyzerEngine *createEngine(const Analyzer::AnalyzerStartParameters &sp,
         ProjectExplorer::RunConfiguration *runConfiguration = 0);
 
+    bool canRun(ProjectExplorer::RunConfiguration *runConfiguration,
+                const QString &mode) const;
+
+    Analyzer::AnalyzerStartParameters createStartParameters(
+            ProjectExplorer::RunConfiguration *runConfiguration,
+            const QString &mode) const;
+
     QWidget *createWidgets();
     void startTool(Analyzer::StartMode mode);
 
diff --git a/src/plugins/valgrind/callgrindtool.cpp b/src/plugins/valgrind/callgrindtool.cpp
index 904e1da33257adc0401fa79eebcbe54f7aeccfca..74c1e027d9fceac220334848410133e5f8ae7b0a 100644
--- a/src/plugins/valgrind/callgrindtool.cpp
+++ b/src/plugins/valgrind/callgrindtool.cpp
@@ -497,7 +497,7 @@ static QToolButton *createToolButton(QAction *action)
 }
 
 CallgrindTool::CallgrindTool(QObject *parent)
-    : Analyzer::IAnalyzerTool(parent)
+    : ValgrindTool(parent)
 {
     d = new CallgrindToolPrivate(this);
     setObjectName(QLatin1String("CallgrindTool"));
diff --git a/src/plugins/valgrind/callgrindtool.h b/src/plugins/valgrind/callgrindtool.h
index e6219e8caefcff735b9f7e90ed0c8e669686449c..014caa8f8e3d31779c003dcb194fae18c166ebb6 100644
--- a/src/plugins/valgrind/callgrindtool.h
+++ b/src/plugins/valgrind/callgrindtool.h
@@ -33,14 +33,14 @@
 #ifndef CALLGRINDTOOL_H
 #define CALLGRINDTOOL_H
 
-#include <analyzerbase/ianalyzertool.h>
+#include "valgrindtool.h"
 
 namespace Valgrind {
 namespace Internal {
 
 class CallgrindToolPrivate;
 
-class CallgrindTool : public Analyzer::IAnalyzerTool
+class CallgrindTool : public ValgrindTool
 {
     Q_OBJECT
 
diff --git a/src/plugins/valgrind/memchecktool.cpp b/src/plugins/valgrind/memchecktool.cpp
index 6f836a89d2fae9b62ffe041d39858d8e994eda3e..ecd4082601a3a052210826f7d7cd313514acc011 100644
--- a/src/plugins/valgrind/memchecktool.cpp
+++ b/src/plugins/valgrind/memchecktool.cpp
@@ -185,7 +185,7 @@ static void initKindFilterAction(QAction *action, const QList<int> &kinds)
 }
 
 MemcheckTool::MemcheckTool(QObject *parent)
-  : Analyzer::IAnalyzerTool(parent)
+  : ValgrindTool(parent)
 {
     m_settings = 0;
     m_errorModel = 0;
diff --git a/src/plugins/valgrind/memchecktool.h b/src/plugins/valgrind/memchecktool.h
index f808e3bc6284016c0e45a40b68470e2dba086809..f5c1d3f48b4ee3030d6b8fade6fd0bb4aa701f21 100644
--- a/src/plugins/valgrind/memchecktool.h
+++ b/src/plugins/valgrind/memchecktool.h
@@ -35,7 +35,7 @@
 #ifndef MEMCHECKTOOL_H
 #define MEMCHECKTOOL_H
 
-#include <analyzerbase/ianalyzertool.h>
+#include "valgrindtool.h"
 
 #include <QtGui/QSortFilterProxyModel>
 #include <QtCore/QSharedPointer>
@@ -86,7 +86,7 @@ private:
     bool m_filterExternalIssues;
 };
 
-class MemcheckTool : public Analyzer::IAnalyzerTool
+class MemcheckTool : public ValgrindTool
 {
     Q_OBJECT
 
diff --git a/src/plugins/valgrind/valgrind.pro b/src/plugins/valgrind/valgrind.pro
index f5df7d4d128c0f530e66118754b15a86a24bb7c0..f88a5e4d147c3d32ef1a9cefec4aa0630cfc4701 100644
--- a/src/plugins/valgrind/valgrind.pro
+++ b/src/plugins/valgrind/valgrind.pro
@@ -30,7 +30,8 @@ HEADERS += \
     memchecktool.h \
     memcheckengine.h \
     memcheckerrorview.h \
-    suppressiondialog.h
+    suppressiondialog.h \
+    valgrindtool.h
 
 SOURCES += \
     valgrindplugin.cpp \
@@ -52,7 +53,8 @@ SOURCES += \
     memchecktool.cpp \
     memcheckengine.cpp \
     memcheckerrorview.cpp \
-    suppressiondialog.cpp
+    suppressiondialog.cpp \
+    valgrindtool.cpp
 
 FORMS += \
     valgrindconfigwidget.ui
diff --git a/src/plugins/valgrind/valgrindplugin.cpp b/src/plugins/valgrind/valgrindplugin.cpp
index 0129a231c57971d886cecc4459d482f1c63aed2e..b083510412fbe748c28321b058aba6bb3e64c24e 100644
--- a/src/plugins/valgrind/valgrindplugin.cpp
+++ b/src/plugins/valgrind/valgrindplugin.cpp
@@ -59,112 +59,12 @@
 #include <QtGui/QAction>
 
 using namespace Analyzer;
-using namespace Valgrind::Internal;
 using namespace ProjectExplorer;
 
-/////////////////////////////////////////////////////////////////////////////////
-//
-// ValgrindRunControlFactory
-//
-/////////////////////////////////////////////////////////////////////////////////
 
 namespace Valgrind {
 namespace Internal {
 
-class ValgrindRunControlFactory : public ProjectExplorer::IRunControlFactory
-{
-    Q_OBJECT
-
-public:
-    ValgrindRunControlFactory(QObject *parent = 0);
-
-    // IRunControlFactory
-    bool canRun(RunConfiguration *runConfiguration, const QString &mode) const;
-    RunControl *create(RunConfiguration *runConfiguration, const QString &mode);
-    QString displayName() const;
-
-    IRunConfigurationAspect *createRunConfigurationAspect();
-    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 (LocalApplicationRunConfiguration *rc1 =
-            qobject_cast<LocalApplicationRunConfiguration *>(runConfiguration)) {
-        sp.startMode = StartLocal;
-        sp.environment = rc1->environment();
-        sp.workingDirectory = rc1->workingDirectory();
-        sp.debuggee = rc1->executable();
-        sp.debuggeeArgs = rc1->commandLineArguments();
-        sp.displayName = rc1->displayName();
-        sp.connParams.host = QLatin1String("localhost");
-        sp.connParams.port = rc1->qmlDebugServerPort();
-    } else if (RemoteLinux::RemoteLinuxRunConfiguration *rc2 =
-               qobject_cast<RemoteLinux::RemoteLinuxRunConfiguration *>(runConfiguration)) {
-        sp.startMode = StartRemote;
-        sp.debuggee = rc2->remoteExecutableFilePath();
-        sp.debuggeeArgs = rc2->arguments();
-        sp.connParams = rc2->deviceConfig()->sshParameters();
-        sp.analyzerCmdPrefix = rc2->commandPrefix();
-        sp.displayName = rc2->displayName();
-    } else {
-        // Might be S60DeviceRunfiguration, or something else ...
-        //sp.startMode = StartRemote;
-        sp.startMode = StartRemote;
-    }
-
-    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;
-}
-
-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)
 {
     Q_UNUSED(tool);
@@ -219,9 +119,6 @@ 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;
 }
 
@@ -230,5 +127,3 @@ bool ValgrindPlugin::initialize(const QStringList &, QString *)
 
 
 Q_EXPORT_PLUGIN(Valgrind::Internal::ValgrindPlugin)
-
-#include "valgrindplugin.moc"
diff --git a/src/plugins/valgrind/valgrindtool.cpp b/src/plugins/valgrind/valgrindtool.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..208ad7cae94dca196975c9039c4e1bc4824a0a48
--- /dev/null
+++ b/src/plugins/valgrind/valgrindtool.cpp
@@ -0,0 +1,91 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (C) 2011 Kläralvdalens Datakonsult AB, a KDAB Group company.
+**
+** Contact: Kläralvdalens Datakonsult AB (info@kdab.com)
+**
+**
+** GNU Lesser General Public License Usage
+**
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this file.
+** Please review the following information to ensure the GNU Lesser General
+** Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** Other Usage
+**
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at info@qt.nokia.com.
+**
+**************************************************************************/
+
+#include "valgrindtool.h"
+
+#include <remotelinux/remotelinuxrunconfiguration.h>
+#include <remotelinux/linuxdeviceconfiguration.h>
+
+#include <projectexplorer/applicationrunconfiguration.h>
+#include <projectexplorer/projectexplorer.h>
+
+using namespace ProjectExplorer;
+using namespace RemoteLinux;
+
+namespace Valgrind {
+namespace Internal {
+
+ValgrindTool::ValgrindTool(QObject *parent) :
+    Analyzer::IAnalyzerTool(parent)
+{
+}
+
+bool ValgrindTool::canRun(ProjectExplorer::RunConfiguration *, const QString &) const
+{
+    return true;
+}
+
+Analyzer::AnalyzerStartParameters ValgrindTool::createStartParameters(
+        ProjectExplorer::RunConfiguration *runConfiguration,
+        const QString &mode) const
+{
+    Q_UNUSED(mode);
+
+    Analyzer::AnalyzerStartParameters sp;
+    if (LocalApplicationRunConfiguration *rc1 =
+            qobject_cast<LocalApplicationRunConfiguration *>(runConfiguration)) {
+        sp.startMode = Analyzer::StartLocal;
+        sp.environment = rc1->environment();
+        sp.workingDirectory = rc1->workingDirectory();
+        sp.debuggee = rc1->executable();
+        sp.debuggeeArgs = rc1->commandLineArguments();
+        sp.displayName = rc1->displayName();
+        sp.connParams.host = QLatin1String("localhost");
+        sp.connParams.port = rc1->qmlDebugServerPort();
+    } else if (RemoteLinuxRunConfiguration *rc2 =
+               qobject_cast<RemoteLinuxRunConfiguration *>(runConfiguration)) {
+        sp.startMode = Analyzer::StartRemote;
+        sp.debuggee = rc2->remoteExecutableFilePath();
+        sp.debuggeeArgs = rc2->arguments();
+        sp.connParams = rc2->deviceConfig()->sshParameters();
+        sp.analyzerCmdPrefix = rc2->commandPrefix();
+        sp.displayName = rc2->displayName();
+    } 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
new file mode 100644
index 0000000000000000000000000000000000000000..8c384f4ddd89a227e5471e25f0e684ecbf3b17c6
--- /dev/null
+++ b/src/plugins/valgrind/valgrindtool.h
@@ -0,0 +1,58 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (C) 2011 Kläralvdalens Datakonsult AB, a KDAB Group company.
+**
+** Contact: Kläralvdalens Datakonsult AB (info@kdab.com)
+**
+**
+** GNU Lesser General Public License Usage
+**
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this file.
+** Please review the following information to ensure the GNU Lesser General
+** Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** Other Usage
+**
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at info@qt.nokia.com.
+**
+**************************************************************************/
+
+#ifndef VALGRINDTOOL_H
+#define VALGRINDTOOL_H
+
+#include <analyzerbase/ianalyzertool.h>
+
+namespace Valgrind {
+namespace Internal {
+
+class ValgrindTool : public Analyzer::IAnalyzerTool
+{
+    Q_OBJECT
+public:
+    explicit ValgrindTool(QObject *parent);
+
+    bool canRun(ProjectExplorer::RunConfiguration *runConfiguration,
+                const QString &mode) const;
+
+    Analyzer::AnalyzerStartParameters createStartParameters(
+            ProjectExplorer::RunConfiguration *runConfiguration,
+            const QString &mode) const;
+};
+
+} // namespace Internal
+} // namespace Valgrind
+
+#endif // VALGRINDTOOL_H