diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/content/PathInfoProviderBasedHierarchicalContent.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/content/PathInfoProviderBasedHierarchicalContent.java
index 3d6c5a638abb4709d692378cdc312fd83ce16046..5bfe66460d9e612d34f950dbd953c90bd7b3c305 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/content/PathInfoProviderBasedHierarchicalContent.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/content/PathInfoProviderBasedHierarchicalContent.java
@@ -215,6 +215,13 @@ class PathInfoProviderBasedHierarchicalContent implements IHierarchicalContent
             return true;
         }
 
+        @Override
+        protected boolean isPhysicalFile()
+        {
+            File file = doGetFile();
+            return file.isFile();
+        }
+
         @Override
         public boolean isDirectory()
         {
diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/shared/content/PathInfoProviderBasedHierarchicalContentTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/shared/content/PathInfoProviderBasedHierarchicalContentTest.java
index 9e3a22af7324a56ce050043716b08bf8b891fb64..abaf141fe90f1e81bd0bca536da181b78d7b39dd 100644
--- a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/shared/content/PathInfoProviderBasedHierarchicalContentTest.java
+++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/shared/content/PathInfoProviderBasedHierarchicalContentTest.java
@@ -21,6 +21,8 @@ import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.IOUtils;
 import org.jmock.Expectations;
 import org.jmock.Mockery;
 import org.testng.annotations.AfterMethod;
@@ -46,7 +48,9 @@ import ch.systemsx.cisd.openbis.dss.generic.shared.dto.DataSetPathInfo;
  */
 public class PathInfoProviderBasedHierarchicalContentTest extends AbstractFileSystemTestCase
 {
-
+    private static final File TEST_HDF5_EXAMPLE = new File(
+            "../openbis-common/resource/test-data/HDF5ContainerBasedHierarchicalContentNodeTest/thumbnails.h5");
+    
     private File rootDir;
 
     private File file1;
@@ -73,6 +77,8 @@ public class PathInfoProviderBasedHierarchicalContentTest extends AbstractFileSy
 
     private IDelegatedAction onCloseAction;
 
+    private File hdf5Example;
+
     @BeforeMethod
     public void beforeMethod() throws Exception
     {
@@ -86,6 +92,8 @@ public class PathInfoProviderBasedHierarchicalContentTest extends AbstractFileSy
         file2 = new File(rootDir, "file2");
 
         subDir = new File(rootDir, "subDir");
+        hdf5Example = new File(subDir, "my-hdf5.h5");
+        FileUtils.copyFile(TEST_HDF5_EXAMPLE, hdf5Example);
         subDir.mkdirs();
         subFile1 = new File(subDir, "subFile1");
         subFile2 = new File(subDir, "subFile2");
@@ -349,17 +357,21 @@ public class PathInfoProviderBasedHierarchicalContentTest extends AbstractFileSy
                     will(returnValue(Arrays.asList(createDummyFileBasedPath(rootDir, subFile1, 1),
                             createDummyFileBasedPath(rootDir, subFile2, null),
                             createDummyFileBasedPath(rootDir, subFile3, 3),
-                            createDummyFileBasedPath(rootDir, subSubFile, 4))));
+                            createDummyFileBasedPath(rootDir, subSubFile, 4),
+                            createDummyHDF5FileBasedPath(rootDir, hdf5Example))));
                 }
             });
         List<IHierarchicalContentNode> matchingNodes =
                 rootContent.listMatchingNodes(startingPath, pattern);
-        assertEquals(4, matchingNodes.size());
+        assertEquals(5, matchingNodes.size());
         sortNodes(matchingNodes);
-        checkNodeMatchesFile(matchingNodes.get(0), subFile1, 1);
-        checkNodeMatchesFile(matchingNodes.get(1), subFile2, -2056143706);
-        checkNodeMatchesFile(matchingNodes.get(2), subFile3, 3);
-        checkNodeMatchesFile(matchingNodes.get(3), subSubFile, 4);
+        checkNodeMatchesFile(matchingNodes.get(0), hdf5Example, 0);
+        assertEquals(537641, matchingNodes.get(0).getFileLength());
+        assertEquals(-2098219814, matchingNodes.get(0).getChecksumCRC32());
+        checkNodeMatchesFile(matchingNodes.get(1), subFile1, 1);
+        checkNodeMatchesFile(matchingNodes.get(2), subFile2, -2056143706);
+        checkNodeMatchesFile(matchingNodes.get(3), subFile3, 3);
+        checkNodeMatchesFile(matchingNodes.get(4), subSubFile, 4);
 
         context.assertIsSatisfied();
     }
@@ -409,5 +421,16 @@ public class PathInfoProviderBasedHierarchicalContentTest extends AbstractFileSy
         }
         return result;
     }
+    
+    private static DataSetPathInfo createDummyHDF5FileBasedPath(final File root, final File file)
+    {
+        DataSetPathInfo result = new DataSetPathInfo();
+        result.setFileName(file.getName());
+        result.setDirectory(true);
+        result.setRelativePath(FileUtilities.getRelativeFilePath(root, file));
+        result.setSizeInBytes(file.length());
+        return result;
+    }
+    
 
 }
diff --git a/openbis-common/source/java/ch/systemsx/cisd/openbis/common/io/hierarchical_content/AbstractHierarchicalContentNode.java b/openbis-common/source/java/ch/systemsx/cisd/openbis/common/io/hierarchical_content/AbstractHierarchicalContentNode.java
index 8120b67962d653761523a171934ea9463e95c7d8..760028f0a785ad0c389db020ac90c22b9e33e9c2 100644
--- a/openbis-common/source/java/ch/systemsx/cisd/openbis/common/io/hierarchical_content/AbstractHierarchicalContentNode.java
+++ b/openbis-common/source/java/ch/systemsx/cisd/openbis/common/io/hierarchical_content/AbstractHierarchicalContentNode.java
@@ -33,10 +33,10 @@ import ch.systemsx.cisd.openbis.common.io.hierarchical_content.api.IHierarchical
 public abstract class AbstractHierarchicalContentNode implements IHierarchicalContentNode
 {
     static final String OPERATION_NOT_SUPPORTED_FOR_A_DIRECTORY =
-            "Operation not supported for a directory";
+            "Operation not supported for a directory: ";
 
     static final String OPERATION_SUPPORTED_ONLY_FOR_A_DIRECTORY =
-            "Operation supported only for a directory";
+            "Operation supported only for a directory: ";
 
     /** Returns relative path of this node or <code>null</code> for root node. */
     abstract protected String doGetRelativePath();
@@ -72,15 +72,20 @@ public abstract class AbstractHierarchicalContentNode implements IHierarchicalCo
     {
         if (isDirectory() == false)
         {
-            throw new UnsupportedOperationException(OPERATION_SUPPORTED_ONLY_FOR_A_DIRECTORY);
+            throw new UnsupportedOperationException(OPERATION_SUPPORTED_ONLY_FOR_A_DIRECTORY + getRelativePath());
         }
     }
 
-    private final void failOnDirectory()
+    protected boolean isPhysicalFile()
     {
-        if (isDirectory())
+        return isDirectory() == false;
+    }
+
+    private final void requirePhysicalFile()
+    {
+        if (isDirectory() && isPhysicalFile() == false)
         {
-            throw new UnsupportedOperationException(OPERATION_NOT_SUPPORTED_FOR_A_DIRECTORY);
+            throw new UnsupportedOperationException(OPERATION_NOT_SUPPORTED_FOR_A_DIRECTORY + getRelativePath());
         }
     }
 
@@ -94,28 +99,28 @@ public abstract class AbstractHierarchicalContentNode implements IHierarchicalCo
     @Override
     public final long getFileLength() throws UnsupportedOperationException
     {
-        failOnDirectory();
+        requirePhysicalFile();
         return doGetFileLength();
     }
 
     @Override
     public int getChecksumCRC32() throws UnsupportedOperationException
     {
-        failOnDirectory();
+        requirePhysicalFile();
         return doGetChecksumCRC32();
     }
     
     @Override
     public final IRandomAccessFile getFileContent()
     {
-        failOnDirectory();
+        requirePhysicalFile();
         return doGetFileContent();
     }
 
     @Override
     public final InputStream getInputStream()
     {
-        failOnDirectory();
+        requirePhysicalFile();
         return doGetInputStream();
     }
 
diff --git a/openbis-common/source/java/ch/systemsx/cisd/openbis/common/io/hierarchical_content/HDF5ContainerBasedHierarchicalContentNode.java b/openbis-common/source/java/ch/systemsx/cisd/openbis/common/io/hierarchical_content/HDF5ContainerBasedHierarchicalContentNode.java
index b802d434446a911a3e2a35b7d7750fc3bb79e327..8cee9c9cb184c1683e19734b80b6f9463e805f41 100644
--- a/openbis-common/source/java/ch/systemsx/cisd/openbis/common/io/hierarchical_content/HDF5ContainerBasedHierarchicalContentNode.java
+++ b/openbis-common/source/java/ch/systemsx/cisd/openbis/common/io/hierarchical_content/HDF5ContainerBasedHierarchicalContentNode.java
@@ -63,6 +63,12 @@ public class HDF5ContainerBasedHierarchicalContentNode extends
         return true; // always a directory
     }
 
+    @Override
+    protected boolean isPhysicalFile()
+    {
+        return true;
+    }
+
     @Override
     public List<IHierarchicalContentNode> doGetChildNodes()
     {
diff --git a/openbis-common/sourceTest/java/ch/systemsx/cisd/openbis/common/io/hierarchical_content/AbstractHierarchicalContentNodeTest.java b/openbis-common/sourceTest/java/ch/systemsx/cisd/openbis/common/io/hierarchical_content/AbstractHierarchicalContentNodeTest.java
index dd545076e6e29ef12b098a945d62fd08cda12251..55ed93b3a802eece8db779b0a2d813ef94103f91 100644
--- a/openbis-common/sourceTest/java/ch/systemsx/cisd/openbis/common/io/hierarchical_content/AbstractHierarchicalContentNodeTest.java
+++ b/openbis-common/sourceTest/java/ch/systemsx/cisd/openbis/common/io/hierarchical_content/AbstractHierarchicalContentNodeTest.java
@@ -149,7 +149,7 @@ public class AbstractHierarchicalContentNodeTest extends AssertJUnit
                 @Override
                 public String doGetRelativePath()
                 {
-                    return null;
+                    return "";
                 }
 
                 @Override
@@ -234,7 +234,7 @@ public class AbstractHierarchicalContentNodeTest extends AssertJUnit
                 @Override
                 public String doGetRelativePath()
                 {
-                    return null;
+                    return "";
                 }
 
                 @Override
diff --git a/openbis-common/sourceTest/java/ch/systemsx/cisd/openbis/common/io/hierarchical_content/HDF5ContainerBasedHierarchicalContentNodeTest.java b/openbis-common/sourceTest/java/ch/systemsx/cisd/openbis/common/io/hierarchical_content/HDF5ContainerBasedHierarchicalContentNodeTest.java
index 4cb857221b184fee68541748368003f78b660728..3cf435cb367d5d65c1cf5818fc742916d22611f4 100644
--- a/openbis-common/sourceTest/java/ch/systemsx/cisd/openbis/common/io/hierarchical_content/HDF5ContainerBasedHierarchicalContentNodeTest.java
+++ b/openbis-common/sourceTest/java/ch/systemsx/cisd/openbis/common/io/hierarchical_content/HDF5ContainerBasedHierarchicalContentNodeTest.java
@@ -62,6 +62,8 @@ public class HDF5ContainerBasedHierarchicalContentNodeTest extends AssertJUnit
         		"f8d4cfc7 26367 PLATE1_A01_06_Cy3.png\n" + 
         		"aeb12b1a 25086 PLATE1_A01_06_DAPI.png\n" + 
         		"ced4332a 22199 PLATE1_A01_06_GFP.png", getNamesChecksumsAndSizes(nodes));
+        assertEquals(537641, node.getFileLength());
+        assertEquals(-2098219814, node.getChecksumCRC32());
     }
     
     @Test