diff --git a/src/shared/symbianutils/launcher.cpp b/src/shared/symbianutils/launcher.cpp
index 803de7bfa9a66835cd7d370e66671e463fc4efa1..0948ca02c92e98dcab05b1c036f6bffc2c8eaaf6 100644
--- a/src/shared/symbianutils/launcher.cpp
+++ b/src/shared/symbianutils/launcher.cpp
@@ -363,7 +363,7 @@ void Launcher::handleResult(const TrkResult &result)
             logMessage("TEXT TRACE: " + msg);
             }
         } else {
-            logMessage("APPLICATION OUTPUT: " + result.data);
+            logMessage("APPLICATION OUTPUT: " + stringFromArray(result.data));
             msg = result.data;
         }
         msg.replace("\r\n", "\n");
diff --git a/src/shared/symbianutils/trkdevice.cpp b/src/shared/symbianutils/trkdevice.cpp
index 72d91723a8b1a29c3865f2d79eea81617a008ad9..35ec22790afaccb3909c4278eaafc17bc0e31448 100644
--- a/src/shared/symbianutils/trkdevice.cpp
+++ b/src/shared/symbianutils/trkdevice.cpp
@@ -624,10 +624,11 @@ private:
     void readMessages();
 
     QByteArray m_trkReadBuffer;
+    bool linkEstablishmentMode;
 };
 
 ReaderThreadBase::ReaderThreadBase(const QSharedPointer<DeviceContext> &context) :
-    m_context(context)
+    m_context(context), linkEstablishmentMode(true)
 {
     static const int trkResultMetaId = qRegisterMetaType<trk::TrkResult>();
     Q_UNUSED(trkResultMetaId)
@@ -650,7 +651,7 @@ void ReaderThreadBase::readMessages()
 {
     TrkResult r;
     QByteArray rawData;
-    while (extractResult(&m_trkReadBuffer, m_context->serialFrame, &r, &rawData)) {
+    while (extractResult(&m_trkReadBuffer, m_context->serialFrame, &r, linkEstablishmentMode, &rawData)) {
         emit messageReceived(r, rawData);
     }
 }
diff --git a/src/shared/symbianutils/trkutils.cpp b/src/shared/symbianutils/trkutils.cpp
index 3b8fc06226f98a045e52944fc9d0fb740f55c707..fd9978c736ff4364d92a00e6fa1825bd07a093e7 100644
--- a/src/shared/symbianutils/trkutils.cpp
+++ b/src/shared/symbianutils/trkutils.cpp
@@ -287,16 +287,26 @@ ushort isValidTrkResult(const QByteArray &buffer, bool serialFrame, ushort& mux)
     return firstDelimiterPos != -1 ? firstDelimiterPos : buffer.size();
 }
 
-bool extractResult(QByteArray *buffer, bool serialFrame, TrkResult *result, QByteArray *rawData)
+bool extractResult(QByteArray *buffer, bool serialFrame, TrkResult *result, bool &linkEstablishmentMode, QByteArray *rawData)
 {
     result->clear();
     if(rawData)
         rawData->clear();
-    const ushort len = isValidTrkResult(*buffer, serialFrame, result->multiplex);
-    if (!len)
-        return false;
+    ushort len = isValidTrkResult(*buffer, serialFrame, result->multiplex);
     // handle receiving application output, which is not a regular command
     const int delimiterPos = serialFrame ? 4 : 0;
+    if (linkEstablishmentMode) {
+        //when "hot connecting" a device, we can receive partial frames.
+        //this code resyncs by discarding data until a TRK frame is found
+        while (buffer->length() > delimiterPos
+               && result->multiplex != MuxTextTrace
+               && !(result->multiplex == MuxTrk && buffer->at(delimiterPos) == 0x7e)) {
+            buffer->remove(0,1);
+            len = isValidTrkResult(*buffer, serialFrame, result->multiplex);
+        }
+    }
+    if (!len)
+        return false;
     if (buffer->at(delimiterPos) != 0x7e) {
         result->isDebugOutput = true;
         result->data = buffer->mid(delimiterPos, len);
@@ -323,6 +333,7 @@ bool extractResult(QByteArray *buffer, bool serialFrame, TrkResult *result, QByt
     //logMessage("   CURR DATA: " << stringFromArray(data));
     //QByteArray prefix = "READ BUF:                                       ";
     //logMessage((prefix + "HEADER: " + stringFromArray(header).toLatin1()).data());
+    linkEstablishmentMode = false; //have received a good TRK packet, therefore in sync
     return true;
 }
 
diff --git a/src/shared/symbianutils/trkutils_p.h b/src/shared/symbianutils/trkutils_p.h
index ce81076e41a036bfef04deb3932f0ec77a5fac04..7a147064da6a0a9f6e62bece2d3c3d33f52a30cc 100644
--- a/src/shared/symbianutils/trkutils_p.h
+++ b/src/shared/symbianutils/trkutils_p.h
@@ -43,7 +43,7 @@ void appendDateTime(QByteArray *ba, QDateTime dateTime, Endianness = TargetByteO
 // returns a QByteArray containing optionally
 // the serial frame [0x01 0x90 <len>] and 0x7e encoded7d(ba) 0x7e
 QByteArray frameMessage(byte command, byte token, const QByteArray &data, bool serialFrame);
-bool extractResult(QByteArray *buffer, bool serialFrame, TrkResult *r, QByteArray *rawData = 0);
+bool extractResult(QByteArray *buffer, bool serialFrame, TrkResult *r, bool& linkEstablishmentMode, QByteArray *rawData = 0);
 
 } // namespace trk