diff --git a/lib/rapi/rlib2.py b/lib/rapi/rlib2.py
index 771f918edd9cb21605bd537ba2d7165be5eb3b67..1c2f22b91c9dde16f804c98dedee9180dde04770 100644
--- a/lib/rapi/rlib2.py
+++ b/lib/rapi/rlib2.py
@@ -632,33 +632,20 @@ class R_2_groups_name(baserlib.ResourceBase):
     return self.SubmitJob([op])
 
 
-def _ParseModifyGroupRequest(name, data):
-  """Parses a request for modifying a node group.
-
-  @rtype: L{opcodes.OpGroupSetParams}
-  @return: Group modify opcode
-
-  """
-  return baserlib.FillOpcode(opcodes.OpGroupSetParams, data, {
-    "group_name": name,
-    })
-
-
-class R_2_groups_name_modify(baserlib.ResourceBase):
+class R_2_groups_name_modify(baserlib.OpcodeResource):
   """/2/groups/[group_name]/modify resource.
 
   """
-  def PUT(self):
-    """Changes some parameters of node group.
+  PUT_OPCODE = opcodes.OpGroupSetParams
 
-    @return: a job id
+  def GetPutOpInput(self):
+    """Changes some parameters of node group.
 
     """
-    baserlib.CheckType(self.request_body, dict, "Body contents")
-
-    op = _ParseModifyGroupRequest(self.items[0], self.request_body)
-
-    return self.SubmitJob([op])
+    assert self.items
+    return (self.request_body, {
+      "group_name": self.items[0],
+      })
 
 
 def _ParseRenameGroupRequest(name, data, dry_run):
diff --git a/test/ganeti.rapi.rlib2_unittest.py b/test/ganeti.rapi.rlib2_unittest.py
index db2d67fc95b262232d5a83915c4cebfbf4184c7c..d3471c4828b1243ea1d0feefc6804a3163cdaa1a 100755
--- a/test/ganeti.rapi.rlib2_unittest.py
+++ b/test/ganeti.rapi.rlib2_unittest.py
@@ -752,11 +752,10 @@ class TestParseInstanceReplaceDisksRequest(unittest.TestCase):
                       })
 
 
-class TestParseModifyGroupRequest(unittest.TestCase):
-  def setUp(self):
-    self.Parse = rlib2._ParseModifyGroupRequest
-
+class TestGroupModify(unittest.TestCase):
   def test(self):
+    clfactory = _FakeClientFactory(_FakeClient)
+
     name = "group6002"
 
     for policy in constants.VALID_ALLOC_POLICIES:
@@ -764,26 +763,54 @@ class TestParseModifyGroupRequest(unittest.TestCase):
         "alloc_policy": policy,
         }
 
-      op = self.Parse(name, data)
-      self.assert_(isinstance(op, opcodes.OpGroupSetParams))
+      handler = _CreateHandler(rlib2.R_2_groups_name_modify, [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.assertTrue(isinstance(op, opcodes.OpGroupSetParams))
       self.assertEqual(op.group_name, name)
       self.assertEqual(op.alloc_policy, policy)
+      self.assertFalse(hasattr(op, "dry_run"))
+      self.assertRaises(IndexError, cl.GetNextSubmittedJob)
 
   def testUnknownPolicy(self):
+    clfactory = _FakeClientFactory(_FakeClient)
+
     data = {
       "alloc_policy": "_unknown_policy_",
       }
 
-    self.assertRaises(http.HttpBadRequest, self.Parse, "name", data)
+    handler = _CreateHandler(rlib2.R_2_groups_name_modify, ["xyz"], {}, data,
+                             clfactory)
+    self.assertRaises(http.HttpBadRequest, handler.PUT)
+    self.assertRaises(IndexError, clfactory.GetNextClient)
 
   def testDefaults(self):
+    clfactory = _FakeClientFactory(_FakeClient)
+
     name = "group6679"
-    data = {}
 
-    op = self.Parse(name, data)
-    self.assert_(isinstance(op, opcodes.OpGroupSetParams))
+    handler = _CreateHandler(rlib2.R_2_groups_name_modify, [name], {}, {},
+                             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.OpGroupSetParams))
     self.assertEqual(op.group_name, name)
     self.assertFalse(hasattr(op, "alloc_policy"))
+    self.assertFalse(hasattr(op, "dry_run"))
+    self.assertRaises(IndexError, cl.GetNextSubmittedJob)
 
 
 class TestGroupAdd(unittest.TestCase):