diff --git a/src/plugins/genericprojectmanager/genericproject.cpp b/src/plugins/genericprojectmanager/genericproject.cpp
index 03762dbc9537c85ad20a02ec60a3a93a77d0350f..d012914dd906b502dc4c51f82b00b28a3cefe4b2 100644
--- a/src/plugins/genericprojectmanager/genericproject.cpp
+++ b/src/plugins/genericprojectmanager/genericproject.cpp
@@ -325,31 +325,30 @@ void GenericProject::setIncludePaths(const QStringList &includePaths)
 QByteArray GenericProject::defines() const
 { return m_defines; }
 
-void GenericProject::setToolChainId(int t)
+void GenericProject::setToolChainType(ProjectExplorer::ToolChain::ToolChainType type)
 {
-    ProjectExplorer::ToolChain::ToolChainType toolChainId = ProjectExplorer::ToolChain::ToolChainType(t);
     using namespace ProjectExplorer;
 
-    m_toolChainId = toolChainId;
+    m_toolChainType = type;
 
     delete m_toolChain;
     m_toolChain = 0;
 
-    if (toolChainId == ToolChain::MinGW) {
+    if (type == ToolChain::MinGW) {
         const QLatin1String qmake_cxx("g++"); // ### FIXME
         const QString mingwDirectory; // ### FIXME
 
         m_toolChain = ToolChain::createMinGWToolChain(qmake_cxx, mingwDirectory);
 
-    } else if (toolChainId == ToolChain::MSVC) {
+    } else if (type == ToolChain::MSVC) {
         const QString msvcVersion; // ### FIXME
         m_toolChain = ToolChain::createMSVCToolChain(msvcVersion, false);
 
-    } else if (toolChainId == ToolChain::WINCE) {
+    } else if (type == ToolChain::WINCE) {
         const QString msvcVersion, wincePlatform; // ### FIXME
         m_toolChain = ToolChain::createWinCEToolChain(msvcVersion, wincePlatform);
 
-    } else if (toolChainId == ToolChain::GCC || toolChainId == ToolChain::GCC) {
+    } else if (type == ToolChain::GCC || type == ToolChain::GCC) {
         const QLatin1String qmake_cxx("g++"); // ### FIXME
         m_toolChain = ToolChain::createGccToolChain(qmake_cxx);
     }
@@ -382,8 +381,8 @@ ProjectExplorer::ToolChain *GenericProject::toolChain() const
     return m_toolChain;
 }
 
-ProjectExplorer::ToolChain::ToolChainType GenericProject::toolChainId() const
-{ return m_toolChainId; }
+ProjectExplorer::ToolChain::ToolChainType GenericProject::toolChainType() const
+{ return m_toolChainType; }
 
 QString GenericProject::name() const
 {
@@ -494,21 +493,20 @@ bool GenericProject::restoreSettingsImpl(ProjectExplorer::PersistentSettingsRead
     using namespace ProjectExplorer;
     QString toolChainName = reader.restoreValue(QLatin1String("toolChain")).toString();
     bool convertible = false;
-    ToolChain::ToolChainType toolChainId = ToolChain::GCC;
-    toolChainId = ToolChain::ToolChainType(toolChainName.toInt(&convertible));
+    ToolChain::ToolChainType type = ToolChain::ToolChainType(toolChainName.toInt(&convertible));
     if (!convertible) {
         // legacy string values
         if (toolChainName == QLatin1String("gcc"))
-            toolChainId = ToolChain::GCC;
+            type = ToolChain::GCC;
         else if (toolChainName == QLatin1String("mingw"))
-            toolChainId = ToolChain::MinGW;
+            type = ToolChain::MinGW;
         else if (toolChainName == QLatin1String("msvc"))
-            toolChainId = ToolChain::MSVC;
+            type = ToolChain::MSVC;
         else if (toolChainName == QLatin1String("wince"))
-            toolChainId = ToolChain::WINCE;
+            type = ToolChain::WINCE;
     }
 
-    setToolChainId(toolChainId); // ### move
+    setToolChainType(type); // ### move
 
     const QStringList userIncludePaths =
             reader.restoreValue(QLatin1String("includePaths")).toStringList();
@@ -523,7 +521,7 @@ void GenericProject::saveSettingsImpl(ProjectExplorer::PersistentSettingsWriter
 {
     Project::saveSettingsImpl(writer);
 
-    writer.saveValue(QLatin1String("toolChain"), m_toolChainId);
+    writer.saveValue(QLatin1String("toolChain"), m_toolChainType);
     writer.saveValue(QLatin1String("includePaths"), m_includePaths);
 }
 
@@ -548,13 +546,18 @@ GenericBuildSettingsWidget::GenericBuildSettingsWidget(GenericProject *project)
     QComboBox *toolChainChooser = new QComboBox;
     toolChainChooser->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
     using namespace ProjectExplorer;
+    int index = 0;
+    int selectedIndex = -1;
     foreach (ToolChain::ToolChainType tc, ToolChain::supportedToolChains()) {
-        toolChainChooser->addItem(ToolChain::toolChainName(tc), tc);
+        toolChainChooser->addItem(ToolChain::toolChainName(tc), QVariant::fromValue<ToolChain::ToolChainType>(tc));
+        if (m_project->toolChainType() == tc)
+            selectedIndex = index;
+        ++index;
     }
 
-    toolChainChooser->setCurrentIndex(toolChainChooser->findData(m_project->toolChainId()));
+    toolChainChooser->setCurrentIndex(selectedIndex);
     fl->addRow(tr("Tool Chain:"), toolChainChooser);
-    connect(toolChainChooser, SIGNAL(activated(QString)), m_project, SLOT(setToolChainId(int)));
+    connect(toolChainChooser, SIGNAL(activated(int)), this, SLOT(toolChainSelected(int)));
 }
 
 GenericBuildSettingsWidget::~GenericBuildSettingsWidget()
@@ -574,6 +577,15 @@ void GenericBuildSettingsWidget::buildDirectoryChanged()
     m_project->setValue(m_buildConfiguration, "buildDirectory", m_pathChooser->path());
 }
 
+void GenericBuildSettingsWidget::toolChainSelected(int index)
+{
+    using namespace ProjectExplorer;
+
+    QComboBox *toolChainChooser = qobject_cast<QComboBox*>(sender());
+    ToolChain::ToolChainType type = toolChainChooser->itemData(index).value<ToolChain::ToolChainType>();
+    m_project->setToolChainType(type);
+}
+
 ////////////////////////////////////////////////////////////////////////////////////
 // GenericProjectFile
 ////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/plugins/genericprojectmanager/genericproject.h b/src/plugins/genericprojectmanager/genericproject.h
index c775d804c661b2a408ebb04812787fe56152ef87..686ea7b9dd024731662d59657de178669d628026 100644
--- a/src/plugins/genericprojectmanager/genericproject.h
+++ b/src/plugins/genericprojectmanager/genericproject.h
@@ -111,10 +111,8 @@ public:
     QStringList projectIncludePaths() const;
     QStringList files() const;
     QStringList generated() const;    
-    ProjectExplorer::ToolChain::ToolChainType toolChainId() const;
-
-public Q_SLOTS:
-    void setToolChainId(int);
+    ProjectExplorer::ToolChain::ToolChainType toolChainType() const;
+    void setToolChainType(ProjectExplorer::ToolChain::ToolChainType type);
 
 protected:
     virtual void saveSettingsImpl(ProjectExplorer::PersistentSettingsWriter &writer);
@@ -140,7 +138,7 @@ private:
 
     GenericProjectNode *m_rootNode;
     ProjectExplorer::ToolChain *m_toolChain;
-    ProjectExplorer::ToolChain::ToolChainType m_toolChainId;
+    ProjectExplorer::ToolChain::ToolChainType m_toolChainType;
 };
 
 class GenericProjectFile : public Core::IFile
@@ -183,6 +181,7 @@ public:
 
 private Q_SLOTS:
     void buildDirectoryChanged();
+    void toolChainSelected(int index);
 
 private:
     GenericProject *m_project;
diff --git a/src/plugins/projectexplorer/toolchain.cpp b/src/plugins/projectexplorer/toolchain.cpp
index c3beba59f88ad194725dc1fcf66eb368758c464f..1050514816bc01f88bac69b12cb1d3e49048e103 100644
--- a/src/plugins/projectexplorer/toolchain.cpp
+++ b/src/plugins/projectexplorer/toolchain.cpp
@@ -135,7 +135,7 @@ QString ToolChain::toolChainName(ToolChainType tc)
         return QCoreApplication::translate("ToolChain", "<Invalid>");
     case UNKNOWN:
         break;
-     default:
+    default:
         Q_ASSERT("Missing name for Toolchaintype");
     };
     return QCoreApplication::translate("ToolChain", "<Unknown>");