diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/AbstractDataSetPackager.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/AbstractDataSetPackager.java
index 69ac020c484965db2f913f3a1aa7385e1ae3c6a9..b1a0a4d0580585031c753f551c944783e7d3e66a 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/AbstractDataSetPackager.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/AbstractDataSetPackager.java
@@ -16,16 +16,13 @@
 
 package ch.systemsx.cisd.openbis.dss.generic.server;
 
-import java.io.BufferedInputStream;
 import java.io.ByteArrayInputStream;
 import java.io.File;
-import java.io.FileInputStream;
 import java.io.InputStream;
 import java.util.List;
 import java.util.zip.CRC32;
 
 import ch.systemsx.cisd.base.exceptions.CheckedExceptionTunnel;
-import ch.systemsx.cisd.common.io.IOUtilities;
 import ch.systemsx.cisd.openbis.common.io.hierarchical_content.api.IHierarchicalContent;
 import ch.systemsx.cisd.openbis.common.io.hierarchical_content.api.IHierarchicalContentNode;
 import ch.systemsx.cisd.openbis.dss.generic.shared.IHierarchicalContentProvider;
@@ -150,12 +147,11 @@ public abstract class AbstractDataSetPackager
             }
         } else if (file.isFile())
         {
-            long size = file.length();
-            long checksum = calculateChecksum(node, file);
+            long size = node.getFileLength();
+            long checksum = isChecksumNeeded() ? node.getChecksumCRC32() : 0;
             try
             {
-                FileInputStream fileInputStream = new FileInputStream(file);
-                addEntry(entryPath, file.lastModified(), size, checksum, new BufferedInputStream(fileInputStream));
+                addEntry(entryPath, node.getLastModified(), size, checksum, node.getInputStream());
             } catch (Exception ex)
             {
                 throw CheckedExceptionTunnel.wrapIfNecessary(ex);
@@ -165,28 +161,4 @@ public abstract class AbstractDataSetPackager
             throw new IllegalStateException("Node '" + node.getRelativePath() + "' is a real folder");
         }
     }
-
-    private long calculateChecksum(IHierarchicalContentNode node, File file)
-    {
-        long checksum = 0;
-        if (isChecksumNeeded())
-        {
-            boolean checksumCRC32Precalculated = node.isChecksumCRC32Precalculated();
-            if (checksumCRC32Precalculated)
-            {
-                checksum = node.getChecksumCRC32();
-            } else 
-            {
-                try
-                {
-                    FileInputStream fileInputStream = new FileInputStream(file);
-                    checksum = IOUtilities.getChecksumCRC32(new BufferedInputStream(fileInputStream));
-                } catch (Exception ex)
-                {
-                    throw CheckedExceptionTunnel.wrapIfNecessary(ex);
-                }
-            }
-        }
-        return checksum;
-    }
 }