diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/SampleUpdates.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/SampleUpdates.java
index de8b59062b2a7e942c4bbdad16be10a65c715cf1..eb92858099f275533f72dbfa5498613f7a1a8717 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/SampleUpdates.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/SampleUpdates.java
@@ -56,10 +56,11 @@ public class SampleUpdates extends BasicSampleUpdates
 
     public SampleUpdates(String sessionKey, TechId sampleId, List<IEntityProperty> properties,
             List<NewAttachment> attachments, ExperimentIdentifier experimentIdentifierOrNull,
-            Date version, String sampleIdentifier, String parentIdentifierOrNull,
-            String containerIdentifierOrNull)
+            Date version, String sampleIdentifier, String containerIdentifierOrNull,
+            String parentIdentifierOrNull, String[] parents)
     {
-        super(sampleId, properties, version, parentIdentifierOrNull, containerIdentifierOrNull);
+        super(sampleId, properties, version, containerIdentifierOrNull, parentIdentifierOrNull,
+                parents);
         this.sessionKey = sessionKey;
         this.attachments = attachments;
         this.experimentIdentifierOrNull = experimentIdentifierOrNull;
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ETLService.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ETLService.java
index e88a045cd5544f6bc86d35a53e10193e595e3e9a..3ca33f9828119d07403f060ed90f296abbc00d25 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ETLService.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ETLService.java
@@ -601,7 +601,8 @@ public class ETLService extends AbstractCommonServer<IETLService> implements IET
     {
         Session session = getSession(sessionToken);
         IExternalDataDAO externalDataDAO = getDAOFactory().getExternalDataDAO();
-        ExternalDataPE dataSet = externalDataDAO.tryToFindFullDataSetByCode(dataSetCode, false, false);
+        ExternalDataPE dataSet =
+                externalDataDAO.tryToFindFullDataSetByCode(dataSetCode, false, false);
         if (dataSet != null)
         {
             DataSetTypePE dataSetType = dataSet.getDataSetType();
@@ -768,8 +769,8 @@ public class ETLService extends AbstractCommonServer<IETLService> implements IET
             String groupPrefix =
                     container.getGroup() != null ? ("/" + container.getGroup().getCode() + "/")
                             : "/";
-            newSamples.add(new NewSample(groupPrefix + code, SampleTypeTranslator.translate(
-                    sampleTypePE, null), null, container.getIdentifier()));
+            newSamples.add(NewSample.createWithParent(groupPrefix + code, SampleTypeTranslator
+                    .translate(sampleTypePE, null), null, container.getIdentifier()));
         }
         getSampleTypeSlaveServerPlugin(sampleTypePE).registerSamples(session, newSamples);
     }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractSampleBusinessObject.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractSampleBusinessObject.java
index f7f40c9d9d7a40638a5f2cc6d720e2eab2b8acac..d2797f354d9bf50680bbd1dc76d34ad72499b4c2 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractSampleBusinessObject.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractSampleBusinessObject.java
@@ -16,6 +16,7 @@
 
 package ch.systemsx.cisd.openbis.generic.server.business.bo;
 
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.List;
@@ -45,6 +46,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.SampleTypePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.Session;
 import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ExperimentIdentifier;
 import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ExperimentIdentifierFactory;
+import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.IdentifierHelper;
 import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ProjectIdentifier;
 import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifier;
 import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifierFactory;
@@ -130,7 +132,23 @@ abstract class AbstractSampleBusinessObject extends AbstractSampleIdentifierBusi
         samplePE.setDatabaseInstance(sampleOwner.tryGetDatabaseInstance());
         defineSampleProperties(samplePE, newSample.getProperties());
         String parentIdentifier = newSample.getParentIdentifier();
-        setGeneratedFrom(sampleIdentifier, samplePE, parentIdentifier);
+        if (parentIdentifier != null)
+        {
+            setGeneratedFrom(sampleIdentifier, samplePE, parentIdentifier);
+        } else if (newSample.getParents() != null)
+        {
+            final String[] parents = newSample.getParents();
+            final List<SampleIdentifier> parentIdentifiers =
+                    IdentifierHelper.extractSampleIdentifiers(parents);
+            if (sampleIdentifier.isSpaceLevel())
+            {
+                final String spaceCode = sampleIdentifier.getSpaceLevel().getSpaceCode();
+                for (SampleIdentifier si : parentIdentifiers)
+                {
+                    IdentifierHelper.fillAndCheckGroup(si, spaceCode);
+                }
+            }
+        }
         String containerIdentifier = newSample.getContainerIdentifier();
         setContainer(sampleIdentifier, samplePE, containerIdentifier);
         samplePE.setPermId(getPermIdDAO().createPermId());
@@ -214,14 +232,19 @@ abstract class AbstractSampleBusinessObject extends AbstractSampleIdentifierBusi
 
     private void removeParents(SamplePE child)
     {
+        List<SampleRelationshipPE> parents = new ArrayList<SampleRelationshipPE>();
         for (SampleRelationshipPE r : child.getParentRelationships())
         {
             if (r.getRelationship().getCode().equals(
                     BasicConstant.PARENT_CHILD_INTERNAL_RELATIONSHIP))
             {
-                child.removeParentRelationship(r);
+                parents.add(r);
             }
         }
+        for (SampleRelationshipPE r : parents)
+        {
+            child.removeParentRelationship(r);
+        }
     }
 
     // ineffective for adding a collection of parents
@@ -244,7 +267,7 @@ abstract class AbstractSampleBusinessObject extends AbstractSampleIdentifierBusi
             RelationshipTypePE relationshipType)
     {
         final SampleRelationshipPE relationship =
-                new SampleRelationshipPE(child, parent, relationshipType);
+                new SampleRelationshipPE(parent, child, relationshipType);
         child.addParentRelationship(relationship);
     }
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/BasicSampleUpdates.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/BasicSampleUpdates.java
index 84552fab3aab068d739574ee6eaef2d47d94ad1d..4fff987b9ab3e12a3b55685d334ddabd5669a097 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/BasicSampleUpdates.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/BasicSampleUpdates.java
@@ -76,13 +76,14 @@ public class BasicSampleUpdates implements IsSerializable, Serializable
     }
 
     public BasicSampleUpdates(TechId sampleId, List<IEntityProperty> properties, Date version,
-            String parentIdentifierOrNull, String containerIdentifierOrNull)
+            String containerIdentifierOrNull, String parentIdentifierOrNull, String[] parents)
     {
         this.sampleIdOrNull = sampleId;
         this.properties = properties;
         this.version = version;
-        this.parentIdentifierOrNull = parentIdentifierOrNull;
         this.containerIdentifierOrNull = containerIdentifierOrNull;
+        this.parentIdentifierOrNull = parentIdentifierOrNull;
+        this.modifiedParentCodesOrNull = parents;
     }
 
     public TechId getSampleIdOrNull()
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/NewSample.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/NewSample.java
index 12d7cabf22c069492fbeb02d11e7e6fc30cddfd9..4fd95b58100507e36fdfa890e2d8b26ceb6fd621 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/NewSample.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/NewSample.java
@@ -46,8 +46,14 @@ public class NewSample extends Identifier<NewSample> implements Comparable<NewSa
     /**
      * The parent identifier.
      */
+    // TODO 2010-08-09, Piotr Buczek: remove
     private String parentIdentifier;
 
+    // Set of parent sample codes or identifiers. It will be assumed that
+    // all the samples belong to the same group as the child sample.
+    // If equals to null then parentIdentifier should be used.
+    private String[] parentsOrNull;
+
     /**
      * The container identifier.
      */
@@ -66,20 +72,36 @@ public class NewSample extends Identifier<NewSample> implements Comparable<NewSa
     {
     }
 
-    public NewSample(final String identifier, final SampleType sampleType,
-            final String parentIdentifier, final String containerIdentifier)
+    private NewSample(final String identifier, final SampleType sampleType,
+            final String containerIdentifier)
     {
         setIdentifier(identifier);
         setSampleType(sampleType);
-        setParentIdentifier(parentIdentifier);
         setContainerIdentifier(containerIdentifier);
     }
 
-    public NewSample(final String identifier, SampleType sampleType, String parentIdentifier,
-            String containerIdentifier, String experimentIdentifier, IEntityProperty[] properties,
+    public static NewSample createWithParent(final String identifier, final SampleType sampleType,
+            final String containerIdentifier, final String parentIdentifier)
+    {
+        NewSample result = new NewSample(identifier, sampleType, containerIdentifier);
+        result.setParentIdentifier(parentIdentifier);
+        return result;
+    }
+
+    public static NewSample createWithParents(final String identifier, final SampleType sampleType,
+            final String containerIdentifier, final String[] parents)
+    {
+        NewSample result = new NewSample(identifier, sampleType, containerIdentifier);
+        result.setParents(parents);
+        return result;
+    }
+
+    public NewSample(final String identifier, SampleType sampleType, String containerIdentifier,
+            String parentIdentifier, String experimentIdentifier, IEntityProperty[] properties,
             List<NewAttachment> attachments)
     {
-        this(identifier, sampleType, parentIdentifier, containerIdentifier);
+        this(identifier, sampleType, containerIdentifier);
+        this.parentIdentifier = parentIdentifier;
         this.experimentIdentifier = experimentIdentifier;
         this.properties = properties;
         this.attachments = attachments;
@@ -105,6 +127,16 @@ public class NewSample extends Identifier<NewSample> implements Comparable<NewSa
         this.sampleType = sampleType;
     }
 
+    public String[] getParents()
+    {
+        return parentsOrNull;
+    }
+
+    public void setParents(String[] parents)
+    {
+        this.parentsOrNull = parents;
+    }
+
     public final String getParentIdentifier()
     {
         return parentIdentifier;
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/UpdatedSample.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/UpdatedSample.java
index 7a2686fda1ce1f71dc46e2c07754c4990683660c..e1cfb3838d27db485e01bbab7eba5b4bd3235215 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/UpdatedSample.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/UpdatedSample.java
@@ -39,10 +39,9 @@ public final class UpdatedSample extends NewSample
 
     public UpdatedSample(NewSample newSample, SampleBatchUpdateDetails batchUpdateDetails)
     {
-        super(newSample.getIdentifier(), newSample.getSampleType(),
-                newSample.getParentIdentifier(), newSample.getContainerIdentifier(), newSample
-                        .getExperimentIdentifier(), newSample.getProperties(), newSample
-                        .getAttachments());
+        super(newSample.getIdentifier(), newSample.getSampleType(), newSample
+                .getContainerIdentifier(), newSample.getParentIdentifier(), newSample
+                .getExperimentIdentifier(), newSample.getProperties(), newSample.getAttachments());
         this.batchUpdateDetails = batchUpdateDetails;
     }
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/SampleBatchUpdatesDTO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/SampleBatchUpdatesDTO.java
index 33e78a9789801fa33cb812865f7abe36251ba0ac..f366c194ba2a46aaa6ba2a454392a18ac2bc6277 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/SampleBatchUpdatesDTO.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/SampleBatchUpdatesDTO.java
@@ -41,7 +41,7 @@ public class SampleBatchUpdatesDTO extends SampleUpdatesDTO
             String containerIdentifierOrNull, SampleBatchUpdateDetails details)
     {
         super(null, properties, experimentIdentifierOrNull, null, null, sampleIdentifier,
-                parentIdentifierOrNull, containerIdentifierOrNull);
+                containerIdentifierOrNull, parentIdentifierOrNull, null);
         this.oldSampleIdentifierOrNull = oldSampleIdentifier;
         this.details = details;
     }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/SampleUpdatesDTO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/SampleUpdatesDTO.java
index 0a82f0e2d99019712e39cdb10be5d8d37a6c149c..1c0d740fe4bad17db5a71f7593a09c1d96781734 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/SampleUpdatesDTO.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/SampleUpdatesDTO.java
@@ -43,10 +43,11 @@ public class SampleUpdatesDTO extends BasicSampleUpdates
 
     public SampleUpdatesDTO(TechId sampleId, List<IEntityProperty> properties,
             ExperimentIdentifier experimentIdentifierOrNull, Collection<NewAttachment> attachments,
-            Date version, SampleIdentifier sampleIdentifier, String parentIdentifierOrNull,
-            String containerIdentifierOrNull)
+            Date version, SampleIdentifier sampleIdentifier, String containerIdentifierOrNull,
+            String parentIdentifierOrNull, String[] parentsOrNull)
     {
-        super(sampleId, properties, version, parentIdentifierOrNull, containerIdentifierOrNull);
+        super(sampleId, properties, version, containerIdentifierOrNull, parentIdentifierOrNull,
+                parentsOrNull);
         this.experimentIdentifierOrNull = experimentIdentifierOrNull;
         this.attachments = attachments;
         this.sampleIdentifier = sampleIdentifier;
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/AbstractGenericSampleRegisterEditForm.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/AbstractGenericSampleRegisterEditForm.java
index 3a1504a4ad5a68de1ef4a4a69c137d58a391614d..e7ab575cc8eb88862a6d4b0a1e70b7bc3d678aa2 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/AbstractGenericSampleRegisterEditForm.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/AbstractGenericSampleRegisterEditForm.java
@@ -270,7 +270,7 @@ abstract public class AbstractGenericSampleRegisterEditForm extends
         return sampleType.getCode();
     }
 
-    protected String[] getSamples()
+    protected String[] getParents()
     {
         return parentsArea.tryGetSampleCodes();
     }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleEditForm.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleEditForm.java
index dc62f5740f3649dd426ff70aaf80d0e9044fc62a..11cf3cf31431d3f856f3db147eac6d988aeda626 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleEditForm.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleEditForm.java
@@ -64,13 +64,15 @@ public final class GenericSampleEditForm extends AbstractGenericSampleRegisterEd
     {
         final List<IEntityProperty> properties = extractProperties();
         final List<NewAttachment> attachments = attachmentsManager.extractAttachments();
-        ExperimentIdentifier experimentIdent =
+        final ExperimentIdentifier experimentIdent =
                 experimentField != null ? experimentField.tryToGetValue() : null;
+        final String containerOrNull = StringUtils.trimToNull(container.getValue());
+        final String parentOrNull = StringUtils.trimToNull(parent.getValue());
+        final String[] parents = getParents();
         viewContext.getService().updateSample(
                 new SampleUpdates(attachmentsSessionKey, techIdOrNull, properties, attachments,
                         experimentIdent, originalSample.getModificationDate(),
-                        createSampleIdentifier(), StringUtils.trimToNull(parent.getValue()),
-                        StringUtils.trimToNull(container.getValue())),
+                        createSampleIdentifier(), containerOrNull, parentOrNull, parents),
                 new UpdateSampleCallback(viewContext));
     }
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleRegistrationForm.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleRegistrationForm.java
index 97d9f97694eecf48e98f83accca46edc269bdca0..29549e423d944456a07b6a37921ef9bc9579ca90 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleRegistrationForm.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleRegistrationForm.java
@@ -97,9 +97,22 @@ public final class GenericSampleRegistrationForm extends AbstractGenericSampleRe
                 (experimentField != null && experimentField.tryToGetValue() != null) ? experimentField
                         .tryToGetValue().getIdentifier()
                         : null;
-        final NewSample newSample =
-                new NewSample(createSampleIdentifier(), sampleType, StringUtils.trimToNull(parent
-                        .getValue()), StringUtils.trimToNull(container.getValue()));
+
+        final String containerOrNull = StringUtils.trimToNull(container.getValue());
+        final String parentOrNull = StringUtils.trimToNull(parent.getValue());
+        final NewSample newSample;
+        if (parentOrNull == null)
+        {
+            final String[] parents = getParents();
+            newSample =
+                    NewSample.createWithParents(createSampleIdentifier(), sampleType,
+                            containerOrNull, parents);
+        } else
+        {
+            newSample =
+                    NewSample.createWithParent(createSampleIdentifier(), sampleType,
+                            containerOrNull, parentOrNull);
+        }
         final List<IEntityProperty> properties = extractProperties();
         newSample.setProperties(properties.toArray(IEntityProperty.EMPTY_ARRAY));
         newSample.setAttachments(attachmentsManager.extractAttachments());
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/server/GenericClientService.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/server/GenericClientService.java
index 7ccdaa4edc324044bb06e776e2e1f004c47533a3..5ac80ef2c05810ad2d2f33ea2b63583d600cc537 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/server/GenericClientService.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/server/GenericClientService.java
@@ -350,8 +350,9 @@ public class GenericClientService extends AbstractClientService implements IGene
                                     .getSampleIdOrNull(), updates.getProperties(),
                                     convExperimentIdentifierOrNull, attachments, updates
                                             .getVersion(), sampleOwner, updates
+                                            .getContainerIdentifierOrNull(), updates
                                             .getParentIdentifierOrNull(), updates
-                                            .getContainerIdentifierOrNull()));
+                                            .getModifiedParentCodesOrNull()));
                     result.copyFrom(updateResult);
                 }
             }.process(updates.getSessionKey(), getHttpSession(), updates.getAttachments());
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleBOTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleBOTest.java
index 5590b9218f5262c9043684107cfedf2e9743619d..9561416b7bfae8061a6715b131cf2f349a8b8245 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleBOTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleBOTest.java
@@ -409,7 +409,7 @@ public final class SampleBOTest extends AbstractBOTest
             });
         createSampleBO().update(
                 new SampleUpdatesDTO(SAMPLE_TECH_ID, null, experimentIdentifier, Collections
-                        .<NewAttachment> emptyList(), now, null, null, null));
+                        .<NewAttachment> emptyList(), now, null, null, null, null));
 
         assertEquals(experimentToAttach, sample.getExperiment());
         context.assertIsSatisfied();
@@ -445,7 +445,7 @@ public final class SampleBOTest extends AbstractBOTest
         createSampleBO().update(
                 new SampleUpdatesDTO(SAMPLE_TECH_ID, null, null, Collections
                         .<NewAttachment> emptyList(), now, SampleIdentifierFactory
-                        .parse(newSampleIdentifierWithoutDb), null, null));
+                        .parse(newSampleIdentifierWithoutDb), null, null, null));
         String newSampleIdentWithDb =
                 EXAMPLE_DATABASE_INSTANCE.getCode() + ":" + newSampleIdentifierWithoutDb;
         assertEquals(newSampleIdentWithDb, sample.getSampleIdentifier().toString());
@@ -505,7 +505,7 @@ public final class SampleBOTest extends AbstractBOTest
         assertNull(sample.getGeneratedFrom());
         createSampleBO().update(
                 new SampleUpdatesDTO(SAMPLE_TECH_ID, null, null, Collections
-                        .<NewAttachment> emptyList(), now, null, parent.getSampleIdentifier()
+                        .<NewAttachment> emptyList(), now, null, null, parent.getSampleIdentifier()
                         .toString(), null));
         SamplePE newParent = sample.getGeneratedFrom();
         assertNotNull(newParent);
@@ -557,8 +557,8 @@ public final class SampleBOTest extends AbstractBOTest
         assertNull(sample.getContainer());
         createSampleBO().update(
                 new SampleUpdatesDTO(SAMPLE_TECH_ID, null, null, Collections
-                        .<NewAttachment> emptyList(), now, null, null, container
-                        .getSampleIdentifier().toString()));
+                        .<NewAttachment> emptyList(), now, null, container.getSampleIdentifier()
+                        .toString(), null, null));
         assertNotNull(sample.getContainer());
         assertEquals(container, sample.getContainer());
         context.assertIsSatisfied();
@@ -611,8 +611,8 @@ public final class SampleBOTest extends AbstractBOTest
         assertNull(sample.getContainer());
         SampleBO bo = createSampleBO();
         bo.update(new SampleUpdatesDTO(SAMPLE_TECH_ID, null, null, Collections
-                .<NewAttachment> emptyList(), now, null, null, container.getSampleIdentifier()
-                .toString()));
+                .<NewAttachment> emptyList(), now, null,
+                container.getSampleIdentifier().toString(), null, null));
         bo.save();
         context.assertIsSatisfied();
     }
@@ -643,7 +643,7 @@ public final class SampleBOTest extends AbstractBOTest
         {
             createSampleBO().update(
                     new SampleUpdatesDTO(SAMPLE_TECH_ID, null, null, Collections
-                            .<NewAttachment> emptyList(), now, null, null, null));
+                            .<NewAttachment> emptyList(), now, null, null, null, null));
         } catch (UserFailureException ex)
         {
             exceptionThrown = true;
@@ -671,7 +671,7 @@ public final class SampleBOTest extends AbstractBOTest
         {
             SampleUpdatesDTO updates =
                     new SampleUpdatesDTO(SAMPLE_TECH_ID, null, null, Collections
-                            .<NewAttachment> emptyList(), now, null, null, null);
+                            .<NewAttachment> emptyList(), now, null, null, null, null);
             createSampleBO().update(updates);
         } catch (UserFailureException e)
         {
@@ -993,6 +993,6 @@ public final class SampleBOTest extends AbstractBOTest
         createSampleBO().update(
                 new SampleUpdatesDTO(sampleId, null, experimentIdentifier, Collections
                         .<NewAttachment> emptyList(), sample.getModificationDate(), null, null,
-                        null));
+                        null, null));
     }
 }
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/authorization/predicate/NewSamplePredicateTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/authorization/predicate/NewSamplePredicateTest.java
index eca0a008ca2d99e4462dc2d9e6a2fd6f35b07876..808855c9bf11a1288c0b4cd8a3027125be2ab449 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/authorization/predicate/NewSamplePredicateTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/authorization/predicate/NewSamplePredicateTest.java
@@ -43,7 +43,8 @@ public class NewSamplePredicateTest extends AuthorizationTestCase
         SampleIdentifier sampleIdentifier =
                 new SampleIdentifier(new DatabaseInstanceIdentifier(ANOTHER_INSTANCE_CODE), "s1");
         NewSample sample =
-                new NewSample(sampleIdentifier.toString(), sampleType, "parent", "container");
+                NewSample.createWithParent(sampleIdentifier.toString(), sampleType, "parent",
+                        "container");
         prepareProvider(ANOTHER_INSTANCE_CODE, createAnotherDatabaseInstance(), createGroups());
         predicate.init(provider);
 
@@ -61,7 +62,8 @@ public class NewSamplePredicateTest extends AuthorizationTestCase
         SampleIdentifier sampleIdentifier =
                 new SampleIdentifier(new DatabaseInstanceIdentifier(INSTANCE_CODE), "s1");
         NewSample sample =
-                new NewSample(sampleIdentifier.toString(), sampleType, "parent", "container");
+                NewSample.createWithParent(sampleIdentifier.toString(), sampleType, "parent",
+                        "container");
         prepareProvider(INSTANCE_CODE, createDatabaseInstance(), createGroups());
         predicate.init(provider);
 
@@ -81,7 +83,8 @@ public class NewSamplePredicateTest extends AuthorizationTestCase
         SampleIdentifier sampleIdentifier =
                 new SampleIdentifier(new GroupIdentifier(INSTANCE_CODE, SPACE_CODE), "s1");
         NewSample sample =
-                new NewSample(sampleIdentifier.toString(), sampleType, "parent", "container");
+                NewSample.createWithParent(sampleIdentifier.toString(), sampleType, "parent",
+                        "container");
         prepareProvider(INSTANCE_CODE, createDatabaseInstance(), createGroups());
         predicate.init(provider);
 
@@ -99,7 +102,8 @@ public class NewSamplePredicateTest extends AuthorizationTestCase
         GroupIdentifier groupIdentifier = new GroupIdentifier(INSTANCE_CODE, ANOTHER_GROUP_CODE);
         SampleIdentifier sampleIdentifier = new SampleIdentifier(groupIdentifier, "s1");
         NewSample sample =
-                new NewSample(sampleIdentifier.toString(), sampleType, "parent", "container");
+                NewSample.createWithParent(sampleIdentifier.toString(), sampleType, "parent",
+                        "container");
         List<GroupPE> groups = Arrays.asList(createGroup(groupIdentifier));
         prepareProvider(INSTANCE_CODE, createDatabaseInstance(), groups);
         predicate.init(provider);
@@ -107,7 +111,8 @@ public class NewSamplePredicateTest extends AuthorizationTestCase
         Status status = predicate.evaluate(createPerson(), createRoles(false), sample);
 
         assertEquals(true, status.isError());
-        assertEquals("User 'megapixel' does not have enough privileges.", status.tryGetErrorMessage());
+        assertEquals("User 'megapixel' does not have enough privileges.", status
+                .tryGetErrorMessage());
         context.assertIsSatisfied();
     }
 }
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/authorization/predicate/NewSamplesWithTypePredicateTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/authorization/predicate/NewSamplesWithTypePredicateTest.java
index 18d60a6fb3b58ccbc8960a3c56fca8ddd67e6bc1..55c47a9d3b780de1767fa4b386c90c0b619ddc98 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/authorization/predicate/NewSamplesWithTypePredicateTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/authorization/predicate/NewSamplesWithTypePredicateTest.java
@@ -88,8 +88,9 @@ public class NewSamplesWithTypePredicateTest extends AuthorizationTestCase
         predicate.init(provider);
         Status status =
                 predicate.evaluate(person, roles, new NewSamplesWithTypes(new SampleType(), Arrays
-                        .asList(new NewSample(sampleIdentifier1.toString(), null, null, null),
-                                new NewSample(sampleIdentifier2.toString(), null, null, null))));
+                        .asList(NewSample.createWithParent(sampleIdentifier1.toString(), null,
+                                null, null), NewSample.createWithParent(sampleIdentifier2
+                                .toString(), null, null, null))));
         assertEquals(false, status.isError());
         context.assertIsSatisfied();
     }
@@ -116,8 +117,9 @@ public class NewSamplesWithTypePredicateTest extends AuthorizationTestCase
         predicate.init(provider);
         Status status =
                 predicate.evaluate(person, roles, new NewSamplesWithTypes(new SampleType(), Arrays
-                        .asList(new NewSample(sampleIdentifier1.toString(), null, null, null),
-                                new NewSample(sampleIdentifier2.toString(), null, null, null))));
+                        .asList(NewSample.createWithParent(sampleIdentifier1.toString(), null,
+                                null, null), NewSample.createWithParent(sampleIdentifier2
+                                .toString(), null, null, null))));
         assertEquals(true, status.isError());
         context.assertIsSatisfied();
     }
@@ -146,8 +148,9 @@ public class NewSamplesWithTypePredicateTest extends AuthorizationTestCase
         predicate.init(provider);
         Status status =
                 predicate.evaluate(person, roles, new NewSamplesWithTypes(new SampleType(), Arrays
-                        .asList(new NewSample(sampleIdentifier1.toString(), null, null, null),
-                                new NewSample(sampleIdentifier2.toString(), null, null, null))));
+                        .asList(NewSample.createWithParent(sampleIdentifier1.toString(), null,
+                                null, null), NewSample.createWithParent(sampleIdentifier2
+                                .toString(), null, null, null))));
         assertEquals(true, status.isError());
         context.assertIsSatisfied();
     }
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/plugin/generic/server/GenericServerTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/plugin/generic/server/GenericServerTest.java
index dc0ffee8f8592efab6fbd9e22b0efec6cdfe61d0..6e11b24efa16ba9a9ba49872e2b518612da09a67 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/plugin/generic/server/GenericServerTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/plugin/generic/server/GenericServerTest.java
@@ -437,7 +437,7 @@ public final class GenericServerTest extends AbstractServerTestCase
         sample.setModificationDate(newModificationDate);
         final SampleUpdatesDTO updates =
                 new SampleUpdatesDTO(sampleId, properties, null, attachments, version, null, null,
-                        null);
+                        null, null);
         context.checking(new Expectations()
             {
                 {
diff --git a/rtd_cina/source/java/ch/systemsx/cisd/cina/dss/bundle/BundleDataSetHelperRpc.java b/rtd_cina/source/java/ch/systemsx/cisd/cina/dss/bundle/BundleDataSetHelperRpc.java
index 67a81ba60c39479ef8fd7aa4bd4f99e1e44467a6..9223893e7049562eea1c26161ab5f211914a0af9 100644
--- a/rtd_cina/source/java/ch/systemsx/cisd/cina/dss/bundle/BundleDataSetHelperRpc.java
+++ b/rtd_cina/source/java/ch/systemsx/cisd/cina/dss/bundle/BundleDataSetHelperRpc.java
@@ -130,7 +130,7 @@ class BundleDataSetHelperRpc extends BundleDataSetHelper
             Sample parentSample = getOpenbisService().tryGetSampleWithExperiment(parentIdOrNull);
             sampleId = new SampleIdentifier(parentIdOrNull.getSpaceLevel(), sampleCode);
             sample =
-                    new NewSample(sampleId.toString(), replicaSampleType,
+                    NewSample.createWithParent(sampleId.toString(), replicaSampleType,
                             parentIdOrNull.toString(), null);
             sample.setExperimentIdentifier(parentSample.getExperiment().getIdentifier());
         } else if (experimentIdOrNull != null)
@@ -140,7 +140,7 @@ class BundleDataSetHelperRpc extends BundleDataSetHelper
                     new SpaceIdentifier(experimentIdOrNull.getDatabaseInstanceCode(),
                             experimentIdOrNull.getSpaceCode());
             sampleId = new SampleIdentifier(spaceId, sampleCode);
-            sample = new NewSample(sampleId.toString(), replicaSampleType, null, null);
+            sample = NewSample.createWithParent(sampleId.toString(), replicaSampleType, null, null);
             sample.setExperimentIdentifier(experimentIdOrNull.toString());
         }
 
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/etlserver/phosphonetx/DataSetInfoExtractorForMSInjection.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/etlserver/phosphonetx/DataSetInfoExtractorForMSInjection.java
index 873097a3060bed4bcbe496012b128501b3e8dd9f..9200822ad05685d479cbe593e985682a43e14d99 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/etlserver/phosphonetx/DataSetInfoExtractorForMSInjection.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/etlserver/phosphonetx/DataSetInfoExtractorForMSInjection.java
@@ -56,22 +56,27 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifier;
 public class DataSetInfoExtractorForMSInjection extends AbstractDataSetInfoExtractorWithService
 {
     static final String MS_INJECTION_PROPERTIES_FILE = "ms-injection.properties";
+
     static final String DATA_SET_PROPERTIES_FILE = "data-set.properties";
 
     static final String PROJECT_CODE_KEY = "PROJECT_CODE";
+
     static final String EXPERIMENT_CODE_KEY = "EXPERIMENT_CODE";
+
     static final String SAMPLE_CODE_KEY = "SAMPLE_CODE";
+
     static final String USER_KEY = "USER";
-    
+
     static final String DATA_SET_TYPE_KEY = "DATA_SET_TYPE";
+
     static final String FILE_TYPE_KEY = "FILE_TYPE";
+
     static final String PARENT_TYPE_KEY = "PARENT_TYPE";
-    
+
     static final String EXPERIMENT_TYPE_CODE = "MS_INJECT";
 
     static final String SAMPLE_TYPE_CODE = "MS_INJECTION";
 
-
     public DataSetInfoExtractorForMSInjection(Properties properties)
     {
         this(ServiceProvider.getOpenBISService());
@@ -95,11 +100,13 @@ public class DataSetInfoExtractorForMSInjection extends AbstractDataSetInfoExtra
         ExperimentIdentifier experimentIdentifier = getExperimentIdentifier(sampleProperties);
         getOrCreateExperiment(experimentIdentifier);
         info.setExperimentIdentifier(experimentIdentifier);
-        long sampleID = registerOrUpdateSample(sampleIdentifier, experimentIdentifier, sampleProperties);
-        
+        long sampleID =
+                registerOrUpdateSample(sampleIdentifier, experimentIdentifier, sampleProperties);
+
         Properties dataSetProperties =
                 Util.loadPropertiesFile(incomingDataSetPath, DATA_SET_PROPERTIES_FILE);
-        String dataSetTypeCode = PropertyUtils.getMandatoryProperty(dataSetProperties, DATA_SET_TYPE_KEY);
+        String dataSetTypeCode =
+                PropertyUtils.getMandatoryProperty(dataSetProperties, DATA_SET_TYPE_KEY);
         String parentTypeOrNull = dataSetProperties.getProperty(PARENT_TYPE_KEY);
         dataSetProperties.remove(DATA_SET_TYPE_KEY);
         dataSetProperties.remove(FILE_TYPE_KEY);
@@ -150,7 +157,7 @@ public class DataSetInfoExtractorForMSInjection extends AbstractDataSetInfoExtra
             Set<NewAttachment> emptySet = Collections.<NewAttachment> emptySet();
             Date version = sample.getModificationDate();
             service.updateSample(new SampleUpdatesDTO(sampleID, propertiesList,
-                    experimentIdentifier, emptySet, version, sampleIdentifier, null, null));
+                    experimentIdentifier, emptySet, version, sampleIdentifier, null, null, null));
             return sample.getId();
         }
     }