diff --git a/src/plugins/projectexplorer/toolchain.h b/src/plugins/projectexplorer/toolchain.h
index b2f31dbbbcbfc7ed3a0d8a23b5272f3be5cef20a..b347a69d0c86cde666b40bacf2c0a2155badd4ff 100644
--- a/src/plugins/projectexplorer/toolchain.h
+++ b/src/plugins/projectexplorer/toolchain.h
@@ -181,4 +181,6 @@ private:
 }
 }
 
+Q_DECLARE_METATYPE(ProjectExplorer::ToolChain::ToolChainType);
+
 #endif // TOOLCHAIN_H
diff --git a/src/plugins/qt4projectmanager/qt4project.cpp b/src/plugins/qt4projectmanager/qt4project.cpp
index e583d3ab6374e8ab1d60deb69c75626178b08761..48d4fec938a4f6982f9e960140f705d3d4419e7c 100644
--- a/src/plugins/qt4projectmanager/qt4project.cpp
+++ b/src/plugins/qt4projectmanager/qt4project.cpp
@@ -288,10 +288,12 @@ void Qt4Project::restoreSettingsImpl(PersistentSettingsReader &settingsReader)
 
     addDefaultBuild();
 
-    // Ensure that the qt version in each build configuration is valid
+    // Ensure that the qt version and tool chain in each build configuration is valid
     // or if not, is reset to the default
-    foreach (const QString &bc, buildConfigurations())
+    foreach (const QString &bc, buildConfigurations()) {
         qtVersionId(bc);
+        toolChainType(bc);
+    }
 
     m_rootProjectNode = new Qt4ProFileNode(this, m_fileInfo->fileName(), this);
     m_rootProjectNode->registerWatcher(m_nodesWatcher);
@@ -377,7 +379,7 @@ void Qt4Project::scheduleUpdateCodeModel(Qt4ProjectManager::Internal::Qt4ProFile
 
 ProjectExplorer::ToolChain *Qt4Project::toolChain(const QString &buildConfiguration) const
 {
-    return qtVersion(buildConfiguration)->toolChain(qtVersion(buildConfiguration)->defaultToolchainType());
+    return qtVersion(buildConfiguration)->toolChain(toolChainType(buildConfiguration));
 }
 
 QString Qt4Project::makeCommand(const QString &buildConfiguration) const
@@ -817,6 +819,22 @@ void Qt4Project::setQtVersion(const QString &buildConfiguration, int id)
     setValue(buildConfiguration, "QtVersionId", id);
 }
 
+void Qt4Project::setToolChainType(const QString &buildConfiguration, ProjectExplorer::ToolChain::ToolChainType type)
+{
+    setValue(buildConfiguration, "ToolChain", (int)type);
+}
+
+ProjectExplorer::ToolChain::ToolChainType Qt4Project::toolChainType(const QString &buildConfiguration) const
+{
+    ProjectExplorer::ToolChain::ToolChainType type =
+        (ProjectExplorer::ToolChain::ToolChainType)value(buildConfiguration, "ToolChain").toInt();
+    const QtVersion *version = qtVersion(buildConfiguration);
+    if (!version->possibleToolChainTypes().contains(type)) // use default tool chain
+        type = version->defaultToolchainType();
+    const_cast<Qt4Project *>(this)->setToolChainType(buildConfiguration, type);
+    return type;
+}
+
 BuildStepConfigWidget *Qt4Project::createConfigWidget()
 {
     return new Qt4ProjectConfigWidget(this);
diff --git a/src/plugins/qt4projectmanager/qt4project.h b/src/plugins/qt4projectmanager/qt4project.h
index 2b5765412d83854447e819d667ae7979ea6e26fb..1c06a0794dcf5ac75d1374cd88e3dc726d4dfe50 100644
--- a/src/plugins/qt4projectmanager/qt4project.h
+++ b/src/plugins/qt4projectmanager/qt4project.h
@@ -163,6 +163,8 @@ public:
     // qtVersion is in general the better method to use
     QString qtVersionName(const QString &buildConfiguration) const;
     ProjectExplorer::ToolChain *toolChain(const QString &buildConfiguration) const;
+    void setToolChainType(const QString &buildConfiguration, ProjectExplorer::ToolChain::ToolChainType type);
+    ProjectExplorer::ToolChain::ToolChainType toolChainType(const QString &buildConfiguration) const;
 
     ProjectExplorer::BuildStepConfigWidget *createConfigWidget();
     QList<ProjectExplorer::BuildStepConfigWidget*> subConfigWidgets();
diff --git a/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp b/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp
index 24f57dcb4acda352c390a5782430b2a82bbc0094..2fa595dd3db17c7324205c8205f5cc6af89b6495 100644
--- a/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp
+++ b/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp
@@ -75,6 +75,9 @@ Qt4ProjectConfigWidget::Qt4ProjectConfigWidget(Qt4Project *project)
     connect(m_ui->qtVersionComboBox, SIGNAL(currentIndexChanged(QString)),
             this, SLOT(qtVersionComboBoxCurrentIndexChanged(QString)));
 
+    connect(m_ui->toolChainComboBox, SIGNAL(activated(int)),
+            this, SLOT(selectToolChain(int)));
+
     connect(m_ui->importLabel, SIGNAL(linkActivated(QString)),
             this, SLOT(importLabelClicked()));
 
@@ -120,6 +123,7 @@ void Qt4ProjectConfigWidget::init(const QString &buildConfiguration)
     m_ui->shadowBuildDirEdit->setEnabled(shadowBuild);
     m_ui->shadowBuildDirEdit->setPath(m_pro->buildDirectory(buildConfiguration));
     updateImportLabel();
+    updateToolChainCombo();
 }
 
 void Qt4ProjectConfigWidget::changeConfigName(const QString &newName)
@@ -282,29 +286,38 @@ void Qt4ProjectConfigWidget::updateToolChainCombo()
     foreach (ProjectExplorer::ToolChain::ToolChainType toolchain, toolchains) {
         switch (toolchain) {
         case ProjectExplorer::ToolChain::GCC:
-            m_ui->toolChainComboBox->addItem(tr("gcc"), ProjectExplorer::ToolChain::GCC);
+            m_ui->toolChainComboBox->addItem(tr("gcc"), qVariantFromValue(ProjectExplorer::ToolChain::GCC));
             break;
         case ProjectExplorer::ToolChain::LinuxICC:
-            m_ui->toolChainComboBox->addItem(tr("icc"), ProjectExplorer::ToolChain::LinuxICC);
+            m_ui->toolChainComboBox->addItem(tr("icc"), qVariantFromValue(ProjectExplorer::ToolChain::LinuxICC));
             break;
         case ProjectExplorer::ToolChain::MinGW:
-            m_ui->toolChainComboBox->addItem(tr("mingw"), ProjectExplorer::ToolChain::MinGW);
+            m_ui->toolChainComboBox->addItem(tr("mingw"), qVariantFromValue(ProjectExplorer::ToolChain::MinGW));
             break;
         case ProjectExplorer::ToolChain::MSVC:
-            m_ui->toolChainComboBox->addItem(tr("msvc"), ProjectExplorer::ToolChain::MSVC);
+            m_ui->toolChainComboBox->addItem(tr("msvc"), qVariantFromValue(ProjectExplorer::ToolChain::MSVC));
             break;
         case ProjectExplorer::ToolChain::WINCE:
-            m_ui->toolChainComboBox->addItem(tr("wince"), ProjectExplorer::ToolChain::WINCE);
+            m_ui->toolChainComboBox->addItem(tr("wince"), qVariantFromValue(ProjectExplorer::ToolChain::WINCE));
             break;
 #ifdef QTCREATOR_WITH_S60
         case ProjectExplorer::ToolChain::WINSCW:
-            m_ui->toolChainComboBox->addItem(tr("winscw"), ProjectExplorer::ToolChain::WINSCW);
+            m_ui->toolChainComboBox->addItem(tr("winscw"), qVariantFromValue(ProjectExplorer::ToolChain::WINSCW));
             break;
         case ProjectExplorer::ToolChain::GCCE:
-            m_ui->toolChainComboBox->addItem(tr("gcce"), ProjectExplorer::ToolChain::GCCE);
+            m_ui->toolChainComboBox->addItem(tr("gcce"), qVariantFromValue(ProjectExplorer::ToolChain::GCCE));
             break;
 #endif
         }
     }
     m_ui->toolChainComboBox->setEnabled(toolchains.size() > 1);
+    selectToolChain(toolchains.indexOf(m_pro->toolChainType(m_buildConfiguration)));
+}
+
+void Qt4ProjectConfigWidget::selectToolChain(int index)
+{
+    m_pro->setToolChainType(m_buildConfiguration, m_ui->toolChainComboBox->itemData(index,
+        Qt::UserRole).value<ProjectExplorer::ToolChain::ToolChainType>());
+    if (m_ui->toolChainComboBox->currentIndex() != index)
+        m_ui->toolChainComboBox->setCurrentIndex(index);
 }
diff --git a/src/plugins/qt4projectmanager/qt4projectconfigwidget.h b/src/plugins/qt4projectmanager/qt4projectconfigwidget.h
index 2201d3f08ec8189422f00f17dc6021f00219b596..c9864049418bc6ebdcd5b79661c92396800c93fa 100644
--- a/src/plugins/qt4projectmanager/qt4projectconfigwidget.h
+++ b/src/plugins/qt4projectmanager/qt4projectconfigwidget.h
@@ -61,6 +61,7 @@ private slots:
     void importLabelClicked();
     void qtVersionComboBoxCurrentIndexChanged(const QString &);
     void manageQtVersions();
+    void selectToolChain(int index);
 
 private:
     void updateToolChainCombo();