diff --git a/src/plugins/madde/maemoqemumanager.cpp b/src/plugins/madde/maemoqemumanager.cpp
index 78b18409f1e77c742cccabd317548383a60309e4..10b3f2ac33095480e6a82f0b5112fb84dcadf65d 100644
--- a/src/plugins/madde/maemoqemumanager.cpp
+++ b/src/plugins/madde/maemoqemumanager.cpp
@@ -108,8 +108,8 @@ MaemoQemuManager::MaemoQemuManager(QObject *parent)
     m_qemuAction->setVisible(false);
 
     // listen to qt version changes to update the start button
-    connect(QtSupport::QtVersionManager::instance(), SIGNAL(qtVersionsChanged(QList<int>)),
-        this, SLOT(qtVersionsChanged(QList<int>)));
+    connect(QtSupport::QtVersionManager::instance(), SIGNAL(qtVersionsChanged(QList<int>,QList<int>,QList<int>)),
+        this, SLOT(qtVersionsChanged(QList<int>,QList<int>,QList<int>)));
 
     // listen to project add, remove and startup changes to udate start button
     SessionManager *session = ProjectExplorerPlugin::instance()->session();
@@ -178,8 +178,10 @@ bool MaemoQemuManager::qemuIsRunning() const
     return m_runningQtId != INT_MIN;
 }
 
-void MaemoQemuManager::qtVersionsChanged(const QList<int> &uniqueIds)
+void MaemoQemuManager::qtVersionsChanged(const QList<int> &added, const QList<int> &removed, const QList<int> &changed)
 {
+    QList<int> uniqueIds;
+    uniqueIds << added << removed << changed;
     QtSupport::QtVersionManager *manager = QtSupport::QtVersionManager::instance();
     foreach (int uniqueId, uniqueIds) {
         if (manager->isValidId(uniqueId)) {
@@ -539,7 +541,7 @@ void MaemoQemuManager::toggleStarterButton(Target *target)
     }
 
     if (uniqueId >= 0 && (m_runtimes.isEmpty() || !m_runtimes.contains(uniqueId)))
-        qtVersionsChanged(QList<int>() << uniqueId);
+        qtVersionsChanged(QList<int>(), QList<int>(), QList<int>() << uniqueId);
 
     bool isRunning = m_qemuProcess->state() != QProcess::NotRunning;
     if (m_runningQtId == uniqueId)
@@ -596,7 +598,7 @@ bool MaemoQemuManager::targetUsesMatchingRuntimeConfig(Target *target,
 
 void MaemoQemuManager::notify(const QList<int> uniqueIds)
 {
-    qtVersionsChanged(uniqueIds);
+    qtVersionsChanged(QList<int>(), QList<int>(), uniqueIds);
     environmentChanged();   // to toggle the start button
 }
 
diff --git a/src/plugins/madde/maemoqemumanager.h b/src/plugins/madde/maemoqemumanager.h
index 0fa3894ff6d919cb4579ebef4fef25327ce2c066..a5c61b78991c198937df175c93e30c2543eed58c 100644
--- a/src/plugins/madde/maemoqemumanager.h
+++ b/src/plugins/madde/maemoqemumanager.h
@@ -82,7 +82,7 @@ signals:
     void qemuProcessStatus(QemuStatus, const QString &error = QString());
 
 private slots:
-    void qtVersionsChanged(const QList<int> &uniqueIds);
+    void qtVersionsChanged(const QList<int> &addedIds, const QList<int> &removedIds, const QList<int> &changed);
 
     void projectAdded(ProjectExplorer::Project *project);
     void projectRemoved(ProjectExplorer::Project *project);
diff --git a/src/plugins/madde/maemotoolchain.cpp b/src/plugins/madde/maemotoolchain.cpp
index e4de7cc401ca85e772401d56f7a6bf0748742688..848198199f0e2a5bd67a22a4990e539543ef012a 100644
--- a/src/plugins/madde/maemotoolchain.cpp
+++ b/src/plugins/madde/maemotoolchain.cpp
@@ -241,8 +241,8 @@ QString MaemoToolChainFactory::id() const
 QList<ProjectExplorer::ToolChain *> MaemoToolChainFactory::autoDetect()
 {
     QtSupport::QtVersionManager *vm = QtSupport::QtVersionManager::instance();
-    connect(vm, SIGNAL(qtVersionsChanged(QList<int>)),
-            this, SLOT(handleQtVersionChanges(QList<int>)));
+    connect(vm, SIGNAL(qtVersionsChanged(QList<int>,QList<int>,QList<int>)),
+            this, SLOT(handleQtVersionChanges(QList<int>,QList<int>,QList<int>)));
 
     QList<int> versionList;
     foreach (QtSupport::BaseQtVersion *v, vm->versions())
@@ -266,8 +266,10 @@ ProjectExplorer::ToolChain *MaemoToolChainFactory::restore(const QVariantMap &da
     return 0;
 }
 
-void MaemoToolChainFactory::handleQtVersionChanges(const QList<int> &changes)
+void MaemoToolChainFactory::handleQtVersionChanges(const QList<int> &added, const QList<int> &removed, const QList<int> &changed)
 {
+    QList<int> changes;
+    changes << added << removed << changed;
     ProjectExplorer::ToolChainManager *tcm = ProjectExplorer::ToolChainManager::instance();
     QList<ProjectExplorer::ToolChain *> tcList = createToolChainList(changes);
     foreach (ProjectExplorer::ToolChain *tc, tcList)
diff --git a/src/plugins/madde/maemotoolchain.h b/src/plugins/madde/maemotoolchain.h
index e585d35435c20b9446756be9c61f57a08af876f4..845f1242940b7e4f33fee6fe0e47e09238ae8cd4 100644
--- a/src/plugins/madde/maemotoolchain.h
+++ b/src/plugins/madde/maemotoolchain.h
@@ -117,8 +117,8 @@ public:
     ProjectExplorer::ToolChain *restore(const QVariantMap &data);
 
 private slots:
-    void handleQtVersionChanges(const QList<int> &);
-    QList<ProjectExplorer::ToolChain *> createToolChainList(const QList<int> &);
+    void handleQtVersionChanges(const QList<int> &added, const QList<int> &removed, const QList<int> &changed);
+    QList<ProjectExplorer::ToolChain *> createToolChainList(const QList<int> &changes);
 };
 
 } // namespace Internal
diff --git a/src/plugins/madde/qt4maemotargetfactory.cpp b/src/plugins/madde/qt4maemotargetfactory.cpp
index 44de7c3158d30f57f5b101a4c675fd7e1e45a6c6..4879165803f316599a8bd1325b6f1a7f76ce8022 100644
--- a/src/plugins/madde/qt4maemotargetfactory.cpp
+++ b/src/plugins/madde/qt4maemotargetfactory.cpp
@@ -58,7 +58,7 @@ namespace Internal {
 Qt4MaemoTargetFactory::Qt4MaemoTargetFactory(QObject *parent) :
     Qt4BaseTargetFactory(parent)
 {
-    connect(QtSupport::QtVersionManager::instance(), SIGNAL(qtVersionsChanged(QList<int>)),
+    connect(QtSupport::QtVersionManager::instance(), SIGNAL(qtVersionsChanged(QList<int>,QList<int>,QList<int>)),
             this, SIGNAL(canCreateTargetIdsChanged()));
 }
 
diff --git a/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp b/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp
index 9269d30fbbf308c0dc385e012f3595892ae0cdcb..3899c87435ac0d296b2611e9d5b637b6ea7f565e 100644
--- a/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp
+++ b/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp
@@ -108,7 +108,7 @@ void QmlProjectRunConfiguration::ctor()
             this, SLOT(changeCurrentFile(Core::IEditor*)));
 
     QtVersionManager *qtVersions = QtVersionManager::instance();
-    connect(qtVersions, SIGNAL(qtVersionsChanged(QList<int>)), this, SLOT(updateQtVersions()));
+    connect(qtVersions, SIGNAL(qtVersionsChanged(QList<int>,QList<int>,QList<int>)), this, SLOT(updateQtVersions()));
 
     setDisplayName(tr("QML Viewer", "QMLRunConfiguration display name."));
 }
diff --git a/src/plugins/qmlprojectmanager/qmlprojectrunconfigurationwidget.cpp b/src/plugins/qmlprojectmanager/qmlprojectrunconfigurationwidget.cpp
index f3fe0c32764b026bfe3ddd2d3b990a8627ccfe26..0813e0868bf12bf3363c4adc7dc2584c645dab4a 100644
--- a/src/plugins/qmlprojectmanager/qmlprojectrunconfigurationwidget.cpp
+++ b/src/plugins/qmlprojectmanager/qmlprojectrunconfigurationwidget.cpp
@@ -114,7 +114,7 @@ QmlProjectRunConfigurationWidget::QmlProjectRunConfigurationWidget(QmlProjectRun
     //
 
     QtVersionManager *qtVersions = QtVersionManager::instance();
-    connect(qtVersions, SIGNAL(qtVersionsChanged(QList<int>)),
+    connect(qtVersions, SIGNAL(qtVersionsChanged(QList<int>,QList<int>,QList<int>)),
             this, SLOT(updateQtVersionComboBox()));
 
     //
diff --git a/src/plugins/qt4projectmanager/qt-desktop/qt4desktoptargetfactory.cpp b/src/plugins/qt4projectmanager/qt-desktop/qt4desktoptargetfactory.cpp
index 3fe2d186f63962c6fa598c837448b5b7233b78cc..06df7004a09228ad8ffa66a50d0bb6f677d2b02c 100644
--- a/src/plugins/qt4projectmanager/qt-desktop/qt4desktoptargetfactory.cpp
+++ b/src/plugins/qt4projectmanager/qt-desktop/qt4desktoptargetfactory.cpp
@@ -56,7 +56,7 @@ using ProjectExplorer::idFromMap;
 Qt4DesktopTargetFactory::Qt4DesktopTargetFactory(QObject *parent) :
     Qt4BaseTargetFactory(parent)
 {
-    connect(QtSupport::QtVersionManager::instance(), SIGNAL(qtVersionsChanged(QList<int>)),
+    connect(QtSupport::QtVersionManager::instance(), SIGNAL(qtVersionsChanged(QList<int>,QList<int>,QList<int>)),
             this, SIGNAL(canCreateTargetIdsChanged()));
 }
 
diff --git a/src/plugins/qt4projectmanager/qt-desktop/qt4simulatortargetfactory.cpp b/src/plugins/qt4projectmanager/qt-desktop/qt4simulatortargetfactory.cpp
index d9bb69e41b446e991a478561f1a025b6f817f8c2..71ecce00e4a47442e60f618ac4bd58ebf54b7c79 100644
--- a/src/plugins/qt4projectmanager/qt-desktop/qt4simulatortargetfactory.cpp
+++ b/src/plugins/qt4projectmanager/qt-desktop/qt4simulatortargetfactory.cpp
@@ -56,7 +56,7 @@ using ProjectExplorer::idFromMap;
 Qt4SimulatorTargetFactory::Qt4SimulatorTargetFactory(QObject *parent) :
     Qt4BaseTargetFactory(parent)
 {
-    connect(QtSupport::QtVersionManager::instance(), SIGNAL(qtVersionsChanged(QList<int>)),
+    connect(QtSupport::QtVersionManager::instance(), SIGNAL(qtVersionsChanged(QList<int>,QList<int>,QList<int>)),
             this, SIGNAL(canCreateTargetIdsChanged()));
 }
 
diff --git a/src/plugins/qt4projectmanager/qt-s60/qt4symbiantargetfactory.cpp b/src/plugins/qt4projectmanager/qt-s60/qt4symbiantargetfactory.cpp
index 003d242f2aabe097922aa702f6ede6a52e3f5061..228dc0a501c289468d385f937c7b2b0b9f59b3f8 100644
--- a/src/plugins/qt4projectmanager/qt-s60/qt4symbiantargetfactory.cpp
+++ b/src/plugins/qt4projectmanager/qt-s60/qt4symbiantargetfactory.cpp
@@ -60,7 +60,7 @@ using namespace Qt4ProjectManager::Internal;
 Qt4SymbianTargetFactory::Qt4SymbianTargetFactory(QObject *parent) :
     Qt4BaseTargetFactory(parent)
 {
-    connect(QtSupport::QtVersionManager::instance(), SIGNAL(qtVersionsChanged(QList<int>)),
+    connect(QtSupport::QtVersionManager::instance(), SIGNAL(qtVersionsChanged(QList<int>,QList<int>,QList<int>)),
             this, SIGNAL(canCreateTargetIdsChanged()));
 }
 
diff --git a/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp b/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp
index 9af64867fd6c3063925092c942f79cd8ceec8223..7e73d48501bf87ded5ddf96dd8d14126b12c2ba4 100644
--- a/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp
+++ b/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp
@@ -185,8 +185,8 @@ void Qt4BuildConfiguration::ctor()
             this, SLOT(proFileUpdated(Qt4ProjectManager::Qt4ProFileNode*,bool,bool)));
 
     QtSupport::QtVersionManager *vm = QtSupport::QtVersionManager::instance();
-    connect(vm, SIGNAL(qtVersionsChanged(QList<int>)),
-            this, SLOT(qtVersionsChanged(QList<int>)));
+    connect(vm, SIGNAL(qtVersionsChanged(QList<int>,QList<int>,QList<int>)),
+            this, SLOT(qtVersionsChanged(QList<int>,QList<int>,QList<int>)));
 }
 
 void Qt4BuildConfiguration::emitBuildDirectoryChanged()
@@ -458,11 +458,11 @@ MakeStep *Qt4BuildConfiguration::makeStep() const
     return 0;
 }
 
-void Qt4BuildConfiguration::qtVersionsChanged(const QList<int> &changedVersions)
+void Qt4BuildConfiguration::qtVersionsChanged(const QList<int> &addedVersions, const QList<int> &removedVersions, const QList<int> &changedVersions)
 {
-    if (!changedVersions.contains(m_qtVersionId))
-        return;
-    emit environmentChanged(); // Our qt version changed, that might have changed the environment
+    Q_UNUSED(addedVersions);
+    if (removedVersions.contains(m_qtVersionId) || changedVersions.contains(m_qtVersionId))
+        emit environmentChanged(); // Our qt version changed, that might have changed the environment
 }
 
 // returns true if both are equal
@@ -663,7 +663,7 @@ Qt4BuildConfigurationFactory::Qt4BuildConfigurationFactory(QObject *parent) :
     update();
 
     QtSupport::QtVersionManager *vm = QtSupport::QtVersionManager::instance();
-    connect(vm, SIGNAL(qtVersionsChanged(QList<int>)),
+    connect(vm, SIGNAL(qtVersionsChanged(QList<int>,QList<int>,QList<int>)),
             this, SLOT(update()));
 }
 
diff --git a/src/plugins/qt4projectmanager/qt4buildconfiguration.h b/src/plugins/qt4projectmanager/qt4buildconfiguration.h
index 7b2dd5a696d530c32d2db04e040172d50878e634..17b98abd0e73853c779c595b32a101aae70a3088 100644
--- a/src/plugins/qt4projectmanager/qt4buildconfiguration.h
+++ b/src/plugins/qt4projectmanager/qt4buildconfiguration.h
@@ -144,7 +144,7 @@ signals:
     void buildDirectoryInitialized();
 
 private slots:
-    void qtVersionsChanged(const QList<int> &changedVersions);
+    void qtVersionsChanged(const QList<int> &addedVersions, const QList<int> &removedVersions, const QList<int> &changedVersions);
     void emitBuildDirectoryChanged();
     void proFileUpdated(Qt4ProjectManager::Qt4ProFileNode *, bool, bool parseInProgress);
 
diff --git a/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp b/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp
index 990d134d33d1233800b1c4bfb71d5ede4a696ff9..9fa9de7bc4ea41acc43af122c660ecd2c0d9829c 100644
--- a/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp
+++ b/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp
@@ -225,7 +225,7 @@ void Qt4ProjectConfigWidget::init(ProjectExplorer::BuildConfiguration *bc)
 
     qtVersionsChanged();
     QtSupport::QtVersionManager *vm = QtSupport::QtVersionManager::instance();
-    connect(vm, SIGNAL(qtVersionsChanged(QList<int>)),
+    connect(vm, SIGNAL(qtVersionsChanged(QList<int>,QList<int>,QList<int>)),
             this, SLOT(qtVersionsChanged()));
 
     bool shadowBuild = m_buildConfiguration->shadowBuild();
diff --git a/src/plugins/qtsupport/exampleslistmodel.cpp b/src/plugins/qtsupport/exampleslistmodel.cpp
index 27b63394589e82093f2c19ee1c32a742f41cd460..c3ea5d3e7d2b16495e7927071d58825f4f78364a 100644
--- a/src/plugins/qtsupport/exampleslistmodel.cpp
+++ b/src/plugins/qtsupport/exampleslistmodel.cpp
@@ -77,7 +77,7 @@ ExamplesListModel::ExamplesListModel(QObject *parent) :
 
     connect(Core::HelpManager::instance(), SIGNAL(setupFinished()),
             SLOT(helpInitialized()));
-    connect(QtVersionManager::instance(), SIGNAL(qtVersionsChanged(QList<int>)),
+    connect(QtVersionManager::instance(), SIGNAL(qtVersionsChanged(QList<int>,QList<int>,QList<int>)),
             this, SLOT(handleQtVersionsChanged()));
 }
 
diff --git a/src/plugins/qtsupport/qtversionmanager.cpp b/src/plugins/qtsupport/qtversionmanager.cpp
index aa83869a284ecfdf476453122a9cc77dfdc08996..185023e8515c4942d8450adc77c69d13f5679dcb 100644
--- a/src/plugins/qtsupport/qtversionmanager.cpp
+++ b/src/plugins/qtsupport/qtversionmanager.cpp
@@ -449,7 +449,7 @@ void QtVersionManager::addVersion(BaseQtVersion *version)
     int uniqueId = version->uniqueId();
     m_versions.insert(uniqueId, version);
 
-    emit qtVersionsChanged(QList<int>() << uniqueId);
+    emit qtVersionsChanged(QList<int>() << uniqueId, QList<int>(), QList<int>());
     saveQtVersions();
 }
 
@@ -457,7 +457,7 @@ void QtVersionManager::removeVersion(BaseQtVersion *version)
 {
     QTC_ASSERT(version != 0, return);
     m_versions.remove(version->uniqueId());
-    emit qtVersionsChanged(QList<int>() << version->uniqueId());
+    emit qtVersionsChanged(QList<int>(), QList<int>() << version->uniqueId(), QList<int>());
     saveQtVersions();
     delete version;
 }
@@ -623,6 +623,8 @@ void QtVersionManager::setNewQtVersions(QList<BaseQtVersion *> newVersions)
     SortByUniqueId sortByUniqueId;
     qSort(sortedNewVersions.begin(), sortedNewVersions.end(), sortByUniqueId);
 
+    QList<int> addedVersions;
+    QList<int> removedVersions;
     QList<int> changedVersions;
     // So we trying to find the minimal set of changed versions,
     // iterate over both sorted list
@@ -639,10 +641,10 @@ void QtVersionManager::setNewQtVersions(QList<BaseQtVersion *> newVersions)
         int nid = (*nit)->uniqueId();
         int oid = (*oit)->uniqueId();
         if (nid < oid) {
-            changedVersions.push_back(nid);
+            addedVersions.push_back(nid);
             ++nit;
         } else if (oid < nid) {
-            changedVersions.push_back(oid);
+            removedVersions.push_back(oid);
             ++oit;
         } else {
             if (!equals(*oit, *nit))
@@ -653,12 +655,12 @@ void QtVersionManager::setNewQtVersions(QList<BaseQtVersion *> newVersions)
     }
 
     while (nit != nend) {
-        changedVersions.push_back((*nit)->uniqueId());
+        addedVersions.push_back((*nit)->uniqueId());
         ++nit;
     }
 
     while (oit != oend) {
-        changedVersions.push_back((*oit)->uniqueId());
+        removedVersions.push_back((*oit)->uniqueId());
         ++oit;
     }
 
@@ -667,13 +669,13 @@ void QtVersionManager::setNewQtVersions(QList<BaseQtVersion *> newVersions)
     foreach (BaseQtVersion *v, sortedNewVersions)
         m_versions.insert(v->uniqueId(), v);
 
-    if (!changedVersions.isEmpty())
+    if (!changedVersions.isEmpty() || !addedVersions.isEmpty() || !removedVersions.isEmpty())
         updateDocumentation();
 
     saveQtVersions();
 
-    if (!changedVersions.isEmpty())
-        emit qtVersionsChanged(changedVersions);
+    if (!changedVersions.isEmpty() || !addedVersions.isEmpty() || !removedVersions.isEmpty())
+        emit qtVersionsChanged(addedVersions, removedVersions, changedVersions);
 }
 
 // Returns the version that was used to build the project in that directory
diff --git a/src/plugins/qtsupport/qtversionmanager.h b/src/plugins/qtsupport/qtversionmanager.h
index cccb8f3be677c797382a2dd887833d9ef0256a38..d1922122561b1555cf9bf63e21fed9a68f13a4c6 100644
--- a/src/plugins/qtsupport/qtversionmanager.h
+++ b/src/plugins/qtsupport/qtversionmanager.h
@@ -108,7 +108,7 @@ public:
 signals:
     // content of BaseQtVersion objects with qmake path might have changed
     void dumpUpdatedFor(const Utils::FileName &qmakeCommand);
-    void qtVersionsChanged(const QList<int> &uniqueIds);
+    void qtVersionsChanged(const QList<int> &addedIds, const QList<int> &removedIds, const QList<int> &changedIds);
 
 public slots:
     void updateDumpFor(const Utils::FileName &qmakeCommand);