diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp
index 48963be..c46b17e 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp
@@ -115,6 +115,11 @@ MaemoRunConfiguration::~MaemoRunConfiguration()
 {
 }

+QString MaemoRunConfiguration::proFilePath() const
+{
+    return m_proFilePath;
+}
+
 Qt4Target *MaemoRunConfiguration::qt4Target() const
 {
     return static_cast<Qt4Target *>(target());
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.h b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.h
index d3391ef..4106a81 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.h
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.h
@@ -80,6 +80,8 @@ public:
     MaemoRunConfiguration(Qt4Target *parent, const QString &proFilePath);
     virtual ~MaemoRunConfiguration();

+    QString proFilePath() const;
+
     using ProjectExplorer::RunConfiguration::isEnabled;
     bool isEnabled(ProjectExplorer::BuildConfiguration *config) const;
     QWidget *createConfigurationWidget();
diff --git a/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp b/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp
index 89efb16..c72b5de 100644
--- a/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp
+++ b/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp
@@ -256,7 +256,7 @@ static inline QString fixBaseNameTarget(const QString &in)

 QString S60DeviceRunConfiguration::targetName() const
 {
-    TargetInformation ti = qt4Target()->qt4Project()->rootProjectNode()->targetInformation(projectFilePath());
+    TargetInformation ti = qt4Target()->qt4Project()->rootProjectNode()->targetInformation(proFilePath());
     if (!ti.valid)
         return QString();
     return ti.target;
@@ -347,7 +347,7 @@ QString S60DeviceRunConfiguration::localExecutableFileName() const
     switch (toolChain) {
     case ProjectExplorer::ToolChain_GCCE_GNUPOC:
     case ProjectExplorer::ToolChain_RVCT_ARMV5_GNUPOC: {
-        TargetInformation ti = qt4Target()->qt4Project()->rootProjectNode()->targetInformation(projectFilePath());
+        TargetInformation ti = qt4Target()->qt4Project()->rootProjectNode()->targetInformation(proFilePath());
         if (!ti.valid)
             return QString();
         return executableFromPackageUnix(ti.buildDir + QLatin1Char('/') + ti.target + QLatin1String("_template.pkg"));
@@ -392,7 +392,7 @@ quint32 S60DeviceRunConfiguration::executableUid() const
     return uid;
 }

-QString S60DeviceRunConfiguration::projectFilePath() const
+QString S60DeviceRunConfiguration::proFilePath() const
 {
     return m_proFilePath;
 }
diff --git a/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.h b/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.h
index bf052ea..1f616b6 100644
--- a/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.h
+++ b/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.h
@@ -84,7 +84,7 @@ public:
     QString commandLineArguments() const;
     void setCommandLineArguments(const QString &args);

-    QString projectFilePath() const;
+    QString proFilePath() const;

     ProjectExplorer::ToolChainType toolChainType() const;

diff --git a/src/plugins/qt4projectmanager/qt-s60/s60emulatorrunconfiguration.cpp b/src/plugins/qt4projectmanager/qt-s60/s60emulatorrunconfiguration.cpp
index 1d04d69..c66010f 100644
--- a/src/plugins/qt4projectmanager/qt-s60/s60emulatorrunconfiguration.cpp
+++ b/src/plugins/qt4projectmanager/qt-s60/s60emulatorrunconfiguration.cpp
@@ -137,6 +137,11 @@ Qt4Target *S60EmulatorRunConfiguration::qt4Target() const
     return static_cast<Qt4Target *>(target());
 }

+QString S60EmulatorRunConfiguration::proFilePath() const
+{
+    return m_proFilePath;
+}
+
 bool S60EmulatorRunConfiguration::isEnabled(ProjectExplorer::BuildConfiguration *configuration) const
 {
     if (!m_validParse)
diff --git a/src/plugins/qt4projectmanager/qt-s60/s60emulatorrunconfiguration.h b/src/plugins/qt4projectmanager/qt-s60/s60emulatorrunconfiguration.h
index b1ab903..042a6a1 100644
--- a/src/plugins/qt4projectmanager/qt-s60/s60emulatorrunconfiguration.h
+++ b/src/plugins/qt4projectmanager/qt-s60/s60emulatorrunconfiguration.h
@@ -67,6 +67,7 @@ public:
     virtual ~S60EmulatorRunConfiguration();

     Qt4Target *qt4Target() const;
+    QString proFilePath() const;

     using ProjectExplorer::RunConfiguration::isEnabled;
     bool isEnabled(ProjectExplorer::BuildConfiguration *configuration) const;
diff --git a/src/plugins/qt4projectmanager/qt4nodes.cpp b/src/plugins/qt4projectmanager/qt4nodes.cpp
index 52d0335..8b7b23e 100644
--- a/src/plugins/qt4projectmanager/qt4nodes.cpp
+++ b/src/plugins/qt4projectmanager/qt4nodes.cpp
@@ -40,8 +40,10 @@
 #include "qtuicodemodelsupport.h"
 #include "qt4buildconfiguration.h"
 #include "qmakestep.h"
+#include "findqt4profiles.h"

 #include <projectexplorer/nodesvisitor.h>
+#include <projectexplorer/session.h>

 #include <coreplugin/editormanager/editormanager.h>
 #include <coreplugin/editormanager/ieditor.h>
@@ -849,11 +851,52 @@ bool Qt4PriFileNode::addSubProjects(const QStringList &proFilePaths)
     QStringList failedFiles;
     changeFiles(ProjectExplorer::ProjectFileType, uniqueProFilePaths, &failedFiles, AddToProFile);

+    if (failedFiles.isEmpty()) {
+        const ProjectExplorer::Project *project =
+                ProjectExplorer::ProjectExplorerPlugin::instance()->session()->projectForNode(this);
+        const QList<ProjectExplorer::Target *> targets = project->targets();
+        // check if added project is of app type, do it recursively (since added pro could contains a few apps)
+        FindQt4ProFiles findQt4ProFiles;
+        QList<Qt4ProFileNode *> proFileNodes = findQt4ProFiles(this); // take subtree of *this
+        foreach (Qt4ProFileNode *proFileNode, proFileNodes) { // for each pro from subtree
+            if (proFilePaths.contains(proFileNode->path())) { // check if it's added subproject
+                const QList<Qt4ProFileNode *> subNodesOfAddedNode = findQt4ProFiles(proFileNode); // take subtree of it
+                foreach (Qt4ProFileNode *subNodeOfAddedNode, subNodesOfAddedNode) { // for each of added subtree
+                    if (subNodeOfAddedNode->projectType() == ApplicationTemplate) { // check if it's of app type
+                        foreach (ProjectExplorer::Target *t, targets) { // and add it for each qt target
+                            Qt4Target *target = qobject_cast<Qt4Target *>(t);
+                            if (target)
+                                target->addRunConfigurationForPath(subNodeOfAddedNode->path());
+                        }
+                    }
+                }
+            }
+        }
+    }
+
     return failedFiles.isEmpty();
 }

 bool Qt4PriFileNode::removeSubProjects(const QStringList &proFilePaths)
 {
+    QStringList runConfigurationPaths;
+
+    const ProjectExplorer::Project *project =
+            ProjectExplorer::ProjectExplorerPlugin::instance()->session()->projectForNode(this);
+    // check if removed project is of app type, do it recursively (since added pro could contains a few apps)
+    FindQt4ProFiles findQt4ProFiles;
+    QList<Qt4ProFileNode *> proFileNodes = findQt4ProFiles(this); // take subtree of *this
+    foreach (Qt4ProFileNode *proFileNode, proFileNodes) { // for each pro from subtree
+        if (proFilePaths.contains(proFileNode->path())) { // check if it's removed subproject
+            const QList<Qt4ProFileNode *> subNodesOfRemovedNode = findQt4ProFiles(proFileNode); // take subtree of it
+            foreach (Qt4ProFileNode *subNodeOfRemovedNode, subNodesOfRemovedNode) { // for each of removed subtree
+                if (subNodeOfRemovedNode->projectType() == ApplicationTemplate) { // check if it's of app type
+                    runConfigurationPaths.append(subNodeOfRemovedNode->path());
+                }
+            }
+        }
+    }
+
     QStringList failedOriginalFiles;
     changeFiles(ProjectExplorer::ProjectFileType, proFilePaths, &failedOriginalFiles, RemoveFromProFile);

@@ -864,6 +907,18 @@ bool Qt4PriFileNode::removeSubProjects(const QStringList &proFilePaths)
     QStringList failedSimplifiedFiles;
     changeFiles(ProjectExplorer::ProjectFileType, simplifiedProFiles, &failedSimplifiedFiles, RemoveFromProFile);

+    if (failedSimplifiedFiles.isEmpty()) {
+        const QList<ProjectExplorer::Target *> targets = project->targets();
+
+        foreach (QString runConfigurationPath, runConfigurationPaths) {
+            foreach (ProjectExplorer::Target *t, targets) { // and removed it from each qt target
+                Qt4Target *target = qobject_cast<Qt4Target *>(t);
+                if (target)
+                    target->removeRunConfigurationsForPath(runConfigurationPath);
+            }
+        }
+    }
+
     return failedSimplifiedFiles.isEmpty();
 }

diff --git a/src/plugins/qt4projectmanager/qt4target.cpp b/src/plugins/qt4projectmanager/qt4target.cpp
index e7d7a37..52db761 100644
--- a/src/plugins/qt4projectmanager/qt4target.cpp
+++ b/src/plugins/qt4projectmanager/qt4target.cpp
@@ -371,6 +371,31 @@ void Qt4Target::addRunConfigurationForPath(const QString &proFilePath)
         addRunConfiguration(new MaemoRunConfiguration(this, proFilePath));
 }

+void Qt4Target::removeRunConfigurationsForPath(const QString &proFilePath)
+{
+    const QList<RunConfiguration *> configurations = runConfigurations();
+    foreach (RunConfiguration *configuration, configurations) {
+        if (id() == QLatin1String(Constants::DESKTOP_TARGET_ID) ||
+            id() == QLatin1String(Constants::QT_SIMULATOR_TARGET_ID)) {
+            Qt4RunConfiguration *conf = qobject_cast<Qt4RunConfiguration *>(configuration);
+            if (conf && conf->proFilePath() == proFilePath)
+                removeRunConfiguration(conf);
+        } else if (id() == QLatin1String(Constants::S60_EMULATOR_TARGET_ID)) {
+            S60EmulatorRunConfiguration *conf = qobject_cast<S60EmulatorRunConfiguration *>(configuration);
+            if (conf && conf->proFilePath() == proFilePath)
+                removeRunConfiguration(conf);
+        } else if (id() == QLatin1String(Constants::S60_DEVICE_TARGET_ID)) {
+            S60DeviceRunConfiguration *conf = qobject_cast<S60DeviceRunConfiguration *>(configuration);
+            if (conf && conf->proFilePath() == proFilePath)
+                removeRunConfiguration(conf);
+        } else if (id() == QLatin1String(Constants::MAEMO_DEVICE_TARGET_ID)) {
+            MaemoRunConfiguration *conf = qobject_cast<MaemoRunConfiguration *>(configuration);
+            if (conf && conf->proFilePath() == proFilePath)
+                removeRunConfiguration(conf);
+        }
+    }
+}
+
 QList<ProjectExplorer::ToolChainType> Qt4Target::filterToolChainTypes(const QList<ProjectExplorer::ToolChainType> &candidates) const
 {
     QList<ProjectExplorer::ToolChainType> tmp(candidates);
diff --git a/src/plugins/qt4projectmanager/qt4target.h b/src/plugins/qt4projectmanager/qt4target.h
index 200ac51..b3b40c2 100644
--- a/src/plugins/qt4projectmanager/qt4target.h
+++ b/src/plugins/qt4projectmanager/qt4target.h
@@ -81,6 +81,7 @@ public:
                                                               QString additionalArguments,
                                                               QString directory);
     void addRunConfigurationForPath(const QString &proFilePath);
+    void removeRunConfigurationsForPath(const QString &proFilePath);

     Internal::Qt4BuildConfigurationFactory *buildConfigurationFactory() const;
     ProjectExplorer::DeployConfigurationFactory *deployConfigurationFactory() const;
