diff --git a/lib/client/gnt_group.py b/lib/client/gnt_group.py
index 178fda583f8938f994030be7a61d524905d66568..e1e39257e7107625da1842b37ffdf169966b9283 100644
--- a/lib/client/gnt_group.py
+++ b/lib/client/gnt_group.py
@@ -146,8 +146,11 @@ def SetGroupParams(opts, args):
   @return: the desired exit code
 
   """
-  if (opts.ndparams is None and opts.alloc_policy is None
-      and not opts.diskparams and not opts.hv_state and not opts.disk_state):
+  allmods = [opts.ndparams, opts.alloc_policy, opts.diskparams, opts.hv_state,
+             opts.disk_state, opts.ispecs_mem_size, opts.ispecs_cpu_count,
+             opts.ispecs_disk_count, opts.ispecs_disk_size,
+             opts.ispecs_nic_count, opts.diskparams]
+  if allmods.count(None) == len(allmods):
     ToStderr("Please give at least one of the parameters.")
     return 1
 
@@ -159,12 +162,41 @@ def SetGroupParams(opts, args):
   hv_state = dict(opts.hv_state)
 
   diskparams = dict(opts.diskparams)
+
+  # set the default values
+  to_ipolicy = [
+    opts.ispecs_mem_size,
+    opts.ispecs_cpu_count,
+    opts.ispecs_disk_count,
+    opts.ispecs_disk_size,
+    opts.ispecs_nic_count,
+    ]
+  for ispec in to_ipolicy:
+    for param in ispec:
+      if isinstance(ispec[param], basestring):
+        if ispec[param].lower() == "default":
+          ispec[param] = constants.VALUE_DEFAULT
+  # create ipolicy object
+  ipolicy = objects.CreateIPolicyFromOpts(\
+    ispecs_mem_size=opts.ispecs_mem_size,
+    ispecs_cpu_count=opts.ispecs_cpu_count,
+    ispecs_disk_count=opts.ispecs_disk_count,
+    ispecs_disk_size=opts.ispecs_disk_size,
+    ispecs_nic_count=opts.ispecs_nic_count,
+    group_ipolicy=True,
+    allowed_values=[constants.VALUE_DEFAULT])
+  for key in ipolicy.keys():
+    utils.ForceDictType(ipolicy[key], constants.ISPECS_PARAMETER_TYPES,
+                        allowed_values=[constants.VALUE_DEFAULT])
+
   op = opcodes.OpGroupSetParams(group_name=args[0],
                                 ndparams=opts.ndparams,
                                 alloc_policy=opts.alloc_policy,
                                 hv_state=hv_state,
                                 disk_state=disk_state,
-                                diskparams=diskparams)
+                                diskparams=diskparams,
+                                ipolicy=ipolicy)
+
   result = SubmitOrSend(op, opts)
 
   if result:
@@ -266,7 +298,7 @@ commands = {
   "modify": (
     SetGroupParams, ARGS_ONE_GROUP,
     [DRY_RUN_OPT, SUBMIT_OPT, ALLOC_POLICY_OPT, NODE_PARAMS_OPT, HV_STATE_OPT,
-     DISK_STATE_OPT, DISK_PARAMS_OPT],
+     DISK_STATE_OPT, DISK_PARAMS_OPT] + INSTANCE_POLICY_OPTS,
     "<group_name>", "Alters the parameters of a node group"),
   "remove": (
     RemoveGroup, ARGS_ONE_GROUP, [DRY_RUN_OPT],
diff --git a/lib/cmdlib.py b/lib/cmdlib.py
index 1041b1501b9974912793b54e3efc19514e27782d..7788af2b58bf1dc5eae3f78995a7bae39fcd5a6e 100644
--- a/lib/cmdlib.py
+++ b/lib/cmdlib.py
@@ -13068,7 +13068,8 @@ class LUGroupSetParams(LogicalUnit):
       self.op.diskparams,
       self.op.alloc_policy,
       self.op.hv_state,
-      self.op.disk_state
+      self.op.disk_state,
+      self.op.ipolicy,
       ]
 
     if all_changes.count(None) == len(all_changes):
@@ -13117,6 +13118,16 @@ class LUGroupSetParams(LogicalUnit):
         _MergeAndVerifyDiskState(self.op.disk_state,
                                  self.group.disk_state_static)
 
+    if self.op.ipolicy:
+      g_ipolicy = {}
+      for key, value in self.op.ipolicy.iteritems():
+        g_ipolicy[key] = _GetUpdatedParams(self.group.ipolicy.get(key, {}),
+                                           value,
+                                           use_none=True)
+        utils.ForceDictType(g_ipolicy[key], constants.ISPECS_PARAMETER_TYPES)
+      self.new_ipolicy = g_ipolicy
+      objects.InstancePolicy.CheckParameterSyntax(self.new_ipolicy)
+
   def BuildHooksEnv(self):
     """Build hooks env.
 
@@ -13156,6 +13167,9 @@ class LUGroupSetParams(LogicalUnit):
     if self.op.disk_state:
       self.group.disk_state_static = self.new_disk_state
 
+    if self.op.ipolicy:
+      self.group.ipolicy = self.new_ipolicy
+
     self.cfg.Update(self.group, feedback_fn)
     return result
 
diff --git a/lib/opcodes.py b/lib/opcodes.py
index 4cdcdd9fc58154d139ece886af1539918985009f..aaa7e8196765a97c40dc8b1fcf6ce68f6dd77515 100644
--- a/lib/opcodes.py
+++ b/lib/opcodes.py
@@ -1446,6 +1446,7 @@ class OpGroupSetParams(OpCode):
     _PDiskParams,
     _PHvState,
     _PDiskState,
+    ("ipolicy", None, ht.TMaybeDict, "Group-wide instance policy specs"),
     ]
   OP_RESULT = _TSetParamsResult