diff --git a/src/plugins/debugger/gdb/trkgdbadapter.cpp b/src/plugins/debugger/gdb/trkgdbadapter.cpp
index 2093d1b2b4ec11cbfa4ba03dbff1ed6aca2d7a7d..8bb968c229e18e723ac5166133f1958bd9d3740b 100644
--- a/src/plugins/debugger/gdb/trkgdbadapter.cpp
+++ b/src/plugins/debugger/gdb/trkgdbadapter.cpp
@@ -28,6 +28,7 @@
 **************************************************************************/
 
 #include "trkgdbadapter.h"
+#include "launcher.h"
 #include "trkoptions.h"
 #include "trkoptionspage.h"
 #include "s60debuggerbluetoothstarter.h"
@@ -1054,16 +1055,18 @@ void TrkGdbAdapter::handleTrkResult(const TrkResult &result)
             logMessage(logMsg);
             break;
         }
-        case 0x90: { // Notified Stopped
+        case TrkNotifyStopped: { // Notified Stopped	   
             // 90 01   78 6a 40 40   00 00 07 23   00 00 07 24  00 00
             debugMessage(_("RESET SNAPSHOT (NOTIFY STOPPED)"));
             m_snapshot.reset();
-            const char *data = result.data.data();
-            const uint addr = extractInt(data);
-            const uint pid = extractInt(data + 4);
-            const uint tid = extractInt(data + 8);
-            logMessage(prefix + _("NOTE: PID %1/TID %2 "
-                "STOPPED at 0x%3").arg(pid).arg(tid).arg(addr, 0, 16));
+            QString reason;
+            uint addr;
+            uint pid;
+            uint tid;
+            trk::Launcher::parseNotifyStopped(result.data, &pid, &tid, &addr, &reason);
+            const QString msg = trk::Launcher::msgStopped(pid, tid, addr, reason);
+            logMessage(prefix + msg);
+            m_engine->manager()->showDebuggerOutput(LogMisc, msg);
             sendTrkAck(result.token);
             if (addr) {
                 // Todo: Do not send off GdbMessages if a synced gdb
@@ -1082,7 +1085,7 @@ void TrkGdbAdapter::handleTrkResult(const TrkResult &result)
                 trkReadRegistersMessage());
             break;
         }
-        case 0x91: { // Notify Exception (obsolete)
+        case TrkNotifyException: { // Notify Exception (obsolete)
             debugMessage(_("RESET SNAPSHOT (NOTIFY EXCEPTION)"));
             m_snapshot.reset();
             logMessage(prefix + "NOTE: EXCEPTION  " + str);
diff --git a/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp b/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp
index 52756861a6346f51008e5b75126d41b8cef91cde..075a55d6377e036f7f7cdba3584d81eb7a3b4b1d 100644
--- a/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp
+++ b/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp
@@ -669,6 +669,8 @@ void S60DeviceRunControlBase::startDeployment()
     connect(m_launcher, SIGNAL(installingFinished()), this, SLOT(printInstallingFinished()));
     connect(m_launcher, SIGNAL(copyProgress(int)), this, SLOT(printCopyProgress(int)));
     connect(m_launcher, SIGNAL(stateChanged(int)), this, SLOT(slotLauncherStateChanged(int)));
+    connect(m_launcher, SIGNAL(processStopped(uint,uint,uint,QString)),
+            this, SLOT(processStopped(uint,uint,uint,QString)));
 
     //TODO sisx destination and file path user definable
     m_launcher->setTrkServerName(m_serialPortName);
@@ -775,6 +777,12 @@ void S60DeviceRunControlBase::reportDeployFinished()
     }
 }
 
+void S60DeviceRunControlBase::processStopped(uint pc, uint pid, uint tid, const QString& reason)
+{
+    emit addToOutputWindow(this, trk::Launcher::msgStopped(pid, tid, pc, reason));
+    m_launcher->terminate();
+}
+
 QMessageBox *S60DeviceRunControlBase::createTrkWaitingMessageBox(const QString &port, QWidget *parent)
 {
     const QString title  = QCoreApplication::translate("Qt4ProjectManager::Internal::S60DeviceRunControlBase",
diff --git a/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.h b/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.h
index 1dd9228488af4fc77cea6311da8ecc7c2fcc8675..26b7133862e2909b3b8538349c34c3f38f1c385c 100644
--- a/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.h
+++ b/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.h
@@ -169,6 +169,7 @@ protected slots:
     void printApplicationOutput(const QString &output);
 
 private slots:
+    void processStopped(uint pc, uint pid, uint tid, const QString& reason);
     void readStandardError();
     void readStandardOutput();
     void makesisProcessFailed();
diff --git a/tests/manual/trklauncher/main.cpp b/tests/manual/trklauncher/main.cpp
index f35c49b93112aa39c08c0dbb01969ea298d48014..50a15f45f217279aeaf4eae47e46663a97c5c2ca 100644
--- a/tests/manual/trklauncher/main.cpp
+++ b/tests/manual/trklauncher/main.cpp
@@ -147,6 +147,8 @@ int main(int argc, char *argv[])
         return 1;
     }
     QObject::connect(launcher.data(), SIGNAL(finished()), &app, SLOT(quit()));
+    QObject::connect(launcher.data(), SIGNAL(processStopped(uint,uint,uint,QString)),
+                     launcher.data(), SLOT(terminate()));
     // BLuetooth: Open with prompt
     QString errorMessage;
     if (bluetooth && !trk::ConsoleBluetoothStarter::startBluetooth(launcher->trkDevice(),