diff --git a/src/plugins/debugger/cdb/cdbengine.cpp b/src/plugins/debugger/cdb/cdbengine.cpp
index 36b1087db9dcc027bdee02a7eec270bf75eaf3a2..957153da6cf81755521446d9389b2a3cb681037a 100644
--- a/src/plugins/debugger/cdb/cdbengine.cpp
+++ b/src/plugins/debugger/cdb/cdbengine.cpp
@@ -1274,15 +1274,10 @@ void CdbEngine::reloadRegisters()
         qDebug() << Q_FUNC_INFO << intBase;
 
     QString errorMessage;
-    const Registers oldRegisters = registerHandler()->registers();
-    Registers registers = getRegisters(m_d->interfaces().debugControl,
+    const Registers registers = getRegisters(m_d->interfaces().debugControl,
         m_d->interfaces().debugRegisters, &errorMessage, intBase);
     if (registers.isEmpty() && !errorMessage.isEmpty())
         warning(msgFunctionFailed("reloadRegisters" , errorMessage));
-    for (int i = qMin(registers.size(), oldRegisters.size()); --i >= 0; ) {
-        Register &reg = registers[i];
-        reg.changed = (reg.value != oldRegisters.at(i).value);
-    }
     registerHandler()->setRegisters(registers);
 }
 
diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp
index 45a09f4743a79804a6daa76e130b75c74dc8fd05..37e3d15bfa291f8d024d4472ae15e8eb16c223da 100644
--- a/src/plugins/debugger/gdb/gdbengine.cpp
+++ b/src/plugins/debugger/gdb/gdbengine.cpp
@@ -3110,13 +3110,10 @@ void GdbEngine::handleRegisterListValues(const GdbResponse &response)
                     handled = true;
                 }
             }
-            const QString value = _(handled ? ba : val.data());
-            reg.changed = (value != reg.value);
-            if (reg.changed)
-                reg.value = value;
+            reg.value = _(handled ? ba : val.data());
         }
     }
-    registerHandler()->setRegisters(registers);
+    registerHandler()->setAndMarkRegisters(registers);
 }
 
 
diff --git a/src/plugins/debugger/gdb/symbian.cpp b/src/plugins/debugger/gdb/symbian.cpp
index 34e87921753339da2ec86a7078d3cd84583dd82c..df7b56b45da09977bb3190b875c197bedcf8df45 100644
--- a/src/plugins/debugger/gdb/symbian.cpp
+++ b/src/plugins/debugger/gdb/symbian.cpp
@@ -482,19 +482,12 @@ void Snapshot::syncRegisters(uint threadId, RegisterHandler *handler) const
     QTC_ASSERT(debuggerRegisters.size() >= RegisterPSGdb,
         qDebug() << "HAVE: " << debuggerRegisters.size(); return);
 
-    bool changed = false;
     for (int i = 0; i < RegisterCount; ++i) {
         const int gdbIndex = i == RegisterPSTrk ? int(RegisterPSGdb) : i;
         Register &reg = debuggerRegisters[gdbIndex];
-        const QString value = trk::hexxNumber(thread.registers[i]);
-        reg.changed = (value != reg.value);
-        if (reg.changed) {
-            reg.value = value;
-            changed = true;
-        }
+        reg.value = trk::hexxNumber(thread.registers[i]);
     }
-    if (changed)
-        handler->setRegisters(debuggerRegisters);
+    handler->setAndMarkRegisters(debuggerRegisters);
 }
 
 void Snapshot::parseGdbStepRange(const QByteArray &cmd, bool so)
diff --git a/src/plugins/debugger/registerhandler.cpp b/src/plugins/debugger/registerhandler.cpp
index 164342b57631911f79baadc4d36c7c78b9ccbba9..272ba9928e9cac691d7f53bc5fad1dc7f20bec85 100644
--- a/src/plugins/debugger/registerhandler.cpp
+++ b/src/plugins/debugger/registerhandler.cpp
@@ -187,6 +187,15 @@ void RegisterHandler::setRegisters(const Registers &registers)
     reset();
 }
 
+void RegisterHandler::setAndMarkRegisters(const Registers &registers)
+{
+    const Registers old = m_registers;
+    m_registers = registers;
+    for (int i = qMin(m_registers.size(), old.size()); --i >= 0; )
+        m_registers[i].changed = m_registers[i].value != old[i].value;
+    reset();
+}
+
 Registers RegisterHandler::registers() const
 {
     return m_registers;
diff --git a/src/plugins/debugger/registerhandler.h b/src/plugins/debugger/registerhandler.h
index 0818de9c95dad89bec2af8aa8c4300b19c28061c..740acc0d15264dc0e60d6fd7ecb7450c61c0d157 100644
--- a/src/plugins/debugger/registerhandler.h
+++ b/src/plugins/debugger/registerhandler.h
@@ -63,6 +63,7 @@ public:
 
     bool isEmpty() const; // nothing known so far?
     void setRegisters(const Registers &registers);
+    void setAndMarkRegisters(const Registers &registers);
     Registers registers() const;
     void removeAll();
     Q_SLOT void setNumberBase(int base);