diff --git a/lib/backend.py b/lib/backend.py
index 85bb9b4454f2e17f17d3c51fabf468ebfd59e3ee..ddccc3b055a31b01993f53044f457fb05d224871 100644
--- a/lib/backend.py
+++ b/lib/backend.py
@@ -2697,6 +2697,9 @@ def StartImportExportDaemon(mode, opts, host, port, instance, ieio, ieioargs):
     if port:
       cmd.append("--port=%s" % port)
 
+    if opts.compress:
+      cmd.append("--compress=%s" % opts.compress)
+
     if cmd_prefix:
       cmd.append("--cmd-prefix=%s" % cmd_prefix)
 
diff --git a/lib/masterd/instance.py b/lib/masterd/instance.py
index f638407610a344a6c5cfc2c80b012bf4127c4866..b830dfe2838fa50b32a0d902b7ab549e09d03856 100644
--- a/lib/masterd/instance.py
+++ b/lib/masterd/instance.py
@@ -743,7 +743,7 @@ class ImportExportLoop:
 
 class _TransferInstCbBase(ImportExportCbBase):
   def __init__(self, lu, feedback_fn, instance, timeouts, src_node, src_cbs,
-               dest_node, dest_ip):
+               dest_node, dest_ip, export_opts):
     """Initializes this class.
 
     """
@@ -757,6 +757,7 @@ class _TransferInstCbBase(ImportExportCbBase):
     self.src_cbs = src_cbs
     self.dest_node = dest_node
     self.dest_ip = dest_ip
+    self.export_opts = export_opts
 
 
 class _TransferInstSourceCb(_TransferInstCbBase):
@@ -808,10 +809,9 @@ class _TransferInstDestCb(_TransferInstCbBase):
 
     self.feedback_fn("%s is now listening, starting export" % dtp.data.name)
 
-    opts = objects.ImportExportOptions(key_name=None, ca_pem=None)
-
     # Start export on source node
-    de = DiskExport(self.lu, self.src_node, opts, self.dest_ip, ie.listen_port,
+    de = DiskExport(self.lu, self.src_node, self.export_opts,
+                    self.dest_ip, ie.listen_port,
                     self.instance, dtp.data.src_io, dtp.data.src_ioargs,
                     self.timeouts, self.src_cbs, private=dtp)
     ie.loop.Add(de)
@@ -914,12 +914,23 @@ def TransferInstanceData(lu, feedback_fn, src_node, dest_node, dest_ip,
            each transfer
 
   """
-  opts = objects.ImportExportOptions(key_name=None, ca_pem=None)
+  # Compress only if transfer is to another node
+  if src_node == dest_node:
+    compress = constants.IEC_NONE
+  else:
+    compress = constants.IEC_GZIP
+
+  logging.debug("Source node %s, destination node %s, compression '%s'",
+                src_node, dest_node, compress)
+
+  opts = objects.ImportExportOptions(key_name=None, ca_pem=None,
+                                     compress=compress)
+
   timeouts = ImportExportTimeouts(constants.DISK_TRANSFER_CONNECT_TIMEOUT)
   src_cbs = _TransferInstSourceCb(lu, feedback_fn, instance, timeouts,
-                                  src_node, None, dest_node, dest_ip)
+                                  src_node, None, dest_node, dest_ip, opts)
   dest_cbs = _TransferInstDestCb(lu, feedback_fn, instance, timeouts,
-                                 src_node, src_cbs, dest_node, dest_ip)
+                                 src_node, src_cbs, dest_node, dest_ip, opts)
 
   all_dtp = []
 
diff --git a/lib/objects.py b/lib/objects.py
index 678ab99e93717883137e229e3734c78300bb142b..59d94bd3fb88f2e38fbf9ad55284a645cd59dd3d 100644
--- a/lib/objects.py
+++ b/lib/objects.py
@@ -1027,11 +1027,13 @@ class ImportExportOptions(ConfigObject):
 
   @ivar key_name: X509 key name (None for cluster certificate)
   @ivar ca_pem: Remote peer CA in PEM format (None for cluster certificate)
+  @ivar compress: Compression method (one of L{constants.IEC_ALL})
 
   """
   __slots__ = [
     "key_name",
     "ca_pem",
+    "compress",
     ]