diff --git a/src/plugins/debugger/debuggermanager.cpp b/src/plugins/debugger/debuggermanager.cpp
index ad77ef80e3cc73a76997cf5aadb823eb903dfff9..f1dbc7b71dcff2eac05811c7a79ce230526be02c 100644
--- a/src/plugins/debugger/debuggermanager.cpp
+++ b/src/plugins/debugger/debuggermanager.cpp
@@ -318,6 +318,8 @@ void DebuggerManager::init()
     //tooltipView->setModel(m_watchHandler->model(TooltipsWatch));
     //qRegisterMetaType<WatchData>("Debugger::Internal::WatchData");
     qRegisterMetaType<WatchData>("WatchData");
+    connect(m_watchHandler, SIGNAL(watchDataUpdateNeeded(WatchData)),
+        this, SLOT(updateWatchDataAnnounce()));
     connect(m_watchHandler, SIGNAL(watchDataUpdateNeeded(WatchData)),
         this, SLOT(updateWatchData(WatchData)), Qt::QueuedConnection);
 
@@ -693,6 +695,12 @@ void DebuggerManager::updateWatchData(const WatchData &data)
         m_engine->updateWatchData(data);
 }
 
+void DebuggerManager::updateWatchDataAnnounce()
+{
+    if (m_engine)
+        m_engine->updateWatchDataAnnounce();
+}
+
 static inline QString msgEngineNotAvailable(const char *engine)
 {
     return DebuggerManager::tr("The application requires the debugger engine '%1', which is disabled.").arg(QLatin1String(engine));
diff --git a/src/plugins/debugger/debuggermanager.h b/src/plugins/debugger/debuggermanager.h
index de2a192abd1a3258cb481c36571a05a029c6cf8e..7d8ac4b37e99d6eb579987462011c602c96cbeb0 100644
--- a/src/plugins/debugger/debuggermanager.h
+++ b/src/plugins/debugger/debuggermanager.h
@@ -304,6 +304,7 @@ public slots:
     void detachDebugger();
 
     void addToWatchWindow();
+    void updateWatchDataAnnounce();
     void updateWatchData(const WatchData &data);
 
     void sessionLoaded();
diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp
index 99718326c247551356672cab0e6b2857b87a4059..c12a4a1b1c8f8cfc6fcd7f9e612a0bc0cfcc2713 100644
--- a/src/plugins/debugger/gdb/gdbengine.cpp
+++ b/src/plugins/debugger/gdb/gdbengine.cpp
@@ -83,7 +83,7 @@ namespace Internal {
 using namespace Debugger::Constants;
 
 //#define DEBUG_PENDING  1
-#define DEBUG_SUBITEM  1
+//#define DEBUG_SUBITEM  1
 
 #if DEBUG_PENDING
 #   define PENDING_DEBUG(s) qDebug() << s
@@ -3127,6 +3127,13 @@ void GdbEngine::updateSubItem(const WatchData &data0)
     QTC_ASSERT(false, return);
 }
 
+void GdbEngine::updateWatchDataAnnounce()
+{
+    // Bump requests to avoid model rebuilding during the nested
+    // updateWatchModel runs.
+    ++m_pendingRequests;
+}
+
 void GdbEngine::updateWatchData(const WatchData &data)
 {
     //m_pendingRequests = 0;
@@ -3137,9 +3144,6 @@ void GdbEngine::updateWatchData(const WatchData &data)
     //qDebug() << data.toString();
     #endif
 
-    // Bump requests to avoid model rebuilding during the nested
-    // updateWatchModel runs.
-    ++m_pendingRequests;
     updateSubItem(data);
     //PENDING_DEBUG("INTERNAL TRIGGERING UPDATE WATCH MODEL");
     --m_pendingRequests;
@@ -3449,7 +3453,7 @@ void GdbEngine::handleChildren(const WatchData &data0, const GdbMi &item,
     WatchData childtemplate;
     setWatchDataType(childtemplate, item.findChild("childtype"));
     setWatchDataChildCount(childtemplate, item.findChild("childnumchild"));
-    qDebug() << "CHILD TEMPLATE:" << childtemplate.toString();
+    //qDebug() << "CHILD TEMPLATE:" << childtemplate.toString();
 
     int i = 0;
     foreach (GdbMi child, children.children()) {
diff --git a/src/plugins/debugger/gdb/gdbengine.h b/src/plugins/debugger/gdb/gdbengine.h
index 07ef3bb8b8a76e9f631ec802990d3a5e7598089f..fdf67f15b8e57a3d7c9594cbf894a71e150133de 100644
--- a/src/plugins/debugger/gdb/gdbengine.h
+++ b/src/plugins/debugger/gdb/gdbengine.h
@@ -332,6 +332,7 @@ private:
     void updateSubItem(const WatchData &data);
 
     void updateWatchData(const WatchData &data);
+    void updateWatchDataAnnounce();
     void rebuildModel();
 
     void insertData(const WatchData &data);
diff --git a/src/plugins/debugger/idebuggerengine.h b/src/plugins/debugger/idebuggerengine.h
index 89ff30293195d52270afbb7a3e891f5777719720..327b1866c01273c09c47c3317e0d6ae166908112 100644
--- a/src/plugins/debugger/idebuggerengine.h
+++ b/src/plugins/debugger/idebuggerengine.h
@@ -63,6 +63,7 @@ public:
     virtual bool startDebugger(const QSharedPointer<DebuggerStartParameters> &startParameters) = 0;
     virtual void exitDebugger() = 0;
     virtual void detachDebugger() {}
+    virtual void updateWatchDataAnnounce() {}
     virtual void updateWatchData(const WatchData &data) = 0;
 
     virtual void stepExec() = 0;
diff --git a/src/plugins/debugger/watchhandler.cpp b/src/plugins/debugger/watchhandler.cpp
index fd6745014b9f87c78bd445c5edaf55b707bd5f57..13bf8698b30e6ad0ce2f29336bfbb91f1dd2e1a6 100644
--- a/src/plugins/debugger/watchhandler.cpp
+++ b/src/plugins/debugger/watchhandler.cpp
@@ -806,6 +806,8 @@ static int findInsertPosition(const QList<WatchItem *> &list, const WatchItem *i
 void WatchModel::insertData(const WatchData &data)
 {
     // qDebug() << "WMI:" << data.toString();
+    static int bulk = 0;
+    //qDebug() << "SINGLE: " << ++bulk << data.toString();
     QTC_ASSERT(!data.iname.isEmpty(), return);
     WatchItem *parent = findItem(parentName(data.iname), m_root);
     if (!parent) {
@@ -844,8 +846,9 @@ void WatchModel::insertData(const WatchData &data)
 void WatchModel::insertBulkData(const QList<WatchData> &list)
 {
     //qDebug() << "WMI:" << list.toString();
+    static int bulk = 0;
     //foreach (const WatchItem &data, list)
-    //    qDebug() << data.toString();
+    //    qDebug() << "BULK: " << ++bulk << data.toString();
     QTC_ASSERT(!list.isEmpty(), return);
     QString parentIName = parentName(list.at(0).iname);
     WatchItem *parent = findItem(parentIName, m_root);
@@ -1001,6 +1004,12 @@ void WatchHandler::insertData(const WatchData &data)
 // bulk-insertion
 void WatchHandler::insertBulkData(const QList<WatchData> &list)
 {
+#if 1
+    foreach (const WatchItem &data, list)
+        insertData(data);
+    return;
+#endif
+
     if (list.isEmpty())
         return;
     QMap<QString, QList<WatchData> > hash;