diff --git a/src/plugins/analyzerbase/analyzerruncontrol.cpp b/src/plugins/analyzerbase/analyzerruncontrol.cpp
index e46aac0b617b7acf4c854f5be86a2299c5a62e85..55058f13ebffc9e8b8d19de5bde31924d412ebd2 100644
--- a/src/plugins/analyzerbase/analyzerruncontrol.cpp
+++ b/src/plugins/analyzerbase/analyzerruncontrol.cpp
@@ -169,6 +169,11 @@ QString AnalyzerRunControl::displayName() const
     return AnalyzerManager::instance()->currentTool()->displayName();
 }
 
+QIcon AnalyzerRunControl::icon() const
+{
+    return QIcon(QLatin1String(":/images/analyzer_start_small.png"));
+}
+
 void AnalyzerRunControl::receiveStandardOutput(const QString &text)
 {
     appendMessage(text, ProjectExplorer::StdOutFormat);
diff --git a/src/plugins/analyzerbase/analyzerruncontrol.h b/src/plugins/analyzerbase/analyzerruncontrol.h
index dbb498025f793917ddede9041fb92b6d441cb59a..03333d06a5827aa87add8145ba79e738b935ed51 100644
--- a/src/plugins/analyzerbase/analyzerruncontrol.h
+++ b/src/plugins/analyzerbase/analyzerruncontrol.h
@@ -91,6 +91,7 @@ public:
     StopResult stop();
     bool isRunning() const;
     QString displayName() const;
+    QIcon icon() const;
 
 private slots:
     void receiveStandardOutput(const QString &);
diff --git a/src/plugins/debugger/debuggerrunner.cpp b/src/plugins/debugger/debuggerrunner.cpp
index daed9af1f9db55cec47443a522776ada7fc3c082..2e8f4135f41b94efc98f75921d5220ad4b16a885 100644
--- a/src/plugins/debugger/debuggerrunner.cpp
+++ b/src/plugins/debugger/debuggerrunner.cpp
@@ -227,6 +227,11 @@ QString DebuggerRunControl::displayName() const
     return d->m_engine->startParameters().displayName;
 }
 
+QIcon DebuggerRunControl::icon() const
+{
+    return QIcon(ProjectExplorer::Constants::ICON_DEBUG_SMALL);
+}
+
 void DebuggerRunControl::setCustomEnvironment(Utils::Environment env)
 {
     QTC_ASSERT(d->m_engine, return);
diff --git a/src/plugins/debugger/debuggerrunner.h b/src/plugins/debugger/debuggerrunner.h
index 70991889ff7f32a437811489bc0d7cadee29a84f..fdc5371b7450c1688d2e901217c1c72ee4ef9e18 100644
--- a/src/plugins/debugger/debuggerrunner.h
+++ b/src/plugins/debugger/debuggerrunner.h
@@ -96,6 +96,7 @@ public:
     StopResult stop(); // Called from SnapshotWindow.
     bool isRunning() const;
     QString displayName() const;
+    QIcon icon() const;
 
     void setCustomEnvironment(Utils::Environment env);
     void startFailed();
diff --git a/src/plugins/projectexplorer/localapplicationruncontrol.cpp b/src/plugins/projectexplorer/localapplicationruncontrol.cpp
index d932a19f7d2778d8f07c1f945b4f86ea7f11a870..e778e3831947756ea8605335cce2ccf834cc229e 100644
--- a/src/plugins/projectexplorer/localapplicationruncontrol.cpp
+++ b/src/plugins/projectexplorer/localapplicationruncontrol.cpp
@@ -122,6 +122,11 @@ bool LocalApplicationRunControl::isRunning() const
     return m_applicationLauncher.isRunning();
 }
 
+QIcon LocalApplicationRunControl::icon() const
+{
+    return QIcon(ProjectExplorer::Constants::ICON_RUN_SMALL);
+}
+
 void LocalApplicationRunControl::slotAppendMessage(const QString &err,
                                                    OutputFormat format)
 {
diff --git a/src/plugins/projectexplorer/localapplicationruncontrol.h b/src/plugins/projectexplorer/localapplicationruncontrol.h
index 061f4a317bfb342ca6fa2c9161bd81fccc211489..a796fe999cbdf1baf6433d5dae1ee28f41959795 100644
--- a/src/plugins/projectexplorer/localapplicationruncontrol.h
+++ b/src/plugins/projectexplorer/localapplicationruncontrol.h
@@ -63,6 +63,7 @@ public:
     virtual void start();
     virtual StopResult stop();
     virtual bool isRunning() const;
+    virtual QIcon icon() const;
 private slots:
     void processExited(int exitCode);
     void slotAppendMessage(const QString &err, ProjectExplorer::OutputFormat isError);
diff --git a/src/plugins/projectexplorer/outputwindow.cpp b/src/plugins/projectexplorer/outputwindow.cpp
index be044ae4f05bda28d5ed7e6b8bcb9b109513e811..4d738e347c496433e0acd433c14467ff2a7e4620 100644
--- a/src/plugins/projectexplorer/outputwindow.cpp
+++ b/src/plugins/projectexplorer/outputwindow.cpp
@@ -88,11 +88,8 @@ OutputPane::OutputPane() :
     m_reRunButton(new QToolButton),
     m_stopButton(new QToolButton)
 {
-    m_runIcon.addFile(Constants::ICON_RUN);
-    m_runIcon.addFile(Constants::ICON_RUN_SMALL);
-
     // Rerun
-    m_reRunButton->setIcon(m_runIcon);
+    m_reRunButton->setIcon(QIcon(ProjectExplorer::Constants::ICON_RUN_SMALL));
     m_reRunButton->setToolTip(tr("Re-run this run-configuration"));
     m_reRunButton->setAutoRaise(true);
     m_reRunButton->setEnabled(false);
@@ -396,7 +393,7 @@ void OutputPane::tabChanged(int i)
         RunControl *rc = m_runControlTabs.at(index).runControl;
         m_stopAction->setEnabled(rc->isRunning());
         m_reRunButton->setEnabled(!rc->isRunning());
-        m_reRunButton->setIcon(m_runIcon);
+        m_reRunButton->setIcon(rc->icon());
     }
 }
 
@@ -406,7 +403,7 @@ void OutputPane::runControlStarted()
     if (current && current == sender()) {
         m_reRunButton->setEnabled(false);
         m_stopAction->setEnabled(true);
-        m_reRunButton->setIcon(m_runIcon);
+        m_reRunButton->setIcon(current->icon());
     }
 }
 
@@ -427,7 +424,7 @@ void OutputPane::runControlFinished()
     if (current && current == sender()) {
         m_reRunButton->setEnabled(true);
         m_stopAction->setEnabled(false);
-        m_reRunButton->setIcon(m_runIcon);
+        m_reRunButton->setIcon(current->icon());
     }
     // Check for asynchronous close. Close the tab.
     if (m_runControlTabs.at(senderIndex).asyncClosing)
diff --git a/src/plugins/projectexplorer/outputwindow.h b/src/plugins/projectexplorer/outputwindow.h
index 76a439d7cfb0a082056e0f7f84011afa7626dc72..8b7216a294ce0b0e13cea50565465d1bc4afc1a9 100644
--- a/src/plugins/projectexplorer/outputwindow.h
+++ b/src/plugins/projectexplorer/outputwindow.h
@@ -146,7 +146,6 @@ private:
     QAction *m_stopAction;
     QToolButton *m_reRunButton;
     QToolButton *m_stopButton;
-    QIcon m_runIcon;
 };
 
 
diff --git a/src/plugins/projectexplorer/runconfiguration.h b/src/plugins/projectexplorer/runconfiguration.h
index faf8a95aa98c46da5d13e8a20758cad9864bed0d..50ac67a1548b6af1f3386f60245d67230c5f3b05 100644
--- a/src/plugins/projectexplorer/runconfiguration.h
+++ b/src/plugins/projectexplorer/runconfiguration.h
@@ -42,6 +42,7 @@
 #include <QtCore/QMetaType>
 #include <QtCore/QWeakPointer>
 #include <QtGui/QWidget>
+#include <QtGui/QIcon>
 
 namespace ProjectExplorer {
 
@@ -252,6 +253,10 @@ public:
     virtual StopResult stop() = 0;
     virtual bool isRunning() const = 0;
     virtual QString displayName() const;
+    /// \returns the icon to be shown in the outputwindow
+    // TODO the icon differs currently only per "mode"
+    // so this is more flexibel then it needs to be
+    virtual QIcon icon() const = 0;
 
     bool sameRunConfiguration(const RunControl *other) const;
 
diff --git a/src/plugins/qmlprojectmanager/qmlprojectruncontrol.cpp b/src/plugins/qmlprojectmanager/qmlprojectruncontrol.cpp
index 01620f96e066aed11dc023ece4b21ace2403ad4d..edee8661ab3be7cc3708e3762dcacebf36c025e4 100644
--- a/src/plugins/qmlprojectmanager/qmlprojectruncontrol.cpp
+++ b/src/plugins/qmlprojectmanager/qmlprojectruncontrol.cpp
@@ -113,6 +113,11 @@ bool QmlRunControl::isRunning() const
     return m_applicationLauncher.isRunning();
 }
 
+QIcon QmlRunControl::icon() const
+{
+    return QIcon(ProjectExplorer::Constants::ICON_RUN_SMALL);
+}
+
 void QmlRunControl::slotBringApplicationToForeground(qint64 pid)
 {
     bringApplicationToForeground(pid);
diff --git a/src/plugins/qmlprojectmanager/qmlprojectruncontrol.h b/src/plugins/qmlprojectmanager/qmlprojectruncontrol.h
index 5def7465962d763e876bbd23423806b7bf00eb70..df44e440339a49ef707574e2c24c8c63ced5d257 100644
--- a/src/plugins/qmlprojectmanager/qmlprojectruncontrol.h
+++ b/src/plugins/qmlprojectmanager/qmlprojectruncontrol.h
@@ -54,6 +54,7 @@ public:
     virtual void start();
     virtual StopResult stop();
     virtual bool isRunning() const;
+    virtual QIcon icon() const;
 
 private slots:
     void processExited(int exitCode);
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemoruncontrol.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemoruncontrol.cpp
index 432f76695c383d7dcdf5bb7d05b85fa688f9c03f..e5ffd635e77685bf21d0fd0bd3d118efc0d884c8 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemoruncontrol.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemoruncontrol.cpp
@@ -140,6 +140,11 @@ bool MaemoRunControl::isRunning() const
     return m_running;
 }
 
+QIcon MaemoRunControl::icon() const
+{
+    return QIcon(ProjectExplorer::Constants::ICON_RUN_SMALL);
+}
+
 void MaemoRunControl::handleError(const QString &errString)
 {
     stop();
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemoruncontrol.h b/src/plugins/qt4projectmanager/qt-maemo/maemoruncontrol.h
index 5e92064fa33d213d261994b52639d3df0895a2b5..5b81cb8ba262550d161c57e435ae7613c96e70f2 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemoruncontrol.h
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemoruncontrol.h
@@ -55,6 +55,7 @@ public:
     virtual void start();
     virtual StopResult stop();
     virtual bool isRunning() const;
+    virtual QIcon icon() const;
 
 private slots:
     void startExecution();
diff --git a/src/plugins/qt4projectmanager/qt-s60/codaruncontrol.cpp b/src/plugins/qt4projectmanager/qt-s60/codaruncontrol.cpp
index ac5977d0d4082af68a660ff27e54842900b0a49a..2bdf165c53e09ddec79daa5f8bcb61790c69caa1 100644
--- a/src/plugins/qt4projectmanager/qt-s60/codaruncontrol.cpp
+++ b/src/plugins/qt4projectmanager/qt-s60/codaruncontrol.cpp
@@ -47,6 +47,7 @@
 
 #include <coreplugin/icore.h>
 #include <utils/qtcassert.h>
+#include <projectexplorer/projectexplorerconstants.h>
 
 #include <symbianutils/symbiandevicemanager.h>
 
@@ -110,6 +111,11 @@ bool CodaRunControl::isRunning() const
     return m_state >= StateConnecting;
 }
 
+QIcon CodaRunControl::icon() const
+{
+    return QIcon(ProjectExplorer::Constants::ICON_DEBUG_SMALL);
+}
+
 bool CodaRunControl::setupLauncher()
 {
     QTC_ASSERT(!m_codaDevice, return false);
diff --git a/src/plugins/qt4projectmanager/qt-s60/codaruncontrol.h b/src/plugins/qt4projectmanager/qt-s60/codaruncontrol.h
index 72a667062e4d5477a827fc102f90b53c96937890..382b0f9f64b50c82148e38d844f70641600ab513 100644
--- a/src/plugins/qt4projectmanager/qt-s60/codaruncontrol.h
+++ b/src/plugins/qt4projectmanager/qt-s60/codaruncontrol.h
@@ -63,6 +63,7 @@ public:
     virtual ~CodaRunControl();
 
     virtual bool isRunning() const;
+    virtual QIcon icon() const;
 
     static QMessageBox *createCodaWaitingMessageBox(QWidget *parent = 0);
 
diff --git a/src/plugins/qt4projectmanager/qt-s60/s60emulatorrunconfiguration.cpp b/src/plugins/qt4projectmanager/qt-s60/s60emulatorrunconfiguration.cpp
index 343c23e9dd4d5ea9f9a30cc402341f01ebba2a96..1bbde9567e4715abe0829a4e674ebac2a85f9d3e 100644
--- a/src/plugins/qt4projectmanager/qt-s60/s60emulatorrunconfiguration.cpp
+++ b/src/plugins/qt4projectmanager/qt-s60/s60emulatorrunconfiguration.cpp
@@ -40,6 +40,8 @@
 #include "qt4projectmanagerconstants.h"
 #include "qtoutputformatter.h"
 
+#include <projectexplorer/projectexplorerconstants.h>
+
 #include <utils/qtcassert.h>
 #include <utils/detailswidget.h>
 
@@ -369,6 +371,11 @@ bool S60EmulatorRunControl::isRunning() const
     return m_applicationLauncher.isRunning();
 }
 
+QIcon S60EmulatorRunControl::icon() const
+{
+    return QIcon(ProjectExplorer::Constants::ICON_RUN_SMALL);
+}
+
 void S60EmulatorRunControl::slotError(const QString & err)
 {
     appendMessage(err, ErrorMessageFormat);
diff --git a/src/plugins/qt4projectmanager/qt-s60/s60emulatorrunconfiguration.h b/src/plugins/qt4projectmanager/qt-s60/s60emulatorrunconfiguration.h
index 38162aba356511e65af959a8ad9b3ffe017dad74..b7bf4427ea6ae766fe869e7a49696a88f36f8622 100644
--- a/src/plugins/qt4projectmanager/qt-s60/s60emulatorrunconfiguration.h
+++ b/src/plugins/qt4projectmanager/qt-s60/s60emulatorrunconfiguration.h
@@ -146,6 +146,7 @@ public:
     void start();
     virtual StopResult stop();
     bool isRunning() const;
+    QIcon icon() const;
 
 private slots:
     void processExited(int exitCode);
diff --git a/src/plugins/qt4projectmanager/qt-s60/trkruncontrol.cpp b/src/plugins/qt4projectmanager/qt-s60/trkruncontrol.cpp
index c60478385cdc3b3d81620099a19b6c955854fa68..8985565b8bf3d3c2b8f728b1396a073c58803e80 100644
--- a/src/plugins/qt4projectmanager/qt-s60/trkruncontrol.cpp
+++ b/src/plugins/qt4projectmanager/qt-s60/trkruncontrol.cpp
@@ -45,6 +45,7 @@
 #include <symbianutils/bluetoothlistener_gui.h>
 #include <symbianutils/launcher.h>
 #include <symbianutils/symbiandevicemanager.h>
+#include <projectexplorer/projectexplorerconstants.h>
 
 #include <utils/qtcassert.h>
 
@@ -97,7 +98,11 @@ bool TrkRunControl::isRunning() const
     return m_launcher && (m_launcher->state() == trk::Launcher::Connecting
                           || m_launcher->state() == trk::Launcher::Connected
                           || m_launcher->state() == trk::Launcher::WaitingForTrk);
+}
 
+QIcon TrkRunControl::icon() const
+{
+    return QIcon(ProjectExplorer::Constants::ICON_DEBUG_SMALL);
 }
 
 bool TrkRunControl::setupLauncher()
diff --git a/src/plugins/qt4projectmanager/qt-s60/trkruncontrol.h b/src/plugins/qt4projectmanager/qt-s60/trkruncontrol.h
index 8bb4c58d8a8f86993e52428f2c44b75e64b192cd..d1ad5b2032d8f767608c433811f2c333b48554bb 100644
--- a/src/plugins/qt4projectmanager/qt-s60/trkruncontrol.h
+++ b/src/plugins/qt4projectmanager/qt-s60/trkruncontrol.h
@@ -60,6 +60,7 @@ public:
     TrkRunControl(ProjectExplorer::RunConfiguration *runConfiguration, const QString &mode);
     ~TrkRunControl();
     virtual bool isRunning() const;
+    virtual QIcon icon() const;
 
     static QMessageBox *createTrkWaitingMessageBox(const QString &port, QWidget *parent = 0);