diff --git a/src/plugins/debugger/cdb/cdbstacktracecontext.cpp b/src/plugins/debugger/cdb/cdbstacktracecontext.cpp
index 3e5f1c65fcb1d9e2ca1b72172a66749298d64646..8cf72461fe4b7a33895274e4ab9a9fb2e8a6d39e 100644
--- a/src/plugins/debugger/cdb/cdbstacktracecontext.cpp
+++ b/src/plugins/debugger/cdb/cdbstacktracecontext.cpp
@@ -226,6 +226,8 @@ static inline QString msgGetThreadStateFailed(unsigned long threadId, const QStr
     return QString::fromLatin1("Unable to determine the state of thread %1: %2").arg(threadId).arg(why);
 }
 
+// Determine information about thread. This changes the
+// current thread to thread->id.
 static inline bool getStoppedThreadState(const CdbComInterfaces &cif,
                                          ThreadData *t,
                                          QString *errorMessage)
@@ -315,6 +317,14 @@ bool CdbStackTraceContext::getThreads(const CdbComInterfaces &cif,
         }
         threads->push_back(threadData);
     }
+    // Restore thread id
+    if (isStopped && threads->back().id != *currentThreadId) {
+        hr = cif.debugSystemObjects->SetCurrentThreadId(*currentThreadId);
+        if (FAILED(hr)) {
+            *errorMessage= msgGetThreadsFailed(msgComFailed("SetCurrentThreadId", hr));
+            return false;
+        }
+    }
     return true;
 }