diff --git a/src/plugins/qt4projectmanager/qtversionmanager.cpp b/src/plugins/qt4projectmanager/qtversionmanager.cpp
index 571f3be84c48e736e82437a1d8e09622cd688b4e..54499dac4336ad9155a112afe1fb9e25c893ec69 100644
--- a/src/plugins/qt4projectmanager/qtversionmanager.cpp
+++ b/src/plugins/qt4projectmanager/qtversionmanager.cpp
@@ -1079,29 +1079,14 @@ QString QtVersion::linguistCommand() const
 
 bool QtVersion::supportsTargetId(const QString &id) const
 {
-    return supportedTargetIds().contains(id);
+    updateToolChainAndMkspec();
+    return m_targetIds.contains(id);
 }
 
 QSet<QString> QtVersion::supportedTargetIds() const
 {
-    QSet<QString> result;
-    QList<ProjectExplorer::ToolChain::ToolChainType>  tcs(possibleToolChainTypes());
-
-    if (tcs.contains(ProjectExplorer::ToolChain::WINSCW))
-        result.insert(QLatin1String(S60_EMULATOR_TARGET_ID));
-    if (tcs.contains(ProjectExplorer::ToolChain::RVCT_ARMV5) ||
-        tcs.contains(ProjectExplorer::ToolChain::RVCT_ARMV6) ||
-        tcs.contains(ProjectExplorer::ToolChain::GCCE) ||
-        tcs.contains(ProjectExplorer::ToolChain::GCCE_GNUPOC))
-        result.insert(QLatin1String(S60_DEVICE_TARGET_ID));
-    if (tcs.contains(ToolChain::GCC_MAEMO)) {
-        result.insert(QLatin1String(MAEMO_EMULATOR_TARGET_ID));
-        result.insert(QLatin1String(MAEMO_DEVICE_TARGET_ID));
-    }
-    // If the version is not for a specific device, then assume desktop
-    if (result.isEmpty() && !tcs.isEmpty())
-        result.insert(QLatin1String(DESKTOP_TARGET_ID));
-    return result;
+    updateToolChainAndMkspec();
+    return m_targetIds;
 }
 
 QList<QSharedPointer<ProjectExplorer::ToolChain> > QtVersion::toolChains() const
@@ -1134,6 +1119,7 @@ void QtVersion::updateToolChainAndMkspec() const
         return;
 
     m_toolChains.clear();
+    m_targetIds.clear();
 
     if (!isValid())
         return;
@@ -1241,28 +1227,36 @@ void QtVersion::updateToolChainAndMkspec() const
     if (!ce_sdk.isEmpty() && !ce_arch.isEmpty()) {
         QString wincePlatformName = ce_sdk + " (" + ce_arch + QLatin1Char(')');
         m_toolChains << ToolChainPtr(ProjectExplorer::ToolChain::createWinCEToolChain(msvcVersion(), wincePlatformName));
+        m_targetIds.insert(DESKTOP_TARGET_ID);
     } else if (makefileGenerator == QLatin1String("SYMBIAN_ABLD") ||
                makefileGenerator == QLatin1String("SYMBIAN_SBSV2")) {
         if (S60Manager *s60mgr = S60Manager::instance()) {
 #    ifdef Q_OS_WIN
+            m_targetIds.insert(QLatin1String(S60_DEVICE_TARGET_ID));
             m_toolChains << ToolChainPtr(s60mgr->createGCCEToolChain(this));
             if (!qgetenv("RVCT22BIN").isEmpty())
                 m_toolChains << ToolChainPtr(s60mgr->createRVCTToolChain(this, ProjectExplorer::ToolChain::RVCT_ARMV5))
                              << ToolChainPtr(s60mgr->createRVCTToolChain(this, ProjectExplorer::ToolChain::RVCT_ARMV6));
-            if (!mwcDirectory().isEmpty())
+            if (!mwcDirectory().isEmpty()) {
                 m_toolChains << ToolChainPtr(s60mgr->createWINSCWToolChain(this));
+                m_targetIds.insert(QLatin1String(S60_EMULATOR_TARGET_ID));
+            }
 #    else
             m_toolChains << ToolChainPtr(s60mgr->createGCCE_GnuPocToolChain(this))
                          << ToolChainPtr(s60mgr->createRVCTToolChain(this, ProjectExplorer::ToolChain::RVCT_ARMV6_GNUPOC));
+            m_targetIds.insert(QLatin1String(S60_DEVICE_TARGET_ID));
 #    endif
         }
     } else if (qt_arch == "arm"
                && MaemoManager::instance()->isValidMaemoQtVersion(this)) {
         m_toolChains << ToolChainPtr(MaemoManager::instance()->maemoToolChain(this));
+        m_targetIds.insert(QLatin1String(MAEMO_EMULATOR_TARGET_ID));
+        m_targetIds.insert(QLatin1String(MAEMO_DEVICE_TARGET_ID));
     } else if (qmakeCXX == "cl" || qmakeCXX == "icl") {
         // TODO proper support for intel cl
         m_toolChains << ToolChainPtr(
                 ProjectExplorer::ToolChain::createMSVCToolChain(msvcVersion(), isQt64Bit()));
+        m_targetIds.insert(QLatin1String(DESKTOP_TARGET_ID));
     } else if (qmakeCXX == "g++" && makefileGenerator == "MINGW") {
         ProjectExplorer::Environment env = ProjectExplorer::Environment::systemEnvironment();
         //addToEnvironment(env);
@@ -1270,6 +1264,7 @@ void QtVersion::updateToolChainAndMkspec() const
         qmakeCXX = env.searchInPath(qmakeCXX);
         m_toolChains << ToolChainPtr(
                 ProjectExplorer::ToolChain::createMinGWToolChain(qmakeCXX, mingwDirectory()));
+        m_targetIds.insert(QLatin1String(DESKTOP_TARGET_ID));
     } else if (qmakeCXX == "g++" || qmakeCXX == "icc") {
         ProjectExplorer::Environment env = ProjectExplorer::Environment::systemEnvironment();
         //addToEnvironment(env);
@@ -1280,6 +1275,7 @@ void QtVersion::updateToolChainAndMkspec() const
             qmakeCXX = QLatin1String("cc");
         }
         m_toolChains << ToolChainPtr(ProjectExplorer::ToolChain::createGccToolChain(qmakeCXX));
+        m_targetIds.insert(QLatin1String(DESKTOP_TARGET_ID));
     }
 
     if (m_toolChains.isEmpty()) {
diff --git a/src/plugins/qt4projectmanager/qtversionmanager.h b/src/plugins/qt4projectmanager/qtversionmanager.h
index 5bbaa8e8e4199bf474a0b581066e9b9ec42f8930..5cf59f46996c948c232d855a738bda6a7ef49f52 100644
--- a/src/plugins/qt4projectmanager/qtversionmanager.h
+++ b/src/plugins/qt4projectmanager/qtversionmanager.h
@@ -35,6 +35,7 @@
 #include <QSharedPointer>
 
 #include <QtCore/QHash>
+#include <QtCore/QSet>
 #include <QtCore/QSharedPointer>
 
 namespace ProjectExplorer {
@@ -180,6 +181,7 @@ private:
     mutable QString m_uicCommand;
     mutable QString m_designerCommand;
     mutable QString m_linguistCommand;
+    mutable QSet<QString> m_targetIds;
 };
 
 struct QMakeAssignment