diff --git a/src/plugins/debugger/debuggerengine.cpp b/src/plugins/debugger/debuggerengine.cpp
index 36ce8e534565ef0a6a3a678b784835a33fe97b3e..fb710dee046555a30c1d089f2978e019e81b2e2f 100644
--- a/src/plugins/debugger/debuggerengine.cpp
+++ b/src/plugins/debugger/debuggerengine.cpp
@@ -418,10 +418,9 @@ RegisterHandler *DebuggerEngine::registerHandler() const
 
 StackHandler *DebuggerEngine::stackHandler() const
 {
-    //return d->m_masterEngine
-    //    ? d->m_masterEngine->stackHandler()
-    //    : &d->m_stackHandler;
-    return &d->m_stackHandler;
+    return d->m_masterEngine
+        ? d->m_masterEngine->stackHandler()
+        : &d->m_stackHandler;
 }
 
 ThreadsHandler *DebuggerEngine::threadsHandler() const
diff --git a/src/plugins/debugger/qml/qmlcppengine.cpp b/src/plugins/debugger/qml/qmlcppengine.cpp
index 0ef38d1443cb755129343eddd193446c34750e77..08a3cd7e471a035a4253abb543a7b5ce6abca237 100644
--- a/src/plugins/debugger/qml/qmlcppengine.cpp
+++ b/src/plugins/debugger/qml/qmlcppengine.cpp
@@ -83,17 +83,12 @@ public:
             const DebuggerStartParameters &sp);
     ~QmlCppEnginePrivate() {}
 
-private slots:
-    void cppStackChanged();
-    void qmlStackChanged();
-
 private:
     friend class QmlCppEngine;
     QmlCppEngine *q;
     QmlEngine *m_qmlEngine;
     DebuggerEngine *m_cppEngine;
     DebuggerEngine *m_activeEngine;
-    int m_stackBoundary;
 };
 
 
@@ -105,32 +100,6 @@ QmlCppEnginePrivate::QmlCppEnginePrivate(QmlCppEngine *parent,
     setObjectName(QLatin1String("QmlCppEnginePrivate"));
 }
 
-void QmlCppEnginePrivate::cppStackChanged()
-{
-    const QLatin1String firstFunction("QScript::FunctionWrapper::proxyCall");
-    StackFrames frames;
-    foreach (const StackFrame &frame, m_cppEngine->stackHandler()->frames()) {
-        if (frame.function.endsWith(firstFunction))
-            break;
-        frames.append(frame);
-    }
-    int level = frames.size();
-    m_stackBoundary = level;
-    foreach (StackFrame frame, m_qmlEngine->stackHandler()->frames()) {
-        frame.level = level++;
-        frames.append(frame);
-    }
-    q->stackHandler()->setFrames(frames);
-}
-
-void QmlCppEnginePrivate::qmlStackChanged()
-{
-    StackFrames frames = m_qmlEngine->stackHandler()->frames();
-    q->stackHandler()->setFrames(frames);
-    m_stackBoundary = 0;
-}
-
-
 ////////////////////////////////////////////////////////////////////////
 //
 // QmlCppEngine
@@ -149,13 +118,6 @@ QmlCppEngine::QmlCppEngine(const DebuggerStartParameters &sp,
         return;
     }
     d->m_activeEngine = d->m_cppEngine;
-
-    connect(d->m_cppEngine->stackHandler(), SIGNAL(stackChanged()),
-            d, SLOT(cppStackChanged()), Qt::QueuedConnection);
-    connect(d->m_qmlEngine->stackHandler(), SIGNAL(stackChanged()),
-            d, SLOT(qmlStackChanged()), Qt::QueuedConnection);
-    connect(d->m_cppEngine, SIGNAL(stackFrameCompleted()), this, SIGNAL(stackFrameCompleted()));
-    connect(d->m_qmlEngine, SIGNAL(stackFrameCompleted()), this, SIGNAL(stackFrameCompleted()));
 }
 
 QmlCppEngine::~QmlCppEngine()
@@ -198,10 +160,8 @@ void QmlCppEngine::activateFrame(int index)
     if (state() != InferiorStopOk && state() != InferiorUnrunnable)
         return;
 
-    if (index >= d->m_stackBoundary)
-        d->m_qmlEngine->activateFrame(index - d->m_stackBoundary);
-    else
-        d->m_cppEngine->activateFrame(index);
+    d->m_activeEngine->activateFrame(index);
+
     stackHandler()->setCurrentIndex(index);
 }
 
@@ -451,7 +411,6 @@ void QmlCppEngine::setupEngine()
 {
     EDEBUG("\nMASTER SETUP ENGINE");
     d->m_activeEngine = d->m_cppEngine;
-    d->m_stackBoundary = 0;
     d->m_qmlEngine->setupSlaveEngine();
     d->m_cppEngine->setupSlaveEngine();
 
diff --git a/src/plugins/debugger/qml/qmlv8debuggerclient.cpp b/src/plugins/debugger/qml/qmlv8debuggerclient.cpp
index 9ef0989308f8d3038cf89489897d64f87ddb442f..b7b3d1a1d5695743de58d69ce6c80bb6cb7399ca 100644
--- a/src/plugins/debugger/qml/qmlv8debuggerclient.cpp
+++ b/src/plugins/debugger/qml/qmlv8debuggerclient.cpp
@@ -1114,6 +1114,7 @@ void QmlV8DebuggerClient::activateFrame(int index)
 {
     if (index != d->engine->stackHandler()->currentIndex())
         d->frame(index);
+    d->engine->stackHandler()->setCurrentIndex(index);
 }
 
 bool QmlV8DebuggerClient::acceptsBreakpoint(const BreakpointModelId &id)
@@ -1716,7 +1717,6 @@ void QmlV8DebuggerClient::setCurrentFrameDetails(const QVariant &bodyVal, const
     QVariantMap currentFrame = bodyVal.toMap();
 
     StackHandler *stackHandler = d->engine->stackHandler();
-    int frameIndex = currentFrame.value(QLatin1String("index")).toInt();
 
     d->clearCache();
     //Set "this" variable
@@ -1746,7 +1746,6 @@ void QmlV8DebuggerClient::setCurrentFrameDetails(const QVariant &bodyVal, const
         d->currentFrameScopes.append(scopeIndex);
         d->scope(scopeIndex);
     }
-    stackHandler->setCurrentIndex(frameIndex);
     d->engine->gotoLocation(stackHandler->currentFrame());
 }