diff --git a/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/parallelizedExecutor/DataSetRegistrationIngestionService.java b/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/parallelizedExecutor/DataSetRegistrationIngestionService.java
index 29515354a830c2f3ed06bd1eb8e2078befbb2f79..be5f70eadb0eb8e2841591a0b270ffc5b7a80e42 100644
--- a/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/parallelizedExecutor/DataSetRegistrationIngestionService.java
+++ b/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/parallelizedExecutor/DataSetRegistrationIngestionService.java
@@ -17,11 +17,10 @@
 package ch.ethz.sis.openbis.generic.server.dss.plugins.sync.harvester.synchronizer.parallelizedExecutor;
 
 import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.Paths;
 import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.List;
@@ -42,6 +41,7 @@ import ch.ethz.sis.openbis.generic.dssapi.v3.dto.datasetfile.id.IDataSetFileId;
 import ch.ethz.sis.openbis.generic.server.dss.plugins.sync.harvester.config.SyncConfig;
 import ch.ethz.sis.openbis.generic.server.dss.plugins.sync.harvester.synchronizer.util.DSPropertyUtils;
 import ch.ethz.sis.openbis.generic.server.dss.plugins.sync.harvester.synchronizer.util.V3Facade;
+import ch.systemsx.cisd.base.exceptions.CheckedExceptionTunnel;
 import ch.systemsx.cisd.common.io.IOUtilities;
 import ch.systemsx.cisd.common.logging.LogCategory;
 import ch.systemsx.cisd.common.logging.LogFactory;
@@ -202,7 +202,7 @@ class DataSetRegistrationIngestionService extends IngestionService<DataSetInform
         }
     }
 
-    private void downloadDataSetFiles(File dir, String dataSetCode) throws Exception
+    private void downloadDataSetFiles(File dir, String dataSetCode)
     {
         V3Facade v3FacadeToDataSource = new V3Facade(config);
         DataSetFileFetchOptions dsFileFetchOptions = new DataSetFileFetchOptions();
@@ -226,30 +226,31 @@ class DataSetRegistrationIngestionService extends IngestionService<DataSetInform
         {
             DataSetFile orgFile = fileDownload.getDataSetFile();
             if (orgFile.getPath().equals(""))
+            {
                 continue;
-            // if (dsFile.getPath().equals("original"))
-            // continue;
-            String filePath = orgFile.getPath();// .substring("original/".length());
-            File output = new File(dir.getAbsolutePath(), filePath);
+            }
+            File output = new File(dir, orgFile.getPath());
             if (orgFile.isDirectory())
             {
                 output.mkdirs();
-            }
-            else
+            } else
             {
                 DataSetFilePermId filePermId = orgFile.getPermId();
                 FileDetails fileDetails = fileDetailsMap.get(filePermId);
-                Path path = Paths.get(dir.getAbsolutePath(), filePath);
-                InputStream inputStream = fileDownload.getInputStream();
-                OutputStream outputStream = Files.newOutputStream(path);
-                int checksumCRC32 = IOUtilities.copyAndGetChecksumCRC32(inputStream, outputStream);
-                File copiedFile = new File(path.normalize().toString());
-                if (checksumCRC32 != fileDetails.getCrc32checksum()
-                        || copiedFile.length() != fileDetails.getFileLength())
+                output.getParentFile().mkdirs();
+                try (OutputStream outputStream = new FileOutputStream(output))
+                {
+                    int checksumCRC32 = IOUtilities.copyAndGetChecksumCRC32(fileDownload.getInputStream(), outputStream);
+                    if (checksumCRC32 != fileDetails.getCrc32checksum()
+                            || output.length() != fileDetails.getFileLength())
+                    {
+                        throw new RuntimeException("Crc32 or file length does not match for  " + orgFile.getPath() + " calculated:" + checksumCRC32
+                                + " expected:"
+                                + fileDetails.getCrc32checksum());
+                    }
+                } catch (IOException e)
                 {
-                    throw new RuntimeException("Crc32 or file length does not match for  " + orgFile.getPath() + " calculated:" + checksumCRC32
-                            + " expected:"
-                            + fileDetails.getCrc32checksum());
+                    throw CheckedExceptionTunnel.wrapIfNecessary(e);
                 }
             }
         }