diff --git a/openbis-common/source/java/ch/systemsx/cisd/openbis/common/hdf5/HDF5Container.java b/openbis-common/source/java/ch/systemsx/cisd/openbis/common/hdf5/HDF5Container.java
index efc7aea1c736c7e752ae95b5cffbbd4403b2e288..cf449d9ab0c98af6941fcfbef22a0bc0ea613425 100644
--- a/openbis-common/source/java/ch/systemsx/cisd/openbis/common/hdf5/HDF5Container.java
+++ b/openbis-common/source/java/ch/systemsx/cisd/openbis/common/hdf5/HDF5Container.java
@@ -29,6 +29,15 @@ import ch.systemsx.cisd.hdf5.IHDF5SimpleWriter;
  */
 public class HDF5Container
 {
+    /**
+     * Disable caching for unit testing where the same file name is reused but the file content
+     * changes between tests.
+     */
+    public static void disableCaching()
+    {
+        HDF5ContainerReader.disableCaching();
+    }
+
     private final File hdf5Container;
 
     /**
diff --git a/openbis-common/source/java/ch/systemsx/cisd/openbis/common/hdf5/HDF5ContainerReader.java b/openbis-common/source/java/ch/systemsx/cisd/openbis/common/hdf5/HDF5ContainerReader.java
index 01c3e0e0fb5a06f70f01f04bb86ec78e1bb46aaf..e1b2c650f79c244729aec0f9ecce8d75feeebdc5 100644
--- a/openbis-common/source/java/ch/systemsx/cisd/openbis/common/hdf5/HDF5ContainerReader.java
+++ b/openbis-common/source/java/ch/systemsx/cisd/openbis/common/hdf5/HDF5ContainerReader.java
@@ -48,12 +48,15 @@ final class HDF5ContainerReader implements IHDF5ContainerReader
 
         private final IHDF5ArchiveReader archiveReader;
 
+        private final File archiveFile;
+
         private long lastAccessed;
 
         private int referenceCount;
 
-        Reader(IHDF5ArchiveReader archiveReader)
+        Reader(File archiveFile, IHDF5ArchiveReader archiveReader)
         {
+            this.archiveFile = archiveFile;
             this.archiveReader = archiveReader;
             this.lastAccessed = System.currentTimeMillis();
             this.referenceCount = 1;
@@ -65,6 +68,11 @@ final class HDF5ContainerReader implements IHDF5ContainerReader
             return archiveReader;
         }
 
+        File getArchiveFile()
+        {
+            return archiveFile;
+        }
+
         void incCount()
         {
             ++referenceCount;
@@ -75,37 +83,64 @@ final class HDF5ContainerReader implements IHDF5ContainerReader
             --referenceCount;
         }
 
+        boolean isUnreferenced()
+        {
+            return referenceCount == 0;
+        }
+
         boolean isExpired()
         {
             return (referenceCount == 0 && (System.currentTimeMillis() - lastAccessed) > RETENTION_TIME_MILLIS);
         }
     }
-    
+
     static
     {
         final Timer t = new Timer("HDF5ContainerReader - Cache Cleaner", true);
-        t.schedule(new TimerTask() {
-            @Override
-            public void run()
+        t.schedule(new TimerTask()
             {
-                synchronized (fileToReaderMap)
+                @Override
+                public void run()
                 {
-                    final Iterator<Reader> it = fileToReaderMap.values().iterator();
-                    while (it.hasNext())
+                    synchronized (fileToReaderMap)
                     {
-                        final Reader container = it.next();
-                        if (container.isExpired())
+                        final Iterator<Reader> it = fileToReaderMap.values().iterator();
+                        while (it.hasNext())
                         {
-                            it.remove();
+                            final Reader container = it.next();
+                            if (container.isExpired())
+                            {
+                                container.getArchiveReader().close();
+                                it.remove();
+                            }
                         }
                     }
                 }
-            } } , CACHE_CLEANER_INTERVAL_MILLIS, CACHE_CLEANER_INTERVAL_MILLIS);
+            }, CACHE_CLEANER_INTERVAL_MILLIS, CACHE_CLEANER_INTERVAL_MILLIS);
     }
 
     private static final Map<File, Reader> fileToReaderMap =
             new HashMap<File, HDF5ContainerReader.Reader>();
-    
+
+    private static boolean noCaching = false;
+
+    /**
+     * Disable caching for unit testing where the same file name is reused but the file content
+     * changes between tests.
+     */
+    static void disableCaching()
+    {
+        noCaching = true;
+        synchronized (fileToReaderMap)
+        {
+            for (Reader r : fileToReaderMap.values())
+            {
+                r.getArchiveReader().close();
+            }
+            fileToReaderMap.clear();
+        }
+    }
+
     private static Reader openReader(File hdf5Container)
     {
         Reader entryOrNull;
@@ -114,7 +149,8 @@ final class HDF5ContainerReader implements IHDF5ContainerReader
             entryOrNull = fileToReaderMap.get(hdf5Container);
             if (entryOrNull == null)
             {
-                entryOrNull = new Reader(HDF5ArchiverFactory.openForReading(hdf5Container));
+                entryOrNull =
+                        new Reader(hdf5Container, HDF5ArchiverFactory.openForReading(hdf5Container));
                 fileToReaderMap.put(hdf5Container, entryOrNull);
             } else
             {
@@ -135,6 +171,14 @@ final class HDF5ContainerReader implements IHDF5ContainerReader
     public void close()
     {
         reader.decCount();
+        if (noCaching && reader.isUnreferenced())
+        {
+            synchronized (fileToReaderMap)
+            {
+                reader.getArchiveReader().close();
+                fileToReaderMap.remove(reader.getArchiveFile());
+            }
+        }
     }
 
     @Override
diff --git a/openbis-common/sourceTest/java/ch/systemsx/cisd/openbis/common/hdf5/HDF5ContainerTest.java b/openbis-common/sourceTest/java/ch/systemsx/cisd/openbis/common/hdf5/HDF5ContainerTest.java
index 3a4f58f3f04cb5e2a24a994af00c4a547c6d31c2..b893a49caf12362427dde8326a9f3c3cb3bed1e7 100644
--- a/openbis-common/sourceTest/java/ch/systemsx/cisd/openbis/common/hdf5/HDF5ContainerTest.java
+++ b/openbis-common/sourceTest/java/ch/systemsx/cisd/openbis/common/hdf5/HDF5ContainerTest.java
@@ -22,6 +22,7 @@ import java.io.File;
 import java.io.IOException;
 
 import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.BeforeTest;
 import org.testng.annotations.Test;
 
 import ch.systemsx.cisd.base.tests.AbstractFileSystemTestCase;
@@ -35,6 +36,12 @@ public class HDF5ContainerTest extends AbstractFileSystemTestCase
 {
     private final static int KB = 1024;
 
+    @BeforeTest
+    public void disableHDF5ContainerCaching()
+    {
+        HDF5Container.disableCaching();
+    }
+    
     @Override
     @BeforeMethod
     public void setUp() throws IOException
diff --git a/openbis-common/sourceTest/java/ch/systemsx/cisd/openbis/common/hdf5/HierarchicalStructureDuplicatorFileToHDF5Test.java b/openbis-common/sourceTest/java/ch/systemsx/cisd/openbis/common/hdf5/HierarchicalStructureDuplicatorFileToHDF5Test.java
index 817986f86984f1da01e1276ac5947f0a3c8d363f..e5e6c91579d6d048be1d23b7a83798fccc17a93c 100644
--- a/openbis-common/sourceTest/java/ch/systemsx/cisd/openbis/common/hdf5/HierarchicalStructureDuplicatorFileToHDF5Test.java
+++ b/openbis-common/sourceTest/java/ch/systemsx/cisd/openbis/common/hdf5/HierarchicalStructureDuplicatorFileToHDF5Test.java
@@ -20,6 +20,7 @@ import java.io.File;
 import java.io.IOException;
 
 import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.BeforeTest;
 import org.testng.annotations.Test;
 
 import ch.systemsx.cisd.base.tests.AbstractFileSystemTestCase;
@@ -34,6 +35,12 @@ public class HierarchicalStructureDuplicatorFileToHDF5Test extends AbstractFileS
 
     private HDF5Container container;
 
+    @BeforeTest
+    public void disableHDF5ContainerCaching()
+    {
+        HDF5Container.disableCaching();
+    }
+    
     @BeforeMethod
     @Override
     public void setUp() throws IOException
diff --git a/openbis-common/sourceTest/java/ch/systemsx/cisd/openbis/common/io/ConcatenatedContentInputStreamTest.java b/openbis-common/sourceTest/java/ch/systemsx/cisd/openbis/common/io/ConcatenatedContentInputStreamTest.java
index f5cdd68f87ecd11c16cd1b5cfff98cff9672df7e..bd908f938baf659093209b93d6870c872f642522 100644
--- a/openbis-common/sourceTest/java/ch/systemsx/cisd/openbis/common/io/ConcatenatedContentInputStreamTest.java
+++ b/openbis-common/sourceTest/java/ch/systemsx/cisd/openbis/common/io/ConcatenatedContentInputStreamTest.java
@@ -23,11 +23,13 @@ import java.util.ArrayList;
 import java.util.List;
 
 import org.testng.AssertJUnit;
+import org.testng.annotations.BeforeTest;
 import org.testng.annotations.Test;
 
 import ch.systemsx.cisd.base.exceptions.IOExceptionUnchecked;
 import ch.systemsx.cisd.base.tests.AbstractFileSystemTestCase;
 import ch.systemsx.cisd.common.io.ConcatenatedFileOutputStreamWriter;
+import ch.systemsx.cisd.openbis.common.hdf5.HDF5Container;
 import ch.systemsx.cisd.openbis.common.io.hierarchical_content.api.IHierarchicalContentNode;
 
 /**
@@ -37,6 +39,12 @@ import ch.systemsx.cisd.openbis.common.io.hierarchical_content.api.IHierarchical
  */
 public class ConcatenatedContentInputStreamTest extends AbstractFileSystemTestCase
 {
+    @BeforeTest
+    public void disableHDF5ContainerCaching()
+    {
+        HDF5Container.disableCaching();
+    }
+    
     @Test
     public void testNoFiles() throws IOException
     {
diff --git a/openbis-common/sourceTest/java/ch/systemsx/cisd/openbis/common/io/hierarchical_content/DefaultFileBasedHierarchicalContentTest.java b/openbis-common/sourceTest/java/ch/systemsx/cisd/openbis/common/io/hierarchical_content/DefaultFileBasedHierarchicalContentTest.java
index 90e6889e439c26ea338b2d5e6d1f2ad475458595..144b2b974dae8b0d5c0b37840c87228931fddb27 100644
--- a/openbis-common/sourceTest/java/ch/systemsx/cisd/openbis/common/io/hierarchical_content/DefaultFileBasedHierarchicalContentTest.java
+++ b/openbis-common/sourceTest/java/ch/systemsx/cisd/openbis/common/io/hierarchical_content/DefaultFileBasedHierarchicalContentTest.java
@@ -29,6 +29,7 @@ import org.jmock.Expectations;
 import org.jmock.Mockery;
 import org.testng.annotations.AfterMethod;
 import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.BeforeTest;
 import org.testng.annotations.Test;
 
 import ch.systemsx.cisd.base.exceptions.IOExceptionUnchecked;
@@ -76,6 +77,12 @@ public class DefaultFileBasedHierarchicalContentTest extends AbstractFileSystemT
 
     private IDelegatedAction onCloseAction;
 
+    @BeforeTest
+    public void disableHDF5ContainerCaching()
+    {
+        HDF5Container.disableCaching();
+    }
+    
     @BeforeMethod
     public void beforeMethod() throws Exception
     {