diff --git a/src/plugins/debugger/debuggerrunner.cpp b/src/plugins/debugger/debuggerrunner.cpp
index 2b6f3684fb7c38eab920aa78b32ffce2e0be789f..d5739c46b6f36d3ea5a6eb691af012e7bd0da607 100644
--- a/src/plugins/debugger/debuggerrunner.cpp
+++ b/src/plugins/debugger/debuggerrunner.cpp
@@ -106,7 +106,7 @@ QWidget *DebuggerRunControlFactory::createConfigurationWidget(RunConfiguration *
 
 DebuggerRunControl::DebuggerRunControl(DebuggerManager *manager,
        LocalApplicationRunConfiguration *runConfiguration)
-  : RunControl(runConfiguration),
+  : RunControl(runConfiguration, ProjectExplorer::Constants::DEBUGMODE),
     m_startParameters(new DebuggerStartParameters()),
     m_manager(manager),
     m_running(false)
@@ -157,7 +157,7 @@ DebuggerRunControl::DebuggerRunControl(DebuggerManager *manager,
 }
 
 DebuggerRunControl::DebuggerRunControl(DebuggerManager *manager, const DebuggerStartParametersPtr &startParameters)
-    : RunControl(0),
+    : RunControl(0, ProjectExplorer::Constants::DEBUGMODE),
       m_startParameters(startParameters),
       m_manager(manager),
       m_running(false)
diff --git a/src/plugins/projectexplorer/applicationrunconfiguration.cpp b/src/plugins/projectexplorer/applicationrunconfiguration.cpp
index aab7a56944409900616005adcc08406c920948dc..05ae8f87650b3f22bae51023f6d08c32c20c25c8 100644
--- a/src/plugins/projectexplorer/applicationrunconfiguration.cpp
+++ b/src/plugins/projectexplorer/applicationrunconfiguration.cpp
@@ -80,7 +80,7 @@ QString LocalApplicationRunControlFactory::displayName() const
 RunControl *LocalApplicationRunControlFactory::create(ProjectExplorer::RunConfiguration *runConfiguration, const QString &mode)
 {
     QTC_ASSERT(canRun(runConfiguration, mode), return 0);
-    return new LocalApplicationRunControl(qobject_cast<LocalApplicationRunConfiguration *>(runConfiguration));
+    return new LocalApplicationRunControl(qobject_cast<LocalApplicationRunConfiguration *>(runConfiguration), mode);
 }
 
 QWidget *LocalApplicationRunControlFactory::createConfigurationWidget(RunConfiguration *runConfiguration)
@@ -91,8 +91,8 @@ QWidget *LocalApplicationRunControlFactory::createConfigurationWidget(RunConfigu
 
 // ApplicationRunControl
 
-LocalApplicationRunControl::LocalApplicationRunControl(LocalApplicationRunConfiguration *runConfiguration)
-    : RunControl(runConfiguration)
+LocalApplicationRunControl::LocalApplicationRunControl(LocalApplicationRunConfiguration *runConfiguration, QString mode)
+    : RunControl(runConfiguration, mode)
 {
     m_applicationLauncher.setEnvironment(runConfiguration->environment().toStringList());
     m_applicationLauncher.setWorkingDirectory(runConfiguration->workingDirectory());
diff --git a/src/plugins/projectexplorer/applicationrunconfiguration.h b/src/plugins/projectexplorer/applicationrunconfiguration.h
index 415126078b076164588e95065eb0a26d711b22f6..a9c4241a580b22c23edbe72450962a08f9a361ea 100644
--- a/src/plugins/projectexplorer/applicationrunconfiguration.h
+++ b/src/plugins/projectexplorer/applicationrunconfiguration.h
@@ -81,7 +81,7 @@ class LocalApplicationRunControl : public RunControl
 {
     Q_OBJECT
 public:
-    LocalApplicationRunControl(LocalApplicationRunConfiguration *runConfiguration);
+    LocalApplicationRunControl(LocalApplicationRunConfiguration *runConfiguration, QString mode);
     virtual ~LocalApplicationRunControl();
     virtual void start();
     virtual void stop();
diff --git a/src/plugins/projectexplorer/outputwindow.cpp b/src/plugins/projectexplorer/outputwindow.cpp
index 3423d4bae4d751abd405961862adfe276d5f3c71..1f27ab70330287e0f776a20a7e2d148889105926 100644
--- a/src/plugins/projectexplorer/outputwindow.cpp
+++ b/src/plugins/projectexplorer/outputwindow.cpp
@@ -64,12 +64,15 @@ static const int MaxBlockCount = 100000;
 OutputPane::OutputPane()
     : m_mainWidget(new QWidget)
 {
-    QIcon runIcon(Constants::ICON_RUN);
-    runIcon.addFile(Constants::ICON_RUN_SMALL);
+    m_runIcon.addFile(Constants::ICON_RUN);
+    m_runIcon.addFile(Constants::ICON_RUN_SMALL);
+
+    m_debugIcon.addFile(Constants::ICON_DEBUG);
+    m_debugIcon.addFile(Constants::ICON_DEBUG_SMALL);
 
     // Rerun
     m_reRunButton = new QToolButton;
-    m_reRunButton->setIcon(runIcon);
+    m_reRunButton->setIcon(m_runIcon);
     m_reRunButton->setToolTip(tr("Re-run this run-configuration"));
     m_reRunButton->setAutoRaise(true);
     m_reRunButton->setEnabled(false);
@@ -296,6 +299,7 @@ void OutputPane::tabChanged(int i)
         RunControl *rc = runControlForTab(i);
         m_stopAction->setEnabled(rc->isRunning());
         m_reRunButton->setEnabled(!rc->isRunning());
+        m_reRunButton->setIcon( rc->runMode() == Constants::DEBUGMODE ? m_debugIcon : m_runIcon);
     }
 }
 
@@ -305,6 +309,7 @@ void OutputPane::runControlStarted()
     if (rc == qobject_cast<RunControl *>(sender())) {
         m_reRunButton->setEnabled(false);
         m_stopAction->setEnabled(true);
+        m_reRunButton->setIcon( rc->runMode() == Constants::DEBUGMODE ? m_debugIcon : m_runIcon);
     }
 }
 
@@ -314,6 +319,7 @@ void OutputPane::runControlFinished()
     if (rc == qobject_cast<RunControl *>(sender())) {
         m_reRunButton->setEnabled(rc);
         m_stopAction->setEnabled(false);
+        m_reRunButton->setIcon( rc->runMode() == Constants::DEBUGMODE ? m_debugIcon : m_runIcon);
     }
 }
 
diff --git a/src/plugins/projectexplorer/outputwindow.h b/src/plugins/projectexplorer/outputwindow.h
index cc791a574df286523e802332de17e477a31fa302..32bd14ec5cee35f65859512ec0441e8d83cd7bf6 100644
--- a/src/plugins/projectexplorer/outputwindow.h
+++ b/src/plugins/projectexplorer/outputwindow.h
@@ -35,6 +35,7 @@
 
 #include <QtCore/QObject>
 #include <QtCore/QHash>
+#include <QtGui/QIcon>
 #include <QtGui/QShowEvent>
 #include <QtGui/QPlainTextEdit>
 
@@ -115,6 +116,8 @@ private:
     QAction *m_stopAction;
     QToolButton *m_reRunButton;
     QToolButton *m_stopButton;
+    QIcon m_runIcon;
+    QIcon m_debugIcon;
 };
 
 
diff --git a/src/plugins/projectexplorer/runconfiguration.cpp b/src/plugins/projectexplorer/runconfiguration.cpp
index b758aa9d003ecb8f548ce9df8343941943e73811..33b59d6984a9e084bc1cf7684477b3d5e956650e 100644
--- a/src/plugins/projectexplorer/runconfiguration.cpp
+++ b/src/plugins/projectexplorer/runconfiguration.cpp
@@ -215,8 +215,8 @@ IRunControlFactory::~IRunControlFactory()
 {
 }
 
-RunControl::RunControl(RunConfiguration *runConfiguration)
-    : m_runConfiguration(runConfiguration)
+RunControl::RunControl(RunConfiguration *runConfiguration, QString mode)
+    : m_runMode(mode), m_runConfiguration(runConfiguration)
 {
     if (runConfiguration)
         m_displayName  = runConfiguration->displayName();
@@ -227,6 +227,11 @@ RunControl::~RunControl()
 
 }
 
+QString RunControl::runMode() const
+{
+    return m_runMode;
+}
+
 QString RunControl::displayName() const
 {
     return m_displayName;
diff --git a/src/plugins/projectexplorer/runconfiguration.h b/src/plugins/projectexplorer/runconfiguration.h
index 86efaf680c4cb2be4ea239346d5284e5a739b6e7..486bc18f96d12caf3c21435d0837396e2be6e25c 100644
--- a/src/plugins/projectexplorer/runconfiguration.h
+++ b/src/plugins/projectexplorer/runconfiguration.h
@@ -160,7 +160,7 @@ class PROJECTEXPLORER_EXPORT RunControl : public QObject
 {
     Q_OBJECT
 public:
-    explicit RunControl(RunConfiguration *runConfiguration);
+    explicit RunControl(RunConfiguration *runConfiguration, QString mode);
     virtual ~RunControl();
     virtual void start() = 0;
     virtual void stop() = 0; // Warning: assumed to be synchroneous!
@@ -170,6 +170,7 @@ public:
     bool sameRunConfiguration(RunControl *other);
 
     virtual OutputFormatter *createOutputFormatter(QObject *parent = 0);
+    QString runMode() const;
 
 signals:
     void addToOutputWindow(RunControl *, const QString &line, bool onStdErr);
@@ -186,6 +187,7 @@ private slots:
 
 private:
     QString m_displayName;
+    QString m_runMode;
     const QWeakPointer<RunConfiguration> m_runConfiguration;
 
 #ifdef Q_OS_MAC
diff --git a/src/plugins/qmlprojectmanager/qmlprojectruncontrol.cpp b/src/plugins/qmlprojectmanager/qmlprojectruncontrol.cpp
index de6e9bba3008dc74126dd82b453754bf44468e52..9d3cbbd1df31eec731063a312153a1037eaa26ec 100644
--- a/src/plugins/qmlprojectmanager/qmlprojectruncontrol.cpp
+++ b/src/plugins/qmlprojectmanager/qmlprojectruncontrol.cpp
@@ -52,11 +52,11 @@ using ProjectExplorer::RunControl;
 namespace QmlProjectManager {
 namespace Internal {
 
-QmlRunControl::QmlRunControl(QmlProjectRunConfiguration *runConfiguration, bool debugMode)
-    : RunControl(runConfiguration), m_debugMode(debugMode)
+QmlRunControl::QmlRunControl(QmlProjectRunConfiguration *runConfiguration, QString mode)
+    : RunControl(runConfiguration, mode)
 {
     ProjectExplorer::Environment environment = ProjectExplorer::Environment::systemEnvironment();
-    if (debugMode)
+    if (runMode() == ProjectExplorer::Constants::DEBUGMODE)
         environment.set(QmlProjectManager::Constants::E_QML_DEBUG_SERVER_PORT, QString::number(runConfiguration->debugServerPort()));
 
     m_applicationLauncher.setEnvironment(environment.toStringList());
@@ -121,7 +121,7 @@ void QmlRunControl::slotError(const QString &err, bool isError)
 
 void QmlRunControl::slotAddToOutputWindow(const QString &line, bool onStdErr)
 {
-    if (m_debugMode && line.startsWith("QDeclarativeDebugServer: Waiting for connection")) {
+    if (runMode() == ProjectExplorer::Constants::DEBUGMODE && line.startsWith("QDeclarativeDebugServer: Waiting for connection")) {
         Core::ICore *core = Core::ICore::instance();
         core->modeManager()->activateMode(Debugger::Constants::MODE_DEBUG);
     }
@@ -155,8 +155,7 @@ RunControl *QmlRunControlFactory::create(RunConfiguration *runConfiguration,
                                          const QString &mode)
 {
     QTC_ASSERT(canRun(runConfiguration, mode), return 0);
-    return new QmlRunControl(qobject_cast<QmlProjectRunConfiguration *>(runConfiguration),
-                             mode == ProjectExplorer::Constants::DEBUGMODE);
+    return new QmlRunControl(qobject_cast<QmlProjectRunConfiguration *>(runConfiguration), mode);
 }
 
 QString QmlRunControlFactory::displayName() const
diff --git a/src/plugins/qmlprojectmanager/qmlprojectruncontrol.h b/src/plugins/qmlprojectmanager/qmlprojectruncontrol.h
index d6fe7e1cdb3489adfe0abfe69b23d73f3eb5e654..89d0d7dc5469261fe4fc9d1af2208484314bec38 100644
--- a/src/plugins/qmlprojectmanager/qmlprojectruncontrol.h
+++ b/src/plugins/qmlprojectmanager/qmlprojectruncontrol.h
@@ -39,10 +39,11 @@ class QmlProjectRunConfiguration;
 
 namespace Internal {
 
-class QmlRunControl : public ProjectExplorer::RunControl {
+class QmlRunControl : public ProjectExplorer::RunControl
+{
     Q_OBJECT
 public:
-    explicit QmlRunControl(QmlProjectRunConfiguration *runConfiguration, bool debugMode);
+    explicit QmlRunControl(QmlProjectRunConfiguration *runConfiguration, QString mode);
     virtual ~QmlRunControl ();
 
     // RunControl
@@ -63,7 +64,6 @@ private:
 
     QString m_executable;
     QStringList m_commandLineArguments;
-    bool m_debugMode;
 };
 
 class QmlRunControlFactory : public ProjectExplorer::IRunControlFactory {
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemoruncontrol.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemoruncontrol.cpp
index a2f639a78e3e99d63adbd087c1a9ecb12e7ebfc4..0078661348fc1c50e61f183271ffd6987ac0af30 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemoruncontrol.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemoruncontrol.cpp
@@ -44,6 +44,7 @@
 #include <extensionsystem/pluginmanager.h>
 #include <projectexplorer/toolchain.h>
 #include <utils/qtcassert.h>
+#include <projectexplorer/projectexplorerconstants.h>
 
 #include <QtCore/QDir>
 #include <QtCore/QFileInfo>
@@ -59,8 +60,8 @@ namespace Internal {
 using ProjectExplorer::RunConfiguration;
 using ProjectExplorer::ToolChain;
 
-AbstractMaemoRunControl::AbstractMaemoRunControl(RunConfiguration *rc)
-    : RunControl(rc)
+AbstractMaemoRunControl::AbstractMaemoRunControl(RunConfiguration *rc, QString mode)
+    : RunControl(rc, mode)
     , m_runConfig(qobject_cast<MaemoRunConfiguration *>(rc))
     , m_devConfig(m_runConfig ? m_runConfig->deviceConfig() : MaemoDeviceConfig())
 {
@@ -343,7 +344,7 @@ void AbstractMaemoRunControl::handleError(const QString &errString)
 
 
 MaemoRunControl::MaemoRunControl(RunConfiguration *runConfiguration)
-    : AbstractMaemoRunControl(runConfiguration)
+    : AbstractMaemoRunControl(runConfiguration, ProjectExplorer::Constants::RUNMODE)
 {
 }
 
@@ -375,7 +376,7 @@ void MaemoRunControl::handleRemoteOutput(const QString &output)
 
 
 MaemoDebugRunControl::MaemoDebugRunControl(RunConfiguration *runConfiguration)
-    : AbstractMaemoRunControl(runConfiguration)
+    : AbstractMaemoRunControl(runConfiguration, ProjectExplorer::Constants::DEBUGMODE)
     , m_debuggerManager(ExtensionSystem::PluginManager::instance()
                       ->getObject<Debugger::DebuggerManager>())
     , m_startParams(new Debugger::DebuggerStartParameters)
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemoruncontrol.h b/src/plugins/qt4projectmanager/qt-maemo/maemoruncontrol.h
index 4fe9744afaddc21cc3a09961adc387b726bda506..7d4170c1d792bcae341ee41ce38850b79a8e44a6 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemoruncontrol.h
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemoruncontrol.h
@@ -63,7 +63,7 @@ class AbstractMaemoRunControl : public ProjectExplorer::RunControl
     Q_OBJECT
 
 public:
-    explicit AbstractMaemoRunControl(ProjectExplorer::RunConfiguration *runConfig);
+    explicit AbstractMaemoRunControl(ProjectExplorer::RunConfiguration *runConfig, QString mode);
     virtual ~AbstractMaemoRunControl();
 
 protected:
diff --git a/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp b/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp
index 54d08018bbc3c1618f34c422b38897b9eacc5d2a..fa50bb1618e85eba0401fb710799ce9900e346d1 100644
--- a/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp
+++ b/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp
@@ -451,8 +451,8 @@ RunConfiguration *S60DeviceRunConfigurationFactory::clone(Target *parent, RunCon
 
 // ======== S60DeviceRunControlBase
 
-S60DeviceRunControlBase::S60DeviceRunControlBase(RunConfiguration *runConfiguration) :
-    RunControl(runConfiguration),
+S60DeviceRunControlBase::S60DeviceRunControlBase(RunConfiguration *runConfiguration, QString mode) :
+    RunControl(runConfiguration, mode),
     m_toolChain(ProjectExplorer::ToolChain::INVALID),
     m_releaseDeviceAfterLauncherFinish(false),
     m_handleDeviceRemoval(true),
@@ -812,8 +812,8 @@ bool S60DeviceRunControlBase::checkConfiguration(QString * /* errorMessage */,
 
 // =============== S60DeviceRunControl
 
-S60DeviceRunControl::S60DeviceRunControl(ProjectExplorer::RunConfiguration *runConfiguration) :
-    S60DeviceRunControlBase(runConfiguration)
+S60DeviceRunControl::S60DeviceRunControl(ProjectExplorer::RunConfiguration *runConfiguration, QString mode) :
+    S60DeviceRunControlBase(runConfiguration, mode)
 {
 }
 
@@ -849,8 +849,8 @@ void S60DeviceRunControl::printRunFailNotice(const QString &errorMessage) {
 
 // ======== S60DeviceDebugRunControl
 
-S60DeviceDebugRunControl::S60DeviceDebugRunControl(S60DeviceRunConfiguration *runConfiguration) :
-    S60DeviceRunControlBase(runConfiguration),
+S60DeviceDebugRunControl::S60DeviceDebugRunControl(S60DeviceRunConfiguration *runConfiguration, QString mode) :
+    S60DeviceRunControlBase(runConfiguration, mode),
     m_startParams(new Debugger::DebuggerStartParameters)
 {
     setReleaseDeviceAfterLauncherFinish(true); // Debugger controls device after install
diff --git a/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.h b/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.h
index 3ff0bc145afc1d836c171dd5404f87336d6edadc..d1d1ed53db2a681280f44d15954bea243ef33a3f 100644
--- a/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.h
+++ b/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.h
@@ -144,7 +144,7 @@ class S60DeviceRunControlBase : public ProjectExplorer::RunControl
 {
     Q_OBJECT
 public:
-    explicit S60DeviceRunControlBase(ProjectExplorer::RunConfiguration *runConfiguration);
+    explicit S60DeviceRunControlBase(ProjectExplorer::RunConfiguration *runConfiguration, QString mode);
     ~S60DeviceRunControlBase();
     virtual void start();
     virtual void stop();
@@ -206,7 +206,7 @@ class S60DeviceRunControl : public S60DeviceRunControlBase
 {
     Q_OBJECT
 public:
-    explicit S60DeviceRunControl(ProjectExplorer::RunConfiguration *runConfiguration);
+    explicit S60DeviceRunControl(ProjectExplorer::RunConfiguration *runConfiguration, QString mode);
 
 protected:
     virtual void initLauncher(const QString &executable, trk::Launcher *);
@@ -225,7 +225,7 @@ class S60DeviceDebugRunControl : public S60DeviceRunControlBase
     Q_DISABLE_COPY(S60DeviceDebugRunControl)
     Q_OBJECT
 public:
-    explicit S60DeviceDebugRunControl(S60DeviceRunConfiguration *runConfiguration);
+    explicit S60DeviceDebugRunControl(S60DeviceRunConfiguration *runConfiguration, QString mode);
     virtual ~S60DeviceDebugRunControl();
 
     virtual void stop();
diff --git a/src/plugins/qt4projectmanager/qt-s60/s60emulatorrunconfiguration.cpp b/src/plugins/qt4projectmanager/qt-s60/s60emulatorrunconfiguration.cpp
index 3a6d849d60139fb30edbc75427ab061839f1c20b..9ae33ff517aae649d524da693ab61e2d6dcd2b50 100644
--- a/src/plugins/qt4projectmanager/qt-s60/s60emulatorrunconfiguration.cpp
+++ b/src/plugins/qt4projectmanager/qt-s60/s60emulatorrunconfiguration.cpp
@@ -293,8 +293,8 @@ QString S60EmulatorRunConfigurationFactory::displayNameForId(const QString &id)
 
 // ======== S60EmulatorRunControl
 
-S60EmulatorRunControl::S60EmulatorRunControl(S60EmulatorRunConfiguration *runConfiguration)
-    : RunControl(runConfiguration)
+S60EmulatorRunControl::S60EmulatorRunControl(S60EmulatorRunConfiguration *runConfiguration, QString mode)
+    : RunControl(runConfiguration, mode)
 {
     // stuff like the EPOCROOT and EPOCDEVICE env variable
     Environment env = Environment::systemEnvironment();
diff --git a/src/plugins/qt4projectmanager/qt-s60/s60emulatorrunconfiguration.h b/src/plugins/qt4projectmanager/qt-s60/s60emulatorrunconfiguration.h
index 7fd1dda8f2a6208136bae731aaeaef38524f4712..917eac35b3b116bda3678301fa7a14f7e5a1e89b 100644
--- a/src/plugins/qt4projectmanager/qt-s60/s60emulatorrunconfiguration.h
+++ b/src/plugins/qt4projectmanager/qt-s60/s60emulatorrunconfiguration.h
@@ -129,7 +129,7 @@ class S60EmulatorRunControl : public ProjectExplorer::RunControl
 {
     Q_OBJECT
 public:
-    explicit S60EmulatorRunControl(S60EmulatorRunConfiguration *runConfiguration);
+    explicit S60EmulatorRunControl(S60EmulatorRunConfiguration *runConfiguration, QString mode);
     ~S60EmulatorRunControl() {}
     void start();
     void stop();
diff --git a/src/plugins/qt4projectmanager/qt-s60/s60manager.cpp b/src/plugins/qt4projectmanager/qt-s60/s60manager.cpp
index 941bdbd484bb7240406235d5721c0e130cafc3a1..cdb490206016e6a497e9a0f08bd57cbcc063ca48 100644
--- a/src/plugins/qt4projectmanager/qt-s60/s60manager.cpp
+++ b/src/plugins/qt4projectmanager/qt-s60/s60manager.cpp
@@ -80,7 +80,7 @@ public:
     ProjectExplorer::RunControl* create(ProjectExplorer::RunConfiguration *runConfiguration, const QString &mode) {
         RunConfiguration *rc = qobject_cast<RunConfiguration *>(runConfiguration);
         QTC_ASSERT(rc && mode == m_mode, return 0);
-        return new RunControl(rc);
+        return new RunControl(rc, mode);
     }
 
     QString displayName() const {