diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/CodesArea.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/CodesArea.java
index c207df9d5aefca6cc7f895cdd03115dd2acb8f46..4e0177736382e582644485d32e1c2a3ec14d4fcc 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/CodesArea.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/CodesArea.java
@@ -31,8 +31,6 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Code;
  */
 abstract public class CodesArea<T extends ICodeHolder> extends MultilineItemsField
 {
-    private List<String> originalCodes;
-
     public CodesArea(String emptyTextMsg)
     {
         super("", false);
@@ -41,13 +39,8 @@ abstract public class CodesArea<T extends ICodeHolder> extends MultilineItemsFie
 
     public final void setCodeProviders(Collection<T> codeProviders)
     {
-        originalCodes = Code.extractCodes(codeProviders);
-        setItems(originalCodes);
-    }
-
-    public String[] getOriginalCodes()
-    {
-        return originalCodes.toArray(new String[0]);
+        List<String> codes = Code.extractCodes(codeProviders);
+        setItems(codes);
     }
 
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExperimentBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExperimentBO.java
index a3899fbe09ae95d4535155937f636c1cf211d62e..947c5aa6948066a48d02fe72a938c15dc704dcdf 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExperimentBO.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExperimentBO.java
@@ -40,6 +40,7 @@ import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.id.experiment.Experime
 import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.id.experiment.ExperimentTechIdId;
 import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.id.experiment.IExperimentId;
 import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Code;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityProperty;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewAttachment;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewExperiment;
@@ -493,7 +494,7 @@ public final class ExperimentBO extends AbstractBusinessObject implements IExper
                 attachSamples(sampleCodes);
             } else
             {
-                String[] originalSampleCodes = updates.getOriginalSampleCodes();
+                String[] originalSampleCodes = Code.extractCodesToArray(experiment.getSamples());
                 updateSamples(originalSampleCodes, sampleCodes);
             }
         }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/BasicExperimentUpdates.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/BasicExperimentUpdates.java
index 5218e5cca0a7f10581a9973b265dc195cd408081..610ee016645851360617ef152f007314c12013c5 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/BasicExperimentUpdates.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/BasicExperimentUpdates.java
@@ -43,8 +43,6 @@ public class BasicExperimentUpdates implements Serializable
     // if it does not have data sets attached yet. Otherwise an exception will be thrown.
     private String[] sampleCodesOrNull;
 
-    private String[] originalSampleCodes;
-
     // if true sampleCodesOrNull changes semantic - sample codes are the same as in newSamples and
     // all of them will be attached to the experiment.
     private boolean registerSamples;
@@ -84,16 +82,6 @@ public class BasicExperimentUpdates implements Serializable
         this.sampleCodesOrNull = sampleCodes;
     }
 
-    public String[] getOriginalSampleCodes()
-    {
-        return originalSampleCodes;
-    }
-
-    public void setOriginalSampleCodes(String[] originalSampleCodes)
-    {
-        this.originalSampleCodes = originalSampleCodes;
-    }
-
     public void setNewSamples(List<NewSamplesWithTypes> list)
     {
         this.newSamples = list;
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/AbstractGenericExperimentRegisterEditForm.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/AbstractGenericExperimentRegisterEditForm.java
index e77283a4b83bf6641aa3501f2f9af2afb4c6ba41..7ac625189507584c52f746addfa4adee749fbfcf 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/AbstractGenericExperimentRegisterEditForm.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/AbstractGenericExperimentRegisterEditForm.java
@@ -275,11 +275,6 @@ abstract public class AbstractGenericExperimentRegisterEditForm extends
             return null;
     }
 
-    protected String[] getOriginalSamples()
-    {
-        return samplesArea != null ? samplesArea.getOriginalCodes() : new String[0];
-    }
-
     protected SampleType getSampleType()
     {
         if (existingSamplesRadio.getValue() == false)
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentEditForm.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentEditForm.java
index fc39ed20b959b29a963074e2bf31c66da88f7e2a..b9ff6791d8d2fa6ebcfba9c92128c25d608b68fd 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentEditForm.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentEditForm.java
@@ -96,7 +96,6 @@ public final class GenericExperimentEditForm extends AbstractGenericExperimentRe
         updates.setProjectIdentifier(extractProjectIdentifier());
         updates.setAttachmentSessionKey(attachmentsSessionKey);
         updates.setAttachments(attachmentsManager.extractAttachments());
-        updates.setOriginalSampleCodes(getOriginalSamples());
         updates.setSampleCodes(getSamples());
         updates.setSampleType(getSampleType());
         updates.setGenerateCodes(autoGenerateCodes.getValue().booleanValue());
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 336f6578ee692ce359620562fb0afa81bc0ce759..b2d429103e6e7126c97cbba3906db329391667f6 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
@@ -607,7 +607,6 @@ public class GenericClientService extends AbstractClientService implements IGene
         updatesDTO.setProjectIdentifier(project);
         updatesDTO.setAttachments(attachments);
         updatesDTO.setProperties(updates.getProperties());
-        updatesDTO.setOriginalSampleCodes(updates.getOriginalSampleCodes());
         updatesDTO.setSampleCodes(updates.getSampleCodes());
         updatesDTO.setVersion(updates.getVersion());
         updatesDTO.setRegisterSamples(updates.isRegisterSamples());
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExperimentBOTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExperimentBOTest.java
index 826687a8c67914276f71889a33736e6f2176d013..9e2c37758445a58fd5570b307f029e0085ec989f 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExperimentBOTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExperimentBOTest.java
@@ -723,11 +723,10 @@ public final class ExperimentBOTest extends AbstractBOTest
     {
         ExperimentIdentifier identifier = CommonTestUtils.createExperimentIdentifier();
         ExperimentPE experiment = CommonTestUtils.createExperiment(identifier);
+        experiment.addSample(createSampleWithCode("S1"));
         experiment.setProperties(Collections.<EntityPropertyPE> emptySet());
         prepareLoadingExperiment(identifier, experiment);
         ExperimentUpdatesDTO update = createDefaultUpdateObject(experiment);
-        update.setOriginalSampleCodes(new String[]
-            { "S1" });
         update.setSampleCodes(new String[]
             { "S1", "S2" });
         prepareAddSamplesToExperiment(experiment, false, "S2");
@@ -743,11 +742,10 @@ public final class ExperimentBOTest extends AbstractBOTest
     {
         ExperimentIdentifier identifier = CommonTestUtils.createExperimentIdentifier();
         ExperimentPE experiment = CommonTestUtils.createExperiment(identifier);
+        experiment.addSample(createSampleWithCode("S1"));
         experiment.setProperties(Collections.<EntityPropertyPE> emptySet());
         prepareLoadingExperiment(identifier, experiment);
         ExperimentUpdatesDTO update = createDefaultUpdateObject(experiment);
-        update.setOriginalSampleCodes(new String[]
-            { "S1" });
         update.setSampleCodes(new String[]
             { "S1", "S2" });
         prepareAddSamplesToExperiment(experiment, true, "S2");
@@ -764,11 +762,10 @@ public final class ExperimentBOTest extends AbstractBOTest
     {
         ExperimentIdentifier identifier = CommonTestUtils.createExperimentIdentifier();
         final ExperimentPE experiment = CommonTestUtils.createExperiment(identifier);
+        experiment.addSample(createSampleWithCode("S1"));
         experiment.setProperties(Collections.<EntityPropertyPE> emptySet());
         prepareLoadingExperiment(identifier, experiment);
         ExperimentUpdatesDTO update = createDefaultUpdateObject(experiment);
-        update.setOriginalSampleCodes(new String[]
-            { "S1" });
         update.setSampleCodes(new String[]
             { "S1", "S2" });
         context.checking(new Expectations()
@@ -790,11 +787,11 @@ public final class ExperimentBOTest extends AbstractBOTest
     {
         ExperimentIdentifier identifier = CommonTestUtils.createExperimentIdentifier();
         ExperimentPE experiment = CommonTestUtils.createExperiment(identifier);
+        experiment.addSample(createSampleWithCode("S1"));
+        experiment.addSample(createSampleWithCode("S2"));
         experiment.setProperties(Collections.<EntityPropertyPE> emptySet());
         prepareLoadingExperiment(identifier, experiment);
         ExperimentUpdatesDTO update = createDefaultUpdateObject(experiment);
-        update.setOriginalSampleCodes(new String[]
-            { "S1", "S2" });
         update.setSampleCodes(new String[]
             { "S3", "S2" });
         prepareRemoveSamplesFromExperiment(experiment, false, "S1");
@@ -811,11 +808,11 @@ public final class ExperimentBOTest extends AbstractBOTest
     {
         ExperimentIdentifier identifier = CommonTestUtils.createExperimentIdentifier();
         ExperimentPE experiment = CommonTestUtils.createExperiment(identifier);
+        experiment.addSample(createSampleWithCode("S1"));
+        experiment.addSample(createSampleWithCode("S2"));
         experiment.setProperties(Collections.<EntityPropertyPE> emptySet());
         prepareLoadingExperiment(identifier, experiment);
         ExperimentUpdatesDTO update = createDefaultUpdateObject(experiment);
-        update.setOriginalSampleCodes(new String[]
-            { "S1", "S2" });
         update.setSampleCodes(new String[]
             { "S2" });
         prepareRemoveSamplesFromExperiment(experiment, true, "S1");
@@ -867,7 +864,10 @@ public final class ExperimentBOTest extends AbstractBOTest
                         SamplePE sample = createSampleWithCode(sampleCode);
                         if (alreadyAssignedToAnExperiment)
                         {
-                            sample.setExperiment(experiment);
+                            ExperimentPE anotherExperiment = new ExperimentPE();
+                            anotherExperiment.setCode(EXP_CODE + "1");
+                            anotherExperiment.setProject(experiment.getProject());
+                            sample.setExperiment(anotherExperiment);
                         }
                         will(returnValue(sample));
                         if (alreadyAssignedToAnExperiment)
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/AbstractDAOWithoutContextTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/AbstractDAOWithoutContextTest.java
index 9cbadc25e3843855aeb93f963659759186266a40..bcf6fd4f47807e2a9ac1df273fd7ad182a17a486 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/AbstractDAOWithoutContextTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/AbstractDAOWithoutContextTest.java
@@ -324,6 +324,7 @@ public abstract class AbstractDAOWithoutContextTest extends
         result.setProject(findProject(db, group, project));
         result.setRegistrator(getTestPerson());
         result.setRegistrationDate(new Date());
+        result.setModificationDate(new Date());
         return result;
     }
 
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/optimistic_locking/ExperimentOptimisticLockingTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/optimistic_locking/ExperimentOptimisticLockingTest.java
index 99498202aa565ffe45fe01ae384ad5300fd6d3fb..7d8b918cff5bf61d90bab9b388233e1d6e612a93 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/optimistic_locking/ExperimentOptimisticLockingTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/optimistic_locking/ExperimentOptimisticLockingTest.java
@@ -275,8 +275,6 @@ public class ExperimentOptimisticLockingTest extends OptimisticLockingTestCase
         ExperimentUpdatesDTO update = new ExperimentUpdatesDTO();
         update.setVersion(toolBox.loadExperiment(experiment).getVersion());
         update.setExperimentId(new TechId(experiment));
-        update.setOriginalSampleCodes(new String[]
-            { sample1.getCode(), sample2.getCode() });
         update.setSampleCodes(new String[]
             { sample2.getCode(), sample3.getCode() });
         update.setProperties(ToolBox.NO_PROPERTIES);