diff --git a/src/plugins/debugger/debuggerrunner.cpp b/src/plugins/debugger/debuggerrunner.cpp
index 10b279db10110954aa1f8a33f07cee19897f7a6c..42e08f5297d255913c8d98ecaf31f764b254eb5e 100644
--- a/src/plugins/debugger/debuggerrunner.cpp
+++ b/src/plugins/debugger/debuggerrunner.cpp
@@ -890,7 +890,7 @@ static DebuggerStartParameters localStartParameters(RunConfiguration *runConfigu
     if (runConfiguration->debuggerAspect()->useCppDebugger())
         sp.languages |= CppLanguage;
 
-    if (runConfiguration->useQmlDebugger()) {
+    if (runConfiguration->debuggerAspect()->useQmlDebugger()) {
         sp.qmlServerAddress = _("127.0.0.1");
         sp.qmlServerPort = runConfiguration->debuggerAspect()->qmlDebugServerPort();
         sp.languages |= QmlLanguage;
diff --git a/src/plugins/projectexplorer/runconfiguration.cpp b/src/plugins/projectexplorer/runconfiguration.cpp
index a23357fe55840cd7f2344a300b99f38533d64adc..971892bbf4e6c096a83310b48338a1061a3bb4d8 100644
--- a/src/plugins/projectexplorer/runconfiguration.cpp
+++ b/src/plugins/projectexplorer/runconfiguration.cpp
@@ -198,7 +198,8 @@ bool ProcessHandle::equals(const ProcessHandle &rhs) const
     \class ProjectExplorer::DebuggerProjectSettings
 */
 
-DebuggerProjectSettings::DebuggerProjectSettings() :
+DebuggerProjectSettings::DebuggerProjectSettings(RunConfiguration *rc) :
+    m_runConfiguration(rc),
     m_useCppDebugger(true),
     m_useQmlDebugger(AutoEnableQmlDebugger),
     m_qmlDebugServerPort(Constants::QML_DEFAULT_DEBUG_SERVER_PORT),
@@ -206,11 +207,17 @@ DebuggerProjectSettings::DebuggerProjectSettings() :
 {}
 
 DebuggerProjectSettings::DebuggerProjectSettings(DebuggerProjectSettings *other) :
+    m_runConfiguration(other->m_runConfiguration),
     m_useCppDebugger(other->m_useCppDebugger),
     m_useQmlDebugger(other->m_useQmlDebugger),
     m_qmlDebugServerPort(other->m_qmlDebugServerPort)
 {}
 
+RunConfiguration *DebuggerProjectSettings::runConfiguration()
+{
+    return m_runConfiguration;
+}
+
 void DebuggerProjectSettings::setUseQmlDebugger(bool value)
 {
     m_useQmlDebugger = value ? EnableQmlDebugger : DisableQmlDebugger;
@@ -235,22 +242,21 @@ static bool isQtQuickAppProject(Project *project)
     return project->files(Project::ExcludeGeneratedFiles).contains(filePath);
 }
 
-DebuggerProjectSettings::QmlDebuggerStatus DebuggerProjectSettings::useQmlDebugger() const
+bool DebuggerProjectSettings::useQmlDebugger() const
 {
-    return m_useQmlDebugger;
+    if (m_useQmlDebugger == DebuggerProjectSettings::AutoEnableQmlDebugger)
+        return isQtQuickAppProject(m_runConfiguration->target()->project());
+    return m_useQmlDebugger == DebuggerProjectSettings::EnableQmlDebugger;
 }
 
-bool RunConfiguration::useQmlDebugger() const
+uint DebuggerProjectSettings::qmlDebugServerPort() const
 {
-    DebuggerProjectSettings::QmlDebuggerStatus s = m_debuggerAspect->useQmlDebugger();
-    if (s == DebuggerProjectSettings::AutoEnableQmlDebugger)
-        return isQtQuickAppProject(target()->project());
-    return s == DebuggerProjectSettings::EnableQmlDebugger;
+    return m_qmlDebugServerPort;
 }
 
-uint DebuggerProjectSettings::qmlDebugServerPort() const
+void DebuggerProjectSettings::setQmllDebugServerPort(uint port)
 {
-    return m_qmlDebugServerPort;
+    m_qmlDebugServerPort = port;
 }
 
 void DebuggerProjectSettings::suppressQmlDebuggingOptions()
@@ -306,7 +312,7 @@ void DebuggerProjectSettings::fromMap(const QVariantMap &map)
 
 RunConfiguration::RunConfiguration(Target *target, const QString &id) :
     ProjectConfiguration(target, id),
-    m_debuggerAspect(new DebuggerProjectSettings)
+    m_debuggerAspect(new DebuggerProjectSettings(this))
 {
     Q_ASSERT(target);
     addExtraAspects();
diff --git a/src/plugins/projectexplorer/runconfiguration.h b/src/plugins/projectexplorer/runconfiguration.h
index cfbadbaba3efa855af8b4d53106c8bf4c8103c04..8d53c1fa3f2f047f9c212749d052f1f81a2c36b3 100644
--- a/src/plugins/projectexplorer/runconfiguration.h
+++ b/src/plugins/projectexplorer/runconfiguration.h
@@ -45,14 +45,14 @@
 
 QT_FORWARD_DECLARE_CLASS(QIcon)
 
-namespace Utils {
-class OutputFormatter;
-}
+namespace Utils { class OutputFormatter; }
+namespace Debugger { namespace Internal { class DebuggerRunConfigWidget; } }
 
 namespace ProjectExplorer {
 class Abi;
 class BuildConfiguration;
-class IRunConfigurationAspect;
+class DebuggerProjectSettings;
+class RunConfiguration;
 class RunControl;
 class Target;
 
@@ -93,7 +93,7 @@ class PROJECTEXPLORER_EXPORT DebuggerProjectSettings
     Q_OBJECT
 
 public:
-    DebuggerProjectSettings();
+    DebuggerProjectSettings(RunConfiguration *runConfiguration);
     DebuggerProjectSettings(DebuggerProjectSettings *other);
 
     enum QmlDebuggerStatus {
@@ -110,15 +110,20 @@ public:
     void setUseQmlDebugger(bool value);
     void setUseCppDebugger(bool value);
     bool useCppDebugger() const;
-    QmlDebuggerStatus useQmlDebugger() const;
+    bool useQmlDebugger() const;
     uint qmlDebugServerPort() const;
+    void setQmllDebugServerPort(uint port);
     void suppressQmlDebuggingOptions();
     bool areQmlDebuggingOptionsSuppressed() const;
+    RunConfiguration *runConfiguration();
 
 signals:
     void debuggersChanged();
 
-public:
+private:
+    friend class RunConfiguration;
+    friend class Debugger::Internal::DebuggerRunConfigWidget;
+    RunConfiguration *m_runConfiguration;
     bool m_useCppDebugger;
     QmlDebuggerStatus m_useQmlDebugger;
     uint m_qmlDebugServerPort;
@@ -126,7 +131,6 @@ public:
 };
 
 
-
 // Documentation inside.
 class PROJECTEXPLORER_EXPORT RunConfiguration : public ProjectConfiguration
 {
@@ -162,7 +166,6 @@ public:
     }
 
     virtual ProjectExplorer::Abi abi() const;
-    bool useQmlDebugger() const;
 
 signals:
     void isEnabledChanged(bool value);
diff --git a/src/plugins/qmlprojectmanager/qmlprojectruncontrol.cpp b/src/plugins/qmlprojectmanager/qmlprojectruncontrol.cpp
index a88320d22cdb7a56eb968bfd8a03b4fae5e6f05b..393540489220424f4a7470cf184025e430525504 100644
--- a/src/plugins/qmlprojectmanager/qmlprojectruncontrol.cpp
+++ b/src/plugins/qmlprojectmanager/qmlprojectruncontrol.cpp
@@ -216,7 +216,7 @@ RunControl *QmlProjectRunControlFactory::createDebugRunControl(QmlProjectRunConf
     params.displayName = runConfig->displayName();
     params.projectSourceDirectory = runConfig->target()->project()->projectDirectory();
     params.projectSourceFiles = runConfig->target()->project()->files(Project::ExcludeGeneratedFiles);
-    if (runConfig->useQmlDebugger())
+    if (runConfig->debuggerAspect()->useQmlDebugger())
         params.languages |= Debugger::QmlLanguage;
     if (runConfig->debuggerAspect()->useCppDebugger())
         params.languages |= Debugger::CppLanguage;
diff --git a/src/plugins/qt4projectmanager/qt-s60/s60devicedebugruncontrol.cpp b/src/plugins/qt4projectmanager/qt-s60/s60devicedebugruncontrol.cpp
index eda2b8b7b607809e26b50aa9e1238ea7c09138b5..f7d5d95bb6b07145efa049d0ed85447c2bb213e2 100644
--- a/src/plugins/qt4projectmanager/qt-s60/s60devicedebugruncontrol.cpp
+++ b/src/plugins/qt4projectmanager/qt-s60/s60devicedebugruncontrol.cpp
@@ -84,7 +84,7 @@ static Debugger::DebuggerStartParameters s60DebuggerStartParams(const S60DeviceR
 
     sp.remoteChannel = activeDeployConf->serialPortName();
     sp.processArgs = rc->commandLineArguments();
-    if (rc->useQmlDebugger() && !rc->debuggerAspect()->useCppDebugger()) {
+    if (rc->debuggerAspect()->useQmlDebugger() && !rc->debuggerAspect()->useCppDebugger()) {
         sp.requestRemoteSetup = true;
         sp.startMode = Debugger::AttachToRemoteServer;
     } else {
@@ -99,7 +99,7 @@ static Debugger::DebuggerStartParameters s60DebuggerStartParams(const S60DeviceR
     sp.displayName = rc->displayName();
     sp.qmlServerAddress = activeDeployConf->deviceAddress();
     sp.qmlServerPort = rc->debuggerAspect()->qmlDebugServerPort();
-    if (rc->useQmlDebugger()) {
+    if (rc->debuggerAspect()->useQmlDebugger()) {
         sp.languages |= Debugger::QmlLanguage;
         QString qmlArgs = rc->qmlCommandLineArguments();
         if (sp.processArgs.length())
@@ -162,7 +162,7 @@ bool S60DeviceDebugRunControl::promptToStop(bool *) const
 void S60DeviceDebugRunControl::remoteSetupRequested()
 {
     // This is called from Engine->setupInferior(), ie InferiorSetupRequested state
-    QTC_ASSERT(runConfiguration()->useQmlDebugger() && !runConfiguration()->debuggerAspect()->useCppDebugger(), return);
+    QTC_CHECK(runConfiguration()->debuggerAspect()->useQmlDebugger() && !runConfiguration()->debuggerAspect()->useCppDebugger());
     m_codaRunControl = new CodaRunControl(runConfiguration(), DebugRunMode);
     connect(m_codaRunControl, SIGNAL(connected()), this, SLOT(codaConnected()));
     connect(m_codaRunControl, SIGNAL(finished()), this, SLOT(codaFinished()));
diff --git a/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp b/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp
index 68e487f347702951162fe1e3c78672b65dc29454..54bf0c2164f8851f5c7ba30bb2e18d768aa53732 100644
--- a/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp
+++ b/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp
@@ -286,7 +286,7 @@ void S60DeviceRunConfiguration::setCommandLineArguments(const QString &args)
 QString S60DeviceRunConfiguration::qmlCommandLineArguments() const
 {
     QString args;
-    if (useQmlDebugger()) {
+    if (debuggerAspect()->useQmlDebugger()) {
         const S60DeployConfiguration *activeDeployConf =
             qobject_cast<S60DeployConfiguration *>(qt4Target()->activeDeployConfiguration());
         QTC_ASSERT(activeDeployConf, return args);
diff --git a/src/plugins/remotelinux/remotelinuxdebugsupport.cpp b/src/plugins/remotelinux/remotelinuxdebugsupport.cpp
index d108a1619bb0d9d9d852f3721571968c6bffa4dc..c24fcdf657847d06bd9f3f65464da4f20cc4f840 100644
--- a/src/plugins/remotelinux/remotelinuxdebugsupport.cpp
+++ b/src/plugins/remotelinux/remotelinuxdebugsupport.cpp
@@ -63,7 +63,7 @@ public:
     AbstractRemoteLinuxDebugSupportPrivate(RemoteLinuxRunConfiguration *runConfig,
             DebuggerEngine *engine)
         : engine(engine), deviceConfig(runConfig->deviceConfig()),
-          qmlDebugging(runConfig->useQmlDebugger()),
+          qmlDebugging(runConfig->debuggerAspect()->useQmlDebugger()),
           cppDebugging(runConfig->debuggerAspect()->useCppDebugger()),
           state(Inactive),
           gdbServerPort(-1), qmlPort(-1)
@@ -96,7 +96,7 @@ DebuggerStartParameters AbstractRemoteLinuxDebugSupport::startParameters(const R
 {
     DebuggerStartParameters params;
     const LinuxDeviceConfiguration::ConstPtr &devConf = runConfig->deviceConfig();
-    if (runConfig->useQmlDebugger()) {
+    if (runConfig->debuggerAspect()->useQmlDebugger()) {
         params.languages |= QmlLanguage;
         params.qmlServerAddress = runConfig->deviceConfig()->sshParameters().host;
         params.qmlServerPort = 0; // port is selected later on
diff --git a/src/plugins/remotelinux/remotelinuxrunconfiguration.cpp b/src/plugins/remotelinux/remotelinuxrunconfiguration.cpp
index 08a76caa2dfc8f2687411525ef612d2d68aa0e84..85fd1f89f21b8224b2786794a050b39dc9a5a248 100644
--- a/src/plugins/remotelinux/remotelinuxrunconfiguration.cpp
+++ b/src/plugins/remotelinux/remotelinuxrunconfiguration.cpp
@@ -361,7 +361,7 @@ QString RemoteLinuxRunConfiguration::alternateRemoteExecutable() const
 int RemoteLinuxRunConfiguration::portsUsedByDebuggers() const
 {
     int ports = 0;
-    if (useQmlDebugger())
+    if (debuggerAspect()->useQmlDebugger())
         ++ports;
     if (debuggerAspect()->useCppDebugger())
         ++ports;