diff --git a/data-access/servlet/src/main/java/common/output/MCutResult.java b/data-access/servlet/src/main/java/common/output/MCutResult.java
index b65a669a745ef90866b28b98db750a8375876c32..b5dbe1eaeaf167234ef965aec7ca057ce9906305 100644
--- a/data-access/servlet/src/main/java/common/output/MCutResult.java
+++ b/data-access/servlet/src/main/java/common/output/MCutResult.java
@@ -1,4 +1,5 @@
 
+import org.json.simple.JSONObject;
 
 class MCutResult
 {
@@ -10,6 +11,15 @@ class MCutResult
       public int index;
       public ContentType contentType;
       public String content;
+
+      JSONObject toJsonObject()
+      {
+         JSONObject jo = new JSONObject();
+         //jo.put("input", inputs.toJsonObject());
+         jo.put("type", contentType.toString());
+         jo.put("content", content);
+         return jo;
+      }
    }
 
 
diff --git a/data-access/servlet/src/main/java/cutout/DatasetsCli.java b/data-access/servlet/src/main/java/cutout/DatasetsCli.java
index c6d4ee6ef2aa94936f1d2ca5696e30496ac571d9..a8fc5d9999c1943a8ba0d093021800c6058af9e5 100644
--- a/data-access/servlet/src/main/java/cutout/DatasetsCli.java
+++ b/data-access/servlet/src/main/java/cutout/DatasetsCli.java
@@ -32,6 +32,7 @@ import org.apache.commons.compress.compressors.gzip.GzipCompressorOutputStream;
 import java.io.BufferedOutputStream;
 import java.util.Date;
 import java.text.SimpleDateFormat;
+import org.json.simple.JSONArray;
 
 import vo.parameter.*;
 
@@ -89,7 +90,8 @@ class DatasetsCli implements Datasets
 
          CutArgs[] cutArgsArr = CutArgs.parseCutArgsArr(jdlJson);
          MCutResult.Cut[] cutResultArr = doCutouts( cutArgsArr );
-         mCutResult = doCompressCutFiles( cutResultArr );
+         String respJsonString = genResponseJson( cutResultArr );
+         mCutResult = doCompressCutFiles( cutResultArr, respJsonString );
 
          return mCutResult;
       }
@@ -121,70 +123,63 @@ class DatasetsCli implements Datasets
 
 
    // FIXME implement similar for Merge: MCutResult = call-Montage-demosaic-sequence(cutResultArr)
-   private MCutResult doCompressCutFiles(MCutResult.Cut[] cutArr)
-      throws IOException, InterruptedException
-   {
-      String timestamp = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
-
-      final String tgzFileName = settings.fitsPaths.cutouts() + "/mcutout_" + timestamp + ".tar.gz";
-/*
-      StringBuilder sb = new StringBuilder();
-      for(MCutResult.Cut cut : cutArr)
+   private MCutResult doCompressCutFiles(MCutResult.Cut[] cutArr, String respJsonString)
+         throws IOException, InterruptedException
       {
-         LOGGER.info("cut-id"+ String.valueOf(cut.index) + " -> " + cut.content);
-         if(cut.contentType == MCutResult.Cut.ContentType.FILENAME)
+         Instant instant = Instant.now();
+         String timestamp = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + "_" + instant.getNano();
+ 
+         final String tgzFileName = settings.fitsPaths.cutouts() + "/mcutout_" + timestamp + ".tar.gz";
+
+         // generate response-*.json with timestamp
+         String respJsonPathname = settings.fitsPaths.cutouts() + "/response_" + timestamp + ".json";
+         try (PrintWriter out = new PrintWriter(respJsonPathname))
          {
-            Path p = Paths.get(cut.content);
-            sb.append(" " + p.getFileName().toString());
+            out.print(respJsonString);
          }
-      }
 
-      String[] cmd = new String[6];
-      cmd[0] = "/bin/tar";
-      cmd[1] = "cfz";
-      cmd[2] = tgzFileName;
-      cmd[3] = "-C";
-      cmd[4] = settings.fitsPaths.cutouts();
-      cmd[5] = sb.toString();
+         List<Path> paths = new ArrayList<Path>();
 
-      LOGGER.info("CMD: " + String.join(" ",cmd));
+         paths.add(Paths.get(respJsonPathname));
 
-      ByteArrayOutputStream bos = new ByteArrayOutputStream();
-      if(bos == null)
-         throw new AssertionError("byte output stream for bounds was not created, is null");
+         for(MCutResult.Cut cut : cutArr)
+         {
+            LOGGER.info("cut-id"+ String.valueOf(cut.index) + " -> " + cut.content);
+            if(cut.contentType == MCutResult.Cut.ContentType.FILENAME)
+            {
+               Path p = Paths.get(cut.content);
+               paths.add(p);
+            }
+         }
 
-      ExecCmd exec = new ExecCmd();
-      exec.doRun(bos, cmd);
-      LOGGER.info("exec tar.gz exitValue: " + exec.exitValue);
+         Path output = Paths.get(tgzFileName);
+         createTarGzipFiles(paths, output);
 
-      boolean has_result = (exec.exitValue == 0);
-*/
-      List<Path> paths = new ArrayList<Path>();
+         MCutResult mCutResult = new MCutResult();
+         mCutResult.cutResArr = cutArr;
+         mCutResult.fileName = tgzFileName;
+         mCutResult.fileSize = Files.size(output);
 
-      for(MCutResult.Cut cut : cutArr)
-      {
-         LOGGER.info("cut-id"+ String.valueOf(cut.index) + " -> " + cut.content);
-         if(cut.contentType == MCutResult.Cut.ContentType.FILENAME)
-         {
-            Path p = Paths.get(cut.content);
-            paths.add(p);
-         }
+         return mCutResult;
       }
 
-      Path output = Paths.get(tgzFileName);
-      createTarGzipFiles(paths, output);
 
-      MCutResult mCutResult = new MCutResult();
-      mCutResult.cutResArr = cutArr;
-      mCutResult.fileName = tgzFileName;
-      mCutResult.fileSize = Files.size(output);
+   private String genResponseJson(MCutResult.Cut[] cutArr)
+   {
+      List<Path> paths = new ArrayList<Path>();
 
-      // FIXME add response.json to tar.gz, add nanosecs to timestamp
+      JSONArray jArr = new JSONArray();
 
-      return mCutResult;
+      for(MCutResult.Cut cut : cutArr)
+      {
+         jArr.add(cut.toJsonObject());
+      }
+
+      return jArr.toString();
    }
 
 
+
    private MCutResult.Cut doFileByIdWithErr(String id, Pos pos, Band band, Time time, Pol pol, String pixels,
          boolean countNullValues, Subsurvey[] subsurveys)
    {
@@ -227,7 +222,7 @@ class DatasetsCli implements Datasets
 
 
 
-   /*
+/*
       <dependency>
       <groupId>org.apache.commons</groupId>
       <artifactId>commons-compress</artifactId>
@@ -237,11 +232,8 @@ class DatasetsCli implements Datasets
       import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
       import org.apache.commons.compress.archivers.tar.TarArchiveOutputStream;
       import org.apache.commons.compress.compressors.gzip.GzipCompressorOutputStream;
-
-
-
 */
-   public static void createTarGzipFiles(List<Path> paths, Path output)
+   private static void createTarGzipFiles(List<Path> paths, Path output)
          throws IOException
       {
          try (OutputStream fOut = Files.newOutputStream(output);
@@ -270,7 +262,6 @@ class DatasetsCli implements Datasets
 
             tOut.finish();
          }
-
       }
 
 }