diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp
index 034dd07469e73c6c7110ed3222f2f666590ce019..9d0021aeb69f4f37eed16d715cb83f9ce1a5aa41 100644
--- a/src/plugins/projectexplorer/projectexplorer.cpp
+++ b/src/plugins/projectexplorer/projectexplorer.cpp
@@ -98,6 +98,7 @@
 #include <QtGui/QFileDialog>
 #include <QtGui/QMenu>
 #include <QtGui/QMessageBox>
+#include <QtGui/QVBoxLayout>
 
 Q_DECLARE_METATYPE(QSharedPointer<ProjectExplorer::RunConfiguration>);
 Q_DECLARE_METATYPE(Core::IEditorFactory*);
@@ -1541,6 +1542,10 @@ void ProjectExplorerPlugin::runProjectImpl(Project *pro)
         return;
 
     if (d->m_projectExplorerSettings.buildBeforeRun && pro->hasBuildSettings()) {
+        if (!pro->activeRunConfiguration()->isEnabled()) {
+            if (!showBuildConfigDialog())
+                return;
+        }
         if (saveModifiedFiles()) {
             d->m_runMode = ProjectExplorer::Constants::RUNMODE;
             d->m_delayedRunConfiguration = pro->activeRunConfiguration();
@@ -1560,6 +1565,10 @@ void ProjectExplorerPlugin::debugProject()
         return;
 
     if (d->m_projectExplorerSettings.buildBeforeRun && pro->hasBuildSettings()) {
+        if (!pro->activeRunConfiguration()->isEnabled()) {
+            if (!showBuildConfigDialog())
+                return;
+        }
         if (saveModifiedFiles()) {
             d->m_runMode = ProjectExplorer::Constants::DEBUGMODE;
             d->m_delayedRunConfiguration = pro->activeRunConfiguration();
@@ -1574,6 +1583,31 @@ void ProjectExplorerPlugin::debugProject()
     }
 }
 
+bool ProjectExplorerPlugin::showBuildConfigDialog()
+{
+    Project *pro = startupProject();
+    BuildConfigDialog *dialog = new BuildConfigDialog(pro,
+                                                      Core::ICore::instance()->mainWindow());
+    dialog->exec();
+    BuildConfiguration *otherConfig = dialog->selectedBuildConfiguration();
+    int result = dialog->result();
+    dialog->deleteLater();
+    switch (result) {
+    case BuildConfigDialog::ChangeBuild:
+        if (otherConfig) {
+            pro->setActiveBuildConfiguration(otherConfig);
+            return true;
+        }
+        return false;
+    case BuildConfigDialog::Cancel:
+        return false;
+    case BuildConfigDialog::Continue:
+        return true;
+    default:
+        return false;
+    }
+}
+
 void ProjectExplorerPlugin::addToApplicationOutputWindow(RunControl *rc, const QString &line)
 {
     d->m_outputPane->appendOutput(rc, line);
@@ -2095,4 +2129,79 @@ Internal::ProjectExplorerSettings ProjectExplorerPlugin::projectExplorerSettings
     return d->m_projectExplorerSettings;
 }
 
+// ---------- BuildConfigDialog -----------
+Q_DECLARE_METATYPE(BuildConfiguration*);
+
+BuildConfigDialog::BuildConfigDialog(Project *project, QWidget *parent)
+    : QDialog(parent),
+    m_project(project)
+{
+    QVBoxLayout *vlayout = new QVBoxLayout;
+    setLayout(vlayout);
+    QDialogButtonBox *buttonBox = new QDialogButtonBox;
+    m_changeBuildConfiguration = buttonBox->addButton(tr("Change build configuration && continue"),
+        QDialogButtonBox::ActionRole);
+    m_cancel = buttonBox->addButton(tr("Cancel"),
+        QDialogButtonBox::RejectRole);
+    m_justContinue = buttonBox->addButton(tr("Continue anyway"),
+        QDialogButtonBox::AcceptRole);
+    connect(m_changeBuildConfiguration, SIGNAL(clicked()), this, SLOT(buttonClicked()));
+    connect(m_cancel, SIGNAL(clicked()), this, SLOT(buttonClicked()));
+    connect(m_justContinue, SIGNAL(clicked()), this, SLOT(buttonClicked()));
+    setWindowTitle(tr("Run configuration doesn't match build configuration"));
+    QLabel *shortText = new QLabel(tr(
+            "The active build configuration builds a target "
+            "that cannot be used by the active run configuration."
+            ));
+    vlayout->addWidget(shortText);
+    QLabel *descriptiveText = new QLabel(tr(
+        "This can happen if the active build configuration "
+        "uses the wrong Qt version and/or tool chain for the active run configuration "
+        "(e.g. running in Symbian emulator requires building with WINSCW tool chain)."
+    ));
+    descriptiveText->setWordWrap(true);
+    vlayout->addWidget(descriptiveText);
+    QHBoxLayout *hlayout = new QHBoxLayout;
+    hlayout->addWidget(new QLabel(tr("Choose build configuration:")));
+    m_configCombo = new QComboBox;
+    QSharedPointer<RunConfiguration> activeRun = m_project->activeRunConfiguration();
+    foreach (BuildConfiguration *config, m_project->buildConfigurations()) {
+        if (activeRun->isEnabled(config)) {
+            m_configCombo->addItem(config->name(), qVariantFromValue(config));
+        }
+    }
+    if (m_configCombo->count() == 0) {
+        m_configCombo->addItem(tr("No valid build configuration found."));
+        m_configCombo->setEnabled(false);
+        m_changeBuildConfiguration->setEnabled(false);
+    }
+
+
+    hlayout->addWidget(m_configCombo);
+    hlayout->addStretch(10);
+    vlayout->addLayout(hlayout);
+    vlayout->addWidget(buttonBox);
+    m_cancel->setDefault(true);
+}
+
+BuildConfiguration *BuildConfigDialog::selectedBuildConfiguration() const
+{
+    int index = m_configCombo->currentIndex();
+    if (index < 0)
+        return 0;
+    return m_configCombo->itemData(index, Qt::UserRole).value<BuildConfiguration*>();
+}
+
+void BuildConfigDialog::buttonClicked()
+{
+    QPushButton *button = qobject_cast<QPushButton *>(sender());
+    if (button == m_changeBuildConfiguration) {
+        done(ChangeBuild);
+    } else if (button == m_cancel) {
+        done(Cancel);
+    } else if (button == m_justContinue) {
+        done(Continue);
+    }
+}
+
 Q_EXPORT_PLUGIN(ProjectExplorerPlugin)
diff --git a/src/plugins/projectexplorer/projectexplorer.h b/src/plugins/projectexplorer/projectexplorer.h
index 6066b9e69d80582f8348d0902a84a5cb4600bdb0..1d0d49afb810c3f10ae38e38502615102003f619 100644
--- a/src/plugins/projectexplorer/projectexplorer.h
+++ b/src/plugins/projectexplorer/projectexplorer.h
@@ -35,10 +35,12 @@
 #include <extensionsystem/iplugin.h>
 
 #include <QtCore/QSharedPointer>
+#include <QtGui/QDialog>
 
 QT_BEGIN_NAMESPACE
 class QPoint;
 class QAction;
+class QComboBox;
 QT_END_NAMESPACE
 
 namespace Core {
@@ -59,10 +61,36 @@ class RunConfiguration;
 class IRunControlFactory;
 class Project;
 class Node;
+class BuildConfiguration;
 
 namespace Internal {
 class ProjectFileFactory;
 struct ProjectExplorerSettings;
+
+class BuildConfigDialog : public QDialog
+{
+    Q_OBJECT
+public:
+    enum DialogResult {
+        ChangeBuild = 10,
+        Cancel = 11,
+        Continue = 12
+    };
+    BuildConfigDialog(Project *project, QWidget *parent = 0);
+
+    BuildConfiguration *selectedBuildConfiguration() const;
+
+private slots:
+    void buttonClicked();
+
+private:
+    Project *m_project;
+    QPushButton *m_changeBuildConfiguration;
+    QPushButton *m_cancel;
+    QPushButton *m_justContinue;
+    QComboBox *m_configCombo;
+};
+
 } // namespace Internal
 
 struct ProjectExplorerPluginPrivate;
@@ -187,6 +215,7 @@ private slots:
 private:
     void runProjectImpl(Project *pro);
     void executeRunConfiguration(const QSharedPointer<RunConfiguration> &, const QString &mode);
+    bool showBuildConfigDialog();
     void setCurrent(Project *project, QString filePath, Node *node);
 
     QStringList allFilesWithDependencies(Project *pro);
diff --git a/src/plugins/projectexplorer/runconfiguration.cpp b/src/plugins/projectexplorer/runconfiguration.cpp
index c9765ad5cd53058cefc81c471f184104eee066fc..6aa8ea34de89d6927eebe82f4e51ab648aa00a0c 100644
--- a/src/plugins/projectexplorer/runconfiguration.cpp
+++ b/src/plugins/projectexplorer/runconfiguration.cpp
@@ -30,6 +30,7 @@
 #include "runconfiguration.h"
 #include "project.h"
 #include "persistentsettings.h"
+#include "buildconfiguration.h"
 
 #include <QtCore/QTimer>
 
@@ -56,6 +57,15 @@ Project *RunConfiguration::project() const
     return m_project.data();
 }
 
+bool RunConfiguration::isEnabled() const
+{
+    if (!m_project)
+        return false;
+    if (!m_project->activeBuildConfiguration())
+        return false;
+    return isEnabled(m_project->activeBuildConfiguration());
+}
+
 QString RunConfiguration::name() const
 {
     return m_name;
diff --git a/src/plugins/projectexplorer/runconfiguration.h b/src/plugins/projectexplorer/runconfiguration.h
index 07f1ad795614f7da69763d1edc0f20c21da8ee33..d775856cd77a2555c5cd0450d90a110dcecd7bf5 100644
--- a/src/plugins/projectexplorer/runconfiguration.h
+++ b/src/plugins/projectexplorer/runconfiguration.h
@@ -49,6 +49,7 @@ class PersistentSettingsReader;
 class PersistentSettingsWriter;
 
 class RunControl;
+class BuildConfiguration;
 
 /* Base class for a run configuration. A run configuration specifies how a
  * project should be run, while the runner (see below) does the actual running.
@@ -75,7 +76,8 @@ public:
     QString name() const;
     void setName(const QString &name);
 
-    virtual bool isEnabled() const { return true; }
+    virtual bool isEnabled(BuildConfiguration *) const { return true; }
+    bool isEnabled() const;
 
     // Returns the widget used to configure this run configuration. Ownership is transferred to the caller
     // rename to createConfigurationWidget
diff --git a/src/plugins/projectexplorer/runsettingspropertiespage.cpp b/src/plugins/projectexplorer/runsettingspropertiespage.cpp
index 98b86a3ff89ec7a06072fbf42536ec1fb4ae2d03..03b380826144d82db4d879622f71b8ed0a3101e0 100644
--- a/src/plugins/projectexplorer/runsettingspropertiespage.cpp
+++ b/src/plugins/projectexplorer/runsettingspropertiespage.cpp
@@ -288,11 +288,6 @@ void RunSettingsWidget::initRunConfigurationComboBox()
         m_ui->runConfigurationCombo->setCurrentIndex(runConfigurations.indexOf(currentSelection));
     else
         m_ui->runConfigurationCombo->setCurrentIndex(runConfigurations.indexOf(activeRunConfiguration));
-    QList<QSharedPointer<RunConfiguration> > enabledRunConfigurations;
-    for (int i = 0; i < runConfigurations.size(); ++i) {
-        if (runConfigurations.at(i)->isEnabled())
-            enabledRunConfigurations.append(runConfigurations.at(i));
-    }
     m_ui->removeToolButton->setEnabled(runConfigurations.size() > 1);
     updateMakeActiveLabel();
 }
diff --git a/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp b/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp
index 2cb8caf38f43d330783bda2e773b9f8d25fa868e..94dfb99aec6c85530336162c0a7df0bd8924e4ef 100644
--- a/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp
+++ b/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp
@@ -101,6 +101,14 @@ QString S60DeviceRunConfiguration::type() const
     return QLatin1String("Qt4ProjectManager.DeviceRunConfiguration");
 }
 
+ProjectExplorer::ToolChain::ToolChainType S60DeviceRunConfiguration::toolChainType(
+        ProjectExplorer::BuildConfiguration *configuration) const
+{
+    if (const Qt4Project *pro = qobject_cast<const Qt4Project*>(project()))
+        return pro->toolChainType(configuration);
+    return ProjectExplorer::ToolChain::INVALID;
+}
+
 ProjectExplorer::ToolChain::ToolChainType S60DeviceRunConfiguration::toolChainType() const
 {
     if (const Qt4Project *pro = qobject_cast<const Qt4Project*>(project()))
@@ -108,9 +116,9 @@ ProjectExplorer::ToolChain::ToolChainType S60DeviceRunConfiguration::toolChainTy
     return ProjectExplorer::ToolChain::INVALID;
 }
 
-bool S60DeviceRunConfiguration::isEnabled() const
+bool S60DeviceRunConfiguration::isEnabled(ProjectExplorer::BuildConfiguration *configuration) const
 {
-    const ToolChain::ToolChainType type = toolChainType();
+    const ToolChain::ToolChainType type = toolChainType(configuration);
     return type == ToolChain::GCCE || type == ToolChain::RVCT_ARMV5 || type == ToolChain::RVCT_ARMV6;
 }
 
diff --git a/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.h b/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.h
index fa7651a2fb749ff64e3a90a507fb7849b61a7340..04616bf109a8a499a5ab5be574266a5bbba4048e 100644
--- a/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.h
+++ b/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.h
@@ -62,7 +62,7 @@ public:
     ~S60DeviceRunConfiguration();
 
     QString type() const;
-    bool isEnabled() const;
+    bool isEnabled(ProjectExplorer::BuildConfiguration *configuration) const;
     QWidget *configurationWidget();
     void save(ProjectExplorer::PersistentSettingsWriter &writer) const;
     void restore(const ProjectExplorer::PersistentSettingsReader &reader);
@@ -97,6 +97,7 @@ private slots:
     void invalidateCachedTargetInformation();
 
 private:
+    ProjectExplorer::ToolChain::ToolChainType toolChainType(ProjectExplorer::BuildConfiguration *configuration) const;
     void updateTarget();
 
     QString m_proFilePath;
diff --git a/src/plugins/qt4projectmanager/qt-s60/s60emulatorrunconfiguration.cpp b/src/plugins/qt4projectmanager/qt-s60/s60emulatorrunconfiguration.cpp
index b1c65fa0e926273cce012300e9c7f20dce4580ea..6b734e631498ce32f59ee6935c6f470177d4a989 100644
--- a/src/plugins/qt4projectmanager/qt-s60/s60emulatorrunconfiguration.cpp
+++ b/src/plugins/qt4projectmanager/qt-s60/s60emulatorrunconfiguration.cpp
@@ -76,11 +76,11 @@ QString S60EmulatorRunConfiguration::type() const
     return "Qt4ProjectManager.EmulatorRunConfiguration";
 }
 
-bool S60EmulatorRunConfiguration::isEnabled() const
+bool S60EmulatorRunConfiguration::isEnabled(ProjectExplorer::BuildConfiguration *configuration) const
 {
     Qt4Project *pro = qobject_cast<Qt4Project*>(project());
     QTC_ASSERT(pro, return false);
-    ToolChain::ToolChainType type = pro->toolChainType(pro->activeBuildConfiguration());
+    ToolChain::ToolChainType type = pro->toolChainType(configuration);
     return type == ToolChain::WINSCW;
 }
 
diff --git a/src/plugins/qt4projectmanager/qt-s60/s60emulatorrunconfiguration.h b/src/plugins/qt4projectmanager/qt-s60/s60emulatorrunconfiguration.h
index 8ba0aeded4d6a9a5ee533cfa9f74a0ff514c17a2..ec84e7900d3b9440fe99db924b04bb95980e0e59 100644
--- a/src/plugins/qt4projectmanager/qt-s60/s60emulatorrunconfiguration.h
+++ b/src/plugins/qt4projectmanager/qt-s60/s60emulatorrunconfiguration.h
@@ -55,7 +55,7 @@ public:
     ~S60EmulatorRunConfiguration();
 
     QString type() const;
-    bool isEnabled() const;
+    bool isEnabled(ProjectExplorer::BuildConfiguration *configuration) const;
     QWidget *configurationWidget();
     void save(ProjectExplorer::PersistentSettingsWriter &writer) const;
     void restore(const ProjectExplorer::PersistentSettingsReader &reader);
diff --git a/src/plugins/qt4projectmanager/qt4project.cpp b/src/plugins/qt4projectmanager/qt4project.cpp
index a9fd57afe740189f153aac87ea652a6e13b237bc..2acc04c7b96318e74b7e63492c83f703a2312b14 100644
--- a/src/plugins/qt4projectmanager/qt4project.cpp
+++ b/src/plugins/qt4projectmanager/qt4project.cpp
@@ -994,15 +994,6 @@ void Qt4Project::setToolChainType(BuildConfiguration *configuration, ProjectExpl
 
 void Qt4Project::updateActiveRunConfiguration()
 {
-    const QSharedPointer<RunConfiguration> activeRunConfig = activeRunConfiguration();
-    if (!activeRunConfig.isNull() && !activeRunConfig->isEnabled()) {
-        foreach (const QSharedPointer<RunConfiguration> &runConfiguration, runConfigurations()) {
-            if (runConfiguration->isEnabled()) {
-                setActiveRunConfiguration(runConfiguration);
-                break;
-            }
-        }
-    }
     emit runConfigurationsEnabledStateChanged();
     emit targetInformationChanged();
 }
diff --git a/src/plugins/qt4projectmanager/qt4runconfiguration.cpp b/src/plugins/qt4projectmanager/qt4runconfiguration.cpp
index 4c7a31e13bcbd807795ce877216809bc75c07c7a..413122224b198d9571b64fbe3285c02afcf1612a 100644
--- a/src/plugins/qt4projectmanager/qt4runconfiguration.cpp
+++ b/src/plugins/qt4projectmanager/qt4runconfiguration.cpp
@@ -93,12 +93,12 @@ QString Qt4RunConfiguration::type() const
     return "Qt4ProjectManager.Qt4RunConfiguration";
 }
 
-bool Qt4RunConfiguration::isEnabled() const
+bool Qt4RunConfiguration::isEnabled(ProjectExplorer::BuildConfiguration *configuration) const
 {
 #ifdef QTCREATOR_WITH_S60
     Qt4Project *pro = qobject_cast<Qt4Project*>(project());
     QTC_ASSERT(pro, return false);
-    ProjectExplorer::ToolChain::ToolChainType type = pro->toolChainType(pro->activeBuildConfiguration());
+    ProjectExplorer::ToolChain::ToolChainType type = pro->toolChainType(configuration);
     return type != ProjectExplorer::ToolChain::WINSCW
             && type != ProjectExplorer::ToolChain::GCCE
             && type != ProjectExplorer::ToolChain::RVCT_ARMV5
diff --git a/src/plugins/qt4projectmanager/qt4runconfiguration.h b/src/plugins/qt4projectmanager/qt4runconfiguration.h
index 69fa0d6575fd35ff61041215e8995bcb698b1328..f4d953cad871cf7092275c5fe205a5b1c9838fc8 100644
--- a/src/plugins/qt4projectmanager/qt4runconfiguration.h
+++ b/src/plugins/qt4projectmanager/qt4runconfiguration.h
@@ -66,7 +66,7 @@ public:
     virtual ~Qt4RunConfiguration();
 
     virtual QString type() const;
-    virtual bool isEnabled() const;
+    virtual bool isEnabled(ProjectExplorer::BuildConfiguration *configuration) const;
     virtual QWidget *configurationWidget();
     virtual void save(ProjectExplorer::PersistentSettingsWriter &writer) const;
     virtual void restore(const ProjectExplorer::PersistentSettingsReader &reader);