diff --git a/lib/rpc.py b/lib/rpc.py
index 82405103559ae165a7652d042a1da3b3d7229dc7..11459d2ff949abc5b35eadfbf79cf33d8c318146 100644
--- a/lib/rpc.py
+++ b/lib/rpc.py
@@ -664,6 +664,10 @@ class RpcRunner(_RpcClientBase,
       rpc_defs.ED_INST_DICT_HVP_BEP: self._InstDictHvpBep,
       rpc_defs.ED_INST_DICT_OSP: self._InstDictOsp,
 
+      # Encoders annotating disk parameters
+      rpc_defs.ED_DISKS_DICT_DP: self._DisksDictDP,
+      rpc_defs.ED_SINGLE_DISK_DICT_DP: self._SingleDiskDictDP,
+
       # Encoders with special requirements
       rpc_defs.ED_FILE_DETAILS: compat.partial(_PrepareFileUpload, _getents),
       })
@@ -732,6 +736,22 @@ class RpcRunner(_RpcClientBase,
     """
     return self._InstDict(instance, osp=osparams)
 
+  def _DisksDictDP(self, (disks, instance)):
+    """Wrapper for L{AnnotateDiskParams}.
+
+    """
+    diskparams = self._cfg.GetInstanceDiskParams(instance)
+    return [disk.ToDict()
+            for disk in AnnotateDiskParams(instance.disk_template,
+                                           disks, diskparams)]
+
+  def _SingleDiskDictDP(self, (disk, instance)):
+    """Wrapper for L{AnnotateDiskParams}.
+
+    """
+    (anno_disk,) = self._DisksDictDP(([disk], instance))
+    return anno_disk
+
 
 class JobQueueRunner(_RpcClientBase, _generated_rpc.RpcClientJobQueue):
   """RPC wrappers for job queue.
diff --git a/lib/rpc_defs.py b/lib/rpc_defs.py
index 669f79129dd53b63d2d6a9ebda5a809759dec7e5..60417743c950961b68783334ab4d2eb33f610127 100644
--- a/lib/rpc_defs.py
+++ b/lib/rpc_defs.py
@@ -71,7 +71,9 @@ ACCEPT_OFFLINE_NODE = object()
  ED_FILE_DETAILS,
  ED_FINALIZE_EXPORT_DISKS,
  ED_COMPRESS,
- ED_BLOCKDEV_RENAME) = range(1, 12)
+ ED_BLOCKDEV_RENAME,
+ ED_DISKS_DICT_DP,
+ ED_SINGLE_DISK_DICT_DP) = range(1, 14)
 
 
 def _Prepare(calls):