diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ftp/resolver/TemplateBasedDataSetResourceResolver.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ftp/resolver/TemplateBasedDataSetResourceResolver.java
index d5ebe72798381412e5d3855062768222840f26aa..f86218d500fdfe1ace1d6a94cec6955c9a72bc44 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ftp/resolver/TemplateBasedDataSetResourceResolver.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ftp/resolver/TemplateBasedDataSetResourceResolver.java
@@ -193,6 +193,7 @@ public class TemplateBasedDataSetResourceResolver implements IFtpPathResolver,
         IHierarchicalContentNodeFilter fileFilter = getFileFilter(evaluationResult.dataSet);
         IHierarchicalContentProvider provider = ServiceProvider.getHierarchicalContentProvider();
         IHierarchicalContent content = provider.asContent(evaluationResult.dataSet.getCode());
+        // FIXME use content.close() - otherwise data set will be locked until timeout
         IHierarchicalContentNode contentNode = content.getNode(relativePath);
         if (fileFilter.accept(contentNode))
         {
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 cee6bfab0746b58d14c64f1fda7d94dae9d586fe..3d55302a1d96d80eab1e2503846f6c2e192c7dfa 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
@@ -67,7 +67,6 @@ public class HierarchicalContentProvider implements IHierarchicalContentProvider
 
     public IHierarchicalContent asContent(String dataSetCode)
     {
-        // this is temporary implementation - it shouldn't access openBIS after LMS-2172 is done
         ExternalData externalData = openbisService.tryGetDataSet(dataSetCode);
         if (externalData == null)
         {
@@ -84,7 +83,6 @@ public class HierarchicalContentProvider implements IHierarchicalContentProvider
 
     public IHierarchicalContent asContent(final IDatasetLocation datasetLocation)
     {
-        // this is temporary implementation - it should access DB instead of filesystem
         // IHierarchicalContent.close() should be called to unlock the dataset
         directoryProvider.getShareIdManager().lock(datasetLocation.getDataSetCode());
         File dataSetDirectory = directoryProvider.getDataSetDirectory(datasetLocation);
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 ebd106ed5f9cb936ee94a79ebec39b0180d3723b..ddee350b6a9a6cf4ae67a2c599dd1c0329d02e85 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
@@ -23,6 +23,10 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IDatasetLocation;
 
 /**
  * A provider of {@link IHierarchicalContent} for given data set.
+ * <p>
+ * <b>NOTE</b>{@link IHierarchicalContent#close()} needs to be called to release resources when
+ * working with the content is done. Otherwise data set may e.g. remain locked in its share until
+ * timeout occurs.
  * 
  * @author Piotr Buczek
  * @author Chandrasekhar Ramakrishnan
@@ -30,11 +34,25 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IDatasetLocation;
 public interface IHierarchicalContentProvider
 {
 
+    /**
+     * <b>NOTE:</b> if possible use {@link #asContent(IDatasetLocation)} which doesn't need to
+     * retrieve information from DB
+     * 
+     * @return {@link IHierarchicalContent} for the specified data set
+     */
     IHierarchicalContent asContent(String dataSetCode);
 
+    /**
+     * @return {@link IHierarchicalContent} for the specified data set
+     */
     IHierarchicalContent asContent(IDatasetLocation datasetLocation);
 
-    // NOTE: the data set file is assumed to be locked when this method is called
+    /**
+     * <b>NOTE:</b> the data set is assumed to be locked when this method is called
+     * 
+     * @param datasetDirectory the directory file of the data set
+     * @return {@link IHierarchicalContent} for the specified data set
+     */
     IHierarchicalContent asContent(File datasetDirectory);
 
 }