diff --git a/src/plugins/qt4projectmanager/qmakestep.cpp b/src/plugins/qt4projectmanager/qmakestep.cpp
index 12cbf8ab28b3dc4cb9fb45144bc1f4d4afd3d172..0125273668ab5de2c47d59f1cc2a74ff184b8616 100644
--- a/src/plugins/qt4projectmanager/qmakestep.cpp
+++ b/src/plugins/qt4projectmanager/qmakestep.cpp
@@ -179,7 +179,7 @@ bool QMakeStep::init()
 
     Qt4Project *pro = qt4BuildConfiguration()->qt4Target()->qt4Project();
     QString proFile = pro->file()->fileName();
-    m_tasks = qt4BuildConfiguration()->qtVersion()->reportIssues(proFile);
+    m_tasks = qt4BuildConfiguration()->qtVersion()->reportIssues(proFile, workingDirectory);
     m_scriptTemplate = pro->rootProjectNode()->projectType() == ScriptTemplate;
 
     return AbstractProcessStep::init();
diff --git a/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp b/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp
index 3aacc1bde2906589c0ca79e8bdfd7158b6a846b4..b999cc31d8a07f237876f9f4656903f14e5d04d6 100644
--- a/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp
+++ b/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp
@@ -341,18 +341,32 @@ void Qt4ProjectConfigWidget::updateImportLabel()
         }
     }
 
-    QString sourceDirectory =
-            m_buildConfiguration->target()->project()->projectDirectory();
-    if (!sourceDirectory.endsWith('/'))
-        sourceDirectory.append('/');
-    bool invalidBuildDirectory = m_buildConfiguration->shadowBuild()
-                                 && m_buildConfiguration->buildDirectory().startsWith(sourceDirectory);
-
-    if (invalidBuildDirectory) {
+    QString buildDirectory = m_buildConfiguration->target()->project()->projectDirectory();;
+    if (m_buildConfiguration->shadowBuild())
+        buildDirectory = m_buildConfiguration->buildDirectory();
+    QList<ProjectExplorer::Task> issues = m_buildConfiguration->qtVersion()->reportIssues(m_buildConfiguration->target()->project()->file()->fileName(),
+                                                                                          buildDirectory);
+
+    if (!issues.isEmpty()) {
         m_ui->problemLabel->setVisible(true);
         m_ui->warningLabel->setVisible(true);
         m_ui->importLabel->setVisible(visible);
-        m_ui->problemLabel->setText(tr("Building in subdirectories of the source directory is not supported by qmake."));
+        QString text = "<nobr>";
+        foreach (const ProjectExplorer::Task &task, issues) {
+            QString type;
+            switch (task.type) {
+            case ProjectExplorer::Task::Error:
+                type = tr("Error: ");
+                break;
+            case ProjectExplorer::Task::Warning:
+                type = tr("Warning: ");
+                break;
+            }
+            if (!text.endsWith(QLatin1String("br>")))
+                text.append(QLatin1String("<br>"));
+            text.append(type + task.description);
+        }
+        m_ui->problemLabel->setText(text);
     } else if (targetMatches) {
         m_ui->problemLabel->setVisible(false);
         m_ui->warningLabel->setVisible(false);
diff --git a/src/plugins/qt4projectmanager/qtversionmanager.cpp b/src/plugins/qt4projectmanager/qtversionmanager.cpp
index 02246c7c98bf24d35fe444621c0d565cd9c632ae..33b310249697363fb4c97f5d5205f6360c4e45ca 100644
--- a/src/plugins/qt4projectmanager/qtversionmanager.cpp
+++ b/src/plugins/qt4projectmanager/qtversionmanager.cpp
@@ -638,10 +638,14 @@ bool QtVersion::supportsShadowBuilds() const
 }
 
 QList<ProjectExplorer::Task>
-QtVersion::reportIssues(const QString &proFile)
+QtVersion::reportIssues(const QString &proFile, const QString &buildDir)
 {
     QList<ProjectExplorer::Task> results;
 
+    QString tmpBuildDir = buildDir;
+    if (!buildDir.endsWith(QChar('/')))
+        tmpBuildDir.append(QChar('/'));
+
     if (!isValid()) {
         //: %1: Reason for being invalid
         const QString msg = QCoreApplication::translate("Qt4ProjectManager::QtVersion", "The Qt version is invalid: %1").arg(invalidReason());
@@ -659,6 +663,22 @@ QtVersion::reportIssues(const QString &proFile)
                                              QLatin1String(ProjectExplorer::Constants::TASK_CATEGORY_BUILDSYSTEM)));
     }
 
+    QString sourcePath = QFileInfo(proFile).absolutePath();
+    if (!sourcePath.endsWith(QChar('/')))
+        sourcePath.append(QChar('/'));
+
+    if ((tmpBuildDir.startsWith(sourcePath)) && (tmpBuildDir != sourcePath)) {
+        const QString msg = QCoreApplication::translate("Qt4ProjectManager::QtVersion",
+                                                        "Qmake does not support build directories below the source directory.");
+        results.append(ProjectExplorer::Task(ProjectExplorer::Task::Warning, msg, QString(), -1,
+                                             QLatin1String(ProjectExplorer::Constants::TASK_CATEGORY_BUILDSYSTEM)));
+    } else if (tmpBuildDir.count(QChar('/')) != sourcePath.count(QChar('/'))) {
+        const QString msg = QCoreApplication::translate("Qt4ProjectManager::QtVersion",
+                                                        "The build directory needs to be at the same level as the source directory.");
+        results.append(ProjectExplorer::Task(ProjectExplorer::Task::Warning, msg, QString(), -1,
+                                             QLatin1String(ProjectExplorer::Constants::TASK_CATEGORY_BUILDSYSTEM)));
+    }
+
     QSet<QString> targets = supportedTargetIds();
     if (targets.contains(Constants::S60_DEVICE_TARGET_ID) ||
         targets.contains(Constants::S60_EMULATOR_TARGET_ID))
diff --git a/src/plugins/qt4projectmanager/qtversionmanager.h b/src/plugins/qt4projectmanager/qtversionmanager.h
index 6ccacad40614f1d8445f2a18031ea5d7ede8173e..3716635d140be3150784d6c370676692aac837bf 100644
--- a/src/plugins/qt4projectmanager/qtversionmanager.h
+++ b/src/plugins/qt4projectmanager/qtversionmanager.h
@@ -147,7 +147,7 @@ public:
     /// its symbian setup.
     /// @return a list of tasks, ordered on severity (errors first, then
     ///         warnings and finally info items.
-    QList<ProjectExplorer::Task> reportIssues(const QString &proFile);
+    QList<ProjectExplorer::Task> reportIssues(const QString &proFile, const QString &buildDir);
 
 private:
     QList<QSharedPointer<ProjectExplorer::ToolChain> > toolChains() const;
diff --git a/src/plugins/qt4projectmanager/wizards/targetsetuppage.cpp b/src/plugins/qt4projectmanager/wizards/targetsetuppage.cpp
index 91872791f90c86b0a5ff9ddb9802b0dadcc34a48..491a6a5c2b2d7e0d2bdcf1ddda493da67845e567 100644
--- a/src/plugins/qt4projectmanager/wizards/targetsetuppage.cpp
+++ b/src/plugins/qt4projectmanager/wizards/targetsetuppage.cpp
@@ -130,10 +130,20 @@ void TargetSetupPage::setImportInfos(const QList<ImportInfo> &infos)
         foreach (const ImportInfo &i, m_infos) {
             ++pos;
 
+            QString buildDir;
+            if (i.directory.isEmpty()) {
+                if (i.version->supportsShadowBuilds())
+                    buildDir = Qt4Target::defaultShadowBuildDirectory(Qt4Project::defaultTopLevelBuildDirectory(m_proFilePath), t);
+                else
+                    buildDir = Qt4Project::projectDirectory(m_proFilePath);
+            } else {
+                buildDir = i.directory;
+            }
+
             if (!i.version->supportsTargetId(t))
                 continue;
             QTreeWidgetItem *versionItem = new QTreeWidgetItem(targetItem);
-            QPair<QIcon, QString> issues = reportIssues(i.version);
+            QPair<QIcon, QString> issues = reportIssues(i.version, buildDir);
 
             QString toolTip = i.version->displayName();
             if (!issues.second.isEmpty())
@@ -168,17 +178,9 @@ void TargetSetupPage::setImportInfos(const QList<ImportInfo> &infos)
             versionItem->setToolTip(1, status);
 
             // Column 2 (directory):
-            QString dir;
-            if (i.directory.isEmpty()) {
-                if (i.version->supportsShadowBuilds())
-                    dir = QDir::toNativeSeparators(Qt4Target::defaultShadowBuildDirectory(Qt4Project::defaultTopLevelBuildDirectory(m_proFilePath), t));
-                else
-                    dir = QDir::toNativeSeparators(Qt4Project::projectDirectory(m_proFilePath));
-            } else {
-                dir = QDir::toNativeSeparators(i.directory);
-            }
-            versionItem->setText(2, dir);
-            versionItem->setToolTip(2, dir);
+            buildDir = QDir::toNativeSeparators(buildDir);
+            versionItem->setText(2, buildDir);
+            versionItem->setToolTip(2, buildDir);
         }
     }
 
@@ -441,7 +443,8 @@ void TargetSetupPage::resetInfos()
     m_infos.clear();
 }
 
-QPair<QIcon, QString> TargetSetupPage::reportIssues(Qt4ProjectManager::QtVersion *version)
+QPair<QIcon, QString> TargetSetupPage::reportIssues(Qt4ProjectManager::QtVersion *version,
+                                                    const QString &buildDir)
 {
     if (m_proFilePath.isEmpty())
         return qMakePair(QIcon(), QString());
@@ -450,7 +453,7 @@ QPair<QIcon, QString> TargetSetupPage::reportIssues(Qt4ProjectManager::QtVersion
                                               ->getObject<ProjectExplorer::TaskWindow>();
     QTC_ASSERT(taskWindow, return qMakePair(QIcon(), QString()));
 
-    QList<ProjectExplorer::Task> issues = version->reportIssues(m_proFilePath);
+    QList<ProjectExplorer::Task> issues = version->reportIssues(m_proFilePath, buildDir);
 
 
     QString text;
diff --git a/src/plugins/qt4projectmanager/wizards/targetsetuppage.h b/src/plugins/qt4projectmanager/wizards/targetsetuppage.h
index 27985d76227458fbb40572572ea223ca848a0122..9749422638314b5f54a120ce4578de62b3154ac4 100644
--- a/src/plugins/qt4projectmanager/wizards/targetsetuppage.h
+++ b/src/plugins/qt4projectmanager/wizards/targetsetuppage.h
@@ -121,7 +121,7 @@ private slots:
 
 private:
     void resetInfos();
-    QPair<QIcon, QString> reportIssues(QtVersion *version);
+    QPair<QIcon, QString> reportIssues(QtVersion *version, const QString &buildDir);
 
     QList<ImportInfo> m_infos;
     bool m_preferMobile;