diff --git a/src/plugins/debugger/qml/qmldebuggerclient.h b/src/plugins/debugger/qml/qmldebuggerclient.h
index fcb7c607d880720f859b834bfcdb242f348ab3a0..f6ba4b9c2b0b693a9ebe562bf22ad5ef9d578dbd 100644
--- a/src/plugins/debugger/qml/qmldebuggerclient.h
+++ b/src/plugins/debugger/qml/qmldebuggerclient.h
@@ -75,8 +75,9 @@ public:
     virtual void changeBreakpoint(const BreakpointModelId &id) = 0;
     virtual void synchronizeBreakpoints() = 0;
 
-    virtual void assignValueInDebugger(const QByteArray expr, const quint64 &id,
-                                       const QString &property, const QString &value) = 0;
+    virtual void assignValueInDebugger(const WatchData *data,
+                                       const QString &expression,
+                                       const QVariant &valueV) = 0;
 
     virtual void updateWatchData(const WatchData &data) = 0;
     virtual void executeDebuggerCommand(const QString &command) = 0;
diff --git a/src/plugins/debugger/qml/qmlengine.cpp b/src/plugins/debugger/qml/qmlengine.cpp
index 5580926d4168f685a0a461c529dcefe76651525b..10f9961802f9f401fa13c1cdba06b4d144d6d679 100644
--- a/src/plugins/debugger/qml/qmlengine.cpp
+++ b/src/plugins/debugger/qml/qmlengine.cpp
@@ -973,9 +973,10 @@ bool QmlEngine::setToolTipExpression(const QPoint &mousePos,
 void QmlEngine::assignValueInDebugger(const WatchData *data,
     const QString &expression, const QVariant &valueV)
 {
-    quint64 objectId =  data->id;
-    if (objectId > 0 && !expression.isEmpty() && d->m_adapter.activeDebuggerClient()) {
-        d->m_adapter.activeDebuggerClient()->assignValueInDebugger(expression.toUtf8(), objectId, expression, valueV.toString());
+    if (!expression.isEmpty() && d->m_adapter.activeDebuggerClient()) {
+        d->m_adapter.activeDebuggerClient()->assignValueInDebugger(data,
+                                                                   expression,
+                                                                   valueV);
     }
 }
 
diff --git a/src/plugins/debugger/qml/qmlv8debuggerclient.cpp b/src/plugins/debugger/qml/qmlv8debuggerclient.cpp
index ee888af93e6fe2a0aaf3e7a14ea1f5abada9d60a..1ce9aa8ff7ac2ee5d9c973696ca40e956994eb70 100644
--- a/src/plugins/debugger/qml/qmlv8debuggerclient.cpp
+++ b/src/plugins/debugger/qml/qmlv8debuggerclient.cpp
@@ -1153,11 +1153,12 @@ void QmlV8DebuggerClient::synchronizeBreakpoints()
     //NOT USED
 }
 
-void QmlV8DebuggerClient::assignValueInDebugger(const QByteArray /*expr*/, const quint64 &/*id*/,
-                                                const QString &property, const QString &value)
+void QmlV8DebuggerClient::assignValueInDebugger(const WatchData * /*data*/,
+                                                const QString &expr,
+                                                const QVariant &valueV)
 {
     StackHandler *stackHandler = d->engine->stackHandler();
-    QString expression = QString(_("%1 = %2;")).arg(property).arg(value);
+    QString expression = QString(_("%1 = %2;")).arg(expr).arg(valueV.toString());
     if (stackHandler->isContentsValid() && stackHandler->currentFrame().isUsable()) {
         d->evaluate(expression, false, false, stackHandler->currentIndex());
     } else {
diff --git a/src/plugins/debugger/qml/qmlv8debuggerclient.h b/src/plugins/debugger/qml/qmlv8debuggerclient.h
index c7cb0fbe3639aa4d622291660f758f79ae86819d..7a77b88d85308935b896d06d82bf330d81e730ad 100644
--- a/src/plugins/debugger/qml/qmlv8debuggerclient.h
+++ b/src/plugins/debugger/qml/qmlv8debuggerclient.h
@@ -87,8 +87,9 @@ public:
     void changeBreakpoint(const BreakpointModelId &id);
     void synchronizeBreakpoints();
 
-    void assignValueInDebugger(const QByteArray expr, const quint64 &id,
-                                       const QString &property, const QString &value);
+    void assignValueInDebugger(const WatchData *data,
+                               const QString &expression,
+                               const QVariant &valueV);
 
     void updateWatchData(const WatchData &);
     void executeDebuggerCommand(const QString &command);
diff --git a/src/plugins/debugger/qml/qscriptdebuggerclient.cpp b/src/plugins/debugger/qml/qscriptdebuggerclient.cpp
index 7aa0bfa83c0bbbfa126c3c782aa311d748adeca1..7fbde8d17f662531ab7c7989a8f91e60e0c660b7 100644
--- a/src/plugins/debugger/qml/qscriptdebuggerclient.cpp
+++ b/src/plugins/debugger/qml/qscriptdebuggerclient.cpp
@@ -222,7 +222,9 @@ void QScriptDebuggerClient::startSession()
 
     //Set all breakpoints
     BreakHandler *handler = d->engine->breakHandler();
-    foreach (BreakpointModelId id, handler->engineBreakpointIds(d->engine)) {
+    DebuggerEngine * engine = d->engine->isSlaveEngine() ?
+                d->engine->masterEngine() : d->engine;
+    foreach (BreakpointModelId id, handler->engineBreakpointIds(engine)) {
         QTC_CHECK(handler->state(id) == BreakpointInsertProceeding);
         handler->notifyBreakpointInsertOk(id);
     }
@@ -313,17 +315,19 @@ void QScriptDebuggerClient::synchronizeBreakpoints()
     sendMessage(reply);
 }
 
-void QScriptDebuggerClient::assignValueInDebugger(const QByteArray expr, const quint64 &id,
-                                                  const QString &property, const QString &value)
+void QScriptDebuggerClient::assignValueInDebugger(const WatchData *data,
+                                                  const QString &expr,
+                                                  const QVariant &valueV)
 {
     QByteArray reply;
     QDataStream rs(&reply, QIODevice::WriteOnly);
-    QByteArray cmd = "SET_PROPERTY";
+    QByteArray cmd = "EXEC";
     rs << cmd;
-    rs << expr << id << property << value;
-    d->logSendMessage(QString::fromLatin1("%1 %2 %3 %4 %5").
-                      arg(QLatin1String(cmd), QLatin1String(expr),
-                          QString::number(id), property, value));
+    QString expression = QString(_("%1 = %2;")).arg(expr).arg(valueV.toString());
+    rs << data->iname << expression;
+    d->logSendMessage(QString::fromLatin1("%1 %2 %3 %4").
+                      arg(QLatin1String(cmd), QLatin1String(data->iname), expr,
+                          valueV.toString()));
     sendMessage(reply);
 }
 
@@ -365,6 +369,10 @@ void QScriptDebuggerClient::synchronizeWatchers(const QStringList &watchers)
 
 void QScriptDebuggerClient::expandObject(const QByteArray &iname, quint64 objectId)
 {
+    //Check if id is valid
+    if (qint64(objectId) == -1)
+        return;
+
     QByteArray reply;
     QDataStream rs(&reply, QIODevice::WriteOnly);
     QByteArray cmd = "EXPAND";
@@ -431,7 +439,8 @@ void QScriptDebuggerClient::messageReceived(const QByteArray &data)
             data.iname = d->engine->watchHandler()->watcherName(data.exp);
             d->engine->watchHandler()->insertData(data);
 
-            if (d->engine->watchHandler()->expandedINames().contains(data.iname)) {
+            if (d->engine->watchHandler()->expandedINames().contains(data.iname) &&
+                    qint64(data.id) != -1) {
                 needPing = true;
                 expandObject(data.iname,data.id);
             }
@@ -441,7 +450,8 @@ void QScriptDebuggerClient::messageReceived(const QByteArray &data)
             data.iname = "local." + data.exp;
             d->engine->watchHandler()->insertData(data);
 
-            if (d->engine->watchHandler()->expandedINames().contains(data.iname)) {
+            if (d->engine->watchHandler()->expandedINames().contains(data.iname) &&
+                    qint64(data.id) != -1) {
                 needPing = true;
                 expandObject(data.iname,data.id);
             }
@@ -511,6 +521,9 @@ void QScriptDebuggerClient::messageReceived(const QByteArray &data)
             d->engine->watchHandler()->insertData(data);
         } else if (iname == "console") {
             d->engine->showMessage(data.value, QtMessageLogOutput);
+        } else if (iname.startsWith("local.")) {
+            data.name = data.name.left(data.name.indexOf(QLatin1Char(' ')));
+            d->engine->watchHandler()->insertData(data);
         } else {
             qWarning() << "QmlEngine: Unexcpected result: " << iname << data.value;
         }
@@ -527,7 +540,8 @@ void QScriptDebuggerClient::messageReceived(const QByteArray &data)
             data.iname = iname + '.' + data.exp;
             d->engine->watchHandler()->insertData(data);
 
-            if (d->engine->watchHandler()->expandedINames().contains(data.iname)) {
+            if (d->engine->watchHandler()->expandedINames().contains(data.iname) &&
+                    qint64(data.id) != -1) {
                 needPing = true;
                 expandObject(data.iname, data.id);
             }
@@ -552,7 +566,8 @@ void QScriptDebuggerClient::messageReceived(const QByteArray &data)
             data.iname = d->engine->watchHandler()->watcherName(data.exp);
             d->engine->watchHandler()->insertData(data);
 
-            if (d->engine->watchHandler()->expandedINames().contains(data.iname)) {
+            if (d->engine->watchHandler()->expandedINames().contains(data.iname) &&
+                    qint64(data.id) != -1) {
                 needPing = true;
                 expandObject(data.iname, data.id);
             }
@@ -561,7 +576,8 @@ void QScriptDebuggerClient::messageReceived(const QByteArray &data)
         foreach (WatchData data, locals) {
             data.iname = "local." + data.exp;
             d->engine->watchHandler()->insertData(data);
-            if (d->engine->watchHandler()->expandedINames().contains(data.iname)) {
+            if (d->engine->watchHandler()->expandedINames().contains(data.iname) &&
+                    qint64(data.id) != -1) {
                 needPing = true;
                 expandObject(data.iname, data.id);
             }
diff --git a/src/plugins/debugger/qml/qscriptdebuggerclient.h b/src/plugins/debugger/qml/qscriptdebuggerclient.h
index 58602723db2c4741c1bc8e151c5e6042091d4e39..56dc289829f09a5ce823e1b34b9975306ffe3cfe 100644
--- a/src/plugins/debugger/qml/qscriptdebuggerclient.h
+++ b/src/plugins/debugger/qml/qscriptdebuggerclient.h
@@ -72,8 +72,8 @@ public:
     void changeBreakpoint(const BreakpointModelId &id);
     void synchronizeBreakpoints();
 
-    void assignValueInDebugger(const QByteArray expr, const quint64 &id,
-                                       const QString &property, const QString &value);
+    void assignValueInDebugger(const WatchData *data, const QString &expression,
+                                       const QVariant &valueV);
 
     void updateWatchData(const WatchData &data);
     void executeDebuggerCommand(const QString &command);