diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExternalDataTable.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExternalDataTable.java
index 6102ad7d147760da7d8f5952a8a12ce092b68159..4e5d58e35a1cac9b17c074daf99d153b157cd505 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExternalDataTable.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExternalDataTable.java
@@ -25,8 +25,8 @@ import java.util.LinkedHashMap;
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 import java.util.Map.Entry;
+import java.util.Set;
 
 import org.apache.commons.lang.StringUtils;
 import org.apache.log4j.Logger;
@@ -59,6 +59,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.DatasetDescription;
 import ch.systemsx.cisd.openbis.generic.shared.dto.EntityTypePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.EntityTypePropertyTypePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.EventPE;
+import ch.systemsx.cisd.openbis.generic.shared.dto.EventPE.EntityType;
 import ch.systemsx.cisd.openbis.generic.shared.dto.EventType;
 import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.ExternalDataPE;
@@ -67,7 +68,6 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.PersonPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.ProjectPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.SamplePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.Session;
-import ch.systemsx.cisd.openbis.generic.shared.dto.EventPE.EntityType;
 import ch.systemsx.cisd.openbis.generic.shared.dto.properties.EntityKind;
 import ch.systemsx.cisd.openbis.generic.shared.translator.ExternalDataTranslator;
 import ch.systemsx.cisd.openbis.generic.shared.util.HibernateUtils;
@@ -663,9 +663,9 @@ public final class ExternalDataTable extends AbstractExternalDataBusinessObject
         assert externalData != null : "Undefined external data.";
         try
         {
+            checkMandatoryProperties();
             IExternalDataDAO externalDataDAO = getExternalDataDAO();
             externalDataDAO.updateDataSets(externalData);
-            checkMandatoryProperties();
         } catch (final DataAccessException ex)
         {
             throwException(ex, String.format("One of data sets"));
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/ExternalDataDAO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/ExternalDataDAO.java
index c6f2a64e27930a0dbf23c78c935a6989d1c151e9..ef76fd0b318f9cf10c637d2516cc20667d648730 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/ExternalDataDAO.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/ExternalDataDAO.java
@@ -454,12 +454,18 @@ final class ExternalDataDAO extends AbstractGenericEntityDAO<ExternalDataPE> imp
         {
             operationLog.info(String.format("UPDATE: %d data sets.", externalData.size()));
         }
+
+        flushWithSqlExceptionHandling(getHibernateTemplate());
+        scheduleDynamicPropertiesEvaluation(externalData);
+
+        // if session is not cleared registration of many samples slows down after each batch
+        hibernateTemplate.clear();
     }
 
-    private void scheduleDynamicPropertiesEvaluation(List<ExternalDataPE> data)
+    private void scheduleDynamicPropertiesEvaluation(List<ExternalDataPE> externalData)
     {
         scheduleDynamicPropertiesEvaluation(dynamicPropertyEvaluationScheduler,
-                ExternalDataPE.class, data);
+                ExternalDataPE.class, externalData);
     }
 
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/SampleDAO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/SampleDAO.java
index d121ea791d70292d41e0ef62d974980dc5898e46..35b83e406292df81cf0d688a1b5d748d5a8ef48a 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/SampleDAO.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/SampleDAO.java
@@ -115,7 +115,6 @@ public class SampleDAO extends AbstractGenericEntityDAO<SamplePE> implements ISa
                 new ClassValidator<SamplePE>(SamplePE.class), true);
 
         flushWithSqlExceptionHandling(hibernateTemplate);
-        scheduleDynamicPropertiesEvaluation(Arrays.asList(sample));
     }
 
     public final List<SamplePE> listSamplesByGeneratedFrom(final SamplePE sample)