diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DataDAO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DataDAO.java
index 505eb787e89c8c92526c88ffd6cf4cdcd12d46fe..1a3428317608615959089000093e58951daa155d 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DataDAO.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DataDAO.java
@@ -1343,21 +1343,23 @@ final class DataDAO extends AbstractGenericEntityWithPropertiesDAO<DataPE> imple
         scheduleDynamicPropertiesEvaluation(Arrays.asList(entity));
     }
 
-    public void scheduleDynamicPropertiesEvaluation(List<DataPE> dataSets) 
+    @Override
+    protected void scheduleDynamicPropertiesEvaluation(List<DataPE> dataSets) 
     {
-        Deque<DataPE> toSchedule = new LinkedList<DataPE>(dataSets);
         List<DataPE> toUpdate = new ArrayList<DataPE>();
-        
-        //Schedule contained datasets for index update, they also have the experiment and samples ids the index at least
-        while(false == toSchedule.isEmpty()) {
-            DataPE next = toSchedule.removeFirst();
-            toUpdate.add(next);
-            toSchedule.addAll(next.getContainedDataSets());
-        }
-        
+        addAllDataSetsAndComponentsRecursively(toUpdate, dataSets);
         super.scheduleDynamicPropertiesEvaluation(toUpdate);
     }
     
+    private void addAllDataSetsAndComponentsRecursively(List<DataPE> resultDataSets, List<DataPE> dataSets)
+    {
+        for (DataPE dataSet : dataSets)
+        {
+            resultDataSets.add(dataSet);
+            addAllDataSetsAndComponentsRecursively(resultDataSets, dataSet.getContainedDataSets());
+        }
+    }
+    
     @Override
     public List<TechId> listDataSetIdsBySampleIds(final Collection<TechId> samples)
     {