diff --git a/src/plugins/debugger/qml/qmlcppengine.cpp b/src/plugins/debugger/qml/qmlcppengine.cpp
index dc6767e7de9e512b4f1d3315ecd199dd53d518a9..972ea194de34137d7dfe613e2bcfb16f0e5f35cc 100644
--- a/src/plugins/debugger/qml/qmlcppengine.cpp
+++ b/src/plugins/debugger/qml/qmlcppengine.cpp
@@ -59,16 +59,17 @@ private:
     DebuggerEngine *m_qmlEngine;
     DebuggerEngine *m_cppEngine;
     DebuggerEngine *m_activeEngine;
+    int m_stackBoundary;
 };
 
 
 QmlCppEnginePrivate::QmlCppEnginePrivate(QmlCppEngine *parent,
         const DebuggerStartParameters &sp)
-  : q(parent),
-    m_qmlEngine(0),
-    m_cppEngine(0),
-    m_activeEngine(0)
+  : q(parent)
 {
+    m_stackBoundary = 0;
+    m_cppEngine = 0;
+    m_activeEngine = 0;
     m_qmlEngine = createQmlEngine(sp, q);
 
     if (sp.cppEngineType == GdbEngineType) {
@@ -100,6 +101,7 @@ void QmlCppEnginePrivate::cppStackChanged()
         frames.append(frame);
     }
     int level = frames.size();
+    m_stackBoundary = level;
     foreach (StackFrame frame, m_qmlEngine->stackHandler()->frames()) {
         frame.level = level++;
         frames.append(frame);
@@ -109,7 +111,9 @@ void QmlCppEnginePrivate::cppStackChanged()
 
 void QmlCppEnginePrivate::qmlStackChanged()
 {
-    q->stackHandler()->setFrames(m_qmlEngine->stackHandler()->frames());
+    StackFrames frames = m_qmlEngine->stackHandler()->frames();
+    q->stackHandler()->setFrames(frames);
+    m_stackBoundary = frames.size();
 }
 
 
@@ -163,7 +167,10 @@ void QmlCppEngine::fetchDisassembler(DisassemblerAgent *da)
 
 void QmlCppEngine::activateFrame(int index)
 {
-    d->m_cppEngine->activateFrame(index);
+    if (index >= d->m_stackBoundary)
+        d->m_qmlEngine->activateFrame(index - d->m_stackBoundary);
+    else
+        d->m_cppEngine->activateFrame(index);
 }
 
 void QmlCppEngine::reloadModules()