diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/AbstractDAO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/AbstractDAO.java
index c43ab9b8b9a0312d60f034324a865a5b9eda9292..ada85279dd80c45c51ef3f49af6f9d0dc286047d 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/AbstractDAO.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/AbstractDAO.java
@@ -368,7 +368,8 @@ public abstract class AbstractDAO extends HibernateDaoSupport
 
     protected void lockEntity(IIdHolder entityOrNull)
     {
-        if (entityOrNull != null && entityOrNull.getId() != null)
+        if (entityOrNull != null && entityOrNull.getId() != null
+                && getSession().contains(entityOrNull))
         {
             getHibernateTemplate().lock(entityOrNull, LockMode.PESSIMISTIC_WRITE);
         }
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 97653da7852442e493cfd44c9bc62a41a17d7b2a..ea5efbf290938795fe1ca167fc1ec155d6984261 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
@@ -655,6 +655,8 @@ final class DataDAO extends AbstractGenericEntityWithPropertiesDAO<DataPE> imple
         lockEntity(data.getExperiment());
         lockEntity(data.tryGetSample());
         lockEntity(data.getContainer());
+        lockEntities(data.getParents());
+        lockEntities(data.getChildren());
     }
 
     @Override
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 9579800e6c6429c36554ddbd6f7dac28cf4d064c..b897b9a6b6a1048a31e0f40605f52871129edd76 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
@@ -88,7 +88,7 @@ public class SampleDAO extends AbstractGenericEntityWithPropertiesDAO<SamplePE>
         }
         lockEntity(sample.getExperiment());
         lockEntity(sample.getContainer());
-        // lockEntities(sample.getParents());
+        lockEntities(sample.getParents());
         hibernateTemplate.saveOrUpdate(sample);
         if (doLog && operationLog.isInfoEnabled())
         {
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/SystemTestCase.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/SystemTestCase.java
index c19d3f3b1a14cac04ba7a8c6a18863cf48cf4c93..85b9c847607b9aef679e5ab67a3c1f15ce62d542 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/SystemTestCase.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/SystemTestCase.java
@@ -46,6 +46,7 @@ import ch.systemsx.cisd.openbis.generic.server.ICommonServerForInternalUse;
 import ch.systemsx.cisd.openbis.generic.server.util.TestInitializer;
 import ch.systemsx.cisd.openbis.generic.shared.IETLLIMSService;
 import ch.systemsx.cisd.openbis.generic.shared.basic.GridRowModel;
+import ch.systemsx.cisd.openbis.generic.shared.basic.IIdentifierHolder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.CodeWithRegistration;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DisplaySettings;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Grantee;
@@ -374,6 +375,18 @@ public abstract class SystemTestCase extends AbstractTransactionalTestNGSpringCo
         AssertJUnit.fail("No property " + key + " found in " + propertyCodes);
     }
 
+    protected void assertEntities(String expectedEntities,
+            List<? extends IIdentifierHolder> entities)
+    {
+        List<String> identifiers = new ArrayList<String>();
+        for (IIdentifierHolder entity : entities)
+        {
+            identifiers.add(entity.getIdentifier());
+        }
+        Collections.sort(identifiers);
+        assertEquals(expectedEntities, identifiers.toString());
+    }
+
     protected List<PropertyHistory> getMaterialPropertiesHistory(long materialID)
     {
         List<PropertyHistory> list =
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/api/v1/GeneralInformationServiceTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/api/v1/GeneralInformationServiceTest.java
index aed30e07734b0097a3932472723c8a9f3b7706e4..f5bebf62c72511e4a44d2dd3c23a530563e9b134 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/api/v1/GeneralInformationServiceTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/api/v1/GeneralInformationServiceTest.java
@@ -64,7 +64,6 @@ import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchCriteria.MatchCl
 import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchSubCriteria;
 import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SpaceWithProjectsAndRoleAssignments;
 import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.id.metaproject.MetaprojectIdentifierId;
-import ch.systemsx.cisd.openbis.generic.shared.basic.IIdentifierHolder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Metaproject;
@@ -1293,17 +1292,6 @@ public class GeneralInformationServiceTest extends SystemTestCase
         sessionToken = generalInformationService.tryToAuthenticateForAllServices("observer", "a");
     }
 
-    private void assertEntities(String expectedEntities, List<? extends IIdentifierHolder> entities)
-    {
-        List<String> identifiers = new ArrayList<String>();
-        for (IIdentifierHolder entity : entities)
-        {
-            identifiers.add(entity.getIdentifier());
-        }
-        // Collections.sort(identifiers);
-        assertEquals(expectedEntities, identifiers.toString());
-    }
-
     private interface IToStringDelegate<T>
     {
         String toString(T t);
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/perform_entity_operations/RegistrationTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/perform_entity_operations/RegistrationTest.java
index d4485af9a261a580c9792050bcad762d2175c6c4..ad568625a84a73d4b7f02d3f6f1bc2dbdf798119 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/perform_entity_operations/RegistrationTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/perform_entity_operations/RegistrationTest.java
@@ -62,6 +62,37 @@ import ch.systemsx.cisd.openbis.systemtest.SystemTestCase;
  */
 public class RegistrationTest extends SystemTestCase
 {
+    @Test
+    public void testCreateChildrenForAnExistingSampleWithBatchSize1()
+    {
+        Sample parentSample =
+                genericServer.getSampleInfo(systemSessionToken, new TechId(1)).getParent();
+        AtomicEntityOperationDetailsBuilder builder = new AtomicEntityOperationDetailsBuilder();
+        SampleType sampleType = new SampleType();
+        sampleType.setCode("CELL_PLATE");
+        parentSample.setSampleType(sampleType);
+        NewSample childSample1 = new NewSample();
+        childSample1.setIdentifier("/TEST-SPACE/PARENT_OF_TWO_CHILD_1");
+        childSample1.setSampleType(sampleType);
+        childSample1.setParents(parentSample.getIdentifier());
+        builder.sample(childSample1);
+        NewSample childSample2 = new NewSample();
+        childSample2.setIdentifier("/TEST-SPACE/PARENT_OF_TWO_CHILD_2");
+        childSample2.setSampleType(sampleType);
+        childSample2.setParents(parentSample.getIdentifier());
+        builder.sample(childSample2);
+        builder.batchSize(1);
+
+        etlService.performEntityOperations(systemSessionToken, builder.getDetails());
+
+        List<Sample> children =
+                commonServer.listSamples(systemSessionToken,
+                        ListSampleCriteria.createForParent(new TechId(parentSample)));
+
+        assertEntities("[/TEST-SPACE/PARENT_OF_TWO_CHILD_1, /TEST-SPACE/PARENT_OF_TWO_CHILD_2]",
+                children);
+    }
+
     @Test
     public void testCreateSampleWithTwoAttachments()
     {