diff --git a/doc/examples/dumb-allocator b/doc/examples/dumb-allocator
index 9734af397ab3f54b949ff0c3b8b1f2b6dfab0867..2996e49cae509549e7545a8373931ada4983f1c1 100755
--- a/doc/examples/dumb-allocator
+++ b/doc/examples/dumb-allocator
@@ -76,7 +76,7 @@ def main():
   if req_type == "allocate":
     forbidden_nodes = []
     inst_data = request
-  elif req_type == "replace_secondary":
+  elif req_type == "relocate":
     idict = data["instances"][request["name"]]
     forbidden_nodes = idict["nodes"]
     inst_data = idict
diff --git a/lib/cmdlib.py b/lib/cmdlib.py
index 58b6404d7d52f71d6245a9ee473b1bdc54c1fc7d..73907c284abbb93a57f46cabd0d4df3b907fc95b 100644
--- a/lib/cmdlib.py
+++ b/lib/cmdlib.py
@@ -4877,6 +4877,9 @@ class IAllocator(object):
     if instance.disk_template not in constants.DTS_NET_MIRROR:
       raise errors.OpPrereqError("Can't relocate non-mirrored instances")
 
+    if len(instance.secondary_nodes) != 1:
+      raise errors.OpPrereqError("Instance has not exactly one secondary node")
+
     self.required_nodes = 1
 
     disk_space = _ComputeDiskSize(instance.disk_template,
@@ -4884,10 +4887,11 @@ class IAllocator(object):
                                   instance.disks[1].size)
 
     request = {
-      "type": "replace_secondary",
+      "type": "relocate",
       "name": self.name,
       "disk_space_total": disk_space,
       "required_nodes": self.required_nodes,
+      "nodes": list(instance.secondary_nodes),
       }
     self.in_data["request"] = request