diff --git a/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp b/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp
index 6ad191e14d5473fcc3310a7edc8150ab4a60f684..c9a810cea9c27ea5008c9a86d74a2657baddc056 100644
--- a/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp
+++ b/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp
@@ -616,11 +616,13 @@ BuildConfiguration *Qt4BuildConfigurationFactory::create(ProjectExplorer::Target
 
     qt4Target->addQt4BuildConfiguration(tr("%1 Debug").arg(buildConfigurationName),
                                         version,
-                                        (version->defaultBuildConfig() | QtVersion::DebugBuild));
+                                        (version->defaultBuildConfig() | QtVersion::DebugBuild),
+                                        QStringList(), QString());
     BuildConfiguration *bc =
     qt4Target->addQt4BuildConfiguration(tr("%1 Release").arg(buildConfigurationName),
                                         version,
-                                        (version->defaultBuildConfig() & ~QtVersion::DebugBuild));
+                                        (version->defaultBuildConfig() & ~QtVersion::DebugBuild),
+                                        QStringList(), QString());
     return bc;
 }
 
diff --git a/src/plugins/qt4projectmanager/qt4target.cpp b/src/plugins/qt4projectmanager/qt4target.cpp
index a0cab26ef2c22be1560d9a20da1453afedb5e1de..d93b8d93af88a340f878ee488b6fbe6b42197e56 100644
--- a/src/plugins/qt4projectmanager/qt4target.cpp
+++ b/src/plugins/qt4projectmanager/qt4target.cpp
@@ -118,53 +118,78 @@ bool Qt4TargetFactory::canCreate(ProjectExplorer::Project *parent, const QString
 
 Qt4Target *Qt4TargetFactory::create(ProjectExplorer::Project *parent, const QString &id)
 {
-    return create(parent, id, QList<QtVersion*>());
+    QList<QtVersion *> knownVersions = QtVersionManager::instance()->versionsForTargetId(id);
+    if (knownVersions.count() > 1)
+        knownVersions = knownVersions.mid(0, 1);
+    return create(parent, id, knownVersions);
 }
 
 Qt4Target *Qt4TargetFactory::create(ProjectExplorer::Project *parent, const QString &id, QList<QtVersion *> versions)
+{
+    QList<BuildConfigurationInfo> infos;
+    foreach (QtVersion *version, versions) {
+        bool buildAll = false;
+        if (version && version->isValid() && (version->defaultBuildConfig() & QtVersion::BuildAll))
+            buildAll = true;
+
+        if (buildAll) {
+            infos.append(BuildConfigurationInfo(version, QtVersion::BuildAll | QtVersion::DebugBuild));
+            infos.append(BuildConfigurationInfo(version, QtVersion::BuildAll));
+        } else {
+            infos.append(BuildConfigurationInfo(version, QtVersion::DebugBuild));
+            infos.append(BuildConfigurationInfo(version, QtVersion::QmakeBuildConfig(0)));
+        }
+    }
+
+    return create(parent, id, infos);
+}
+
+Qt4Target *Qt4TargetFactory::create(ProjectExplorer::Project *parent, const QString &id, QList<BuildConfigurationInfo> infos)
 {
     if (!canCreate(parent, id))
         return 0;
 
-    Qt4Project * qt4project(static_cast<Qt4Project *>(parent));
-    Qt4Target *t(new Qt4Target(qt4project, id));
+    Qt4Project *qt4project = static_cast<Qt4Project *>(parent);
+    Qt4Target *t = new Qt4Target(qt4project, id);
 
     QList<QtVersion *> knownVersions(QtVersionManager::instance()->versionsForTargetId(id));
     if (knownVersions.isEmpty())
         return t;
 
-    if (versions.isEmpty())
-        versions.append(knownVersions.at(0));
+    // count Qt versions:
+    int qtVersionCount = 0;
+    {
+        QSet<QtVersion *> differentVersions;
+        foreach (const BuildConfigurationInfo &info, infos) {
+            if (knownVersions.contains(info.version))
+                differentVersions.insert(info.version);
+        }
+        qtVersionCount = differentVersions.count();
+    }
 
-    foreach (QtVersion *version, versions) {
-        if (!knownVersions.contains(version))
+    // Create Buildconfigurations:
+    foreach (const BuildConfigurationInfo &info, infos) {
+        if (!info.version || !knownVersions.contains(info.version))
             continue;
 
-        bool buildAll(false);
-        if (version && version->isValid() && (version->defaultBuildConfig() & QtVersion::BuildAll))
-            buildAll = true;
+        QString displayName;
 
-        QString debugName;
-        QString releaseName;
-        if (versions.count() > 1) {
-            debugName = tr("%1 Debug", "debug buildconfiguration name, %1 is Qt version").arg(version->displayName());
-            releaseName = tr("%1 Release", "release buildconfiguration name, %1 is Qt version").arg(version->displayName());
-        } else {
-            debugName = tr("Debug", "debug buildconfiguration name (only one Qt version!)");
-            releaseName = tr("Release", "release buildconfiguration name (only one Qt version!)");
-        }
+        if (qtVersionCount > 1)
+            displayName = tr("%1 %2", "build configuration display name, %1 is Qt version, %2 is debug or release").
+                          arg(info.version->displayName(), (info.buildConfig | QtVersion::DebugBuild) ? tr("Debug") : tr("Release"));
+        else
+            displayName = tr("%1", "debug buildconfiguration name (only one Qt version! %1 is debug or release)").
+                          arg((info.buildConfig | QtVersion::DebugBuild) ? tr("Debug") : tr("Release"));
 
-        if (buildAll) {
-            t->addQt4BuildConfiguration(debugName, version, QtVersion::BuildAll | QtVersion::DebugBuild);
-            if (id != QLatin1String(Constants::S60_EMULATOR_TARGET_ID))
-                t->addQt4BuildConfiguration(releaseName, version, QtVersion::BuildAll);
-        } else {
-            t->addQt4BuildConfiguration(debugName, version, QtVersion::DebugBuild);
-            if (id != QLatin1String(Constants::S60_EMULATOR_TARGET_ID))
-                t->addQt4BuildConfiguration(releaseName, version, QtVersion::QmakeBuildConfig(0));
-        }
+        // Skip release builds for the symbian emulator.
+        if (id != QLatin1String(Constants::S60_EMULATOR_TARGET_ID) &&
+            !(info.buildConfig | QtVersion::DebugBuild))
+            continue;
+
+        t->addQt4BuildConfiguration(displayName, info.version, info.buildConfig, info.additionalArguments, info.directory);
     }
 
+    // create RunConfigurations:
     QStringList pathes = qt4project->applicationProFilePathes();
     foreach (const QString &path, pathes)
         t->addRunConfigurationForPath(path);
@@ -172,7 +197,6 @@ Qt4Target *Qt4TargetFactory::create(ProjectExplorer::Project *parent, const QStr
     return t;
 }
 
-
 bool Qt4TargetFactory::canRestore(ProjectExplorer::Project *parent, const QVariantMap &map) const
 {
     return canCreate(parent, ProjectExplorer::idFromMap(map));
@@ -235,7 +259,8 @@ Qt4Project *Qt4Target::qt4Project() const
 
 Qt4BuildConfiguration *Qt4Target::addQt4BuildConfiguration(QString displayName, QtVersion *qtversion,
                                                            QtVersion::QmakeBuildConfigs qmakeBuildConfiguration,
-                                                           QStringList additionalArguments)
+                                                           QStringList additionalArguments,
+                                                           QString directory)
 {
     Q_ASSERT(qtversion);
     bool debug = qmakeBuildConfiguration & QtVersion::DebugBuild;
@@ -272,6 +297,8 @@ Qt4BuildConfiguration *Qt4Target::addQt4BuildConfiguration(QString displayName,
     bc->setQtVersion(qtversion);
     ToolChain::ToolChainType defaultTc = preferredToolChainType(filterToolChainTypes(bc->qtVersion()->possibleToolChainTypes()));
     bc->setToolChainType(defaultTc);
+    if (!directory.isEmpty())
+        bc->setShadowBuildAndDirectory(directory != project()->projectDirectory(), directory);
     addBuildConfiguration(bc);
 
     return bc;
diff --git a/src/plugins/qt4projectmanager/qt4target.h b/src/plugins/qt4projectmanager/qt4target.h
index 3dbe4d10dcbb410ebfc542908a5b47c5f83cd3c2..13b9d2c7995c2d288915da7ea3eb4b21b018c09b 100644
--- a/src/plugins/qt4projectmanager/qt4target.h
+++ b/src/plugins/qt4projectmanager/qt4target.h
@@ -45,6 +45,17 @@ class Qt4ProFileNode;
 class Qt4TargetFactory;
 class Qt4BuildConfigurationFactory;
 
+struct BuildConfigurationInfo {
+    explicit BuildConfigurationInfo(QtVersion *v = 0, QtVersion::QmakeBuildConfigs bc = QtVersion::QmakeBuildConfig(0),
+                                    const QStringList &aa = QStringList(), const QString &d = QString()) :
+        version(v), buildConfig(bc), additionalArguments(aa), directory(d)
+    { }
+    QtVersion *version;
+    QtVersion::QmakeBuildConfigs buildConfig;
+    QStringList additionalArguments;
+    QString directory;
+};
+
 class Qt4Target : public ProjectExplorer::Target
 {
     Q_OBJECT
@@ -60,7 +71,8 @@ public:
     Internal::Qt4BuildConfiguration *addQt4BuildConfiguration(QString displayName,
                                                               QtVersion *qtversion,
                                                               QtVersion::QmakeBuildConfigs qmakeBuildConfiguration,
-                                                              QStringList additionalArguments = QStringList());
+                                                              QStringList additionalArguments,
+                                                              QString directory);
     void addRunConfigurationForPath(const QString &proFilePath);
 
     Internal::Qt4BuildConfigurationFactory *buildConfigurationFactory() const;
@@ -109,6 +121,7 @@ public:
     bool canCreate(ProjectExplorer::Project *parent, const QString &id) const;
     Internal::Qt4Target *create(ProjectExplorer::Project *parent, const QString &id);
     Internal::Qt4Target *create(ProjectExplorer::Project *parent, const QString &id, QList<QtVersion *> versions);
+    Internal::Qt4Target *create(ProjectExplorer::Project *parent, const QString &id, QList<BuildConfigurationInfo> infos);
     bool canRestore(ProjectExplorer::Project *parent, const QVariantMap &map) const;
     Internal::Qt4Target *restore(ProjectExplorer::Project *parent, const QVariantMap &map);
 };