diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp
index 030fd0f1a4a2f1651c9e598bdb689480cc2f4c6f..0558a5644c8f63973e3e9831b54eb1fb7857585b 100644
--- a/src/plugins/debugger/debuggerplugin.cpp
+++ b/src/plugins/debugger/debuggerplugin.cpp
@@ -1844,6 +1844,7 @@ void DebuggerPluginPrivate::connectEngine(DebuggerEngine *engine)
     m_threadBox->setModel(engine->threadsModel());
     m_threadBox->setModelColumn(ThreadData::NameColumn);
     m_watchersWindow->setModel(engine->watchersModel());
+    engine->watchHandler()->rebuildModel();
 }
 
 static void changeFontSize(QWidget *widget, qreal size)
diff --git a/src/plugins/debugger/qml/qmlengine.cpp b/src/plugins/debugger/qml/qmlengine.cpp
index a5958ac2ef0f7f1292be58839807c00dd0be1f78..b4479733a8da93b9d70d2078f51367a3aad1950b 100644
--- a/src/plugins/debugger/qml/qmlengine.cpp
+++ b/src/plugins/debugger/qml/qmlengine.cpp
@@ -231,6 +231,8 @@ void QmlEngine::connectionEstablished()
 
     showMessage(tr("QML Debugger connected."), StatusBar);
 
+    synchronizeWatchers();
+
     notifyEngineRunAndInferiorRunOk();
 
 }
@@ -687,22 +689,29 @@ void QmlEngine::updateWatchData(const WatchData &data,
     }
 
     if (!data.name.isEmpty() && data.isChildrenNeeded()
-            && watchHandler()->isExpandedIName(data.iname))
+            && watchHandler()->isExpandedIName(data.iname)) {
         expandObject(data.iname, data.id);
+    }
+
+    synchronizeWatchers();
 
-    {
+    if (!data.isSomethingNeeded())
+        watchHandler()->insertData(data);
+}
+
+void QmlEngine::synchronizeWatchers()
+{
+    if (!watchHandler()->watcherNames().isEmpty()) {
+        // send watchers list
         QByteArray reply;
         QDataStream rs(&reply, QIODevice::WriteOnly);
         QByteArray cmd = "WATCH_EXPRESSIONS";
         rs << cmd;
         rs << watchHandler()->watchedExpressions();
         logMessage(LogSend, QString("%1 %2").arg(
-                             QString(cmd), watchHandler()->watchedExpressions().join(", ")));
+                       QString(cmd), watchHandler()->watchedExpressions().join(", ")));
         sendMessage(reply);
     }
-
-    if (!data.isSomethingNeeded())
-        watchHandler()->insertData(data);
 }
 
 void QmlEngine::expandObject(const QByteArray &iname, quint64 objectId)
diff --git a/src/plugins/debugger/qml/qmlengine.h b/src/plugins/debugger/qml/qmlengine.h
index b9c23fca11692a448fcd84f18b16fa8c1d4fcb5d..db03bfbb27efe2bd9816b18f1834006d17e3ec49 100644
--- a/src/plugins/debugger/qml/qmlengine.h
+++ b/src/plugins/debugger/qml/qmlengine.h
@@ -146,6 +146,8 @@ private:
         const QString &oldBasePath, const QString &newBasePath) const;
     QString qmlImportPath() const;
 
+    void synchronizeWatchers();
+
     enum LogDirection {
         LogSend,
         LogReceive
diff --git a/src/plugins/debugger/watchhandler.cpp b/src/plugins/debugger/watchhandler.cpp
index f7826ccd289084328abe1f2a5be64ab59763f28b..68597a20b3f3b28d7ca0f7bd400a511530fd04f6 100644
--- a/src/plugins/debugger/watchhandler.cpp
+++ b/src/plugins/debugger/watchhandler.cpp
@@ -1656,5 +1656,26 @@ void WatchHandler::removeTooltip()
     m_tooltips->emitAllChanged();
 }
 
+void WatchHandler::rebuildModel()
+{
+    beginCycle();
+
+    const QList<WatchItem *> watches = m_watchers->rootItem()->children;
+    for (int i = watches.size() - 1; i >= 0; i--)
+        m_watchers->destroyItem(watches.at(i));
+
+    foreach (const QString &exp, watchedExpressions()) {
+        WatchData data;
+        data.exp = exp.toLatin1();
+        data.name = exp;
+        data.iname = watcherName(data.exp);
+        data.setAllUnneeded();
+
+        insertData(data);
+    }
+
+    endCycle();
+}
+
 } // namespace Internal
 } // namespace Debugger
diff --git a/src/plugins/debugger/watchhandler.h b/src/plugins/debugger/watchhandler.h
index 950bf4fdaa74029e3c7782783900f0d7957ef9cd..6de0c161e9a8ec93a7ef2e0f707b128ee52c3073 100644
--- a/src/plugins/debugger/watchhandler.h
+++ b/src/plugins/debugger/watchhandler.h
@@ -163,6 +163,7 @@ public:
     void loadSessionData();
     void saveSessionData();
     void removeTooltip();
+    void rebuildModel();
 
     bool isExpandedIName(const QByteArray &iname) const
         { return m_expandedINames.contains(iname); }