diff --git a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp
index 5731fa5e7996792a380ecd0856c0dd67bb4531a3..bdf01b2ce47aeaf6b79f0c36f8fdb7512d4bdda0 100644
--- a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp
+++ b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp
@@ -222,7 +222,7 @@ bool Qt4ProjectManagerPlugin::initialize(const QStringList &arguments, QString *
     connect(m_cleanSubProjectContextMenu, SIGNAL(triggered()), m_qt4ProjectManager, SLOT(cleanSubDirContextMenu()));
 
     m_buildSubProjectAction = new Utils::ParameterAction(tr("Build Subproject"), tr("Build Subproject \"%1\""),
-                                                         Utils::ParameterAction::EnabledWithParameter, this);
+                                                         Utils::ParameterAction::AlwaysEnabled, this);
     command = am->registerAction(m_buildSubProjectAction, Constants::BUILDSUBDIR, projectContext);
     command->setAttribute(Core::Command::CA_Hide);
     command->setAttribute(Core::Command::CA_UpdateText);
@@ -237,7 +237,7 @@ bool Qt4ProjectManagerPlugin::initialize(const QStringList &arguments, QString *
     connect(m_runQMakeAction, SIGNAL(triggered()), m_qt4ProjectManager, SLOT(runQMake()));
 
     m_rebuildSubProjectAction = new Utils::ParameterAction(tr("Rebuild Subproject"), tr("Rebuild Subproject \"%1\""),
-                                                           Utils::ParameterAction::EnabledWithParameter, this);
+                                                           Utils::ParameterAction::AlwaysEnabled, this);
     command = am->registerAction(m_rebuildSubProjectAction, Constants::REBUILDSUBDIR, projectContext);
     command->setAttribute(Core::Command::CA_Hide);
     command->setAttribute(Core::Command::CA_UpdateText);
@@ -246,7 +246,7 @@ bool Qt4ProjectManagerPlugin::initialize(const QStringList &arguments, QString *
     connect(m_rebuildSubProjectAction, SIGNAL(triggered()), m_qt4ProjectManager, SLOT(rebuildSubDirContextMenu()));
 
     m_cleanSubProjectAction = new Utils::ParameterAction(tr("Clean Subproject"), tr("Clean Subproject \"%1\""),
-                                                         Utils::ParameterAction::EnabledWithParameter, this);
+                                                         Utils::ParameterAction::AlwaysEnabled, this);
     command = am->registerAction(m_cleanSubProjectAction, Constants::CLEANSUBDIR, projectContext);
     command->setAttribute(Core::Command::CA_Hide);
     command->setAttribute(Core::Command::CA_UpdateText);
@@ -264,16 +264,12 @@ bool Qt4ProjectManagerPlugin::initialize(const QStringList &arguments, QString *
     mbuild->addAction(command, ProjectExplorer::Constants::G_BUILD_BUILD);
     connect(m_buildFileAction, SIGNAL(triggered()), m_qt4ProjectManager, SLOT(buildSubDirContextMenu()));
 
-    connect(m_projectExplorer,
-            SIGNAL(aboutToShowContextMenu(ProjectExplorer::Project*,ProjectExplorer::Node*)),
-            this, SLOT(updateContextMenu(ProjectExplorer::Project*,ProjectExplorer::Node*)));
-
     connect(m_projectExplorer->buildManager(), SIGNAL(buildStateChanged(ProjectExplorer::Project*)),
             this, SLOT(buildStateChanged(ProjectExplorer::Project*)));
     connect(m_projectExplorer->session(), SIGNAL(startupProjectChanged(ProjectExplorer::Project*)),
             this, SLOT(startupProjectChanged()));
     connect(m_projectExplorer, SIGNAL(currentNodeChanged(ProjectExplorer::Node*,ProjectExplorer::Project*)),
-            this, SLOT(currentNodeChanged(ProjectExplorer::Node*,ProjectExplorer::Project*)));
+            this, SLOT(updateContextActions(ProjectExplorer::Node*,ProjectExplorer::Project*)));
 
     Core::ActionContainer *contextMenu = am->createMenu(Qt4ProjectManager::Constants::M_CONTEXT);
 
@@ -319,44 +315,6 @@ void Qt4ProjectManagerPlugin::extensionsInitialized()
     m_qt4ProjectManager->init();
 }
 
-void Qt4ProjectManagerPlugin::updateContextMenu(Project *project,
-                                                ProjectExplorer::Node *node)
-{
-    m_qt4ProjectManager->setContextProject(project);
-    m_qt4ProjectManager->setContextNode(node);
-    m_runQMakeActionContextMenu->setEnabled(false);
-    m_buildSubProjectContextMenu->setEnabled(false);
-    m_rebuildSubProjectContextMenu->setEnabled(false);
-    m_cleanSubProjectContextMenu->setEnabled(false);
-
-    Qt4ProFileNode *proFileNode = qobject_cast<Qt4ProFileNode *>(node);
-    Qt4Project *qt4Project = qobject_cast<Qt4Project *>(project);
-    if (qt4Project && proFileNode
-            && qt4Project->activeTarget()
-            && qt4Project->activeTarget()->activeQt4BuildConfiguration()) {
-        m_runQMakeActionContextMenu->setVisible(true);
-        m_buildSubProjectContextMenu->setVisible(true);
-        m_subProjectRebuildSeparator->setVisible(true);
-        m_rebuildSubProjectContextMenu->setVisible(true);
-        m_cleanSubProjectContextMenu->setVisible(true);
-
-        if (!m_projectExplorer->buildManager()->isBuilding(project)) {
-            if (qt4Project->activeTarget()->activeQt4BuildConfiguration()->qmakeStep())
-                m_runQMakeActionContextMenu->setEnabled(true);
-            m_buildSubProjectContextMenu->setEnabled(true);
-            m_rebuildSubProjectContextMenu->setEnabled(true);
-            m_cleanSubProjectContextMenu->setEnabled(true);
-        }
-    } else {
-        m_runQMakeActionContextMenu->setVisible(false);
-        m_buildSubProjectContextMenu->setVisible(false);
-        m_subProjectRebuildSeparator->setVisible(false);
-        m_rebuildSubProjectContextMenu->setVisible(false);
-        m_cleanSubProjectContextMenu->setVisible(false);
-    }
-}
-
-
 void Qt4ProjectManagerPlugin::startupProjectChanged()
 {
     if (m_previousStartupProject)
@@ -401,11 +359,12 @@ void Qt4ProjectManagerPlugin::updateRunQMakeAction()
     m_runQMakeAction->setEnabled(enable);
 }
 
-void Qt4ProjectManagerPlugin::currentNodeChanged(ProjectExplorer::Node *node, ProjectExplorer::Project *project)
+void Qt4ProjectManagerPlugin::updateContextActions(ProjectExplorer::Node *node, ProjectExplorer::Project *project)
 {
     m_addLibraryActionContextMenu->setEnabled(qobject_cast<Qt4ProFileNode *>(node));
 
-    Qt4Project *pro = qobject_cast<Qt4Project *>(project);
+    Qt4ProFileNode *proFileNode = qobject_cast<Qt4ProFileNode *>(node);
+    Qt4Project *qt4Project = qobject_cast<Qt4Project *>(project);
     Qt4ProFileNode *subProjectNode = node ? qobject_cast<Qt4ProFileNode *>(node->projectNode()) : 0;
     ProjectExplorer::FileNode *fileNode = qobject_cast<ProjectExplorer::FileNode *>(node);
     bool buildFilePossible = subProjectNode && fileNode
@@ -413,10 +372,10 @@ void Qt4ProjectManagerPlugin::currentNodeChanged(ProjectExplorer::Node *node, Pr
             && !subProjectNode->isDebugAndRelease();
 
     m_qt4ProjectManager->setContextNode(subProjectNode);
-    m_qt4ProjectManager->setContextProject(pro);
+    m_qt4ProjectManager->setContextProject(qt4Project);
     m_qt4ProjectManager->setContextFile(buildFilePossible ? fileNode : 0);
 
-    bool subProjectActionsVisible = pro && subProjectNode && (subProjectNode != pro->rootProjectNode());
+    bool subProjectActionsVisible = qt4Project && subProjectNode && (subProjectNode != qt4Project->rootProjectNode());
 
     QString subProjectName;
     if (subProjectActionsVisible)
@@ -428,17 +387,38 @@ void Qt4ProjectManagerPlugin::currentNodeChanged(ProjectExplorer::Node *node, Pr
     m_buildSubProjectContextMenu->setParameter(subProjectName);
     m_buildFileAction->setParameter(node ? QFileInfo(node->path()).fileName() : QString());
 
+    Qt4BuildConfiguration *buildConfiguration = qt4Project->activeTarget() ?
+            qt4Project->activeTarget()->activeQt4BuildConfiguration() : 0;
+    bool isProjectNode = qt4Project && proFileNode && buildConfiguration;
+    bool enabled = subProjectActionsVisible && !m_projectExplorer->buildManager()->isBuilding(project);
+
     m_buildSubProjectAction->setVisible(subProjectActionsVisible);
     m_rebuildSubProjectAction->setVisible(subProjectActionsVisible);
     m_cleanSubProjectAction->setVisible(subProjectActionsVisible);
+    m_buildSubProjectContextMenu->setVisible(subProjectActionsVisible && isProjectNode);
+    m_subProjectRebuildSeparator->setVisible(subProjectActionsVisible && isProjectNode);
+    m_rebuildSubProjectContextMenu->setVisible(subProjectActionsVisible && isProjectNode);
+    m_cleanSubProjectContextMenu->setVisible(subProjectActionsVisible && isProjectNode);
+    m_runQMakeActionContextMenu->setVisible(subProjectActionsVisible && isProjectNode
+                                            && buildConfiguration->qmakeStep());
     m_buildFileAction->setVisible(buildFilePossible);
+
+    m_buildSubProjectAction->setEnabled(enabled);
+    m_rebuildSubProjectAction->setEnabled(enabled);
+    m_cleanSubProjectAction->setEnabled(enabled);
+    m_buildSubProjectContextMenu->setEnabled(enabled && isProjectNode);
+    m_rebuildSubProjectContextMenu->setEnabled(enabled && isProjectNode);
+    m_cleanSubProjectContextMenu->setEnabled(enabled && isProjectNode);
+    m_runQMakeActionContextMenu->setEnabled(enabled && isProjectNode && buildConfiguration->qmakeStep());
 }
 
 void Qt4ProjectManagerPlugin::buildStateChanged(ProjectExplorer::Project *pro)
 {
     ProjectExplorer::Project *currentProject = m_projectExplorer->currentProject();
-    if (pro == currentProject)
+    if (pro == currentProject) {
         updateRunQMakeAction();
+        updateContextActions(m_projectExplorer->currentNode(), pro);
+    }
 }
 
 Q_EXPORT_PLUGIN(Qt4ProjectManagerPlugin)
diff --git a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.h b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.h
index e752677e4d50680ab922f4d1d2543ac1c7768f20..b53434cde131d160080cf04c0113513e439c30dd 100644
--- a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.h
+++ b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.h
@@ -71,12 +71,10 @@ public:
     void extensionsInitialized();
 
 private slots:
-    void updateContextMenu(ProjectExplorer::Project *project,
-                           ProjectExplorer::Node *node);
     void startupProjectChanged();
     void activeTargetChanged();
     void updateRunQMakeAction();
-    void currentNodeChanged(ProjectExplorer::Node *node, ProjectExplorer::Project *project);
+    void updateContextActions(ProjectExplorer::Node *node, ProjectExplorer::Project *project);
     void buildStateChanged(ProjectExplorer::Project *pro);
 
 #ifdef WITH_TESTS