diff --git a/daemons/import-export b/daemons/import-export
index a3b778c7f04d925203bfc0ab858fe3adade02fdc..134b3e904073450294fce9671b10d51c789e4b08 100755
--- a/daemons/import-export
+++ b/daemons/import-export
@@ -381,12 +381,20 @@ def GetTransportCommand(mode, socat_stderr_fd):
                (utils.ShellQuoteArgs(GetSocatCommand(mode)),
                 socat_stderr_fd))
 
-  # TODO: Make compression configurable
+  compr = options.compress
+
+  assert compr in constants.IEC_ALL
 
   if mode == constants.IEM_IMPORT:
-    transport_cmd = "%s | gunzip -c" % socat_cmd
+    if compr == constants.IEC_GZIP:
+      transport_cmd = "%s | gunzip -c" % socat_cmd
+    else:
+      transport_cmd = socat_cmd
   elif mode == constants.IEM_EXPORT:
-    transport_cmd = "gzip -c | %s" % socat_cmd
+    if compr == constants.IEC_GZIP:
+      transport_cmd = "gzip -c | %s" % socat_cmd
+    else:
+      transport_cmd = socat_cmd
   else:
     raise Error("Invalid mode")
 
@@ -554,6 +562,10 @@ def ParseOptions():
   parser.add_option("--connect-timeout", dest="connect_timeout", action="store",
                     type="int", default=DEFAULT_CONNECT_TIMEOUT,
                     help="Timeout for connection to be established (seconds)")
+  parser.add_option("--compress", dest="compress", action="store",
+                    type="choice", help="Compression method",
+                    metavar="[%s]" % "|".join(constants.IEC_ALL),
+                    choices=list(constants.IEC_ALL), default=constants.IEC_GZIP)
   parser.add_option("--cmd-prefix", dest="cmd_prefix", action="store",
                     type="string", help="Command prefix")
   parser.add_option("--cmd-suffix", dest="cmd_suffix", action="store",
diff --git a/lib/constants.py b/lib/constants.py
index a8d94a1bd8f4a9442e711c60b0a93d765d884444..7392a955643f6b5c760b7e5e6c8599d98c3e4896 100644
--- a/lib/constants.py
+++ b/lib/constants.py
@@ -210,6 +210,14 @@ IMPORT_EXPORT_DAEMON = _autoconf.PKGLIBDIR + "/import-export"
 IEM_IMPORT = "import"
 IEM_EXPORT = "export"
 
+# Import/export transport compression
+IEC_NONE = "none"
+IEC_GZIP = "gzip"
+IEC_ALL = frozenset([
+  IEC_NONE,
+  IEC_GZIP,
+  ])
+
 # Import/export I/O
 # Direct file I/O, equivalent to a shell's I/O redirection using '<' or '>'
 IEIO_FILE = "file"
diff --git a/test/import-export_unittest.bash b/test/import-export_unittest.bash
index 38f119307270109bb5cb4a400f09c3f4ab565c9f..f9ac6821c84972ba8d043c64e9359b727bec92ab 100755
--- a/test/import-export_unittest.bash
+++ b/test/import-export_unittest.bash
@@ -87,6 +87,7 @@ cmd_prefix=
 cmd_suffix=
 connect_timeout=10
 connect_retries=1
+compress=gzip
 
 $impexpd >/dev/null 2>&1 &&
   err "daemon-util succeeded without parameters"
@@ -100,6 +101,9 @@ $impexpd $src_statusfile >/dev/null 2>&1 &&
 $impexpd $src_statusfile invalidmode >/dev/null 2>&1 &&
   err "daemon-util succeeded with invalid mode"
 
+$impexpd $src_statusfile import --compression=rot13 >/dev/null 2>&1 &&
+  err "daemon-util succeeded with invalid compression"
+
 cat $(get_testfile proc_drbd8.txt) $(get_testfile cert1.pem) > $testdata
 
 impexpd_helper() {
@@ -140,7 +144,8 @@ do_export_to_port() {
     --key=$src_x509 --cert=$src_x509 --ca=$dst_x509 \
     --cmd-prefix="$cmd_prefix" --cmd-suffix="$cmd_suffix" \
     --connect-timeout=$connect_timeout \
-    --connect-retries=$connect_retries
+    --connect-retries=$connect_retries \
+    --compress=$compress
 }
 
 do_import() {
@@ -149,7 +154,8 @@ do_import() {
     --key=$dst_x509 --cert=$dst_x509 --ca=$src_x509 \
     --cmd-prefix="$cmd_prefix" --cmd-suffix="$cmd_suffix" \
     --connect-timeout=$connect_timeout \
-    --connect-retries=$connect_retries
+    --connect-retries=$connect_retries \
+    --compress=$compress
 }
 
 upto 'Generate X509 certificates and keys'
@@ -233,4 +239,28 @@ do_import &>$dst_output & imppid=$!
 checkpids $exppid $imppid || \
   err 'Listening with timeout failed when it should not'
 
+upto 'No compression'
+reset_status
+compress=none do_import > $statusdir/recv-nocompr 2>$dst_output & imppid=$!
+{ write_data | compress=none do_export; } &>$src_output & exppid=$!
+checkpids $exppid $imppid || err 'An error occurred'
+cmp $testdata $statusdir/recv-nocompr || \
+  err 'Received data does not match input'
+
+upto 'Compression mismatch A'
+reset_status
+compress=none do_import > $statusdir/recv-miscompr 2>$dst_output & imppid=$!
+{ write_data | compress=gzip do_export; } &>$src_output & exppid=$!
+checkpids $exppid $imppid || err 'An error occurred'
+cmp -s $testdata $statusdir/recv-miscompr && \
+  err 'Received data matches input when it should not'
+
+upto 'Compression mismatch B'
+reset_status
+compress=gzip do_import > $statusdir/recv-miscompr2 2>$dst_output & imppid=$!
+{ write_data | compress=none do_export; } &>$src_output & exppid=$!
+checkpids $exppid $imppid && err 'Did not fail when it should'
+cmp -s $testdata $statusdir/recv-miscompr2 && \
+  err 'Received data matches input when it should not'
+
 exit 0