diff --git a/src/plugins/cmakeprojectmanager/builddirmanager.cpp b/src/plugins/cmakeprojectmanager/builddirmanager.cpp
index d4944d75337cb031ccc83f0cbdef2caa31e278fe..e5b620fc85ad4082077679a3e23619bda9ee6aec 100644
--- a/src/plugins/cmakeprojectmanager/builddirmanager.cpp
+++ b/src/plugins/cmakeprojectmanager/builddirmanager.cpp
@@ -273,9 +273,11 @@ CMakeConfig BuildDirManager::parsedConfiguration() const
     Utils::FileName cacheFile = workDirectory();
     cacheFile.appendPath(QLatin1String("CMakeCache.txt"));
     QString errorMessage;
-    CMakeConfig result = parseConfiguration(cacheFile, sourceDirectory(), &errorMessage);
+    CMakeConfig result = parseConfiguration(cacheFile, &errorMessage);
     if (!errorMessage.isEmpty())
         emit errorOccured(errorMessage);
+    if (CMakeConfigItem::valueOf("CMAKE_HOME_DIRECTORY", result) != sourceDirectory().toString().toUtf8())
+        emit errorOccured(tr("The build directory is not for %1").arg(sourceDirectory().toUserOutput()));
 
     return result;
 }
@@ -542,7 +544,6 @@ static CMakeConfigItem::Type fromByteArray(const QByteArray &type) {
 }
 
 CMakeConfig BuildDirManager::parseConfiguration(const Utils::FileName &cacheFile,
-                                                const Utils::FileName &sourceDir,
                                                 QString *errorMessage)
 {
     CMakeConfig result;
@@ -579,19 +580,7 @@ CMakeConfig BuildDirManager::parseConfiguration(const Utils::FileName &cacheFile
             advancedSet.insert(key.left(key.count() - 9 /* "-ADVANCED" */));
         } else {
             CMakeConfigItem::Type t = fromByteArray(type);
-            if (t != CMakeConfigItem::INTERNAL)
-                result << CMakeConfigItem(key, t, documentation, value);
-
-            // Sanity checks:
-            if (key == "CMAKE_HOME_DIRECTORY") {
-                const Utils::FileName actualSourceDir = Utils::FileName::fromUserInput(QString::fromUtf8(value));
-                if (actualSourceDir != sourceDir) {
-                    if (errorMessage)
-                        *errorMessage = tr("Build directory contains a build of the wrong project (%1).")
-                            .arg(actualSourceDir.toUserOutput());
-                    return CMakeConfig();
-                }
-            }
+            result << CMakeConfigItem(key, t, documentation, value);
         }
     }
 
diff --git a/src/plugins/cmakeprojectmanager/builddirmanager.h b/src/plugins/cmakeprojectmanager/builddirmanager.h
index 94a4c7b2b8a55d4187791eee0b6dd321c28018db..77d0fc1dc0c5815e512a484894f12e2bc41df64c 100644
--- a/src/plugins/cmakeprojectmanager/builddirmanager.h
+++ b/src/plugins/cmakeprojectmanager/builddirmanager.h
@@ -88,7 +88,6 @@ public:
     CMakeConfig parsedConfiguration() const;
 
     static CMakeConfig parseConfiguration(const Utils::FileName &cacheFile,
-                                          const Utils::FileName &sourceDir,
                                           QString *errorMessage);
 
 signals:
diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp
index 8f17f2937db6bbf2f0102f5ba35dd8a0bd03055f..c66779c2c5f12d958522f2cf49b4cb890fafe1d9 100644
--- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp
+++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp
@@ -197,7 +197,9 @@ QList<ConfigModel::DataItem> CMakeBuildConfiguration::completeCMakeConfiguration
     if (m_completeConfigurationCache.isEmpty())
         m_completeConfigurationCache = m_buildDirManager->parsedConfiguration();
 
-    return Utils::transform(m_completeConfigurationCache, [](const CMakeConfigItem &i) {
+    CMakeConfig cache = Utils::filtered(m_completeConfigurationCache,
+                                        [](const CMakeConfigItem &i) { return i.type != CMakeConfigItem::INTERNAL; });
+    return Utils::transform(cache, [](const CMakeConfigItem &i) {
         ConfigModel::DataItem j;
         j.key = QString::fromUtf8(i.key);
         j.value = QString::fromUtf8(i.value);