diff --git a/share/qtcreator/gdbmacros/gdbmacros.cpp b/share/qtcreator/gdbmacros/gdbmacros.cpp
index 2b6dba0149ee1512225e78c53641974d3598ac60..7c766dff31ec64c8d9b1b834ddf26fa5f596fc6e 100644
--- a/share/qtcreator/gdbmacros/gdbmacros.cpp
+++ b/share/qtcreator/gdbmacros/gdbmacros.cpp
@@ -1972,8 +1972,23 @@ static void qDumpQSharedPointer(QDumper &d)
             P(d, "name", "data");
             qDumpInnerValue(d, d.innertype, ptr.data());
         d.endHash();
-        I(d, "strongref", 44);
-        I(d, "weakref", 45);
+        const int v = sizeof(void *);
+        d.beginHash();
+            const void *weak = addOffset(deref(addOffset(d.data, v)), v);
+            P(d, "name", "weakref"); 
+            P(d, "value", *static_cast<const int *>(weak));
+            P(d, "type", "int"); 
+            P(d, "addr",  weak);
+            P(d, "numchild", "0");
+        d.endHash();
+        d.beginHash();
+            const void *strong = addOffset(weak, sizeof(int));
+            P(d, "name", "strongref"); 
+            P(d, "value", *static_cast<const int *>(strong));
+            P(d, "type", "int"); 
+            P(d, "addr",  strong);
+            P(d, "numchild", "0");
+        d.endHash();
         d << "]";
     }
     d.disarm();
diff --git a/src/plugins/debugger/watchhandler.cpp b/src/plugins/debugger/watchhandler.cpp
index ef0b7d402cac485ab7161efb8097ad7cc662812e..144f85f4f8dd9af3e40aed65a8ffb2845f8c7dcc 100644
--- a/src/plugins/debugger/watchhandler.cpp
+++ b/src/plugins/debugger/watchhandler.cpp
@@ -808,6 +808,8 @@ void WatchHandler::cleanup()
     m_completeSet = initialSet();
     m_displaySet = m_completeSet;
 
+    rebuildModel(); // to get the dummy entries back
+
 #if 0
     for (EditWindows::ConstIterator it = m_editWindows.begin();
             it != m_editWindows.end(); ++it) {