diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/path/DatabaseBasedDataSetPathsInfoFeeder.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/path/DatabaseBasedDataSetPathsInfoFeeder.java
index 283f127dca1704a79706912be15419d2437b8a15..992605af10e11f83c5eb77c9829f5cbc54e2de38 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/path/DatabaseBasedDataSetPathsInfoFeeder.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/path/DatabaseBasedDataSetPathsInfoFeeder.java
@@ -62,7 +62,7 @@ public class DatabaseBasedDataSetPathsInfoFeeder implements IDataSetPathsInfoFee
         String relativePath = parentId == null ? "" : pathPrefix + fileName;
         long id =
                 dao.createDataSetFile(dataSetId, parentId, relativePath, fileName,
-                        pathInfo.getSizeInBytes(), directory);
+                        pathInfo.getSizeInBytes(), directory, pathInfo.getLastModifiedDate());
         if (relativePath.length() > 0)
         {
             relativePath += '/';
diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/path/IPathsInfoDAO.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/path/IPathsInfoDAO.java
index abc6cf3b74e1423f116a99fa5aba09d583e63f58..99d5157a78fdb868d5161394837304a5eda5ae20 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/path/IPathsInfoDAO.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/path/IPathsInfoDAO.java
@@ -16,6 +16,8 @@
 
 package ch.systemsx.cisd.etlserver.path;
 
+import java.util.Date;
+
 import net.lemnik.eodsql.Select;
 import net.lemnik.eodsql.TransactionQuery;
 
@@ -33,8 +35,8 @@ public interface IPathsInfoDAO extends TransactionQuery
     public long createDataSet(String code, String location);
     
     @Select("insert into data_set_files (dase_id, parent_id, relative_path, file_name, "
-            + "size_in_bytes, is_directory) values (?{1}, ?{2}, ?{3}, ?{4}, ?{5}, ?{6}) returning id")
+            + "size_in_bytes, is_directory, last_modified) values (?{1}, ?{2}, ?{3}, ?{4}, ?{5}, ?{6}, ?{7}) returning id")
     public long createDataSetFile(long dataSetId, Long parentId, String relativePath,
-            String fileName, long sizeInBytes, boolean directory);
+            String fileName, long sizeInBytes, boolean directory, Date lastModifiedDate);
     
 }
diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/path/PathInfo.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/path/PathInfo.java
index ae6426b72af4372053531403cdde16554f905445..6d2f765c08d46c5f9ab672f3c78cf5b44b40ae07 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/path/PathInfo.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/path/PathInfo.java
@@ -19,6 +19,7 @@ package ch.systemsx.cisd.etlserver.path;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Comparator;
+import java.util.Date;
 import java.util.List;
 
 import ch.systemsx.cisd.common.io.IHierarchicalContentNode;
@@ -41,6 +42,7 @@ final class PathInfo
         }
         PathInfo pathInfo = new PathInfo();
         pathInfo.fileName = node.getName();
+        pathInfo.lastModifiedDate = new Date(node.getLastModified());
         pathInfo.directory = node.isDirectory();
         if (pathInfo.directory)
         {
@@ -90,6 +92,8 @@ final class PathInfo
     private boolean directory;
     
     private List<PathInfo> children;
+    
+    private Date lastModifiedDate;
 
     public String getFileName()
     {
@@ -111,6 +115,11 @@ final class PathInfo
         return directory;
     }
 
+    public Date getLastModifiedDate()
+    {
+        return lastModifiedDate;
+    }
+
     public List<PathInfo> getChildren()
     {
         return children == null ? NO_CHILDREN : Collections.unmodifiableList(children);
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DatabaseBasedDataSetPathInfoProvider.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DatabaseBasedDataSetPathInfoProvider.java
index 244194be21c1f7a612c35ac0a6e7b54f4df606a6..213ae21b3ca9b37bebedc177cd3556b195855608 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DatabaseBasedDataSetPathInfoProvider.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DatabaseBasedDataSetPathInfoProvider.java
@@ -17,6 +17,7 @@
 package ch.systemsx.cisd.openbis.dss.generic.server;
 
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -53,13 +54,15 @@ public class DatabaseBasedDataSetPathInfoProvider implements IDataSetPathInfoPro
         public long size_in_bytes;
 
         public boolean is_directory;
+        
+        public Date last_modified;
     }
 
     @Private
     static interface IPathInfoDAO extends BaseQuery
     {
         static String SELECT_DATA_SET_FILES =
-                "SELECT id, parent_id, relative_path, file_name, size_in_bytes, is_directory FROM data_set_files ";
+                "SELECT id, parent_id, relative_path, file_name, size_in_bytes, is_directory, last_modified FROM data_set_files ";
 
         @Select("SELECT id FROM data_sets WHERE code = ?{1}")
         public Long tryToGetDataSetId(String dataSetCode);
@@ -245,6 +248,7 @@ public class DatabaseBasedDataSetPathInfoProvider implements IDataSetPathInfoPro
             result.setRelativePath(record.relative_path);
             result.setDirectory(record.is_directory);
             result.setSizeInBytes(record.size_in_bytes);
+            result.setLastModified(record.last_modified);
             return result;
         }
 
@@ -281,6 +285,7 @@ public class DatabaseBasedDataSetPathInfoProvider implements IDataSetPathInfoPro
                     dataSetPathInfo.setRelativePath(dataSetFileRecord.relative_path);
                     dataSetPathInfo.setDirectory(dataSetFileRecord.is_directory);
                     dataSetPathInfo.setSizeInBytes(dataSetFileRecord.size_in_bytes);
+                    dataSetPathInfo.setLastModified(dataSetFileRecord.last_modified);
                     idToInfoMap.put(dataSetFileRecord.id, dataSetPathInfo);
                     Long parentId = dataSetFileRecord.parent_id;
                     if (parentId == null)
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/PathInfoDatabaseVersionHolder.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/PathInfoDatabaseVersionHolder.java
index e0070d1fe65252b702e0f46aeddf93566f96838f..3ffc15c1bf4f4d3a2f3b6ef0300ece5e5451e6b2 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/PathInfoDatabaseVersionHolder.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/PathInfoDatabaseVersionHolder.java
@@ -25,7 +25,7 @@ public class PathInfoDatabaseVersionHolder implements IDatabaseVersionHolder
 {
     public String getDatabaseVersion()
     {
-        return "001"; // S104
+        return "002"; // S109
     }
 
 }
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 5705ef4d4e147d82c639964674a7e94eed817393..7cca3c57e8f6c195d77868c119624b6577b154bb 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
@@ -21,6 +21,7 @@ import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.InputStream;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 
 import ch.systemsx.cisd.base.exceptions.CheckedExceptionTunnel;
@@ -209,7 +210,8 @@ class PathInfoProviderBasedHierarchicalContent implements IHierarchicalContent
 
         public long getLastModified()
         {
-            return System.currentTimeMillis();
+            Date lastModified = pathInfo.getLastModified();
+            return lastModified == null ? System.currentTimeMillis() : lastModified.getTime();
         }
 
         @Override
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/dto/DataSetPathInfo.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/dto/DataSetPathInfo.java
index 3544dc7fea2793c0bf0e3df98d8236b0d37efe52..3d44c3c3fcfc127b83a5655a6f57066889e0abc4 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/dto/DataSetPathInfo.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/dto/DataSetPathInfo.java
@@ -17,6 +17,7 @@
 package ch.systemsx.cisd.openbis.dss.generic.shared.dto;
 
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -31,6 +32,8 @@ public class DataSetPathInfo
     private String relativePath;
 
     private boolean directory;
+    
+    private Date lastModified;
 
     private long sizeInBytes;
 
@@ -78,6 +81,16 @@ public class DataSetPathInfo
         this.sizeInBytes = sizeInBytes;
     }
 
+    public Date getLastModified()
+    {
+        return lastModified;
+    }
+
+    public void setLastModified(Date lastModified)
+    {
+        this.lastModified = lastModified;
+    }
+
     @Deprecated
     public DataSetPathInfo getParent()
     {
diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/path/DatabaseBasedDataSetPathsInfoFeederTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/path/DatabaseBasedDataSetPathsInfoFeederTest.java
index 5aabdcec9947a20860532b91630075d5b48f2376..d7f993b18ad7af7f451dde95936825799436d003 100644
--- a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/path/DatabaseBasedDataSetPathsInfoFeederTest.java
+++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/path/DatabaseBasedDataSetPathsInfoFeederTest.java
@@ -18,6 +18,7 @@ package ch.systemsx.cisd.etlserver.path;
 
 import java.io.File;
 import java.lang.reflect.Method;
+import java.util.Date;
 
 import org.jmock.Expectations;
 import org.jmock.Mockery;
@@ -79,22 +80,22 @@ public class DatabaseBasedDataSetPathsInfoFeederTest extends AbstractFileSystemT
                     one(dao).createDataSet("ds-1", "a/b/c/");
                     will(returnValue(42L));
                     
-                    one(dao).createDataSetFile(42L, null, "", ROOT_PATH, 38, true);
+                    one(dao).createDataSetFile(42L, null, "", ROOT_PATH, 38, true, new Date(1));
                     will(returnValue(100L));
                     
-                    one(dao).createDataSetFile(42L, 100L, "dir", "dir", 26, true);
+                    one(dao).createDataSetFile(42L, 100L, "dir", "dir", 26, true, new Date(2));
                     will(returnValue(101L));
                     
-                    one(dao).createDataSetFile(42L, 101L, "dir/hello.txt", "hello.txt", 11, false);
+                    one(dao).createDataSetFile(42L, 101L, "dir/hello.txt", "hello.txt", 11, false, new Date(3));
                     will(returnValue(102L));
                     
-                    one(dao).createDataSetFile(42L, 101L, "dir/read.me", "read.me", 15, false);
+                    one(dao).createDataSetFile(42L, 101L, "dir/read.me", "read.me", 15, false, new Date(4));
                     will(returnValue(103L));
                     
-                    one(dao).createDataSetFile(42L, 101L, "dir/dir", "dir", 0, true);
+                    one(dao).createDataSetFile(42L, 101L, "dir/dir", "dir", 0, true, new Date(5));
                     will(returnValue(104L));
                     
-                    one(dao).createDataSetFile(42L, 100L, "read.me", "read.me", 12, false);
+                    one(dao).createDataSetFile(42L, 100L, "read.me", "read.me", 12, false, new Date(6));
                     will(returnValue(105L));
                 }
             });
diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/path/PathInfoDatabaseFeedingTaskTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/path/PathInfoDatabaseFeedingTaskTest.java
index f86a7b2be2bf46ad0f173bbc6b2a84b791749760..c4ead1dae4ade69030af5e7985edfac59d285512 100644
--- a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/path/PathInfoDatabaseFeedingTaskTest.java
+++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/path/PathInfoDatabaseFeedingTaskTest.java
@@ -21,6 +21,7 @@ import static ch.systemsx.cisd.common.utilities.IDelegatedAction.DO_NOTHING;
 import java.io.File;
 import java.lang.reflect.Method;
 import java.util.Arrays;
+import java.util.Date;
 
 import org.jmock.Expectations;
 import org.jmock.Mockery;
@@ -239,7 +240,7 @@ public class PathInfoDatabaseFeedingTaskTest extends AbstractFileSystemTestCase
                     one(node).isDirectory();
                     will(returnValue(false));
 
-                    one(dao).createDataSetFile(101L, null, "", "ds1-root", 12345L, false);
+                    one(dao).createDataSetFile(101L, null, "", "ds1-root", 12345L, false, new Date(42));
                     will(returnValue(102L));
 
                     one(dao).commit();
diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/datastoreserver/systemtests/PathInfoDatabaseTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/datastoreserver/systemtests/PathInfoDatabaseTest.java
index 48994b4ae34e533f634887cd187fb098013c0015..f02dd0138849f1590966b2a3cdff96167a30842a 100644
--- a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/datastoreserver/systemtests/PathInfoDatabaseTest.java
+++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/datastoreserver/systemtests/PathInfoDatabaseTest.java
@@ -22,6 +22,7 @@ import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.Date;
 import java.util.List;
 import java.util.regex.Pattern;
 
@@ -129,7 +130,7 @@ public class PathInfoDatabaseTest extends SystemTestCase
         try
         {
             long id = dao.createDataSet("ds-1", "a/b/c/");
-            long parentId = dao.createDataSetFile(id, null, "", "ds-1", 0, true);
+            long parentId = dao.createDataSetFile(id, null, "", "ds-1", 0, true, new Date(4711));
             numberOfEntries += feedDataBase(dao, id, parentId, 3, "");
             dao.commit();
         } catch (Exception ex)
@@ -151,7 +152,7 @@ public class PathInfoDatabaseTest extends SystemTestCase
             String fileName = "file-" + i + "-" + (i * i) + (directory ? "" : "-xyz.xml");
             long id =
                     dao.createDataSetFile(dataSetId, parentId, prefix + fileName, fileName, level
-                            * 100 + i, directory);
+                            * 100 + i, directory, new Date(4711));
             numberOfEntries++;
             if (directory)
             {