diff --git a/src/plugins/analyzerbase/analyzerruncontrolfactory.cpp b/src/plugins/analyzerbase/analyzerruncontrolfactory.cpp
index c3e30dcc3e75879f96f5a627d9891e4933e3ed14..b88be56baf3c2cb0c73247df694a25987857060b 100644
--- a/src/plugins/analyzerbase/analyzerruncontrolfactory.cpp
+++ b/src/plugins/analyzerbase/analyzerruncontrolfactory.cpp
@@ -81,8 +81,9 @@ RunControl *AnalyzerRunControlFactory::create(RunConfiguration *runConfiguration
     return rc;
 }
 
-IRunConfigurationAspect *AnalyzerRunControlFactory::createRunConfigurationAspect()
+IRunConfigurationAspect *AnalyzerRunControlFactory::createRunConfigurationAspect(RunConfiguration *rc)
 {
+    Q_UNUSED(rc);
     return new AnalyzerRunConfigurationAspect;
 }
 
diff --git a/src/plugins/analyzerbase/analyzerruncontrolfactory.h b/src/plugins/analyzerbase/analyzerruncontrolfactory.h
index d3c7081041d4507f303e08c47b811abd0589319e..83da6acd9e23e247f28c8b7f2bc9b978877427c6 100644
--- a/src/plugins/analyzerbase/analyzerruncontrolfactory.h
+++ b/src/plugins/analyzerbase/analyzerruncontrolfactory.h
@@ -49,8 +49,8 @@ public:
     ProjectExplorer::RunControl *create(RunConfiguration *runConfiguration,
                                         ProjectExplorer::RunMode mode,
                                         QString *errorMessage);
-    ProjectExplorer::IRunConfigurationAspect *createRunConfigurationAspect();
-    ProjectExplorer::RunConfigWidget *createConfigurationWidget(RunConfiguration *runConfiguration);
+    ProjectExplorer::IRunConfigurationAspect *createRunConfigurationAspect(ProjectExplorer::RunConfiguration *rc);
+    ProjectExplorer::RunConfigWidget *createConfigurationWidget(ProjectExplorer::RunConfiguration *runConfiguration);
 
 };
 
diff --git a/src/plugins/android/androidrunfactories.cpp b/src/plugins/android/androidrunfactories.cpp
index 9ced92ed6fecc9a171d852b8fe4a7dcd8160c846..210e4cce786ba9b93fefce20b834f9cf08daab62 100644
--- a/src/plugins/android/androidrunfactories.cpp
+++ b/src/plugins/android/androidrunfactories.cpp
@@ -102,10 +102,8 @@ QString AndroidRunConfigurationFactory::displayNameForId(const Core::Id id) cons
     return QFileInfo(pathFromId(id)).completeBaseName();
 }
 
-RunConfiguration *AndroidRunConfigurationFactory::create(Target *parent, const Core::Id id)
+RunConfiguration *AndroidRunConfigurationFactory::doCreate(Target *parent, const Core::Id id)
 {
-    if (!canCreate(parent, id))
-        return 0;
     return new AndroidRunConfiguration(parent, id, pathFromId(id));
 }
 
diff --git a/src/plugins/android/androidrunfactories.h b/src/plugins/android/androidrunfactories.h
index 599d074092eadd0514fa2d4aa6d693d02c650636..c605e506b62317729b43c73db824908c09c7f6fc 100644
--- a/src/plugins/android/androidrunfactories.h
+++ b/src/plugins/android/androidrunfactories.h
@@ -54,7 +54,6 @@ public:
     QList<Core::Id> availableCreationIds(ProjectExplorer::Target *parent) const;
 
     bool canCreate(ProjectExplorer::Target *parent, const Core::Id id) const;
-    ProjectExplorer::RunConfiguration *create(ProjectExplorer::Target *parent, const Core::Id id);
 
     bool canRestore(ProjectExplorer::Target *parent, const QVariantMap &map) const;
     ProjectExplorer::RunConfiguration *restore(ProjectExplorer::Target *parent, const QVariantMap &map);
@@ -65,6 +64,11 @@ public:
     bool canHandle(ProjectExplorer::Target *t) const;
     QList<ProjectExplorer::RunConfiguration *> runConfigurationsForNode(ProjectExplorer::Target *t,
                                                                         ProjectExplorer::Node *n);
+
+private:
+    bool canHandle(ProjectExplorer::Target *t) const;
+
+    ProjectExplorer::RunConfiguration *doCreate(ProjectExplorer::Target *parent, const Core::Id id);
 };
 
 class AndroidRunControlFactory : public ProjectExplorer::IRunControlFactory
diff --git a/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp
index 2e804f53554f063a897a38b6e7fd07787dbde8cf..1f834cca4916608cd3c077d41e1f00f799d2809a 100644
--- a/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp
+++ b/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp
@@ -513,11 +513,9 @@ bool CMakeRunConfigurationFactory::canCreate(ProjectExplorer::Target *parent, co
     return project->hasBuildTarget(buildTargetFromId(id));
 }
 
-ProjectExplorer::RunConfiguration *CMakeRunConfigurationFactory::create(ProjectExplorer::Target *parent,
-                                                                        const Core::Id id)
+ProjectExplorer::RunConfiguration *CMakeRunConfigurationFactory::doCreate(ProjectExplorer::Target *parent,
+                                                                          const Core::Id id)
 {
-    if (!canCreate(parent, id))
-        return 0;
     CMakeProject *project = static_cast<CMakeProject *>(parent->project());
     const QString title(buildTargetFromId(id));
     const CMakeBuildTarget &ct = project->buildTargetForTitle(title);
diff --git a/src/plugins/cmakeprojectmanager/cmakerunconfiguration.h b/src/plugins/cmakeprojectmanager/cmakerunconfiguration.h
index 65212e37472d379d7f5936ca1b3346369bd70f17..ab7728b8ac2fe6e24df97af6d467943b8ff25870 100644
--- a/src/plugins/cmakeprojectmanager/cmakerunconfiguration.h
+++ b/src/plugins/cmakeprojectmanager/cmakerunconfiguration.h
@@ -162,7 +162,6 @@ public:
     ~CMakeRunConfigurationFactory();
 
     bool canCreate(ProjectExplorer::Target *parent, const Core::Id id) const;
-    ProjectExplorer::RunConfiguration *create(ProjectExplorer::Target *parent, const Core::Id id);
     bool canRestore(ProjectExplorer::Target *parent, const QVariantMap &map) const;
     ProjectExplorer::RunConfiguration *restore(ProjectExplorer::Target *parent, const QVariantMap &map);
     bool canClone(ProjectExplorer::Target *parent, ProjectExplorer::RunConfiguration *product) const;
@@ -176,6 +175,8 @@ public:
 
 private:
     bool canHandle(ProjectExplorer::Target *parent) const;
+
+    ProjectExplorer::RunConfiguration *doCreate(ProjectExplorer::Target *parent, const Core::Id id);
 };
 
 }
diff --git a/src/plugins/madde/maemorunfactories.cpp b/src/plugins/madde/maemorunfactories.cpp
index 54ca2df1a5c25af7ae92d5aff7e908efc04cf44a..d0cd8cfe042d85dd1d39446183a7e2acb2242c26 100644
--- a/src/plugins/madde/maemorunfactories.cpp
+++ b/src/plugins/madde/maemorunfactories.cpp
@@ -132,10 +132,8 @@ QString MaemoRunConfigurationFactory::displayNameForId(const Core::Id id) const
         + QLatin1String(" (on remote Maemo device)");
 }
 
-RunConfiguration *MaemoRunConfigurationFactory::create(Target *parent, const Core::Id id)
+RunConfiguration *MaemoRunConfigurationFactory::doCreate(Target *parent, const Core::Id id)
 {
-    if (!canCreate(parent, id))
-        return 0;
     return new MaemoRunConfiguration(parent, id, pathFromId(id));
 }
 
diff --git a/src/plugins/madde/maemorunfactories.h b/src/plugins/madde/maemorunfactories.h
index 82aa34ad898737f75c93fec4af3f355f0640544b..2d04db7133fab8f6c67205daa4c166d33cee029c 100644
--- a/src/plugins/madde/maemorunfactories.h
+++ b/src/plugins/madde/maemorunfactories.h
@@ -59,7 +59,6 @@ public:
     QList<Core::Id> availableCreationIds(Target *parent) const;
 
     bool canCreate(Target *parent, const Core::Id id) const;
-    RunConfiguration *create(Target *parent, const Core::Id id);
 
     bool canRestore(Target *parent, const QVariantMap &map) const;
     RunConfiguration *restore(Target *parent, const QVariantMap &map);
@@ -70,6 +69,9 @@ public:
     bool canHandle(ProjectExplorer::Target *t) const;
     QList<ProjectExplorer::RunConfiguration *> runConfigurationsForNode(ProjectExplorer::Target *t,
                                                                         ProjectExplorer::Node *n);
+
+private:
+    RunConfiguration *doCreate(Target *parent, const Core::Id id);
 };
 
 class MaemoRunControlFactory : public IRunControlFactory
diff --git a/src/plugins/projectexplorer/runconfiguration.cpp b/src/plugins/projectexplorer/runconfiguration.cpp
index 22e881a3ac4e4d6f597a689849769290dbbdee5b..361070aa5c42f053a015b81ac51be18d39952eb3 100644
--- a/src/plugins/projectexplorer/runconfiguration.cpp
+++ b/src/plugins/projectexplorer/runconfiguration.cpp
@@ -37,7 +37,6 @@
 #include "kitinformation.h"
 #include <extensionsystem/pluginmanager.h>
 
-#include <utils/qtcassert.h>
 #include <utils/outputformatter.h>
 #include <utils/checkablemessagebox.h>
 
@@ -273,15 +272,16 @@ DebuggerRunConfigurationAspect *DebuggerRunConfigurationAspect::clone(RunConfigu
 
 RunConfiguration::RunConfiguration(Target *target, const Core::Id id) :
     ProjectConfiguration(target, id),
-    m_debuggerAspect(new DebuggerRunConfigurationAspect(this))
+    m_debuggerAspect(new DebuggerRunConfigurationAspect(this)),
+    m_aspectsInitialized(false)
 {
     Q_ASSERT(target);
-    addExtraAspects();
 }
 
 RunConfiguration::RunConfiguration(Target *target, RunConfiguration *source) :
     ProjectConfiguration(target, source),
-    m_debuggerAspect(source->debuggerAspect()->clone(this))
+    m_debuggerAspect(source->debuggerAspect()->clone(this)),
+    m_aspectsInitialized(true)
 {
     Q_ASSERT(target);
     foreach (IRunConfigurationAspect *aspect, source->m_aspects) {
@@ -299,9 +299,13 @@ RunConfiguration::~RunConfiguration()
 
 void RunConfiguration::addExtraAspects()
 {
+    if (m_aspectsInitialized)
+        return;
+
     foreach (IRunControlFactory *factory, ExtensionSystem::PluginManager::getObjects<IRunControlFactory>())
-        if (IRunConfigurationAspect *aspect = factory->createRunConfigurationAspect())
+        if (IRunConfigurationAspect *aspect = factory->createRunConfigurationAspect(this))
             m_aspects.append(aspect);
+    m_aspectsInitialized = true;
 }
 
 /*!
@@ -376,6 +380,7 @@ ProjectExplorer::Abi RunConfiguration::abi() const
 
 bool RunConfiguration::fromMap(const QVariantMap &map)
 {
+    addExtraAspects();
     m_debuggerAspect->fromMap(map);
 
     foreach (IRunConfigurationAspect *aspect, m_aspects)
@@ -402,6 +407,7 @@ bool RunConfiguration::fromMap(const QVariantMap &map)
 
 QList<IRunConfigurationAspect *> RunConfiguration::extraAspects() const
 {
+    QTC_ASSERT(m_aspectsInitialized, return QList<IRunConfigurationAspect *>());
     return m_aspects;
 }
 
@@ -445,6 +451,17 @@ IRunConfigurationFactory::~IRunConfigurationFactory()
 {
 }
 
+RunConfiguration *IRunConfigurationFactory::create(Target *parent, const Core::Id id)
+{
+    if (!canCreate(parent, id))
+        return 0;
+    RunConfiguration *rc = doCreate(parent, id);
+    if (!rc)
+        return 0;
+    rc->addExtraAspects();
+    return rc;
+}
+
 IRunConfigurationFactory *IRunConfigurationFactory::find(Target *parent, const QVariantMap &map)
 {
     QList<IRunConfigurationFactory *> factories
@@ -512,8 +529,9 @@ IRunControlFactory::~IRunControlFactory()
 {
 }
 
-IRunConfigurationAspect *IRunControlFactory::createRunConfigurationAspect()
+IRunConfigurationAspect *IRunControlFactory::createRunConfigurationAspect(RunConfiguration *rc)
 {
+    Q_UNUSED(rc);
     return 0;
 }
 
diff --git a/src/plugins/projectexplorer/runconfiguration.h b/src/plugins/projectexplorer/runconfiguration.h
index 2cfa6fbf051404627197c85b59db2d66fda8ebbf..8c143d3ebad02ea5ac4ba9cbbcee410d6c176547 100644
--- a/src/plugins/projectexplorer/runconfiguration.h
+++ b/src/plugins/projectexplorer/runconfiguration.h
@@ -35,6 +35,7 @@
 #include "projectexplorerconstants.h"
 
 #include <utils/outputformat.h>
+#include <utils/qtcassert.h>
 
 #include <QPointer>
 #include <QWidget>
@@ -170,6 +171,7 @@ public:
     QList<IRunConfigurationAspect *> extraAspects() const;
     template <typename T> T *extraAspect() const
     {
+        QTC_ASSERT(m_aspectsInitialized, return 0);
         IRunConfigurationAspect *typeCheck = static_cast<T *>(0);
         Q_UNUSED(typeCheck);
         T *result = 0;
@@ -182,6 +184,8 @@ public:
 
     virtual ProjectExplorer::Abi abi() const;
 
+    void addExtraAspects();
+
 signals:
     void enabledChanged();
 
@@ -193,10 +197,9 @@ protected:
     BuildConfiguration *activeBuildConfiguration() const;
 
 private:
-    void addExtraAspects();
-
     QList<IRunConfigurationAspect *> m_aspects;
     DebuggerRunConfigurationAspect *m_debuggerAspect;
+    bool m_aspectsInitialized;
 };
 
 class PROJECTEXPLORER_EXPORT IRunConfigurationFactory : public QObject
@@ -211,7 +214,7 @@ public:
     virtual QString displayNameForId(const Core::Id id) const = 0;
 
     virtual bool canCreate(Target *parent, const Core::Id id) const = 0;
-    virtual RunConfiguration *create(Target *parent, const Core::Id id) = 0;
+    RunConfiguration *create(Target *parent, const Core::Id id);
     virtual bool canRestore(Target *parent, const QVariantMap &map) const = 0;
     virtual RunConfiguration *restore(Target *parent, const QVariantMap &map) = 0;
     virtual bool canClone(Target *parent, RunConfiguration *product) const = 0;
@@ -223,6 +226,9 @@ public:
 
 signals:
     void availableCreationIdsChanged();
+
+private:
+    virtual RunConfiguration *doCreate(Target *parent, const Core::Id id) = 0;
 };
 
 class RunConfigWidget;
@@ -239,7 +245,7 @@ public:
 
     virtual QString displayName() const = 0;
 
-    virtual IRunConfigurationAspect *createRunConfigurationAspect();
+    virtual IRunConfigurationAspect *createRunConfigurationAspect(RunConfiguration *rc);
     virtual RunConfigWidget *createConfigurationWidget(RunConfiguration *runConfiguration);
 };
 
diff --git a/src/plugins/projectexplorer/target.cpp b/src/plugins/projectexplorer/target.cpp
index b0cf49affbf4eae39229e6462b495acb6c917168..bd6a5b4a5cca371698f05ea0af4d7c42147810bb 100644
--- a/src/plugins/projectexplorer/target.cpp
+++ b/src/plugins/projectexplorer/target.cpp
@@ -400,6 +400,7 @@ void Target::addRunConfiguration(RunConfiguration* runConfiguration)
 {
     QTC_ASSERT(runConfiguration && !d->m_runConfigurations.contains(runConfiguration), return);
     Q_ASSERT(runConfiguration->target() == this);
+    runConfiguration->addExtraAspects();
 
     // Check that we don't have a configuration with the same displayName
     QString configurationDisplayName = runConfiguration->displayName();
diff --git a/src/plugins/qmlprojectmanager/qmlprojectrunconfigurationfactory.cpp b/src/plugins/qmlprojectmanager/qmlprojectrunconfigurationfactory.cpp
index d747e76bd07923e6e20d51db0322abe187d019f3..2cfa65fd24ee00d51be60d74044d977da34ecba5 100644
--- a/src/plugins/qmlprojectmanager/qmlprojectrunconfigurationfactory.cpp
+++ b/src/plugins/qmlprojectmanager/qmlprojectrunconfigurationfactory.cpp
@@ -110,10 +110,8 @@ bool QmlProjectRunConfigurationFactory::canCreate(ProjectExplorer::Target *paren
     return false;
 }
 
-ProjectExplorer::RunConfiguration *QmlProjectRunConfigurationFactory::create(ProjectExplorer::Target *parent, const Core::Id id)
+ProjectExplorer::RunConfiguration *QmlProjectRunConfigurationFactory::doCreate(ProjectExplorer::Target *parent, const Core::Id id)
 {
-    if (!canCreate(parent, id))
-        return 0;
     return new QmlProjectRunConfiguration(parent, id);
 }
 
diff --git a/src/plugins/qmlprojectmanager/qmlprojectrunconfigurationfactory.h b/src/plugins/qmlprojectmanager/qmlprojectrunconfigurationfactory.h
index 7eab5a3d0a7dca805d3280447918a27f73c16f48..f2b3e500a1b542a626b096112095d772dda18207 100644
--- a/src/plugins/qmlprojectmanager/qmlprojectrunconfigurationfactory.h
+++ b/src/plugins/qmlprojectmanager/qmlprojectrunconfigurationfactory.h
@@ -47,7 +47,6 @@ public:
     QString displayNameForId(const Core::Id id) const;
 
     bool canCreate(ProjectExplorer::Target *parent, const Core::Id id) const;
-    ProjectExplorer::RunConfiguration *create(ProjectExplorer::Target *parent, const Core::Id id);
     bool canRestore(ProjectExplorer::Target *parent, const QVariantMap &map) const;
     ProjectExplorer::RunConfiguration *restore(ProjectExplorer::Target *parent, const QVariantMap &map);
     bool canClone(ProjectExplorer::Target *parent, ProjectExplorer::RunConfiguration *source) const;
@@ -55,6 +54,8 @@ public:
 
 private:
     bool canHandle(ProjectExplorer::Target *parent) const;
+
+    ProjectExplorer::RunConfiguration *doCreate(ProjectExplorer::Target *parent, const Core::Id id);
 };
 
 } // namespace Internal
diff --git a/src/plugins/qnx/blackberryrunconfigurationfactory.cpp b/src/plugins/qnx/blackberryrunconfigurationfactory.cpp
index 57808a3cbec80455805f451c144d5580df3297be..84f1dc79267a74878af0b6dd8f126d59f9ea4b89 100644
--- a/src/plugins/qnx/blackberryrunconfigurationfactory.cpp
+++ b/src/plugins/qnx/blackberryrunconfigurationfactory.cpp
@@ -95,12 +95,9 @@ bool BlackBerryRunConfigurationFactory::canCreate(ProjectExplorer::Target *paren
     return qt4Project->hasApplicationProFile(pathFromId(id));
 }
 
-ProjectExplorer::RunConfiguration *BlackBerryRunConfigurationFactory::create(ProjectExplorer::Target *parent,
+ProjectExplorer::RunConfiguration *BlackBerryRunConfigurationFactory::doCreate(ProjectExplorer::Target *parent,
                                                                       const Core::Id id)
 {
-    if (!canCreate(parent, id))
-        return 0;
-
     return new BlackBerryRunConfiguration(parent, id, pathFromId(id));
 }
 
diff --git a/src/plugins/qnx/blackberryrunconfigurationfactory.h b/src/plugins/qnx/blackberryrunconfigurationfactory.h
index 80d124ca9f419a79081495c52877901671487725..2d38bcd401cc7f637b998235e7ecef4c358840e0 100644
--- a/src/plugins/qnx/blackberryrunconfigurationfactory.h
+++ b/src/plugins/qnx/blackberryrunconfigurationfactory.h
@@ -47,7 +47,7 @@ public:
     QString displayNameForId(const Core::Id id) const;
 
     bool canCreate(ProjectExplorer::Target *parent, const Core::Id id) const;
-    ProjectExplorer::RunConfiguration *create(ProjectExplorer::Target *parent, const Core::Id id);
+    ProjectExplorer::RunConfiguration *doCreate(ProjectExplorer::Target *parent, const Core::Id id);
 
     bool canRestore(ProjectExplorer::Target *parent, const QVariantMap &map) const;
     ProjectExplorer::RunConfiguration *restore(ProjectExplorer::Target *parent,
diff --git a/src/plugins/qnx/qnxrunconfigurationfactory.cpp b/src/plugins/qnx/qnxrunconfigurationfactory.cpp
index 1459f591e2f67d40c2bcc228f44a45b85df526a2..81c53104390463cd5ef290ed88b25f43158d7acd 100644
--- a/src/plugins/qnx/qnxrunconfigurationfactory.cpp
+++ b/src/plugins/qnx/qnxrunconfigurationfactory.cpp
@@ -82,7 +82,7 @@ QString QnxRunConfigurationFactory::displayNameForId(const Core::Id id) const
 
 bool QnxRunConfigurationFactory::canCreate(ProjectExplorer::Target *parent, const Core::Id id) const
 {
-    if (!canHandle(parent))
+    if (!canHandle(parent) || id.name().startsWith(Constants::QNX_QNX_RUNCONFIGURATION_PREFIX))
         return false;
 
     Qt4ProjectManager::Qt4Project *qt4Project = qobject_cast<Qt4ProjectManager::Qt4Project *>(parent->project());
@@ -92,15 +92,9 @@ bool QnxRunConfigurationFactory::canCreate(ProjectExplorer::Target *parent, cons
     return qt4Project->hasApplicationProFile(pathFromId(id));
 }
 
-ProjectExplorer::RunConfiguration *QnxRunConfigurationFactory::create(ProjectExplorer::Target *parent, const Core::Id id)
+ProjectExplorer::RunConfiguration *QnxRunConfigurationFactory::doCreate(ProjectExplorer::Target *parent, const Core::Id id)
 {
-    if (!canCreate(parent, id))
-        return 0;
-
-    if (id.name().startsWith(Constants::QNX_QNX_RUNCONFIGURATION_PREFIX))
-        return new QnxRunConfiguration(parent, id, pathFromId(id));
-
-    return 0;
+    return new QnxRunConfiguration(parent, id, pathFromId(id));
 }
 
 bool QnxRunConfigurationFactory::canRestore(ProjectExplorer::Target *parent, const QVariantMap &map) const
diff --git a/src/plugins/qnx/qnxrunconfigurationfactory.h b/src/plugins/qnx/qnxrunconfigurationfactory.h
index 676eba8031d43c6a81960d742134bb8ed6164a07..f74559da4aa4b361897dc152b9fb5ded7a956552 100644
--- a/src/plugins/qnx/qnxrunconfigurationfactory.h
+++ b/src/plugins/qnx/qnxrunconfigurationfactory.h
@@ -47,7 +47,6 @@ public:
     QString displayNameForId(const Core::Id id) const;
 
     bool canCreate(ProjectExplorer::Target *parent, const Core::Id id) const;
-    ProjectExplorer::RunConfiguration *create(ProjectExplorer::Target *parent, const Core::Id id);
 
     bool canRestore(ProjectExplorer::Target *parent, const QVariantMap &map) const;
     ProjectExplorer::RunConfiguration *restore(ProjectExplorer::Target *parent,
@@ -57,7 +56,10 @@ public:
     ProjectExplorer::RunConfiguration *clone(ProjectExplorer::Target *parent,
                                              ProjectExplorer::RunConfiguration *source);
 
+private:
     bool canHandle(ProjectExplorer::Target *t) const;
+
+    ProjectExplorer::RunConfiguration *doCreate(ProjectExplorer::Target *parent, const Core::Id id);
 };
 
 } // namespace Internal
diff --git a/src/plugins/qt4projectmanager/qt-desktop/qt4runconfiguration.cpp b/src/plugins/qt4projectmanager/qt-desktop/qt4runconfiguration.cpp
index 97f7fcc1f8e850e2d46c19c37fd5d94d2748247a..b6f2c53f9ba8512b1944315b379f16a08d8d4ea8 100644
--- a/src/plugins/qt4projectmanager/qt-desktop/qt4runconfiguration.cpp
+++ b/src/plugins/qt4projectmanager/qt-desktop/qt4runconfiguration.cpp
@@ -735,11 +735,8 @@ bool Qt4RunConfigurationFactory::canCreate(ProjectExplorer::Target *parent, cons
     return project->hasApplicationProFile(pathFromId(id));
 }
 
-ProjectExplorer::RunConfiguration *Qt4RunConfigurationFactory::create(ProjectExplorer::Target *parent, const Core::Id id)
+ProjectExplorer::RunConfiguration *Qt4RunConfigurationFactory::doCreate(ProjectExplorer::Target *parent, const Core::Id id)
 {
-    if (!canCreate(parent, id))
-        return 0;
-
     Qt4RunConfiguration *rc = new Qt4RunConfiguration(parent, id);
     QList<Qt4ProFileNode *> profiles = static_cast<Qt4Project *>(parent->project())->applicationProFiles();
     foreach (Qt4ProFileNode *node, profiles) {
diff --git a/src/plugins/qt4projectmanager/qt-desktop/qt4runconfiguration.h b/src/plugins/qt4projectmanager/qt-desktop/qt4runconfiguration.h
index 2c83cf1be66cd263b3a9bdfc657b93997661092e..7b07c9c62b9123418de666f787e4de9c8383e634 100644
--- a/src/plugins/qt4projectmanager/qt-desktop/qt4runconfiguration.h
+++ b/src/plugins/qt4projectmanager/qt-desktop/qt4runconfiguration.h
@@ -213,7 +213,6 @@ public:
     ~Qt4RunConfigurationFactory();
 
     bool canCreate(ProjectExplorer::Target *parent, const Core::Id id) const;
-    ProjectExplorer::RunConfiguration *create(ProjectExplorer::Target *parent, const Core::Id id);
     bool canRestore(ProjectExplorer::Target *parent, const QVariantMap &map) const;
     ProjectExplorer::RunConfiguration *restore(ProjectExplorer::Target *parent, const QVariantMap &map);
     bool canClone(ProjectExplorer::Target *parent, ProjectExplorer::RunConfiguration *source) const;
@@ -225,6 +224,9 @@ public:
     bool canHandle(ProjectExplorer::Target *t) const;
     QList<ProjectExplorer::RunConfiguration *> runConfigurationsForNode(ProjectExplorer::Target *t,
                                                                         ProjectExplorer::Node *n);
+
+private:
+    ProjectExplorer::RunConfiguration *doCreate(ProjectExplorer::Target *parent, const Core::Id id);
 };
 
 } // namespace Internal
diff --git a/src/plugins/qtsupport/customexecutablerunconfiguration.cpp b/src/plugins/qtsupport/customexecutablerunconfiguration.cpp
index 6e93267c3589dbfb2d0bab8540c1c1c124a08c4b..3f5c0b8ee5a3cbc66ff5bf6d0e3525d108b68f5e 100644
--- a/src/plugins/qtsupport/customexecutablerunconfiguration.cpp
+++ b/src/plugins/qtsupport/customexecutablerunconfiguration.cpp
@@ -400,11 +400,9 @@ bool CustomExecutableRunConfigurationFactory::canCreate(ProjectExplorer::Target
 }
 
 ProjectExplorer::RunConfiguration *
-CustomExecutableRunConfigurationFactory::create(ProjectExplorer::Target *parent, const Core::Id id)
+CustomExecutableRunConfigurationFactory::doCreate(ProjectExplorer::Target *parent, const Core::Id id)
 {
-    if (!canCreate(parent, id))
-        return 0;
-
+    Q_UNUSED(id);
     return new CustomExecutableRunConfiguration(parent);
 }
 
diff --git a/src/plugins/qtsupport/customexecutablerunconfiguration.h b/src/plugins/qtsupport/customexecutablerunconfiguration.h
index 9175977141bbed08cf8c69ba2f0ff8507d7702af..64b175d76c22bdc2473c3f68cca7c80671aa4060 100644
--- a/src/plugins/qtsupport/customexecutablerunconfiguration.h
+++ b/src/plugins/qtsupport/customexecutablerunconfiguration.h
@@ -138,7 +138,6 @@ public:
     QString displayNameForId(const Core::Id id) const;
 
     bool canCreate(ProjectExplorer::Target *parent, const Core::Id id) const;
-    ProjectExplorer::RunConfiguration *create(ProjectExplorer::Target *parent, const Core::Id id);
     bool canRestore(ProjectExplorer::Target *parent, const QVariantMap &map) const;
     ProjectExplorer::RunConfiguration *restore(ProjectExplorer::Target *parent, const QVariantMap &map);
     bool canClone(ProjectExplorer::Target *parent, ProjectExplorer::RunConfiguration *product) const;
@@ -147,6 +146,8 @@ public:
 
 private:
     bool canHandle(ProjectExplorer::Target *parent) const;
+
+    ProjectExplorer::RunConfiguration *doCreate(ProjectExplorer::Target *parent, const Core::Id id);
 };
 
 } // namespace QtSupport
diff --git a/src/plugins/remotelinux/remotelinuxrunconfigurationfactory.cpp b/src/plugins/remotelinux/remotelinuxrunconfigurationfactory.cpp
index eec12119f8d017010ad818cbb1fd87244f1409cc..cd220fc53afd1fd7e7fe6eb4eb668347ada7ea0b 100644
--- a/src/plugins/remotelinux/remotelinuxrunconfigurationfactory.cpp
+++ b/src/plugins/remotelinux/remotelinuxrunconfigurationfactory.cpp
@@ -105,9 +105,8 @@ QString RemoteLinuxRunConfigurationFactory::displayNameForId(const Core::Id id)
         + tr(" (on Remote Generic Linux Host)");
 }
 
-RunConfiguration *RemoteLinuxRunConfigurationFactory::create(Target *parent, const Core::Id id)
+RunConfiguration *RemoteLinuxRunConfigurationFactory::doCreate(Target *parent, const Core::Id id)
 {
-    QTC_ASSERT(canCreate(parent, id), return 0);
     return new RemoteLinuxRunConfiguration(parent, id, pathFromId(id));
 }
 
diff --git a/src/plugins/remotelinux/remotelinuxrunconfigurationfactory.h b/src/plugins/remotelinux/remotelinuxrunconfigurationfactory.h
index a4d951574f8b37b839427a0671accb387bfbf47a..bca5608bef68e569f245719386601374cc46264a 100644
--- a/src/plugins/remotelinux/remotelinuxrunconfigurationfactory.h
+++ b/src/plugins/remotelinux/remotelinuxrunconfigurationfactory.h
@@ -46,7 +46,6 @@ public:
     QList<Core::Id> availableCreationIds(ProjectExplorer::Target *parent) const;
 
     bool canCreate(ProjectExplorer::Target *parent, const Core::Id id) const;
-    ProjectExplorer::RunConfiguration *create(ProjectExplorer::Target *parent, const Core::Id id);
 
     bool canRestore(ProjectExplorer::Target *parent, const QVariantMap &map) const;
     ProjectExplorer::RunConfiguration *restore(ProjectExplorer::Target *parent,
@@ -58,6 +57,8 @@ public:
 
 private:
     bool canHandle(const ProjectExplorer::Target *target) const;
+
+    ProjectExplorer::RunConfiguration *doCreate(ProjectExplorer::Target *parent, const Core::Id id);
 };
 
 } // namespace Internal