diff --git a/src/plugins/debugger/debuggerconstants.h b/src/plugins/debugger/debuggerconstants.h
index 9cdd0526437af918200198040b1a1406ce9dd0c7..b605e747c4ac8bab5d89709c649ad1e7c7b9a117 100644
--- a/src/plugins/debugger/debuggerconstants.h
+++ b/src/plugins/debugger/debuggerconstants.h
@@ -130,7 +130,6 @@ enum DebuggerStartMode
     AttachToRemoteServer,  // Attach to a running gdbserver
     AttachToRemoteProcess, // Attach to a running remote process
     StartRemoteProcess,    // Start and attach to a remote process
-    AttachToQmlPort,       // Attach to QML debugging port
     StartRemoteGdb,        // Start gdb itself remotely
     StartRemoteEngine      // Start ipc guest engine on other machine
 };
diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp
index d2fa8b764eaf956914c5b3eda80d81dfee6c3bd2..094c018141804f108252735ca77bcda54b0906fd 100644
--- a/src/plugins/debugger/debuggerplugin.cpp
+++ b/src/plugins/debugger/debuggerplugin.cpp
@@ -1844,7 +1844,7 @@ void DebuggerPluginPrivate::attachToQmlPort()
     sp.qmlServerPort = dlg.port();
     sp.sysroot = dlg.sysroot();
 
-    sp.startMode = AttachToQmlPort;
+    sp.startMode = AttachToRemoteServer;
 
     //
     // get files from all the projects in the session
@@ -2713,6 +2713,14 @@ static QString formatStartParameters(DebuggerStartParameters &sp)
     QTextStream str(&rc);
     str << "Start parameters: '" << sp.displayName << "' mode: " << sp.startMode
         << "\nABI: " << sp.toolChainAbi.toString() << '\n';
+    str << "Languages: ";
+    if (sp.languages == AnyLanguage)
+        str << "any";
+    if (sp.languages & CppLanguage)
+        str << "c++ ";
+    if (sp.languages & QmlLanguage)
+        str << "qml";
+    str << '\n';
     if (!sp.executable.isEmpty()) {
         str << "Executable: " << QDir::toNativeSeparators(sp.executable)
             << ' ' << sp.processArgs;
diff --git a/src/plugins/debugger/debuggerrunner.cpp b/src/plugins/debugger/debuggerrunner.cpp
index 3f1bbb7ee1a1b055cc5faf4a9277a85f905a1725..e87a9268e1e4e453da022145a3049bcd6a1b2036 100644
--- a/src/plugins/debugger/debuggerrunner.cpp
+++ b/src/plugins/debugger/debuggerrunner.cpp
@@ -365,7 +365,8 @@ RunConfiguration *DebuggerRunControl::runConfiguration() const
 //
 ////////////////////////////////////////////////////////////////////////
 
-static QList<DebuggerEngineType> enginesForToolChain(const Abi &toolChain)
+static QList<DebuggerEngineType> enginesForToolChain(const Abi &toolChain,
+                                                     DebuggerLanguages languages)
 {
     QList<DebuggerEngineType> result;
     switch (toolChain.binaryFormat()) {
@@ -373,6 +374,8 @@ static QList<DebuggerEngineType> enginesForToolChain(const Abi &toolChain)
     case Abi::MachOFormat:
         result.push_back(LldbEngineType);
         result.push_back(GdbEngineType);
+        if (languages & QmlLanguage)
+            result.push_back(QmlEngineType);
         break;
    case Abi::PEFormat:
         if (toolChain.osFlavor() == Abi::WindowsMSysFlavor) {
@@ -382,6 +385,8 @@ static QList<DebuggerEngineType> enginesForToolChain(const Abi &toolChain)
             result.push_back(CdbEngineType);
             result.push_back(GdbEngineType);
         }
+        if (languages & QmlLanguage)
+            result.push_back(QmlEngineType);
         break;
     case Abi::RuntimeQmlFormat:
         result.push_back(QmlEngineType);
@@ -435,9 +440,22 @@ static QList<DebuggerEngineType> enginesForExecutable(const QString &executable)
 
 // Debugger type for mode.
 static QList<DebuggerEngineType> enginesForMode(DebuggerStartMode startMode,
+                                                DebuggerLanguages languages,
                                                 bool hardConstraintsOnly)
 {
     QList<DebuggerEngineType> result;
+
+    if (languages == QmlLanguage) {
+        QTC_ASSERT(startMode == StartInternal
+                   || startMode == AttachToRemoteServer,
+                   qDebug() << "qml debugging not supported for mode"
+                            << startMode);
+
+        // Qml language only
+        result.push_back(QmlEngineType);
+        return result;
+    }
+
     switch (startMode) {
     case NoStartMode:
         break;
@@ -449,6 +467,9 @@ static QList<DebuggerEngineType> enginesForMode(DebuggerStartMode startMode,
             result.push_back(CdbEngineType); // Preferably Windows debugger for attaching locally.
 #endif
             result.push_back(GdbEngineType);
+
+            if (languages & QmlLanguage)
+                result.push_back(QmlEngineType);
         }
         break;
     case AttachCore:
@@ -460,6 +481,8 @@ static QList<DebuggerEngineType> enginesForMode(DebuggerStartMode startMode,
     case StartRemoteProcess:
     case StartRemoteGdb:
         result.push_back(GdbEngineType);
+        if (languages & QmlLanguage)
+            result.push_back(QmlEngineType);
         break;
     case AttachToRemoteProcess:
     case AttachToRemoteServer:
@@ -468,6 +491,9 @@ static QList<DebuggerEngineType> enginesForMode(DebuggerStartMode startMode,
             result.push_back(CdbEngineType);
 #endif
             result.push_back(GdbEngineType);
+
+            if (languages & QmlLanguage)
+                result.push_back(QmlEngineType);
         }
         break;
     case AttachCrashedExternal:
@@ -478,9 +504,6 @@ static QList<DebuggerEngineType> enginesForMode(DebuggerStartMode startMode,
         // For now thats the only supported IPC engine.
         result.push_back(LldbEngineType);
         break;
-    case AttachToQmlPort:
-        result.push_back(QmlEngineType); // Only QML can do this
-        break;
     }
     return result;
 }
@@ -494,14 +517,14 @@ static QList<DebuggerEngineType> engineTypes(const DebuggerStartParameters &sp)
     if (!result.isEmpty())
         return result;
 
-    result = enginesForMode(sp.startMode, true);
+    result = enginesForMode(sp.startMode, sp.languages, true);
     if (!result.isEmpty())
         return result;
 
     //  'hard constraints' done (with the exception of QML ABI checked here),
     // further try to restrict available engines.
     if (sp.toolChainAbi.isValid()) {
-        result = enginesForToolChain(sp.toolChainAbi);
+        result = enginesForToolChain(sp.toolChainAbi, sp.languages);
         if (!result.isEmpty())
             return result;
     }
@@ -519,7 +542,7 @@ static QList<DebuggerEngineType> engineTypes(const DebuggerStartParameters &sp)
     if (!result.isEmpty())
         return result;
 
-    result = enginesForMode(sp.startMode, false);
+    result = enginesForMode(sp.startMode, sp.languages, false);
     return result;
 }
 
@@ -577,27 +600,19 @@ static inline bool canUseEngine(DebuggerEngineType et,
 DEBUGGER_EXPORT ConfigurationCheck checkDebugConfiguration(const DebuggerStartParameters &sp)
 {
     ConfigurationCheck result;
-    const unsigned activeLangs = debuggerCore()->activeLanguages();
-    const bool qmlLanguage = activeLangs & QmlLanguage;
-    const bool cppLanguage = activeLangs & CppLanguage;
     if (debug)
         qDebug().nospace() << "checkDebugConfiguration " << sp.toolChainAbi.toString()
                            << " Start mode=" << sp.startMode << " Executable=" << sp.executable
                            << " Debugger command=" << sp.debuggerCommand;
     // Get all applicable types.
-    QList<DebuggerEngineType> requiredTypes;
-    if (qmlLanguage && !cppLanguage) {
-        requiredTypes.push_back(QmlEngineType);
-    } else {
-        requiredTypes = engineTypes(sp);
-    }
+    QList<DebuggerEngineType> requiredTypes = engineTypes(sp);
     if (requiredTypes.isEmpty()) {
         result.errorMessage = QLatin1String("Internal error: Unable to determine debugger engine type for this configuration");
         return result;
     }
     if (debug)
         qDebug() << " Required: " << engineTypeNames(requiredTypes);
-    // Filter out disables types, command line + current settings.
+    // Filter out disabled types, command line + current settings.
     unsigned cmdLineEnabledEngines = debuggerCore()->enabledEngines();
 #ifdef WITH_LLDB
     if (!Core::ICore::settings()->value(QLatin1String("LLDB/enabled")).toBool())
@@ -605,6 +620,7 @@ DEBUGGER_EXPORT ConfigurationCheck checkDebugConfiguration(const DebuggerStartPa
 #else
      cmdLineEnabledEngines &= ~LldbEngineType;
 #endif
+
     DebuggerEngineType usableType = NoEngineType;
     QList<DebuggerEngineType> unavailableTypes;
     foreach (DebuggerEngineType et, requiredTypes) {
@@ -644,13 +660,17 @@ DEBUGGER_EXPORT ConfigurationCheck checkDebugConfiguration(const DebuggerStartPa
     // Anything left: Happy.
     result.errorMessage.clear();
     result.errorDetails.clear();
-    if (qmlLanguage && cppLanguage
-            && usableType != QmlEngineType) {
-        result.masterSlaveEngineTypes.first = QmlCppEngineType;
-        result.masterSlaveEngineTypes.second = usableType;
-    } else {
-        result.masterSlaveEngineTypes.first = usableType;
-    }
+
+
+    // Could we actually use a combined qml/cpp-engine?
+     if (usableType != QmlEngineType
+             && requiredTypes.contains(QmlEngineType)) {
+         result.masterSlaveEngineTypes.first = QmlCppEngineType;
+         result.masterSlaveEngineTypes.second = usableType;
+     } else {
+         result.masterSlaveEngineTypes.first = usableType;
+     }
+
     if (debug)
         qDebug() << engineTypeName(result.masterSlaveEngineTypes.first) << engineTypeName(result.masterSlaveEngineTypes.second);
     return result;
@@ -757,9 +777,13 @@ static DebuggerStartParameters localStartParameters(RunConfiguration *runConfigu
         }
     }
 
-    if (debuggerCore()->isActiveDebugLanguage(QmlLanguage)) {
+    if (runConfiguration->useCppDebugger())
+        sp.languages |= CppLanguage;
+
+    if (runConfiguration->useQmlDebugger()) {
         sp.qmlServerAddress = _("127.0.0.1");
         sp.qmlServerPort = runConfiguration->qmlDebugServerPort();
+        sp.languages |= QmlLanguage;
 
         // Makes sure that all bindings go through the JavaScript engine, so that
         // breakpoints are actually hit!
diff --git a/src/plugins/debugger/debuggerstartparameters.h b/src/plugins/debugger/debuggerstartparameters.h
index 668458d265437581dca54e59bb7c7ba5f7005305..2b5b25332a7086705e8d5b14a2997299db8cf703 100644
--- a/src/plugins/debugger/debuggerstartparameters.h
+++ b/src/plugins/debugger/debuggerstartparameters.h
@@ -61,6 +61,7 @@ public:
         attachPID(-1),
         useTerminal(false),
         breakOnMain(false),
+        languages(AnyLanguage),
         qmlServerAddress(QLatin1String("127.0.0.1")),
         qmlServerPort(ProjectExplorer::Constants::QML_DEFAULT_DEBUG_SERVER_PORT),
         useServerStartScript(false),
@@ -87,6 +88,7 @@ public:
     qint64 attachPID;
     bool useTerminal;
     bool breakOnMain;
+    DebuggerLanguages languages;
 
     // Used by AttachCrashedExternal.
     QString crashParameter;
@@ -98,6 +100,7 @@ public:
     QString projectBuildDirectory;
     QStringList projectSourceFiles;
 
+
     QString qtInstallPath;
     // Used by remote debugging.
     QString remoteChannel;
diff --git a/src/plugins/debugger/qml/qmlengine.cpp b/src/plugins/debugger/qml/qmlengine.cpp
index 7183dc1e2c6c7f9e7b539e0bfb988d6493f78848..85c6bfc5836700198dc8337764fe69ea12ac7b40 100644
--- a/src/plugins/debugger/qml/qmlengine.cpp
+++ b/src/plugins/debugger/qml/qmlengine.cpp
@@ -373,12 +373,12 @@ void QmlEngine::runEngine()
 {
     QTC_ASSERT(state() == EngineRunRequested, qDebug() << state());
 
-    if (!isSlaveEngine() && startParameters().startMode != AttachToRemoteServer
-            && startParameters().startMode != AttachToQmlPort)
-        startApplicationLauncher();
-
-    if (startParameters().startMode == AttachToQmlPort)
-        beginConnection();
+    if (!isSlaveEngine()) {
+        if (startParameters().startMode != AttachToRemoteServer)
+            startApplicationLauncher();
+        else
+            beginConnection();
+    }
 }
 
 void QmlEngine::startApplicationLauncher()
diff --git a/src/plugins/qt4projectmanager/qt-s60/s60devicedebugruncontrol.cpp b/src/plugins/qt4projectmanager/qt-s60/s60devicedebugruncontrol.cpp
index eea936437905bd2f1e99fe9df4090cee4ee47f56..8097234fb63c497753d03b9a5f22a39cf4910005 100644
--- a/src/plugins/qt4projectmanager/qt-s60/s60devicedebugruncontrol.cpp
+++ b/src/plugins/qt4projectmanager/qt-s60/s60devicedebugruncontrol.cpp
@@ -100,11 +100,14 @@ static Debugger::DebuggerStartParameters s60DebuggerStartParams(const S60DeviceR
     sp.qmlServerAddress = activeDeployConf->deviceAddress();
     sp.qmlServerPort = rc->qmlDebugServerPort();
     if (rc->useQmlDebugger()) {
+        sp.languages |= Debugger::QmlLanguage;
         QString qmlArgs = rc->qmlCommandLineArguments();
         if (sp.processArgs.length())
             sp.processArgs.prepend(QLatin1Char(' '));
         sp.processArgs.prepend(qmlArgs);
     }
+    if (rc->useCppDebugger())
+        sp.languages |= Debugger::CppLanguage;
 
     sp.communicationChannel = activeDeployConf->communicationChannel() == S60DeployConfiguration::CommunicationCodaTcpConnection?
                 Debugger::DebuggerStartParameters::CommunicationChannelTcpIp:
diff --git a/src/plugins/remotelinux/remotelinuxdebugsupport.cpp b/src/plugins/remotelinux/remotelinuxdebugsupport.cpp
index 5e149fb762c13b71ee0d738bc1317a08e0a58f7f..dddc6bd71de2a72fcb18183a670e59dae7a7a18a 100644
--- a/src/plugins/remotelinux/remotelinuxdebugsupport.cpp
+++ b/src/plugins/remotelinux/remotelinuxdebugsupport.cpp
@@ -97,10 +97,12 @@ DebuggerStartParameters AbstractRemoteLinuxDebugSupport::startParameters(const R
     DebuggerStartParameters params;
     const LinuxDeviceConfiguration::ConstPtr &devConf = runConfig->deviceConfig();
     if (runConfig->useQmlDebugger()) {
+        params.languages |= QmlLanguage;
         params.qmlServerAddress = runConfig->deviceConfig()->sshParameters().host;
         params.qmlServerPort = -1;
     }
     if (runConfig->useCppDebugger()) {
+        params.languages |= CppLanguage;
         params.processArgs = runConfig->arguments();
         if (runConfig->activeQt4BuildConfiguration()->qtVersion())
             params.sysroot = runConfig->activeQt4BuildConfiguration()->qtVersion()->systemRoot();