diff --git a/data-access/engine/src/vlkb/src/imcopy.cpp b/data-access/engine/src/vlkb/src/imcopy.cpp
index 51ce0157300e60d94cb70c6beee287d8dbd32253..37f3fdbc38c92b5b882fea1777b00f8ef359636f 100644
--- a/data-access/engine/src/vlkb/src/imcopy.cpp
+++ b/data-access/engine/src/vlkb/src/imcopy.cpp
@@ -31,9 +31,7 @@ int stream_cutout(string pathname, int extnum, string region)
    {
       string pixfilter{ to_cfitsio_format(bnds) };
 
-      int rc = imcopy(pathname, extnum, pixfilter, "dummy");
-      if(rc)
-         std::cout << "rc = " << rc << std::endl;
+      imcopy(pathname, extnum, pixfilter, "dummy");
       return EXIT_SUCCESS;
 
    }
@@ -61,7 +59,7 @@ int fits_copy_image_section2(
 
 
 
-int imcopy(std::string filename, int extnum, std::string pixfilter, std::string temp_root)
+void imcopy(std::string filename, int extnum, std::string pixfilter, std::string temp_root)
 {
    LOG_trace(__func__);
 
@@ -97,7 +95,7 @@ int imcopy(std::string filename, int extnum, std::string pixfilter, std::string
       throw runtime_error("fits_open_file to stream failed: " + errmsg);
    }
 
-   int rc = fits_copy_image_section2(fptr, newfptr, expr, &status);
+   fits_copy_image_section2(fptr, newfptr, expr, &status);
    if (status)
    {
       string errmsg{fitsfiles::cfitsio_errmsg(__FILE__, __LINE__, status)};
@@ -118,8 +116,6 @@ int imcopy(std::string filename, int extnum, std::string pixfilter, std::string
       string errmsg{fitsfiles::cfitsio_errmsg(__FILE__, __LINE__, status)};
       throw runtime_error("fits_close_file cut failed: " + errmsg);
    }
-
-   return rc;
 }
 
 
diff --git a/data-access/engine/src/vlkb/src/imcopy.hpp b/data-access/engine/src/vlkb/src/imcopy.hpp
index f58eadb45cc5e787de3ed589c761f7cc1566a96f..f973ad9e4ad4b695070d0bced42263238c491297 100644
--- a/data-access/engine/src/vlkb/src/imcopy.hpp
+++ b/data-access/engine/src/vlkb/src/imcopy.hpp
@@ -3,7 +3,7 @@
 
 #include <string>
 
-int imcopy(std::string filename, int extnum, std::string pixfilter, std::string temp_root);
+void imcopy(std::string filename, int extnum, std::string pixfilter, std::string temp_root);
 int stream_cutout(std::string pathname, int extnum, std::string region);
 #endif
 
diff --git a/data-access/engine/src/vlkb/src/main.cpp b/data-access/engine/src/vlkb/src/main.cpp
index ee5d6c210b8f8ea836da544dc17e7cb04cbd595d..af3e0f05f5831c7bd5abc13d62d406a1790d7e88 100644
--- a/data-access/engine/src/vlkb/src/main.cpp
+++ b/data-access/engine/src/vlkb/src/main.cpp
@@ -189,9 +189,15 @@ int cmd_imcopy(int argc, char * argv[])
       int extnum = std::stoi(std::string{argv[2]});
       std::string pixfilter{argv[3]};
       std::string temp_root = ((argc == 5) ? argv[4] : "/tmp" );
-      int rc = imcopy(infilename, extnum, pixfilter, temp_root);
-      if(rc)
-         std::cout << "rc = " << rc << std::endl;
+      try
+      {
+         imcopy(infilename, extnum, pixfilter, temp_root);
+      }
+      catch(const std::exception & ex)
+      {
+         std::cerr << ex.what() << std::endl;
+         return EXIT_FAILURE;
+      }
       return EXIT_SUCCESS;
    }
    else
diff --git a/data-access/servlet/src/main/java/cutout/CutoutImpl.java b/data-access/servlet/src/main/java/cutout/CutoutImpl.java
index 9fc4275b6e5b79305b6ac12cb9a11a506955d43c..f22075e057d339e90f0281a1cb2aa0e5cdd96738 100644
--- a/data-access/servlet/src/main/java/cutout/CutoutImpl.java
+++ b/data-access/servlet/src/main/java/cutout/CutoutImpl.java
@@ -162,12 +162,14 @@ class CutoutImpl implements Cutout
       {
          /* cutout -> outputStream */
 
+         String pixFilterString = pixels_valid ? pixels : boundsString;
+
          String[] cmdCut = new String[6];
          cmdCut[0] = "/usr/local/bin/vlkb";
          cmdCut[1] = "imcopy";
          cmdCut[2] = absPathname;
          cmdCut[3] = String.valueOf(hdunum-1);
-         cmdCut[4] = pixels_valid ? pixels : boundsString;
+         cmdCut[4] = pixFilterString;
          cmdCut[5] = settings.fitsPaths.cutouts();
 
          if(outputStream == null)
@@ -176,6 +178,15 @@ class CutoutImpl implements Cutout
          ExecCmd execCut = new ExecCmd();
          execCut.doRun(outputStream, cmdCut);
 
+         LOGGER.info("execCut exitValue: " + execCut.exitValue);
+
+         boolean cut_successful = (execCut.exitValue == 0);
+
+         if(!cut_successful)
+         {
+            throw new IllegalArgumentException("cut by pixels not completed for pixels : " + pixFilterString);
+         }
+
          Instant cutDone = Instant.now();
          LOGGER.info("EXECTIME    cutDone: " + Duration.between(start, cutDone));
       }