diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp
index 9424c16f66c8381b4da917ba8982b876d36dd2a7..f723c9a8e967e589d9f94f23bf8c8b597a9a0b15 100644
--- a/src/plugins/debugger/gdb/gdbengine.cpp
+++ b/src/plugins/debugger/gdb/gdbengine.cpp
@@ -220,12 +220,6 @@ GdbEngine::GdbEngine(const DebuggerStartParameters &startParameters,
 
     connect(debuggerCore()->action(AutoDerefPointers), SIGNAL(valueChanged(QVariant)),
             SLOT(reloadLocals()));
-    connect(debuggerCore()->action(SortStructMembers), SIGNAL(valueChanged(QVariant)),
-            SLOT(reloadLocals()));
-    connect(debuggerCore()->action(ShowStdNamespace), SIGNAL(valueChanged(QVariant)),
-            SLOT(reloadLocals()));
-    connect(debuggerCore()->action(ShowQtNamespace), SIGNAL(valueChanged(QVariant)),
-            SLOT(reloadLocals()));
     connect(debuggerCore()->action(CreateFullBacktrace), SIGNAL(triggered()),
             SLOT(createFullBacktrace()));
 }
diff --git a/src/plugins/debugger/watchhandler.cpp b/src/plugins/debugger/watchhandler.cpp
index 2c80c368b7510c0f6752633700cb1e55e0113090..3de5f5bc0f6201f7677cdba570e404bbe692473d 100644
--- a/src/plugins/debugger/watchhandler.cpp
+++ b/src/plugins/debugger/watchhandler.cpp
@@ -256,6 +256,25 @@ void WatchModel::destroyItem(WatchItem *item)
     delete item;
 }
 
+void WatchModel::reinsertAllData()
+{
+    QList<WatchData> list;
+    reinsertAllDataHelper(m_root, &list);
+    reinitialize();
+    foreach (WatchItem data, list) {
+        data.setAllUnneeded();
+        insertData(data);
+    }
+    layoutChanged();
+}
+
+void WatchModel::reinsertAllDataHelper(WatchItem *item, QList<WatchData> *data)
+{
+    data->append(*item);
+    foreach (WatchItem *child, item->children)
+        reinsertAllDataHelper(child, data);
+}
+
 static QByteArray parentName(const QByteArray &iname)
 {
     int pos = iname.lastIndexOf('.');
@@ -1204,12 +1223,12 @@ WatchHandler::WatchHandler(DebuggerEngine *engine)
     m_watchers = new WatchModel(this, WatchersWatch);
     m_tooltips = new WatchModel(this, TooltipsWatch);
 
-    connect(debuggerCore()->action(ShowStdNamespace),
-        SIGNAL(triggered()), SLOT(emitAllChanged()));
-    connect(debuggerCore()->action(ShowQtNamespace),
-        SIGNAL(triggered()), SLOT(emitAllChanged()));
-    connect(debuggerCore()->action(SortStructMembers),
-        SIGNAL(triggered()), SLOT(emitAllChanged()));
+    connect(debuggerCore()->action(SortStructMembers), SIGNAL(valueChanged(QVariant)),
+           SLOT(reinsertAllData()));
+    connect(debuggerCore()->action(ShowStdNamespace), SIGNAL(valueChanged(QVariant)),
+           SLOT(reinsertAllData()));
+    connect(debuggerCore()->action(ShowQtNamespace), SIGNAL(valueChanged(QVariant)),
+           SLOT(reinsertAllData()));
 }
 
 void WatchHandler::beginCycle(bool fullCycle)
@@ -1295,6 +1314,14 @@ void WatchHandler::insertData(const WatchData &data)
     }
 }
 
+void WatchHandler::reinsertAllData()
+{
+    m_locals->reinsertAllData();
+    m_watchers->reinsertAllData();
+    m_tooltips->reinsertAllData();
+    m_return->reinsertAllData();
+}
+
 // Bulk-insertion
 void WatchHandler::insertBulkData(const QList<WatchData> &list)
 {
diff --git a/src/plugins/debugger/watchhandler.h b/src/plugins/debugger/watchhandler.h
index 632f76ff80861529b1e1a0a3002a48d4502375e9..63af6f654a33a26e7e322f161224fe48b4d16f43 100644
--- a/src/plugins/debugger/watchhandler.h
+++ b/src/plugins/debugger/watchhandler.h
@@ -98,6 +98,8 @@ private:
         const WatchItem *parentItem, const QModelIndex &parentIndex) const;
 
     void insertData(const WatchData &data);
+    void reinsertAllData();
+    void reinsertAllDataHelper(WatchItem *item, QList<WatchData> *data);
     void insertBulkData(const QList<WatchData> &data);
     WatchItem *findItem(const QByteArray &iname, WatchItem *root) const;
     void reinitialize();
@@ -159,6 +161,7 @@ public:
     void insertData(const WatchData &data);
     void insertBulkData(const QList<WatchData> &data);
     void removeData(const QByteArray &iname);
+    Q_SLOT void reinsertAllData();
 
     const WatchData *watchData(WatchType type, const QModelIndex &) const;
     const WatchData *findItem(const QByteArray &iname) const;