diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp
index 3d1adf9fe67f56c463783649de8c11d4eb06e757..4bd65d1af109f2d6209bdaba356e3633da65df2b 100644
--- a/src/plugins/debugger/gdb/gdbengine.cpp
+++ b/src/plugins/debugger/gdb/gdbengine.cpp
@@ -2963,8 +2963,8 @@ void GdbEngine::handleThreadInfo(const GdbResponse &response)
             threads.append(thread);
         }
         threadsHandler()->setThreads(threads);
-        int currentIndex = response.data.findChild("current-thread-id").data().toInt();
-        threadsHandler()->setCurrentThread(currentIndex);
+        const int currentThreadId = response.data.findChild("current-thread-id").data().toInt();
+        threadsHandler()->setCurrentThreadId(currentThreadId);
     } else {
         // Fall back for older versions: Try to get at least a list
         // of running threads.
@@ -2974,24 +2974,18 @@ void GdbEngine::handleThreadInfo(const GdbResponse &response)
 
 void GdbEngine::handleThreadListIds(const GdbResponse &response)
 {
-    int id = response.cookie.toInt();
+    const int id = response.cookie.toInt();
     // "72^done,{thread-ids={thread-id="2",thread-id="1"},number-of-threads="2"}
     // In gdb 7.1+ additionally: current-thread-id="1"
     const QList<GdbMi> items = response.data.findChild("thread-ids").children();
     Threads threads;
-    int currentIndex = -1;
     for (int index = 0, n = items.size(); index != n; ++index) {
         ThreadData thread;
         thread.id = items.at(index).data().toInt();
         threads.append(thread);
-        if (thread.id == id) {
-            //qDebug() << "SETTING INDEX TO:" << index << " ID:"
-            // << id << " RECOD:" << response.toString();
-            currentIndex = index;
-        }
     }
     threadsHandler()->setThreads(threads);
-    threadsHandler()->setCurrentThread(currentIndex);
+    threadsHandler()->setCurrentThreadId(id);
 }
 
 
diff --git a/src/plugins/debugger/threadshandler.cpp b/src/plugins/debugger/threadshandler.cpp
index a049cabe5c4ba40ad1a25d488424b4cb3b53b5d7..26d41aa8339dfae8cc618c2230d9f55926956475 100644
--- a/src/plugins/debugger/threadshandler.cpp
+++ b/src/plugins/debugger/threadshandler.cpp
@@ -187,6 +187,25 @@ void ThreadsHandler::setCurrentThread(int index)
     emit dataChanged(i, i);
 }
 
+void ThreadsHandler::setCurrentThreadId(int id)
+{
+    const int index = indexOf(id);
+    if (index != -1) {
+        setCurrentThread(index);
+    } else {
+        qWarning("ThreadsHandler::setCurrentThreadId: No such thread %d.", id);
+    }
+}
+
+int ThreadsHandler::indexOf(int threadId) const
+{
+    const int count = m_threads.size();
+    for(int i = 0; i < count; i++)
+        if (m_threads.at(i).id == threadId)
+            return i;
+    return -1;
+}
+
 void ThreadsHandler::setThreads(const Threads &threads)
 {
     m_threads = threads;
diff --git a/src/plugins/debugger/threadshandler.h b/src/plugins/debugger/threadshandler.h
index 882ef1da9b9ae550eebf06c5ece01f683abaa95d..eaed8e1f3394fc8a349d019cb4d36791a59a9d67 100644
--- a/src/plugins/debugger/threadshandler.h
+++ b/src/plugins/debugger/threadshandler.h
@@ -97,7 +97,10 @@ public:
     explicit ThreadsHandler(DebuggerEngine *engine);
 
     int currentThreadId() const;
+    void setCurrentThreadId(int id);
     void setCurrentThread(int index);
+    int indexOf(int threadId) const;
+
     void selectThread(int index);
     void setThreads(const Threads &threads);
     void removeAll();