diff --git a/lib/cli.py b/lib/cli.py
index 0e7918ad37b953d73f6e9772eb4bca29da382509..fea2c1d40ddaeff5e3b29bdb7a6e11a73dfe8fb9 100644
--- a/lib/cli.py
+++ b/lib/cli.py
@@ -236,6 +236,7 @@ __all__ = [
   "FormatQueryResult",
   "FormatParameterDict",
   "FormatParamsDictInfo",
+  "FormatPolicyInfo",
   "PrintGenericInfo",
   "GenerateTable",
   "AskUser",
@@ -3639,6 +3640,57 @@ def FormatParamsDictInfo(param_dict, actual):
   return ret
 
 
+def _FormatListInfoDefault(data, def_data):
+  if data is not None:
+    ret = utils.CommaJoin(data)
+  else:
+    ret = "default (%s)" % utils.CommaJoin(def_data)
+  return ret
+
+
+def FormatPolicyInfo(custom_ipolicy, eff_ipolicy, iscluster):
+  """Formats an instance policy.
+
+  @type custom_ipolicy: dict
+  @param custom_ipolicy: own policy
+  @type eff_ipolicy: dict
+  @param eff_ipolicy: effective policy (including defaults); ignored for
+      cluster
+  @type iscluster: bool
+  @param iscluster: the policy is at cluster level
+  @rtype: list of pairs
+  @return: formatted data, suitable for L{PrintGenericInfo}
+
+  """
+  if iscluster:
+    eff_ipolicy = custom_ipolicy
+
+  custom_minmax = custom_ipolicy.get(constants.ISPECS_MINMAX)
+  ret = [
+    (key,
+     FormatParamsDictInfo(custom_minmax.get(key, {}),
+                          eff_ipolicy[constants.ISPECS_MINMAX][key]))
+    for key in constants.ISPECS_MINMAX_KEYS
+    ]
+  if iscluster:
+    stdspecs = custom_ipolicy[constants.ISPECS_STD]
+    ret.append(
+      (constants.ISPECS_STD,
+       FormatParamsDictInfo(stdspecs, stdspecs))
+      )
+
+  ret.append(
+    ("enabled disk templates",
+     _FormatListInfoDefault(custom_ipolicy.get(constants.IPOLICY_DTS),
+                            eff_ipolicy[constants.IPOLICY_DTS]))
+    )
+  ret.extend([
+    (key, str(custom_ipolicy.get(key, "default (%s)" % eff_ipolicy[key])))
+    for key in constants.IPOLICY_PARAMETERS
+    ])
+  return ret
+
+
 def ConfirmOperation(names, list_type, text, extra=""):
   """Ask the user to confirm an operation on a list of list_type.
 
diff --git a/lib/client/gnt_cluster.py b/lib/client/gnt_cluster.py
index bbee602fb7721142d47c7e19c8e37e62c1e1e196..e44f834423afbf1618c9165deeef1a8bb58d6419 100644
--- a/lib/client/gnt_cluster.py
+++ b/lib/client/gnt_cluster.py
@@ -474,23 +474,7 @@ def ShowClusterConfig(opts, args):
      _FormatGroupedParams(result["diskparams"], roman=opts.roman_integers)),
 
     ("Instance policy - limits for instances",
-     [
-       (key,
-        _FormatGroupedParams(result["ipolicy"][constants.ISPECS_MINMAX][key],
-                             roman=opts.roman_integers))
-       for key in constants.ISPECS_MINMAX_KEYS
-       ] +
-     [
-       (constants.ISPECS_STD,
-        _FormatGroupedParams(result["ipolicy"][constants.ISPECS_STD],
-                             roman=opts.roman_integers)),
-       ("enabled disk templates",
-        utils.CommaJoin(result["ipolicy"][constants.IPOLICY_DTS])),
-       ] +
-     [
-       (key, result["ipolicy"][key])
-       for key in constants.IPOLICY_PARAMETERS
-       ]),
+     FormatPolicyInfo(result["ipolicy"], None, True)),
     ]
 
   PrintGenericInfo(info)