diff --git a/common/source/java/ch/systemsx/cisd/common/hdf5/HDF5ContainerReader.java b/common/source/java/ch/systemsx/cisd/common/hdf5/HDF5ContainerReader.java
index fe28c5f90f8c41c61ee22b988bd81fec5947eb60..4fbd0cff244ccf7ffaf58e807ebc40045680b0f5 100644
--- a/common/source/java/ch/systemsx/cisd/common/hdf5/HDF5ContainerReader.java
+++ b/common/source/java/ch/systemsx/cisd/common/hdf5/HDF5ContainerReader.java
@@ -22,8 +22,6 @@ import java.io.InputStream;
 import java.io.OutputStream;
 import java.util.List;
 
-import org.apache.commons.io.IOUtils;
-
 import ch.systemsx.cisd.base.exceptions.IOExceptionUnchecked;
 import ch.systemsx.cisd.hdf5.HDF5FactoryProvider;
 import ch.systemsx.cisd.hdf5.IHDF5Reader;
@@ -36,6 +34,8 @@ import ch.systemsx.cisd.hdf5.io.HDF5IOAdapterFactory;
  */
 final class HDF5ContainerReader implements IHDF5ContainerReader
 {
+    private final byte[] buffer = new byte[HDF5ContainerWriter.BUFFER_SIZE];
+
     private final IHDF5Reader innerReader;
 
     HDF5ContainerReader(final File hdf5Container)
@@ -63,13 +63,25 @@ final class HDF5ContainerReader implements IHDF5ContainerReader
         return innerReader.getGroupMembers(groupPath);
     }
 
+    private long copy(InputStream input, OutputStream output) throws IOException
+    {
+        long count = 0;
+        int n = 0;
+        while (-1 != (n = input.read(buffer)))
+        {
+            output.write(buffer, 0, n);
+            count += n;
+        }
+        return count;
+    }
+
     public void readFromHDF5Container(String objectPath, OutputStream ostream)
     {
         final InputStream istream = HDF5IOAdapterFactory.asInputStream(innerReader, objectPath);
         Exception e = null;
         try
         {
-            IOUtils.copyLarge(istream, ostream);
+            copy(istream, ostream);
         } catch (IOException ex)
         {
             e = ex;