diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/HierarchicalContentProvider.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/HierarchicalContentProvider.java
index 9196f34b03dbc951ae7f491065737d3cde20c50d..802f510f384909264a45804c2c6d638137fa36f3 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/HierarchicalContentProvider.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/HierarchicalContentProvider.java
@@ -21,6 +21,7 @@ import java.io.File;
 import ch.systemsx.cisd.common.io.HierarchicalContentFactory;
 import ch.systemsx.cisd.common.io.IHierarchicalContent;
 import ch.systemsx.cisd.common.io.IHierarchicalContentFactory;
+import ch.systemsx.cisd.common.utilities.IDelegatedAction;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IDatasetLocation;
 
@@ -66,14 +67,22 @@ public class HierarchicalContentProvider implements IHierarchicalContentProvider
     public IHierarchicalContent asContent(IDatasetLocation datasetLocation)
     {
         // this is temporary implementation - it should access DB instead of filesystem
-        // FIXME locking
+        // IHierarchicalContent.close() should be called to unlock the dataset
+        directoryProvider.getShareIdManager().lock(datasetLocation.getDatasetCode());
         File dataSetDirectory = directoryProvider.getDataSetDirectory(datasetLocation);
+
         return asContent(dataSetDirectory);
     }
 
     public IHierarchicalContent asContent(File dataSetDirectory)
     {
-        return hierarchicalContentFactory.asHierarchicalContent(dataSetDirectory);
+        return hierarchicalContentFactory.asHierarchicalContent(dataSetDirectory,
+                IDelegatedAction.DO_NOTHING);
+    }
+
+    public IHierarchicalContent asContent(File dataSetDirectory, IDelegatedAction onCloseAction)
+    {
+        return hierarchicalContentFactory.asHierarchicalContent(dataSetDirectory, onCloseAction);
     }
 
 }
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/IHierarchicalContentProvider.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/IHierarchicalContentProvider.java
index c5eb447cc3fe7ab44f3ce44bee4cf32e4dfa2636..a365cad8b020b876d5c50d945cc80129126b49f5 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/IHierarchicalContentProvider.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/IHierarchicalContentProvider.java
@@ -34,6 +34,7 @@ public interface IHierarchicalContentProvider
 
     IHierarchicalContent asContent(IDatasetLocation datasetLocation);
 
+    // the data set file is assumed to be locked
     IHierarchicalContent asContent(File datasetDirectory);
 
 }