diff --git a/src/plugins/debugger/debuggerstartparameters.h b/src/plugins/debugger/debuggerstartparameters.h
index ed3f9c4f2f5f2765183729f158746e727f0737cf..220229e4abe3614a2657b0556e65f67528283553 100644
--- a/src/plugins/debugger/debuggerstartparameters.h
+++ b/src/plugins/debugger/debuggerstartparameters.h
@@ -69,6 +69,7 @@ public:
         qmlServerPort(ProjectExplorer::Constants::QML_DEFAULT_DEBUG_SERVER_PORT),
         useServerStartScript(false),
         connParams(Utils::SshConnectionParameters::NoProxy),
+        requestRemoteSetup(false),
         startMode(NoStartMode),
         executableUid(0),
         communicationChannel(CommunicationChannelTcpIp),
@@ -115,6 +116,7 @@ public:
     QString remoteMountPoint;
     QString localMountDir;
     Utils::SshConnectionParameters connParams;
+    bool requestRemoteSetup;
 
     QString debuggerCommand;
     ProjectExplorer::Abi toolChainAbi;
diff --git a/src/plugins/debugger/gdb/remotegdbserveradapter.cpp b/src/plugins/debugger/gdb/remotegdbserveradapter.cpp
index 3b7bf8fb106f0a54f8b837597e622f279c681865..5c322c62c38a82b44f9b1709cf425f5cc87331d2 100644
--- a/src/plugins/debugger/gdb/remotegdbserveradapter.cpp
+++ b/src/plugins/debugger/gdb/remotegdbserveradapter.cpp
@@ -95,7 +95,10 @@ void RemoteGdbServerAdapter::startAdapter()
             m_uploadProc.waitForStarted();
         }
     }
-    m_engine->requestRemoteSetup();
+    if (startParameters().requestRemoteSetup)
+        m_engine->requestRemoteSetup();
+    else
+        handleSetupDone();
 }
 
 void RemoteGdbServerAdapter::uploadProcError(QProcess::ProcessError error)
diff --git a/src/plugins/debugger/gdb/remoteplaingdbadapter.cpp b/src/plugins/debugger/gdb/remoteplaingdbadapter.cpp
index c332a8ec3b96557b27e5cf109e978143b6ca0cea..bd09d2d4e20b3fa3f59cee4f74ec8fae5aaa6596 100644
--- a/src/plugins/debugger/gdb/remoteplaingdbadapter.cpp
+++ b/src/plugins/debugger/gdb/remoteplaingdbadapter.cpp
@@ -54,7 +54,16 @@ void RemotePlainGdbAdapter::startAdapter()
 {
     QTC_ASSERT(state() == EngineSetupRequested, qDebug() << state());
     showMessage(QLatin1String("TRYING TO START ADAPTER"));
-    m_engine->requestRemoteSetup();
+
+    if (!startParameters().workingDirectory.isEmpty())
+        m_gdbProc.setWorkingDirectory(startParameters().workingDirectory);
+    if (startParameters().environment.size())
+        m_gdbProc.setEnvironment(startParameters().environment.toStringList());
+
+    if (startParameters().requestRemoteSetup)
+        m_engine->requestRemoteSetup();
+    else
+        handleRemoteSetupDone(startParameters().connParams.port, startParameters().qmlServerPort);
 }
 
 void RemotePlainGdbAdapter::setupInferior()
@@ -106,10 +115,6 @@ void RemotePlainGdbAdapter::handleRemoteSetupDone(int gdbServerPort, int qmlPort
 
     if (qmlPort != -1)
         startParameters().qmlServerPort = qmlPort;
-    if (!startParameters().workingDirectory.isEmpty())
-        m_gdbProc.setWorkingDirectory(startParameters().workingDirectory);
-    if (startParameters().environment.size())
-        m_gdbProc.setEnvironment(startParameters().environment.toStringList());
     m_gdbProc.realStart(m_engine->startParameters().debuggerCommand,
         QStringList() << QLatin1String("-i") << QLatin1String("mi"),
         m_engine->startParameters().executable);
diff --git a/src/plugins/debugger/qml/qmlengine.cpp b/src/plugins/debugger/qml/qmlengine.cpp
index f66847f8bc44c460208d4304f18561dfee8cf0b0..d402fcbf04a87e530a71500804b0baf6640ca140 100644
--- a/src/plugins/debugger/qml/qmlengine.cpp
+++ b/src/plugins/debugger/qml/qmlengine.cpp
@@ -450,8 +450,7 @@ void QmlEngine::shutdownEngine()
 
 void QmlEngine::setupEngine()
 {
-    if (startParameters().startMode == AttachToQmlPort
-             || startParameters().startMode == AttachToRemoteServer) {
+    if (startParameters().requestRemoteSetup) {
         // we need to get the port first
         emit requestRemoteSetup();
     } else {
diff --git a/src/plugins/qt4projectmanager/qt-s60/s60devicedebugruncontrol.cpp b/src/plugins/qt4projectmanager/qt-s60/s60devicedebugruncontrol.cpp
index f0200e43be55dc8b479b75250fd203c35d07c909..1160ae9bd7a9ee5d734b5b4d9a2df41c78e56101 100644
--- a/src/plugins/qt4projectmanager/qt-s60/s60devicedebugruncontrol.cpp
+++ b/src/plugins/qt4projectmanager/qt-s60/s60devicedebugruncontrol.cpp
@@ -84,10 +84,12 @@ static Debugger::DebuggerStartParameters s60DebuggerStartParams(const S60DeviceR
 
     sp.remoteChannel = activeDeployConf->serialPortName();
     sp.processArgs = rc->commandLineArguments();
-    if (rc->useQmlDebugger() && !rc->useCppDebugger())
+    if (rc->useQmlDebugger() && !rc->useCppDebugger()) {
+        sp.requestRemoteSetup = true;
         sp.startMode = Debugger::AttachToRemoteServer;
-    else
+    } else {
         sp.startMode = Debugger::StartInternal;
+    }
 
     sp.toolChainAbi = rc->abi();
     sp.executable = debugFileName;
diff --git a/src/plugins/remotelinux/remotelinuxdebugsupport.cpp b/src/plugins/remotelinux/remotelinuxdebugsupport.cpp
index 2135ad9ccad39902feb3ce5978698f931229fa93..35314964fa2bb8d905623e915f0205ad464acf7a 100644
--- a/src/plugins/remotelinux/remotelinuxdebugsupport.cpp
+++ b/src/plugins/remotelinux/remotelinuxdebugsupport.cpp
@@ -109,7 +109,7 @@ DebuggerStartParameters AbstractRemoteLinuxDebugSupport::startParameters(const R
         params.executable = runConfig->localExecutableFilePath();
         params.debuggerCommand = runConfig->gdbCmd();
         params.remoteChannel = devConf->sshParameters().host + QLatin1String(":-1");
-        params.useServerStartScript = true;
+        params.requestRemoteSetup = true;
 
         // TODO: This functionality should be inside the debugger.
         const ProjectExplorer::Abi &abi = runConfig->target()