diff --git a/src/plugins/debugger/debuggerengine.h b/src/plugins/debugger/debuggerengine.h
index 6273a319ea888760c24661c7dd9a2d854405e54f..6b758345e468dc3929ab75a886f3cb3e1bc157cb 100644
--- a/src/plugins/debugger/debuggerengine.h
+++ b/src/plugins/debugger/debuggerengine.h
@@ -244,6 +244,9 @@ public:
     bool isMasterEngine() const;
     DebuggerEngine *masterEngine() const;
 
+    virtual bool prepareForQmlBreak() { return false; }
+    virtual void handlePrepareForQmlBreak() {}
+
 signals:
     void stateChanged(const DebuggerState &state);
     void updateViewsRequested();
diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp
index 1b29301395aedb44980d8586228377b055eda5fc..fe7a3adee6944315898e7766789cfe3b61de8df3 100644
--- a/src/plugins/debugger/gdb/gdbengine.cpp
+++ b/src/plugins/debugger/gdb/gdbengine.cpp
@@ -4502,6 +4502,24 @@ void GdbEngine::handleRemoteSetupFailed(const QString &message)
     m_gdbAdapter->handleRemoteSetupFailed(message);
 }
 
+bool GdbEngine::prepareForQmlBreak()
+{
+    QTC_ASSERT(isSlaveEngine(), return false);
+    postCommand("-break-insert -t qscriptfunction.cpp:82",
+        NeedsStop, CB(handleQmlBreakpoint));
+    return true;
+}
+
+void GdbEngine::handleQmlBreakpoint(const GdbResponse &response)
+{
+    if (response.resultClass == GdbResultDone) {
+        qDebug() << "RESPONSE: " << response.toString();
+    }
+    QTC_ASSERT(masterEngine(), return);
+    masterEngine()->handlePrepareForQmlBreak();
+}
+
+
 //
 // Factory
 //
diff --git a/src/plugins/debugger/gdb/gdbengine.h b/src/plugins/debugger/gdb/gdbengine.h
index ea356246f548857d9f06fe0069f8ca702fe00b44..d9ab60bf71e1894911a955a0cd1fef06ebf92905 100644
--- a/src/plugins/debugger/gdb/gdbengine.h
+++ b/src/plugins/debugger/gdb/gdbengine.h
@@ -517,6 +517,9 @@ private: ////////// View & Data Stuff //////////
     void setLocals(const QList<GdbMi> &locals);
     void handleStackListArgumentsClassic(const GdbResponse &response);
 
+    bool prepareForQmlBreak();
+    void handleQmlBreakpoint(const GdbResponse &response);
+
     QSet<QByteArray> m_processedNames;
 
     //
diff --git a/src/plugins/debugger/qml/qmlcppengine.cpp b/src/plugins/debugger/qml/qmlcppengine.cpp
index 4acaa6ca425ec494e1038a6269bd6bf8bfc88855..4f106a981dc6e6cc07fc1fb55c875fedfa6ba62a 100644
--- a/src/plugins/debugger/qml/qmlcppengine.cpp
+++ b/src/plugins/debugger/qml/qmlcppengine.cpp
@@ -1,17 +1,11 @@
-#include "qmlcppengine.h"
-#include "debuggerstartparameters.h"
-#include "qmlengine.h"
-#include "debuggermainwindow.h"
-#include "debuggercore.h"
 
-#include <qmljseditor/qmljseditorconstants.h>
+#include "qmlcppengine.h"
 
-#include <coreplugin/editormanager/editormanager.h>
-#include <coreplugin/editormanager/ieditor.h>
+#include "debuggercore.h"
+#include "debuggerstartparameters.h"
 
 #include <utils/qtcassert.h>
 
-#include <QtCore/QTimer>
 
 namespace Debugger {
 namespace Internal {
@@ -63,7 +57,7 @@ QmlCppEngine::QmlCppEngine(const DebuggerStartParameters &sp)
         d->m_cppEngine = createGdbEngine(sp, this);
     } else {
         QString errorMessage;
-        d->m_cppEngine = Debugger::Internal::createCdbEngine(sp, this, &errorMessage);
+        d->m_cppEngine = createCdbEngine(sp, this, &errorMessage);
         if (!d->m_cppEngine) {
             qWarning("%s", qPrintable(errorMessage));
             return;
@@ -219,6 +213,18 @@ void QmlCppEngine::detachDebugger()
 }
 
 void QmlCppEngine::executeStep()
+{
+    if (d->m_activeEngine == d->m_qmlEngine) {
+        QTC_ASSERT(d->m_cppEngine->state() == InferiorRunOk, /**/);
+        if (d->m_cppEngine->prepareForQmlBreak())
+            return; // Wait for call back.
+    }
+
+    notifyInferiorRunRequested();
+    d->m_activeEngine->executeStep();
+}
+
+void QmlCppEngine::handlePrepareForQmlBreak()
 {
     notifyInferiorRunRequested();
     d->m_activeEngine->executeStep();
diff --git a/src/plugins/debugger/qml/qmlcppengine.h b/src/plugins/debugger/qml/qmlcppengine.h
index 47723628dec2d633fb5cd37ff9703321ba8d82a5..f538da03bee42b0b42c534062d7c4ce0988bf5fc 100644
--- a/src/plugins/debugger/qml/qmlcppengine.h
+++ b/src/plugins/debugger/qml/qmlcppengine.h
@@ -94,6 +94,8 @@ private:
     void setState(DebuggerState newState, bool forced = false);
     void slaveEngineStateChanged(DebuggerEngine *slaveEngine, DebuggerState state);
 
+    virtual void handlePrepareForQmlBreak();
+
 private:
     QScopedPointer<QmlCppEnginePrivate> d;
 };