diff --git a/lib/rapi/rlib2.py b/lib/rapi/rlib2.py
index e09a923bb8290237766880ed6ecf5316483bcacb..5bda4533cebb49be8826aae9902fcd489ea3c62e 100644
--- a/lib/rapi/rlib2.py
+++ b/lib/rapi/rlib2.py
@@ -1035,24 +1035,20 @@ class R_2_instances_name_migrate(baserlib.OpcodeResource):
       })
 
 
-class R_2_instances_name_failover(baserlib.ResourceBase):
+class R_2_instances_name_failover(baserlib.OpcodeResource):
   """/2/instances/[instance_name]/failover resource.
 
   """
-  def PUT(self):
-    """Does a failover of an instance.
+  PUT_OPCODE = opcodes.OpInstanceFailover
 
-    @return: a job id
+  def GetPutOpInput(self):
+    """Does a failover of an instance.
 
     """
-    baserlib.CheckType(self.request_body, dict, "Body contents")
-
-    op = baserlib.FillOpcode(opcodes.OpInstanceFailover, self.request_body, {
+    return (self.request_body, {
       "instance_name": self.items[0],
       })
 
-    return self.SubmitJob([op])
-
 
 def _ParseRenameInstanceRequest(name, data):
   """Parses a request for renaming an instance.
diff --git a/test/ganeti.rapi.rlib2_unittest.py b/test/ganeti.rapi.rlib2_unittest.py
index 12ce4cdcfe39b20b068c858368958705d3b3b11c..382b4aee9581daa3fb0d5536e530ff87287b4fbd 100755
--- a/test/ganeti.rapi.rlib2_unittest.py
+++ b/test/ganeti.rapi.rlib2_unittest.py
@@ -446,6 +446,26 @@ class TestInstanceDeactivateDisks(unittest.TestCase):
     self.assertRaises(IndexError, cl.GetNextSubmittedJob)
 
 
+class TestInstanceFailover(unittest.TestCase):
+  def test(self):
+    clfactory = _FakeClientFactory(_FakeClient)
+    handler = _CreateHandler(rlib2.R_2_instances_name_failover,
+                             ["inst12794"], {}, {}, clfactory)
+    job_id = handler.PUT()
+
+    cl = clfactory.GetNextClient()
+    self.assertRaises(IndexError, clfactory.GetNextClient)
+
+    (exp_job_id, (op, )) = cl.GetNextSubmittedJob()
+    self.assertEqual(job_id, exp_job_id)
+    self.assertTrue(isinstance(op, opcodes.OpInstanceFailover))
+    self.assertEqual(op.instance_name, "inst12794")
+    self.assertFalse(hasattr(op, "dry_run"))
+    self.assertFalse(hasattr(op, "force"))
+
+    self.assertRaises(IndexError, cl.GetNextSubmittedJob)
+
+
 class TestBackupPrepare(unittest.TestCase):
   def test(self):
     clfactory = _FakeClientFactory(_FakeClient)