diff --git a/src/plugins/qbsprojectmanager/qbsbuildstep.cpp b/src/plugins/qbsprojectmanager/qbsbuildstep.cpp
index 678e4f15f04c0807fdf94cd729c1c0e1415cb8a2..4ac5f4721edc9d68a8c6c628aa7fe7c3027339c6 100644
--- a/src/plugins/qbsprojectmanager/qbsbuildstep.cpp
+++ b/src/plugins/qbsprojectmanager/qbsbuildstep.cpp
@@ -234,16 +234,26 @@ QVariantMap QbsBuildStep::toMap() const
 
 void QbsBuildStep::buildingDone(bool success)
 {
+    m_lastWasSuccess = success;
     // Report errors:
     foreach (const qbs::ErrorItem &item, m_job->error().items())
         createTaskAndOutput(ProjectExplorer::Task::Error, item.description(),
                             item.codeLocation().fileName(), item.codeLocation().line());
 
+    QbsProject *pro = static_cast<QbsProject *>(project());
+    connect(pro, SIGNAL(projectParsingDone(bool)), this, SLOT(reparsingDone()));
+
     // Building can uncover additional target artifacts.
-    static_cast<QbsProject *>(project())->parseCurrentBuildConfiguration(true);
+    // Wait for reparsing to finish, since before that our run configurations may not be valid.
+    pro->parseCurrentBuildConfiguration(true);
+}
 
+void QbsBuildStep::reparsingDone()
+{
+    disconnect(static_cast<QbsProject *>(project()), SIGNAL(projectParsingDone(bool)),
+               this, SLOT(reparsingDone()));
     QTC_ASSERT(m_fi, return);
-    m_fi->reportResult(success);
+    m_fi->reportResult(m_lastWasSuccess);
     m_fi = 0; // do not delete, it is not ours
     m_job->deleteLater();
     m_job = 0;
diff --git a/src/plugins/qbsprojectmanager/qbsbuildstep.h b/src/plugins/qbsprojectmanager/qbsbuildstep.h
index 3b6ceb77c210aaaab7a5ff8a01a3b2c1e5c927f7..9c576b7a4607dd49ee98fd78d1d625f84cf4e4fd 100644
--- a/src/plugins/qbsprojectmanager/qbsbuildstep.h
+++ b/src/plugins/qbsprojectmanager/qbsbuildstep.h
@@ -80,6 +80,7 @@ signals:
 
 private slots:
     void buildingDone(bool success);
+    void reparsingDone();
     void handleTaskStarted(const QString &desciption, int max);
     void handleProgress(int value);
     void handleCommandDescriptionReport(const QString &highlight, const QString &message);
@@ -108,6 +109,7 @@ private:
     QFutureInterface<bool> *m_fi;
     qbs::BuildJob *m_job;
     int m_progressBase;
+    bool m_lastWasSuccess;
     ProjectExplorer::IOutputParser *m_parser;
 
     friend class QbsBuildStepConfigWidget;