diff --git a/src/plugins/qbsprojectmanager/qbsproject.cpp b/src/plugins/qbsprojectmanager/qbsproject.cpp
index 9c4184c5395914fd687a1926eb6b087142232763..da09cb706cb65e13e510ee0af0bd9511fdf9dea6 100644
--- a/src/plugins/qbsprojectmanager/qbsproject.cpp
+++ b/src/plugins/qbsprojectmanager/qbsproject.cpp
@@ -112,7 +112,7 @@ QbsProject::QbsProject(QbsManager *manager, const QString &fileName) :
             this, SLOT(targetWasAdded(ProjectExplorer::Target*)));
     connect(this, SIGNAL(environmentChanged()), this, SLOT(delayParsing()));
 
-    connect(&m_parsingDelay, SIGNAL(timeout()), this, SLOT(parseCurrentBuildConfiguration()));
+    connect(&m_parsingDelay, SIGNAL(timeout()), this, SLOT(startParsing()));
 
     updateDocuments(QSet<QString>() << fileName);
 
@@ -357,6 +357,11 @@ void QbsProject::buildConfigurationChanged(BuildConfiguration *bc)
     }
 }
 
+void QbsProject::startParsing()
+{
+    parseCurrentBuildConfiguration(false);
+}
+
 void QbsProject::delayParsing()
 {
     m_parsingDelay.start();
@@ -368,10 +373,13 @@ void QbsProject::delayForcedParsing()
     delayParsing();
 }
 
-void QbsProject::parseCurrentBuildConfiguration()
+void QbsProject::parseCurrentBuildConfiguration(bool force)
 {
     m_parsingDelay.stop();
 
+    if (!m_forceParsing)
+        m_forceParsing = force;
+
     if (!activeTarget())
         return;
     QbsBuildConfiguration *bc = qobject_cast<QbsBuildConfiguration *>(activeTarget()->activeBuildConfiguration());
diff --git a/src/plugins/qbsprojectmanager/qbsproject.h b/src/plugins/qbsprojectmanager/qbsproject.h
index d43ead569cfb910610623aabb002925d06d00c54..d113684a93837065c617c9debe45f47c89c0fe88 100644
--- a/src/plugins/qbsprojectmanager/qbsproject.h
+++ b/src/plugins/qbsprojectmanager/qbsproject.h
@@ -90,6 +90,7 @@ public:
     QString profileForTarget(const ProjectExplorer::Target *t) const;
     bool isParsing() const;
     bool hasParseResult() const;
+    void parseCurrentBuildConfiguration(bool force);
 
     Utils::FileName defaultBuildDirectory() const;
     static Utils::FileName defaultBuildDirectory(const QString &path);
@@ -101,7 +102,6 @@ public:
 
 public slots:
     void invalidate();
-    void parseCurrentBuildConfiguration();
     void delayParsing();
     void delayForcedParsing();
 
@@ -117,6 +117,7 @@ private slots:
     void targetWasAdded(ProjectExplorer::Target *t);
     void changeActiveTarget(ProjectExplorer::Target *t);
     void buildConfigurationChanged(ProjectExplorer::BuildConfiguration *bc);
+    void startParsing();
 
 private:
     bool fromMap(const QVariantMap &map);
diff --git a/src/plugins/qbsprojectmanager/qbsprojectmanagerplugin.cpp b/src/plugins/qbsprojectmanager/qbsprojectmanagerplugin.cpp
index f02597b715ed21f8f6784d087ae3b221cc514c1b..070d424886fbed1337a708fab0ae86e891b82546 100644
--- a/src/plugins/qbsprojectmanager/qbsprojectmanagerplugin.cpp
+++ b/src/plugins/qbsprojectmanager/qbsprojectmanagerplugin.cpp
@@ -405,7 +405,7 @@ void QbsProjectManagerPlugin::buildProducts(QbsProject *project, const QStringLi
 void QbsProjectManagerPlugin::reparseCurrentProject()
 {
     if (m_currentProject)
-        m_currentProject->parseCurrentBuildConfiguration();
+        m_currentProject->parseCurrentBuildConfiguration(true);
 }
 
 } // namespace Internal