diff --git a/src/plugins/debugger/gdb/abstractgdbadapter.h b/src/plugins/debugger/gdb/abstractgdbadapter.h
index 9b30ab9fd3c5082a70f39d25dbd619fd6a9e75bb..6f6234e0b7351ec441cf0d72431b5c7823b4536a 100644
--- a/src/plugins/debugger/gdb/abstractgdbadapter.h
+++ b/src/plugins/debugger/gdb/abstractgdbadapter.h
@@ -85,9 +85,8 @@ public:
     virtual void startAdapter(const DebuggerStartParametersPtr &sp) = 0;
     virtual void prepareInferior() = 0;
     virtual void startInferior() = 0;
-    virtual void shutdownInferior() = 0;
-    virtual void shutdownAdapter() = 0;
     virtual void interruptInferior() = 0;
+    virtual void shutdown() = 0;
 
 signals:
     void adapterStarted();
diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp
index 8bdf71ae71121bfd5e747f7c4fafbe03e18334f8..3523ee1d146da93309c2005054ce7b42653c516f 100644
--- a/src/plugins/debugger/gdb/gdbengine.cpp
+++ b/src/plugins/debugger/gdb/gdbengine.cpp
@@ -228,13 +228,6 @@ void GdbEngine::initializeConnections()
     connect(m_gdbAdapter, SIGNAL(adapterCrashed()),
         m_manager, SLOT(exitDebugger()));
 
-    connect(&m_uploadProc, SIGNAL(error(QProcess::ProcessError)),
-        this, SLOT(uploadProcError(QProcess::ProcessError)));
-    connect(&m_uploadProc, SIGNAL(readyReadStandardOutput()),
-        this, SLOT(readUploadStandardOutput()));
-    connect(&m_uploadProc, SIGNAL(readyReadStandardError()),
-        this, SLOT(readUploadStandardError()));
-
     // Output
     connect(&m_outputCollector, SIGNAL(byteDelivery(QByteArray)),
         this, SLOT(readDebugeeOutput(QByteArray)));
@@ -290,8 +283,7 @@ void GdbEngine::initializeVariables()
 
     // FIXME: unhandled:
     //m_outputCodecState = QTextCodec::ConverterState();
-    //QProcess m_gdbAdapter;
-    //QProcess m_uploadProc;
+    //m_gdbAdapter;
 }
 
 void GdbEngine::gdbProcError(QProcess::ProcessError error)
@@ -338,55 +330,6 @@ void GdbEngine::gdbProcError(QProcess::ProcessError error)
         m_manager->exitDebugger();
 }
 
-void GdbEngine::uploadProcError(QProcess::ProcessError error)
-{
-    QString msg;
-    switch (error) {
-        case QProcess::FailedToStart:
-            msg = tr("The upload process failed to start. Either the "
-                "invoked script '%1' is missing, or you may have insufficient "
-                "permissions to invoke the program.")
-                .arg(theDebuggerStringSetting(GdbLocation));
-            break;
-        case QProcess::Crashed:
-            msg = tr("The upload process crashed some time after starting "
-                "successfully.");
-            break;
-        case QProcess::Timedout:
-            msg = tr("The last waitFor...() function timed out. "
-                "The state of QProcess is unchanged, and you can try calling "
-                "waitFor...() again.");
-            break;
-        case QProcess::WriteError:
-            msg = tr("An error occurred when attempting to write "
-                "to the upload process. For example, the process may not be running, "
-                "or it may have closed its input channel.");
-            break;
-        case QProcess::ReadError:
-            msg = tr("An error occurred when attempting to read from "
-                "the upload process. For example, the process may not be running.");
-            break;
-        default:
-            msg = tr("An unknown error in the upload process occurred. "
-                "This is the default return value of error().");
-    }
-
-    showStatusMessage(msg);
-    QMessageBox::critical(mainWindow(), tr("Error"), msg);
-}
-
-void GdbEngine::readUploadStandardOutput()
-{
-    QByteArray ba = m_uploadProc.readAllStandardOutput();
-    gdbOutputAvailable(LogOutput, QString::fromLocal8Bit(ba, ba.length()));
-}
-
-void GdbEngine::readUploadStandardError()
-{
-    QByteArray ba = m_uploadProc.readAllStandardError();
-    gdbOutputAvailable(LogError, QString::fromLocal8Bit(ba, ba.length()));
-}
-
 #if 0
 static void dump(const char *first, const char *middle, const QString & to)
 {
@@ -713,7 +656,7 @@ void GdbEngine::postCommand(const QString &command, GdbCommandFlags flags,
 {
     GdbCommand cmd;
     cmd.command = command;
-    //cmd.flags = flags;
+    cmd.flags = flags;
     cmd.adapterCallback = callback;
     cmd.callbackName = callbackName;
     cmd.cookie = cookie;
@@ -1508,7 +1451,7 @@ void GdbEngine::shutdown()
 {
     m_outputCollector.shutdown();
     initializeVariables();
-    m_gdbAdapter->shutdownAdapter();
+    m_gdbAdapter->shutdown();
 }
 
 void GdbEngine::detachDebugger()
@@ -1522,7 +1465,7 @@ void GdbEngine::exitDebugger()
 {
     m_outputCollector.shutdown();
     initializeVariables();
-    m_gdbAdapter->shutdownAdapter();
+    m_gdbAdapter->shutdown();
 }
 
 void GdbEngine::handleExitHelper(const GdbResultRecord &, const QVariant &)
diff --git a/src/plugins/debugger/gdb/gdbengine.h b/src/plugins/debugger/gdb/gdbengine.h
index 5fd94e18a57e3a053d591eb84f5e33c43571d7e5..23db09b97372ddb2b260ebc07ee7c4a451dbdb16 100644
--- a/src/plugins/debugger/gdb/gdbengine.h
+++ b/src/plugins/debugger/gdb/gdbengine.h
@@ -229,10 +229,7 @@ private slots:
     void gdbProcError(QProcess::ProcessError error);
     void readGdbStandardOutput();
     void readGdbStandardError();
-    void readUploadStandardOutput();
-    void readUploadStandardError();
     void readDebugeeOutput(const QByteArray &data);
-    void uploadProcError(QProcess::ProcessError error);
     void emitStartFailed();
 
     void handleAdapterStarted();
@@ -297,7 +294,6 @@ private:
     QByteArray m_inbuffer;
 
     AbstractGdbAdapter *m_gdbAdapter;
-    QProcess m_uploadProc;
 
     QHash<int, GdbCommand> m_cookieForToken;
     QHash<int, QByteArray> m_customOutputForToken;
diff --git a/src/plugins/debugger/gdb/plaingdbadapter.cpp b/src/plugins/debugger/gdb/plaingdbadapter.cpp
index bb27883818f83c0c3f9375e1bfc5fcea9380b55f..851c5edb1d264c7d4b102f7da8757dd8db04cbee 100644
--- a/src/plugins/debugger/gdb/plaingdbadapter.cpp
+++ b/src/plugins/debugger/gdb/plaingdbadapter.cpp
@@ -158,11 +158,12 @@ void PlainGdbAdapter::handleFileExecAndSymbols(const GdbResultRecord &response,
     }
 }
 
-void PlainGdbAdapter::startInferior()
+void PlainGdbAdapter::handleInfoTarget(const GdbResultRecord &response, const QVariant &)
 {
-    QTC_ASSERT(state() == InferiorPrepared, qDebug() << state());
-    setState(InferiorStarting);
-    m_engine->postCommand(_("-exec-run"), CB(handleExecRun));
+    QTC_ASSERT(state() == AdapterNotRunning, qDebug() << state());
+#if defined(Q_OS_MAC)
+    Q_UNUSED(response)
+#else
 /*
     #ifdef Q_OS_MAC        
     m_engine->postCommand(_("sharedlibrary apply-load-rules all"));
@@ -177,14 +178,6 @@ void PlainGdbAdapter::startInferior()
     m_engine->postCommand(_("info target"), CB(handleInfoTarget));
     #endif
 */
-}
-
-void PlainGdbAdapter::handleInfoTarget(const GdbResultRecord &response, const QVariant &)
-{
-    QTC_ASSERT(state() == AdapterNotRunning, qDebug() << state());
-#if defined(Q_OS_MAC)
-    Q_UNUSED(response)
-#else
     if (response.resultClass == GdbResultDone) {
         // [some leading stdout here]
         // >&"        Entry point: 0x80831f0  0x08048134 - 0x08048147 is .interp\n"
@@ -241,7 +234,7 @@ void PlainGdbAdapter::interruptInferior()
         debugMessage(_("CANNOT INTERRUPT %1").arg(attachedPID));
 }
 
-void PlainGdbAdapter::shutdownAdapter()
+void PlainGdbAdapter::shutdown()
 {
     if (state() == InferiorStarted) {
         setState(InferiorShuttingDown);
@@ -281,7 +274,7 @@ void PlainGdbAdapter::handleKill(const GdbResultRecord &response, const QVariant
     if (response.resultClass == GdbResultDone) {
         setState(InferiorShutDown);
         emit inferiorShutDown();
-        shutdownAdapter(); // re-iterate...
+        shutdown(); // re-iterate...
     } else if (response.resultClass == GdbResultError) {
         QString msg = tr("Inferior process could not be stopped:\n") +
             __(response.data.findChild("msg").data());
@@ -308,11 +301,6 @@ void PlainGdbAdapter::handleGdbFinished(int, QProcess::ExitStatus)
     emit adapterShutDown();
 }
 
-void PlainGdbAdapter::shutdownInferior()
-{
-    m_engine->postCommand(_("kill"));
-}
-
 void PlainGdbAdapter::stubStarted()
 {
     const qint64 attachedPID = m_stubProc.applicationPID();
diff --git a/src/plugins/debugger/gdb/plaingdbadapter.h b/src/plugins/debugger/gdb/plaingdbadapter.h
index 9578a261377ee276727333dd2bf0b270c8f38542..77090aaf56606d7ac8179073c416aa981445b1af 100644
--- a/src/plugins/debugger/gdb/plaingdbadapter.h
+++ b/src/plugins/debugger/gdb/plaingdbadapter.h
@@ -63,13 +63,12 @@ public:
     void setWorkingDirectory(const QString &dir) { m_gdbProc.setWorkingDirectory(dir); }
     void setEnvironment(const QStringList &env) { m_gdbProc.setEnvironment(env); }
     bool isAdapter() const { return false; }
-    void interruptInferior();
 
     void startAdapter(const DebuggerStartParametersPtr &sp);
     void prepareInferior();
     void startInferior();
-    void shutdownInferior();
-    void shutdownAdapter();
+    void interruptInferior();
+    void shutdown();
 
 private:
     void handleFileExecAndSymbols(const GdbResultRecord &, const QVariant &);
diff --git a/src/plugins/debugger/gdb/remotegdbadapter.cpp b/src/plugins/debugger/gdb/remotegdbadapter.cpp
index 148a1b389c5859039e1bdae275544a62ec53ebdc..e84eaf9180b6d6dd2091b22d15c613745f268724 100644
--- a/src/plugins/debugger/gdb/remotegdbadapter.cpp
+++ b/src/plugins/debugger/gdb/remotegdbadapter.cpp
@@ -68,6 +68,13 @@ RemoteGdbAdapter::RemoteGdbAdapter(GdbEngine *engine, QObject *parent)
         this, SLOT(handleGdbStarted()));
     connect(&m_gdbProc, SIGNAL(finished(int, QProcess::ExitStatus)),
         this, SLOT(handleGdbFinished(int, QProcess::ExitStatus)));
+
+    connect(&m_uploadProc, SIGNAL(error(QProcess::ProcessError)),
+        this, SLOT(uploadProcError(QProcess::ProcessError)));
+    connect(&m_uploadProc, SIGNAL(readyReadStandardOutput()),
+        this, SLOT(readUploadStandardOutput()));
+    connect(&m_uploadProc, SIGNAL(readyReadStandardError()),
+        this, SLOT(readUploadStandardError()));
 }
 
 void RemoteGdbAdapter::startAdapter(const DebuggerStartParametersPtr &sp)
@@ -105,6 +112,55 @@ void RemoteGdbAdapter::handleGdbStarted()
     emit adapterStarted();
 }
 
+void RemoteGdbAdapter::uploadProcError(QProcess::ProcessError error)
+{
+    QString msg;
+    switch (error) {
+        case QProcess::FailedToStart:
+            msg = tr("The upload process failed to start. Either the "
+                "invoked script '%1' is missing, or you may have insufficient "
+                "permissions to invoke the program.")
+                .arg(theDebuggerStringSetting(GdbLocation));
+            break;
+        case QProcess::Crashed:
+            msg = tr("The upload process crashed some time after starting "
+                "successfully.");
+            break;
+        case QProcess::Timedout:
+            msg = tr("The last waitFor...() function timed out. "
+                "The state of QProcess is unchanged, and you can try calling "
+                "waitFor...() again.");
+            break;
+        case QProcess::WriteError:
+            msg = tr("An error occurred when attempting to write "
+                "to the upload process. For example, the process may not be running, "
+                "or it may have closed its input channel.");
+            break;
+        case QProcess::ReadError:
+            msg = tr("An error occurred when attempting to read from "
+                "the upload process. For example, the process may not be running.");
+            break;
+        default:
+            msg = tr("An unknown error in the upload process occurred. "
+                "This is the default return value of error().");
+    }
+
+    m_engine->showStatusMessage(msg);
+    QMessageBox::critical(m_engine->mainWindow(), tr("Error"), msg);
+}
+
+void RemoteGdbAdapter::readUploadStandardOutput()
+{
+    QByteArray ba = m_uploadProc.readAllStandardOutput();
+    m_engine->gdbOutputAvailable(LogOutput, QString::fromLocal8Bit(ba, ba.length()));
+}
+
+void RemoteGdbAdapter::readUploadStandardError()
+{
+    QByteArray ba = m_uploadProc.readAllStandardError();
+    m_engine->gdbOutputAvailable(LogError, QString::fromLocal8Bit(ba, ba.length()));
+}
+
 void RemoteGdbAdapter::prepareInferior()
 {
     QTC_ASSERT(state() == AdapterStarted, qDebug() << state());
@@ -173,7 +229,7 @@ void RemoteGdbAdapter::interruptInferior()
         debugMessage(_("CANNOT INTERRUPT %1").arg(attachedPID));
 }
 
-void RemoteGdbAdapter::shutdownAdapter()
+void RemoteGdbAdapter::shutdown()
 {
     if (state() == InferiorStarted) {
         setState(InferiorShuttingDown);
@@ -187,24 +243,7 @@ void RemoteGdbAdapter::shutdownAdapter()
         return;
     }
 
-/*
-    if (state() == InferiorShutdownFailed) {
-        m_gdbProc.terminate();
-        // 20s can easily happen when loading webkit debug information
-        m_gdbProc.waitForFinished(20000);
-        setState(AdapterShuttingDown);
-        debugMessage(_("FORCING TERMINATION: %1")
-            .arg(state()));
-        if (state() != QProcess::NotRunning) {
-            debugMessage(_("PROBLEM STOPPING DEBUGGER: STATE %1")
-                .arg(state()));
-            m_gdbProc.kill();
-        }
-        m_engine->postCommand(_("-gdb-exit"), CB(handleExit));
-        return;
-    }
-
-*/
+    // FIXME: handle other states, too.
     QTC_ASSERT(state() == AdapterNotRunning, qDebug() << state());
 }
 
@@ -213,7 +252,7 @@ void RemoteGdbAdapter::handleKill(const GdbResultRecord &response, const QVarian
     if (response.resultClass == GdbResultDone) {
         setState(InferiorShutDown);
         emit inferiorShutDown();
-        shutdownAdapter(); // re-iterate...
+        shutdown(); // re-iterate...
     } else if (response.resultClass == GdbResultError) {
         QString msg = tr("Inferior process could not be stopped:\n") +
             __(response.data.findChild("msg").data());
@@ -240,10 +279,5 @@ void RemoteGdbAdapter::handleGdbFinished(int, QProcess::ExitStatus)
     emit adapterShutDown();
 }
 
-void RemoteGdbAdapter::shutdownInferior()
-{
-    m_engine->postCommand(_("kill"));
-}
-
 } // namespace Internal
 } // namespace Debugger
diff --git a/src/plugins/debugger/gdb/remotegdbadapter.h b/src/plugins/debugger/gdb/remotegdbadapter.h
index 261ad169b56b5378deb849c514e8d761cfaabb3b..2bf9328657220acc8459a0c53bc6ea15448999e1 100644
--- a/src/plugins/debugger/gdb/remotegdbadapter.h
+++ b/src/plugins/debugger/gdb/remotegdbadapter.h
@@ -59,13 +59,16 @@ public:
     void setWorkingDirectory(const QString &dir) { m_gdbProc.setWorkingDirectory(dir); }
     void setEnvironment(const QStringList &env) { m_gdbProc.setEnvironment(env); }
     bool isAdapter() const { return false; }
-    void interruptInferior();
 
     void startAdapter(const DebuggerStartParametersPtr &sp);
     void prepareInferior();
     void startInferior();
-    void shutdownInferior();
-    void shutdownAdapter();
+    void interruptInferior();
+    void shutdown();
+
+    void readUploadStandardOutput();
+    void readUploadStandardError();
+    void uploadProcError(QProcess::ProcessError error);
 
 private:
     void handleFileExecAndSymbols(const GdbResultRecord &, const QVariant &);
@@ -79,6 +82,7 @@ private:
 
     QProcess m_gdbProc;
     DebuggerStartParametersPtr m_startParameters;
+    QProcess m_uploadProc;
 };
 
 } // namespace Internal
diff --git a/src/plugins/debugger/gdb/trkgdbadapter.cpp b/src/plugins/debugger/gdb/trkgdbadapter.cpp
index 12e47e9401ddadd97da8dd1929c02f13ed2a5422..d593742f5990e4fec61d07d22980fe2acd2397a3 100644
--- a/src/plugins/debugger/gdb/trkgdbadapter.cpp
+++ b/src/plugins/debugger/gdb/trkgdbadapter.cpp
@@ -1483,7 +1483,7 @@ void TrkGdbAdapter::sendGdbMessage(const QString &msg, GdbCallback callback,
 }
 
 //
-// GdbProcessBase
+// Rfcomm process handling
 //
 
 void TrkGdbAdapter::handleRfcommReadyReadStandardError()
@@ -1523,6 +1523,7 @@ void TrkGdbAdapter::handleRfcommStateChanged(QProcess::ProcessState newState)
 // AbstractGdbAdapter interface implementation
 //
 
+/*
 void TrkGdbAdapter::kill()
 {
     if (m_options->mode == TrkOptions::BlueTooth
@@ -1537,7 +1538,6 @@ void TrkGdbAdapter::terminate()
     m_gdbProc.terminate();
 }
 
-/*
 bool TrkGdbAdapter::waitForFinished(int msecs)
 {
     QByteArray ba;
@@ -1582,12 +1582,7 @@ void TrkGdbAdapter::setEnvironment(const QStringList &env)
     m_gdbProc.setEnvironment(env);
 }
 
-void TrkGdbAdapter::shutdownInferior()
-{
-    m_engine->postCommand(_("kill"), CB(handleKill));
-}
-
-void TrkGdbAdapter::shutdownAdapter()
+void TrkGdbAdapter::shutdown()
 {
     if (state() == InferiorStarted) {
         setState(InferiorShuttingDown);
@@ -1610,7 +1605,7 @@ void TrkGdbAdapter::handleKill(const GdbResultRecord &response, const QVariant &
     if (response.resultClass == GdbResultDone) {
         setState(InferiorShutDown);
         emit inferiorShutDown();
-        shutdownAdapter(); // re-iterate...
+        shutdown(); // re-iterate...
     } else if (response.resultClass == GdbResultError) {
         QString msg = tr("Inferior process could not be stopped:\n") +
             __(response.data.findChild("msg").data());
diff --git a/src/plugins/debugger/gdb/trkgdbadapter.h b/src/plugins/debugger/gdb/trkgdbadapter.h
index f725fa635b93030c282321fed21e6139ece7a5a0..32c0bb98f48d58df16b11dcf942b2066729e57ea 100644
--- a/src/plugins/debugger/gdb/trkgdbadapter.h
+++ b/src/plugins/debugger/gdb/trkgdbadapter.h
@@ -109,8 +109,6 @@ public:
     //
     void start(const QString &program, const QStringList &args,
         QIODevice::OpenMode mode = QIODevice::ReadWrite);
-    void kill();
-    void terminate();
     QString errorString() const;
     QByteArray readAllStandardError();
     QByteArray readAllStandardOutput();
@@ -118,16 +116,14 @@ public:
     void setWorkingDirectory(const QString &dir);
     void setEnvironment(const QStringList &env);
     bool isAdapter() const { return true; }
-    //void attach();
-    void interruptInferior();
-    Q_SLOT void startInferiorEarly();
 
     void startAdapter(const DebuggerStartParametersPtr &sp);
     void prepareInferior();
     void startInferior();
-    void shutdownInferior();
-    void shutdownAdapter();
+    void interruptInferior();
+    void shutdown();
 
+    Q_SLOT void startInferiorEarly();
     void handleKill(const GdbResultRecord &, const QVariant &);
     void handleExit(const GdbResultRecord &, const QVariant &);
     void handleTargetRemote(const GdbResultRecord &, const QVariant &);