diff --git a/src/plugins/projectexplorer/project.h b/src/plugins/projectexplorer/project.h
index 0af783ec4fb2aa099e783569c3c2ec91934c1fa9..63737f6932e219dfae9321f08856e13df0e91ed6 100644
--- a/src/plugins/projectexplorer/project.h
+++ b/src/plugins/projectexplorer/project.h
@@ -148,6 +148,7 @@ signals:
     void fileListChanged();
     void activeBuildConfigurationChanged();
     void activeRunConfigurationChanged();
+    void runConfigurationsEnabledStateChanged();
     void removedRunConfiguration(const QString &name);
     void addedRunConfiguration(const QString &name);
     // This signal is jut there for updating the tree list in the buildsettings wizard
diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp
index bbab5eca3bf9bb54bad37a497781f312f703a973..ccaa5750dfe8a67076afb6a2497324fc5f2cabdd 100644
--- a/src/plugins/projectexplorer/projectexplorer.cpp
+++ b/src/plugins/projectexplorer/projectexplorer.cpp
@@ -1887,15 +1887,17 @@ void ProjectExplorerPlugin::populateRunConfigurationMenu()
 
     foreach (const Project *pro, m_session->projects()) {
         foreach (QSharedPointer<RunConfiguration> runConfiguration, pro->runConfigurations()) {
-            const QString title = QString("%1 (%2)").arg(pro->name(), runConfiguration->name());
-            QAction *act = new QAction(title, m_runConfigurationActionGroup);
-            act->setCheckable(true);
-            act->setData(qVariantFromValue(runConfiguration));
-            act->setChecked(runConfiguration == activeRunConfiguration);
-            m_runConfigurationMenu->addAction(act);
-            if (debug)
-                qDebug() << "RunConfiguration" << runConfiguration << "project:" << pro->name()
-                         << "active:" << (runConfiguration == activeRunConfiguration);
+            if (runConfiguration->isEnabled()) {
+                const QString title = QString("%1 (%2)").arg(pro->name(), runConfiguration->name());
+                QAction *act = new QAction(title, m_runConfigurationActionGroup);
+                act->setCheckable(true);
+                act->setData(qVariantFromValue(runConfiguration));
+                act->setChecked(runConfiguration == activeRunConfiguration);
+                m_runConfigurationMenu->addAction(act);
+                if (debug)
+                    qDebug() << "RunConfiguration" << runConfiguration << "project:" << pro->name()
+                             << "active:" << (runConfiguration == activeRunConfiguration);
+            }
         }
     }
 
diff --git a/src/plugins/projectexplorer/runsettingspropertiespage.cpp b/src/plugins/projectexplorer/runsettingspropertiespage.cpp
index 9e9df69fb5a5340211ad2c6ac567ea4f2f17a252..4a63d1aaa9e6e19f03607c85b3da7618a44acfe3 100644
--- a/src/plugins/projectexplorer/runsettingspropertiespage.cpp
+++ b/src/plugins/projectexplorer/runsettingspropertiespage.cpp
@@ -196,6 +196,8 @@ RunSettingsWidget::RunSettingsWidget(Project *project)
 
     connect(m_project, SIGNAL(activeRunConfigurationChanged()),
             this, SLOT(activeRunConfigurationChanged()));
+    connect(m_project, SIGNAL(runConfigurationsEnabledStateChanged()),
+            this, SLOT(initRunConfigurationComboBox()));
 
     initRunConfigurationComboBox();
     const QList<QSharedPointer<RunConfiguration> > runConfigurations = m_project->runConfigurations();
diff --git a/src/plugins/qt4projectmanager/qt-s60/qt-s60-todo.txt b/src/plugins/qt4projectmanager/qt-s60/qt-s60-todo.txt
index 7dc3c3c6072c97ddaa58a5d4d04c558cb2d31fde..38a01bdbb7a5673d01e0c87194cbeca11c89da22 100644
--- a/src/plugins/qt4projectmanager/qt-s60/qt-s60-todo.txt
+++ b/src/plugins/qt4projectmanager/qt-s60/qt-s60-todo.txt
@@ -7,16 +7,13 @@
 * QtVersion:
     * gui for overriding the default make target if necessary,
       make arguments --> make options
-    * more general "debug / release" configuration to be used in toolchain???
     * build parser should be defined/created by toolchain, not make step
 
 * Debugging helpers
     * must probably be compiled for different toolchains
 
 * Run Configurations
-    * enabled property doesn't update correctly
-        * missing signals qtVersionChanged + toolChainChanged
-    * handling of active run config getting disabled
+    * handling of active run config getting disabled not optimal yet
 
 * Run on device
     * makesis, signsis and applicationinstaller don't report errors back
diff --git a/src/plugins/qt4projectmanager/qt4project.cpp b/src/plugins/qt4projectmanager/qt4project.cpp
index d3587f602292a9ff4a2ee038263a3c485eafd104..bdddeeb6df956ac9bd39723a067be39cd85c4337 100644
--- a/src/plugins/qt4projectmanager/qt4project.cpp
+++ b/src/plugins/qt4projectmanager/qt4project.cpp
@@ -834,6 +834,7 @@ int Qt4Project::qtVersionId(const QString &buildConfiguration) const
 void Qt4Project::setQtVersion(const QString &buildConfiguration, int id)
 {
     setValue(buildConfiguration, "QtVersionId", id);
+    updateActiveRunConfiguration();
 }
 
 void Qt4Project::setToolChainType(const QString &buildConfiguration, ProjectExplorer::ToolChain::ToolChainType type)
@@ -841,16 +842,32 @@ void Qt4Project::setToolChainType(const QString &buildConfiguration, ProjectExpl
     setValue(buildConfiguration, "ToolChain", (int)type);
     delete m_toolChain;
     m_toolChain = 0;
+    updateActiveRunConfiguration();
+}
+
+void Qt4Project::updateActiveRunConfiguration()
+{
+    if (!activeRunConfiguration()->isEnabled()) {
+        foreach (QSharedPointer<RunConfiguration> runConfiguration, runConfigurations()) {
+            if (runConfiguration->isEnabled()) {
+                setActiveRunConfiguration(runConfiguration);
+            }
+        }
+    }
+    emit runConfigurationsEnabledStateChanged();
+    emit invalidateCachedTargetInformation();
 }
 
 ProjectExplorer::ToolChain::ToolChainType Qt4Project::toolChainType(const QString &buildConfiguration) const
 {
-    ProjectExplorer::ToolChain::ToolChainType type =
+    const ProjectExplorer::ToolChain::ToolChainType originalType =
         (ProjectExplorer::ToolChain::ToolChainType)value(buildConfiguration, "ToolChain").toInt();
+    ProjectExplorer::ToolChain::ToolChainType type = originalType;
     const QtVersion *version = qtVersion(buildConfiguration);
     if (!version->possibleToolChainTypes().contains(type)) // use default tool chain
         type = version->defaultToolchainType();
-    const_cast<Qt4Project *>(this)->setToolChainType(buildConfiguration, type);
+    if (type != originalType)
+        const_cast<Qt4Project *>(this)->setToolChainType(buildConfiguration, type);
     return type;
 }
 
diff --git a/src/plugins/qt4projectmanager/qt4project.h b/src/plugins/qt4projectmanager/qt4project.h
index ce108142194d66539c52ff49e45b074fb0eb3cf7..3c3ef898033197fd7698daf7c85f6c16c601d258 100644
--- a/src/plugins/qt4projectmanager/qt4project.h
+++ b/src/plugins/qt4projectmanager/qt4project.h
@@ -233,6 +233,7 @@ private:
     void addDefaultBuild();
 
     static QString qmakeVarName(ProjectExplorer::FileType type);
+    void updateActiveRunConfiguration();
 
     Qt4Manager *m_manager;
     Internal::Qt4ProFileNode *m_rootProjectNode;