diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp
index d25c1377df0b52407e4b83b78200d28a41e14f5a..bff30deccd07a7b891e34dc16553eb0e377f5ab4 100644
--- a/src/plugins/projectexplorer/projectexplorer.cpp
+++ b/src/plugins/projectexplorer/projectexplorer.cpp
@@ -260,6 +260,8 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er
             this, SLOT(updatePreferredWizardKinds()));
     connect(d->m_session, SIGNAL(projectRemoved(ProjectExplorer::Project*)),
             this, SLOT(updatePreferredWizardKinds()));
+    connect(d->m_session, SIGNAL(dependencyChanged(ProjectExplorer::Project*,ProjectExplorer::Project*)),
+            this, SLOT(updateActions()));
 
     d->m_proWindow = new ProjectWindow;
 
@@ -1358,11 +1360,11 @@ void ProjectExplorerPlugin::updateActions()
     Project *startupProject = session()->startupProject();
     bool enableBuildActions = startupProject
                               && ! (d->m_buildManager->isBuilding(startupProject))
-                              && startupProject->hasActiveBuildSettings();
+                              && hasBuildSettings(startupProject);
 
     bool enableBuildActionsContextMenu = d->m_currentProject
                               && ! (d->m_buildManager->isBuilding(d->m_currentProject))
-                              && d->m_currentProject->hasActiveBuildSettings();
+                              && hasBuildSettings(d->m_currentProject);
 
 
     bool hasProjects = !d->m_session->projects().isEmpty();
@@ -1632,12 +1634,21 @@ void ProjectExplorerPlugin::runProjectContextMenu()
     runProjectImpl(d->m_currentProject, ProjectExplorer::Constants::RUNMODE);
 }
 
+bool ProjectExplorerPlugin::hasBuildSettings(Project *pro)
+{
+    const QList<Project *> & projects = d->m_session->projectOrder(pro);
+    foreach(Project *pro, projects)
+        if (pro->activeTarget()->activeBuildConfiguration())
+            return true;
+    return false;
+}
+
 void ProjectExplorerPlugin::runProjectImpl(Project *pro, QString mode)
 {
     if (!pro)
         return;
 
-    if (d->m_projectExplorerSettings.buildBeforeRun && pro->hasActiveBuildSettings()) {
+    if (d->m_projectExplorerSettings.buildBeforeRun && hasBuildSettings(pro)) {
         if (!pro->activeTarget()->activeRunConfiguration()->isEnabled()) {
             if (!showBuildConfigDialog())
                 return;
diff --git a/src/plugins/projectexplorer/projectexplorer.h b/src/plugins/projectexplorer/projectexplorer.h
index 467f124e7e278b6622c8350875b430673a9e6dc8..ea0bc2624b920fc8843a9316222c7db38d781301 100644
--- a/src/plugins/projectexplorer/projectexplorer.h
+++ b/src/plugins/projectexplorer/projectexplorer.h
@@ -207,6 +207,7 @@ private:
     bool parseArguments(const QStringList &arguments, QString *error);
     void runProjectImpl(Project *pro, QString mode);
     void executeRunConfiguration(RunConfiguration *, const QString &mode);
+    bool hasBuildSettings(Project *pro);
     bool showBuildConfigDialog();
 
     void setCurrent(Project *project, QString filePath, Node *node);