diff --git a/registrar.sol b/registrar.sol
index b877dad7a8b96224c225518ad786db5dd392e7cb..d2c037a9c873ee941170026c9c21a4a2c5c78a60 100644
--- a/registrar.sol
+++ b/registrar.sol
@@ -28,14 +28,17 @@ contract GlobalRegistrar is Registrar {
   function Registrar() {
   }
 
-  function reserve(bytes32 _name) {
-    if (m_toRecord[_name].owner == 0) {
+  function reserve(bytes32 _name, address _a) {
+    if (m_toRecord[_name].owner == 0 && m_toName[_a] == 0) {
       m_toRecord[_name].owner = msg.sender;
+      m_toRecord[_name].primary = _a;
+      m_toName[_a] = _name;
       Changed(_name);
+      PrimaryChanged(_name, _a, msg.sender);
     }
   }
   function reserveFor(bytes32 _name, address _owner, address _a) {
-    if (m_toRecord[_name].owner == 0) {
+    if (m_toRecord[_name].owner == 0 && m_toName[_a] == 0) {
       m_toRecord[_name].owner = _owner;
       m_toRecord[_name].primary = _a;
       m_toName[_a] = _name;