diff --git a/src/plugins/qt4projectmanager/qt-desktop/desktopqtversionfactory.cpp b/src/plugins/qt4projectmanager/qt-desktop/desktopqtversionfactory.cpp
index 4126348142640911c0656202339d4fefd6512448..a8dc739164106551f302e2641a4cefb2491e85b4 100644
--- a/src/plugins/qt4projectmanager/qt-desktop/desktopqtversionfactory.cpp
+++ b/src/plugins/qt4projectmanager/qt-desktop/desktopqtversionfactory.cpp
@@ -58,8 +58,10 @@ bool DesktopQtVersionFactory::canRestore(const QString &type)
     return type == QLatin1String(QtSupport::Constants::DESKTOPQT);
 }
 
-QtSupport::BaseQtVersion *DesktopQtVersionFactory::restore(const QVariantMap &data)
+QtSupport::BaseQtVersion *DesktopQtVersionFactory::restore(const QString &type, const QVariantMap &data)
 {
+    if (!canRestore(type))
+        return 0;
     DesktopQtVersion *v = new DesktopQtVersion;
     v->fromMap(data);
     return v;
diff --git a/src/plugins/qt4projectmanager/qt-desktop/desktopqtversionfactory.h b/src/plugins/qt4projectmanager/qt-desktop/desktopqtversionfactory.h
index 8bf1e6c873cf7b43c670c693e6404739dcacbc5e..f93b4a675a4b4b3e78587c932a2f137b09f314af 100644
--- a/src/plugins/qt4projectmanager/qt-desktop/desktopqtversionfactory.h
+++ b/src/plugins/qt4projectmanager/qt-desktop/desktopqtversionfactory.h
@@ -45,7 +45,7 @@ public:
     ~DesktopQtVersionFactory();
 
     virtual bool canRestore(const QString &type);
-    virtual QtSupport::BaseQtVersion *restore(const QVariantMap &data);
+    virtual QtSupport::BaseQtVersion *restore(const QString &type, const QVariantMap &data);
 
     virtual int priority() const;
     virtual QtSupport::BaseQtVersion *create(const QString &qmakePath, ProFileEvaluator *evaluator, bool isAutoDetected = false, const QString &autoDetectionSource = QString());
diff --git a/src/plugins/qt4projectmanager/qt-desktop/simulatorqtversionfactory.cpp b/src/plugins/qt4projectmanager/qt-desktop/simulatorqtversionfactory.cpp
index 65f31a28c4891017c76c6be2f107e29a2117e2a0..0b7de3d235f2e63c7e2be68596ce48ac9754325b 100644
--- a/src/plugins/qt4projectmanager/qt-desktop/simulatorqtversionfactory.cpp
+++ b/src/plugins/qt4projectmanager/qt-desktop/simulatorqtversionfactory.cpp
@@ -58,8 +58,10 @@ bool SimulatorQtVersionFactory::canRestore(const QString &type)
     return type == QLatin1String(QtSupport::Constants::SIMULATORQT);
 }
 
-QtSupport::BaseQtVersion *SimulatorQtVersionFactory::restore(const QVariantMap &data)
+QtSupport::BaseQtVersion *SimulatorQtVersionFactory::restore(const QString &type, const QVariantMap &data)
 {
+    if (!canRestore(type))
+        return 0;
     QtSupport::BaseQtVersion *v = new SimulatorQtVersion;
     v->fromMap(data);
     return v;
diff --git a/src/plugins/qt4projectmanager/qt-desktop/simulatorqtversionfactory.h b/src/plugins/qt4projectmanager/qt-desktop/simulatorqtversionfactory.h
index e1f9685d23a1cb5570f116fc5298a0b2772f3642..cb1b1b066570d6a009cf81ea1ffcb9a1ae800eff 100644
--- a/src/plugins/qt4projectmanager/qt-desktop/simulatorqtversionfactory.h
+++ b/src/plugins/qt4projectmanager/qt-desktop/simulatorqtversionfactory.h
@@ -45,7 +45,7 @@ public:
     ~SimulatorQtVersionFactory();
 
     virtual bool canRestore(const QString &type);
-    virtual QtSupport::BaseQtVersion *restore(const QVariantMap &data);
+    virtual QtSupport::BaseQtVersion *restore(const QString &type, const QVariantMap &data);
 
     virtual int priority() const;
     virtual QtSupport::BaseQtVersion *create(const QString &qmakePath, ProFileEvaluator *evaluator, bool isAutoDetected = false, const QString &autoDetectionSource = QString());
diff --git a/src/plugins/qt4projectmanager/qt-s60/symbianqtversionfactory.cpp b/src/plugins/qt4projectmanager/qt-s60/symbianqtversionfactory.cpp
index 81913a07a2fab551a3ec70f34a2f331d506170fb..4bec26747f295113af6679f7630667a1b4c63dfc 100644
--- a/src/plugins/qt4projectmanager/qt-s60/symbianqtversionfactory.cpp
+++ b/src/plugins/qt4projectmanager/qt-s60/symbianqtversionfactory.cpp
@@ -59,8 +59,10 @@ bool SymbianQtVersionFactory::canRestore(const QString &type)
     return type == QLatin1String(QtSupport::Constants::SYMBIANQT);
 }
 
-QtSupport::BaseQtVersion *SymbianQtVersionFactory::restore(const QVariantMap &data)
+QtSupport::BaseQtVersion *SymbianQtVersionFactory::restore(const QString &type, const QVariantMap &data)
 {
+    if (!canRestore(type))
+        return 0;
     SymbianQtVersion *v = new SymbianQtVersion;
     v->fromMap(data);
     return v;
diff --git a/src/plugins/qt4projectmanager/qt-s60/symbianqtversionfactory.h b/src/plugins/qt4projectmanager/qt-s60/symbianqtversionfactory.h
index 21fe875470460ed2006ad78bccd56ea4ab7ef174..2735d6e4bbe6c80d4ca2031a4912cdd07c26b51c 100644
--- a/src/plugins/qt4projectmanager/qt-s60/symbianqtversionfactory.h
+++ b/src/plugins/qt4projectmanager/qt-s60/symbianqtversionfactory.h
@@ -45,7 +45,7 @@ public:
     ~SymbianQtVersionFactory();
 
     virtual bool canRestore(const QString &type);
-    virtual QtSupport::BaseQtVersion *restore(const QVariantMap &data);
+    virtual QtSupport::BaseQtVersion *restore(const QString &type, const QVariantMap &data);
 
     virtual int priority() const;
     virtual QtSupport::BaseQtVersion *create(const QString &qmakePath, ProFileEvaluator *evaluator, bool isAutoDetected = false, const QString &autoDetectionSource = QString());
diff --git a/src/plugins/qt4projectmanager/winceqtversionfactory.cpp b/src/plugins/qt4projectmanager/winceqtversionfactory.cpp
index 59b2acfdd27730084f64f17c3e52e4a1e0d0a3d6..aaaf960a0be4c6beab1f2cdff1b3d3b1938a4fe7 100644
--- a/src/plugins/qt4projectmanager/winceqtversionfactory.cpp
+++ b/src/plugins/qt4projectmanager/winceqtversionfactory.cpp
@@ -55,8 +55,10 @@ bool WinCeQtVersionFactory::canRestore(const QString &type)
     return type == QLatin1String(QtSupport::Constants::WINCEQT);
 }
 
-QtSupport::BaseQtVersion *WinCeQtVersionFactory::restore(const QVariantMap &data)
+QtSupport::BaseQtVersion *WinCeQtVersionFactory::restore(const QString &type, const QVariantMap &data)
 {
+    if (!canRestore(type))
+        return 0;
     WinCeQtVersion *v = new WinCeQtVersion;
     v->fromMap(data);
     return v;
diff --git a/src/plugins/qt4projectmanager/winceqtversionfactory.h b/src/plugins/qt4projectmanager/winceqtversionfactory.h
index 56761b65b6163eeddf2e9f864bd308f405f646d0..10f9037829eac604e4411d60cd18ccf0590e7925 100644
--- a/src/plugins/qt4projectmanager/winceqtversionfactory.h
+++ b/src/plugins/qt4projectmanager/winceqtversionfactory.h
@@ -44,7 +44,7 @@ public:
     ~WinCeQtVersionFactory();
 
     virtual bool canRestore(const QString &type);
-    virtual QtSupport::BaseQtVersion *restore(const QVariantMap &data);
+    virtual QtSupport::BaseQtVersion *restore(const QString &type, const QVariantMap &data);
 
     virtual int priority() const;
 
diff --git a/src/plugins/qtsupport/qtversionfactory.h b/src/plugins/qtsupport/qtversionfactory.h
index c4a157f5da28587b2d44bd072c7beb03742bfbf1..41d150e3424498acedb2e43c89b4656ed48ae9bf 100644
--- a/src/plugins/qtsupport/qtversionfactory.h
+++ b/src/plugins/qtsupport/qtversionfactory.h
@@ -49,7 +49,7 @@ public:
     ~QtVersionFactory();
 
     virtual bool canRestore(const QString &type) = 0;
-    virtual BaseQtVersion *restore(const QVariantMap &data) = 0;
+    virtual BaseQtVersion *restore(const QString &type, const QVariantMap &data) = 0;
 
     /// factories with higher priority are asked first to identify
     /// a qtversion, the priority of the desktop factory is 0 and
diff --git a/src/plugins/qtsupport/qtversionmanager.cpp b/src/plugins/qtsupport/qtversionmanager.cpp
index 4d389ccc0954b52376ad56458f1ca0b3cd1f7735..8195f8dedaba3b523066636dc04d8c820b414ecc 100644
--- a/src/plugins/qtsupport/qtversionmanager.cpp
+++ b/src/plugins/qtsupport/qtversionmanager.cpp
@@ -176,7 +176,7 @@ bool QtVersionManager::restoreQtVersions()
         bool restored = false;
         foreach (QtVersionFactory *f, factories) {
             if (f->canRestore(type)) {
-                if (BaseQtVersion *qtv = f->restore(qtversionMap)) {
+                if (BaseQtVersion *qtv = f->restore(type, qtversionMap)) {
                     if (m_versions.contains(qtv->uniqueId())) {
                         // This shouldn't happen, we are restoring the same id multiple times?
                         qWarning() << "A Qt version with id"<<qtv->uniqueId()<<"already exists";
@@ -292,7 +292,7 @@ void QtVersionManager::updateFromInstaller()
                 removeVersion(v);
                 qtversionMap[QLatin1String("Id")] = id;
 
-                if (BaseQtVersion *qtv = factory->restore(qtversionMap)) {
+                if (BaseQtVersion *qtv = factory->restore(type, qtversionMap)) {
                     Q_ASSERT(qtv->isAutodetected());
                     addVersion(qtv);
                     restored = true;
@@ -303,7 +303,7 @@ void QtVersionManager::updateFromInstaller()
         if (!restored) { // didn't replace any existing versions
             if (debug)
                 qDebug() << " No Qt version found matching" << autoDetectionSource << " => Creating new version";
-            if (BaseQtVersion *qtv = factory->restore(qtversionMap)) {
+            if (BaseQtVersion *qtv = factory->restore(type, qtversionMap)) {
                 Q_ASSERT(qtv->isAutodetected());
                 addVersion(qtv);
                 restored = true;
diff --git a/src/plugins/remotelinux/maemoqtversionfactory.cpp b/src/plugins/remotelinux/maemoqtversionfactory.cpp
index f4ea0828a6222e39f4c666d1d405522d14873e78..86bcc41d655cb2025e2df1280361f2297876cbb3 100644
--- a/src/plugins/remotelinux/maemoqtversionfactory.cpp
+++ b/src/plugins/remotelinux/maemoqtversionfactory.cpp
@@ -35,6 +35,7 @@
 #include "maemoqtversion.h"
 
 #include <qtsupport/qtsupportconstants.h>
+#include <utils/qtcassert.h>
 
 #include <QtCore/QFileInfo>
 
@@ -57,8 +58,10 @@ bool MaemoQtVersionFactory::canRestore(const QString &type)
     return type == QLatin1String(QtSupport::Constants::MAEMOQT);
 }
 
-QtSupport::BaseQtVersion *MaemoQtVersionFactory::restore(const QVariantMap &data)
+QtSupport::BaseQtVersion *MaemoQtVersionFactory::restore(const QString &type,
+    const QVariantMap &data)
 {
+    QTC_ASSERT(canRestore(type), return 0);
     MaemoQtVersion *v = new MaemoQtVersion;
     v->fromMap(data);
     return v;
diff --git a/src/plugins/remotelinux/maemoqtversionfactory.h b/src/plugins/remotelinux/maemoqtversionfactory.h
index 78f72971fcaf4c932b33aec705b27d4169f34583..41234cd614234cd70ebbadd56e0ebed54ed0f580 100644
--- a/src/plugins/remotelinux/maemoqtversionfactory.h
+++ b/src/plugins/remotelinux/maemoqtversionfactory.h
@@ -45,7 +45,7 @@ public:
     ~MaemoQtVersionFactory();
 
     virtual bool canRestore(const QString &type);
-    virtual QtSupport::BaseQtVersion *restore(const QVariantMap &data);
+    virtual QtSupport::BaseQtVersion *restore(const QString &type, const QVariantMap &data);
 
     virtual int priority() const;
     virtual QtSupport::BaseQtVersion *create(const QString &qmakePath, ProFileEvaluator *evaluator, bool isAutoDetected = false, const QString &autoDetectionSource = QString());