diff --git a/lib/rapi/rlib2.py b/lib/rapi/rlib2.py
index 1c2f22b91c9dde16f804c98dedee9180dde04770..ace53cfb0cdb6ee60df13912eecf547d7db2a7e7 100644
--- a/lib/rapi/rlib2.py
+++ b/lib/rapi/rlib2.py
@@ -648,40 +648,21 @@ class R_2_groups_name_modify(baserlib.OpcodeResource):
       })
 
 
-def _ParseRenameGroupRequest(name, data, dry_run):
-  """Parses a request for renaming a node group.
-
-  @type name: string
-  @param name: name of the node group to rename
-  @type data: dict
-  @param data: the body received by the rename request
-  @type dry_run: bool
-  @param dry_run: whether to perform a dry run
-
-  @rtype: L{opcodes.OpGroupRename}
-  @return: Node group rename opcode
-
-  """
-  return baserlib.FillOpcode(opcodes.OpGroupRename, data, {
-    "group_name": name,
-    "dry_run": dry_run,
-    })
-
-
-class R_2_groups_name_rename(baserlib.ResourceBase):
+class R_2_groups_name_rename(baserlib.OpcodeResource):
   """/2/groups/[group_name]/rename resource.
 
   """
-  def PUT(self):
-    """Changes the name of a node group.
+  PUT_OPCODE = opcodes.OpGroupRename
 
-    @return: a job id
+  def GetPutOpInput(self):
+    """Changes the name of a node group.
 
     """
-    baserlib.CheckType(self.request_body, dict, "Body contents")
-    op = _ParseRenameGroupRequest(self.items[0], self.request_body,
-                                  self.dryRun())
-    return self.SubmitJob([op])
+    assert len(self.items) == 1
+    return (self.request_body, {
+      "group_name": self.items[0],
+      "dry_run": self.dryRun(),
+      })
 
 
 class R_2_groups_name_assign_nodes(baserlib.ResourceBase):
diff --git a/test/ganeti.rapi.rlib2_unittest.py b/test/ganeti.rapi.rlib2_unittest.py
index d3471c4828b1243ea1d0feefc6804a3163cdaa1a..195fe03b304d874059b83b8c3f4f294217e78ebd 100755
--- a/test/ganeti.rapi.rlib2_unittest.py
+++ b/test/ganeti.rapi.rlib2_unittest.py
@@ -680,37 +680,55 @@ class TestParseInstanceReinstallRequest(testutils.GanetiTestCase):
     self.assertFalse(ops[1].osparams)
 
 
-class TestParseRenameGroupRequest(testutils.GanetiTestCase):
-  def setUp(self):
-    testutils.GanetiTestCase.setUp(self)
-
-    self.Parse = rlib2._ParseRenameGroupRequest
-
+class TestGroupRename(unittest.TestCase):
   def test(self):
-    name = "instij0eeph7"
+    clfactory = _FakeClientFactory(_FakeClient)
+
+    name = "group608242564"
     data = {
-      "new_name": "ua0aiyoo",
+      "new_name": "ua0aiyoo15112",
       }
 
-    op = self.Parse(name, data, False)
+    handler = _CreateHandler(rlib2.R_2_groups_name_rename, [name], {}, data,
+                             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.assert_(isinstance(op, opcodes.OpGroupRename))
+    self.assertTrue(isinstance(op, opcodes.OpGroupRename))
     self.assertEqual(op.group_name, name)
-    self.assertEqual(op.new_name, "ua0aiyoo")
+    self.assertEqual(op.new_name, "ua0aiyoo15112")
     self.assertFalse(op.dry_run)
+    self.assertRaises(IndexError, cl.GetNextSubmittedJob)
 
   def testDryRun(self):
-    name = "instij0eeph7"
+    clfactory = _FakeClientFactory(_FakeClient)
+
+    name = "group28548"
     data = {
       "new_name": "ua0aiyoo",
       }
 
-    op = self.Parse(name, data, True)
+    handler = _CreateHandler(rlib2.R_2_groups_name_rename, [name], {
+      "dry-run": ["1"],
+      }, data, 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.assert_(isinstance(op, opcodes.OpGroupRename))
+    self.assertTrue(isinstance(op, opcodes.OpGroupRename))
     self.assertEqual(op.group_name, name)
     self.assertEqual(op.new_name, "ua0aiyoo")
-    self.assert_(op.dry_run)
+    self.assertTrue(op.dry_run)
+    self.assertRaises(IndexError, cl.GetNextSubmittedJob)
 
 
 class TestParseInstanceReplaceDisksRequest(unittest.TestCase):