diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp
index 344f73dfb185312b64f268043a26e4e18cd7f36b..f6641302e3ce0eeae266278bcb61d00371236454 100644
--- a/src/plugins/debugger/gdb/gdbengine.cpp
+++ b/src/plugins/debugger/gdb/gdbengine.cpp
@@ -3611,14 +3611,7 @@ void GdbEngine::reloadRegisters()
 void GdbEngine::setRegisterValue(int nr, const QString &value)
 {
     Register reg = registerHandler()->registers().at(nr);
-    //qDebug() << "NOT IMPLEMENTED: CHANGE REGISTER " << nr << reg.name << ":"
-    //    << value;
-    postCommand("-var-delete \"R@\"");
-    postCommand("-var-create \"R@\" * $" + reg.name);
-    postCommand("-var-assign \"R@\" " + value.toLatin1());
-    postCommand("-var-delete \"R@\"");
-    //postCommand("-data-list-register-values d",
-    //            Discardable, CB(handleRegisterListValues));
+    postCommand("set $" + reg.name  + "=" + value.toLatin1());
     reloadRegisters();
 }
 
diff --git a/src/plugins/debugger/registerwindow.cpp b/src/plugins/debugger/registerwindow.cpp
index 735894b3f7434f76b35d858214a3c60e92d3c3e1..04b06705ff8f31c437d074d5d0ebf5835fac1aa1 100644
--- a/src/plugins/debugger/registerwindow.cpp
+++ b/src/plugins/debugger/registerwindow.cpp
@@ -111,7 +111,11 @@ public:
             return;
         IntegerWatchLineEdit *lineEdit = qobject_cast<IntegerWatchLineEdit*>(editor);
         QTC_ASSERT(lineEdit, return);
-        currentEngine()->setRegisterValue(index.row(), lineEdit->text());
+        const int base = currentHandler()->numberBase();
+        QString value = lineEdit->text();
+        if (base == 16 && !value.startsWith("0x"))
+            value = "0x" + value;
+        currentEngine()->setRegisterValue(index.row(), value);
     }
 
     void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option,