diff --git a/data-access/servlet/src/main/java/cutout/Datasets.java b/data-access/servlet/src/main/java/cutout/Datasets.java
index 684ba2056fa2e8583b1ba5f213bd095f97761f5c..d07cdc0789e1d95c2c1442c8e9b7d959e0c5edcd 100644
--- a/data-access/servlet/src/main/java/cutout/Datasets.java
+++ b/data-access/servlet/src/main/java/cutout/Datasets.java
@@ -17,7 +17,7 @@ public interface Datasets
 
 
    public MCutResult doMCutout(String jdlJson)
-      throws IOException;
+      throws IOException, InterruptedException;
 
 }
 
diff --git a/data-access/servlet/src/main/java/cutout/DatasetsCli.java b/data-access/servlet/src/main/java/cutout/DatasetsCli.java
index ffbe830e6b3ecfdfe067c34bdac4524d6e107b0a..3de95c1dafa6c276d24c8225bd2ac59bf70624a4 100644
--- a/data-access/servlet/src/main/java/cutout/DatasetsCli.java
+++ b/data-access/servlet/src/main/java/cutout/DatasetsCli.java
@@ -73,7 +73,7 @@ class DatasetsCli implements Datasets
 
 
    public MCutResult doMCutout(String jdlJson)
-         throws IOException
+      throws IOException, InterruptedException
       {
          LOGGER.info("trace");
 
@@ -114,18 +114,45 @@ class DatasetsCli implements Datasets
 
    // FIXME implement similar for Merge: MCutResult = call-Montage-demosaic-sequence(cutResultArr)
    private MCutResult doCompressCutFiles(MCutResult.Cut[] cutArr)
+      throws IOException, InterruptedException
    {
-      // FIXME do compression here
+      StringBuilder sb = new StringBuilder();
       for(MCutResult.Cut cut : cutArr)
       {
-         LOGGER.info("TBD compress cut-id"+ String.valueOf(cut.index) + " -> " + cut.content);
+         LOGGER.info("cut-id"+ String.valueOf(cut.index) + " -> " + cut.content);
+         if(cut.contentType == MCutResult.Cut.ContentType.FILENAME)
+         {
+            sb.append(" " + cut.content);
+         }
       }
 
+      final String tgzFileName = settings.fitsPaths.cutouts() + "/mcutout_TIMESTAMP.tar.gz";
+
+      String[] cmd = new String[4];
+      cmd[0] = "/bin/tar";
+      cmd[1] = "cfz";
+      cmd[2] = tgzFileName;
+      cmd[3] = sb.toString();
+
+      LOGGER.info("CMD: " + String.join(" ",cmd));
+
+      ByteArrayOutputStream bos = new ByteArrayOutputStream();
+      if(bos == null)
+         throw new AssertionError("byte output stream for bounds was not created, is null");
+
+      ExecCmd exec = new ExecCmd();
+      exec.doRun(bos, cmd);
+      LOGGER.info("exec tar.gz exitValue: " + exec.exitValue);
+
+      boolean has_result = (exec.exitValue == 0);
+
       MCutResult mCutResult = new MCutResult();
       mCutResult.cutResArr = cutArr;
-      mCutResult.fileName = "filename.tar.gz"; // FIXME do-zip-all-cuts(cutResultArr)
+      mCutResult.fileName = tgzFileName;
       mCutResult.fileSize = 0;
 
+      // FIXME add timestamp, add filesize when successful
+
       return mCutResult;
    }
 
diff --git a/data-access/servlet/src/main/java/webapi/ServletMCutout.java b/data-access/servlet/src/main/java/webapi/ServletMCutout.java
index 2cc1ea646a6120b5f792ce1cf85a687533731373..28c878910a11c23dafe89c13c8d89bea36c439de 100644
--- a/data-access/servlet/src/main/java/webapi/ServletMCutout.java
+++ b/data-access/servlet/src/main/java/webapi/ServletMCutout.java
@@ -134,7 +134,7 @@ public class ServletMCutout extends javax.servlet.http.HttpServlet
 
 
       }
-      catch(IOException ex)
+      catch(Exception ex)
       {
          /* FIXME find better exception */
          throw new AssertionError("internal error: jsonFile.open() throws IOException:" + ex.getMessage());