diff --git a/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp b/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp
index 3e857f59fbe130f23360a697c1ab2fde3dec4271..6ad191e14d5473fcc3310a7edc8150ab4a60f684 100644
--- a/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp
+++ b/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp
@@ -61,7 +61,7 @@ enum { debug = 0 };
 
 Qt4BuildConfiguration::Qt4BuildConfiguration(Qt4Target *target) :
     BuildConfiguration(target, QLatin1String(QT4_BC_ID)),
-    m_shadowBuild(false),
+    m_shadowBuild(true),
     m_qtVersionId(-1),
     m_toolChainType(-1), // toolChainType() makes sure to return the default toolchainType
     m_qmakeBuildConfiguration(0),
@@ -72,7 +72,7 @@ Qt4BuildConfiguration::Qt4BuildConfiguration(Qt4Target *target) :
 
 Qt4BuildConfiguration::Qt4BuildConfiguration(Qt4Target *target, const QString &id) :
     BuildConfiguration(target, id),
-    m_shadowBuild(false),
+    m_shadowBuild(true),
     m_qtVersionId(-1),
     m_toolChainType(-1), // toolChainType() makes sure to return the default toolchainType
     m_qmakeBuildConfiguration(0),
@@ -115,8 +115,8 @@ bool Qt4BuildConfiguration::fromMap(const QVariantMap &map)
     if (!BuildConfiguration::fromMap(map))
         return false;
 
-    m_shadowBuild = map.value(QLatin1String(USE_SHADOW_BUILD_KEY), false).toBool();
-    m_buildDirectory = map.value(QLatin1String(BUILD_DIRECTORY_KEY)).toString();
+    m_shadowBuild = map.value(QLatin1String(USE_SHADOW_BUILD_KEY), true).toBool();
+    m_buildDirectory = map.value(QLatin1String(BUILD_DIRECTORY_KEY), qt4Target()->defaultBuildDirectory()).toString();
     m_qtVersionId = map.value(QLatin1String(QT_VERSION_ID_KEY)).toInt();
     m_toolChainType = map.value(QLatin1String(TOOLCHAIN_KEY)).toInt();
     m_qmakeBuildConfiguration = QtVersion::QmakeBuildConfigs(map.value(QLatin1String(BUILD_CONFIGURATION_KEY)).toInt());
@@ -154,6 +154,10 @@ bool Qt4BuildConfiguration::fromMap(const QVariantMap &map)
 
 void Qt4BuildConfiguration::ctor()
 {
+    m_buildDirectory = qt4Target()->defaultBuildDirectory();
+    if (m_buildDirectory == target()->project()->projectDirectory())
+        m_shadowBuild = false;
+
     QtVersionManager *vm = QtVersionManager::instance();
     connect(vm, SIGNAL(qtVersionsChanged(QList<int>)),
             this, SLOT(qtVersionsChanged(QList<int>)));
diff --git a/src/plugins/qt4projectmanager/qt4project.cpp b/src/plugins/qt4projectmanager/qt4project.cpp
index 739ccd8d063bd486e7fb920377291acbe2ed7b8e..5ea18c2e30ac82ee9b4ccab622bd9a6767ee08d9 100644
--- a/src/plugins/qt4projectmanager/qt4project.cpp
+++ b/src/plugins/qt4projectmanager/qt4project.cpp
@@ -781,6 +781,12 @@ bool Qt4Project::wasEvaluateCanceled()
     return m_cancelEvaluate;
 }
 
+QString Qt4Project::defaultTopLevelBuildDirectory() const
+{
+    QFileInfo info(file()->fileName());
+    return projectDirectory() + QChar('/') + info.baseName() + QLatin1String("-build");
+}
+
 void Qt4Project::asyncUpdate()
 {
     if (debug)
diff --git a/src/plugins/qt4projectmanager/qt4project.h b/src/plugins/qt4projectmanager/qt4project.h
index 0d85df229204f02d526cfcab1a955cc9c2692095..324b78825d3483d0d93f8d1f6db62c7e9cb69f85 100644
--- a/src/plugins/qt4projectmanager/qt4project.h
+++ b/src/plugins/qt4projectmanager/qt4project.h
@@ -161,6 +161,8 @@ public:
     /// \internal
     bool wasEvaluateCanceled();
 
+    QString defaultTopLevelBuildDirectory() const;
+
 signals:
     /// emitted after parse
     void proFileUpdated(Qt4ProjectManager::Internal::Qt4ProFileNode *node);
diff --git a/src/plugins/qt4projectmanager/qt4target.cpp b/src/plugins/qt4projectmanager/qt4target.cpp
index a52f8f7c55af8c1ac6fa03c6a107f1bf030989bc..acc3e3e5810900b9122b3f2038c43410088e34b8 100644
--- a/src/plugins/qt4projectmanager/qt4target.cpp
+++ b/src/plugins/qt4projectmanager/qt4target.cpp
@@ -314,6 +314,29 @@ ToolChain::ToolChainType Qt4Target::preferredToolChainType(const QList<ToolChain
     return preferredType;
 }
 
+QString Qt4Target::defaultBuildDirectory() const
+{
+    if (id() == QLatin1String(Constants::S60_DEVICE_TARGET_ID)
+        || id() == QLatin1String(Constants::S60_EMULATOR_TARGET_ID)
+#if defined(Q_OS_WIN)
+        || id() == QLatin1String(Constants::MAEMO_DEVICE_TARGET_ID)
+#endif
+        )
+        return project()->projectDirectory();
+
+    QString shortName = QLatin1String("unknown");
+    if (id() == QLatin1String(Constants::DESKTOP_TARGET_ID))
+        shortName = QLatin1String("desktop");
+    else if (id() == QLatin1String(Constants::S60_EMULATOR_TARGET_ID))
+        shortName = QLatin1String("symbian_emulator");
+    else if (id() == QLatin1String(Constants::S60_DEVICE_TARGET_ID))
+        shortName = QLatin1String("symbian");
+    else if (id() == QLatin1String(Constants::MAEMO_DEVICE_TARGET_ID))
+        shortName = QLatin1String("maemo");
+
+    return qt4Project()->defaultTopLevelBuildDirectory() + QChar('/') + shortName;
+}
+
 bool Qt4Target::fromMap(const QVariantMap &map)
 {
     if (!Target::fromMap(map))
diff --git a/src/plugins/qt4projectmanager/qt4target.h b/src/plugins/qt4projectmanager/qt4target.h
index b6f1a2abb9510ad52578cdf209ec7ca29e7ff790..3dbe4d10dcbb410ebfc542908a5b47c5f83cd3c2 100644
--- a/src/plugins/qt4projectmanager/qt4target.h
+++ b/src/plugins/qt4projectmanager/qt4target.h
@@ -68,6 +68,8 @@ public:
     QList<ProjectExplorer::ToolChain::ToolChainType> filterToolChainTypes(const QList<ProjectExplorer::ToolChain::ToolChainType> &candidates) const;
     ProjectExplorer::ToolChain::ToolChainType preferredToolChainType(const QList<ProjectExplorer::ToolChain::ToolChainType> &candidates) const;
 
+    QString defaultBuildDirectory() const;
+
 signals:
     void buildDirectoryInitialized();
     /// emitted if the build configuration changed in a way that