diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/GenericConstants.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/GenericConstants.java
index 806ff4de60ad927a35f1d9eda999acdfa546c0d3..b3f85b0d834f08cc6fe1737f55719d3393e4f1be 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/GenericConstants.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/GenericConstants.java
@@ -110,7 +110,9 @@ public final class GenericConstants
 
     public static final String BATCH_OPERATION_KIND = "batch_operation_kind";
 
-    public static final String CODES_TEXTAREA_REGEX = "\n|\r\n|, *";
+    public static final String ITEMS_TEXTAREA_REGEX = "\n|\r\n|, *";
+
+    public static final String ITEMS_TEXTAREA_DEFAULT_SEPARATOR = ", ";
 
     /** A regular expression that match email addresses. */
     public static final String EMAIL_REGEX =
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 89999b1aa90477e9655eb70c905737e1c8fd1d46..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
@@ -19,7 +19,7 @@ package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui;
 import java.util.Collection;
 import java.util.List;
 
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.MultilineVarcharField;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.MultilineItemsField;
 import ch.systemsx.cisd.openbis.generic.shared.basic.ICodeHolder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Code;
 
@@ -29,7 +29,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Code;
  * 
  * @author Piotr Buczek
  */
-abstract public class CodesArea<T extends ICodeHolder> extends MultilineVarcharField
+abstract public class CodesArea<T extends ICodeHolder> extends MultilineItemsField
 {
     public CodesArea(String emptyTextMsg)
     {
@@ -40,40 +40,7 @@ abstract public class CodesArea<T extends ICodeHolder> extends MultilineVarcharF
     public final void setCodeProviders(Collection<T> codeProviders)
     {
         List<String> codes = Code.extractCodes(codeProviders);
-        setCodes(codes);
+        setItems(codes);
     }
 
-    public final void setCodes(List<String> codes)
-    {
-        String textValue = createTextValue(codes);
-        setValue(textValue);
-        setOriginalValue(textValue);
-    }
-
-    public final void appendCode(String code)
-    {
-        StringBuilder sb = new StringBuilder();
-        sb.append(getValue() == null ? "" : getValue());
-        appendCode(sb, code);
-        setValue(sb.toString());
-    }
-
-    private static String createTextValue(List<String> codes)
-    {
-        StringBuilder sb = new StringBuilder();
-        for (String code : codes)
-        {
-            appendCode(sb, code);
-        }
-        return sb.toString();
-    }
-
-    private static final void appendCode(StringBuilder sb, String code)
-    {
-        if (sb.length() > 0)
-        {
-            sb.append(", ");
-        }
-        sb.append(code);
-    }
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/amc/AddPersonToAuthorizationGroupDialog.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/amc/AddPersonToAuthorizationGroupDialog.java
index bdf4c458dacfc2e995a990cdc80ceb58651a01a5..7f2a5c0d2bbd64a44d2c2e4269d8e023504d7342 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/amc/AddPersonToAuthorizationGroupDialog.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/amc/AddPersonToAuthorizationGroupDialog.java
@@ -143,7 +143,7 @@ public class AddPersonToAuthorizationGroupDialog extends AbstractRegistrationDia
             String text = multiplePersonsField.getValue();
             if (StringUtils.isBlank(text) == false)
             {
-                codes.addAll(Arrays.asList(text.split(GenericConstants.CODES_TEXTAREA_REGEX)));
+                codes.addAll(Arrays.asList(text.split(GenericConstants.ITEMS_TEXTAREA_REGEX)));
             }
         }
         return codes;
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/DataSetParentsArea.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/DataSetParentsArea.java
index 0026f969a8240e775fd18f67ba2fb7fdf7ce1383..452f4428121138199758b4f4a13094c04b18804d 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/DataSetParentsArea.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/DataSetParentsArea.java
@@ -62,6 +62,6 @@ public final class DataSetParentsArea extends CodesArea<ExternalData>
 
     public final void setParentCodes(List<String> parentCodes)
     {
-        setCodes(parentCodes);
+        setItems(parentCodes);
     }
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/field/MultilineItemsField.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/field/MultilineItemsField.java
new file mode 100644
index 0000000000000000000000000000000000000000..ebcda01e9841b98d6ff02192682ba3677dd8540c
--- /dev/null
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/field/MultilineItemsField.java
@@ -0,0 +1,97 @@
+/*
+ * Copyright 2008 ETH Zuerich, CISD
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field;
+
+import java.util.List;
+
+import ch.systemsx.cisd.common.shared.basic.utils.StringUtils;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.GenericConstants;
+
+/**
+ * A {@link MultilineVarcharField} extension with support of handling list of items (Strings).
+ * 
+ * @author Piotr Buczek
+ */
+public class MultilineItemsField extends MultilineVarcharField
+{
+    /** Constructor for default sized field (5 lines). */
+    public MultilineItemsField(final String label, final boolean mandatory)
+    {
+        super(label, mandatory);
+    }
+
+    /** Constructor for multiline field with given number of lines. */
+    public MultilineItemsField(final String label, final boolean mandatory, int lines)
+    {
+        super(label, mandatory, lines);
+    }
+
+    /**
+     * null if the area has not been modified, the list of all items (separated by comma or a new
+     * line) otherwise
+     */
+    public final String[] tryGetModifiedItemList()
+    {
+        if (isDirty() == false)
+        {
+            return null;
+        }
+        String text = getValue();
+        if (StringUtils.isBlank(text) == false)
+        {
+            return text.split(GenericConstants.ITEMS_TEXTAREA_REGEX);
+        } else
+        {
+            return new String[0];
+        }
+    }
+
+    public final void setItems(List<String> items)
+    {
+        String textValue = createTextValue(items);
+        setValue(textValue);
+        setOriginalValue(textValue);
+    }
+
+    public final void appendItem(String item)
+    {
+        StringBuilder sb = new StringBuilder();
+        sb.append(getValue() == null ? "" : getValue());
+        appendItem(sb, item);
+        setValue(sb.toString());
+    }
+
+    private static String createTextValue(List<String> items)
+    {
+        StringBuilder sb = new StringBuilder();
+        for (String item : items)
+        {
+            appendItem(sb, item);
+        }
+        return sb.toString();
+    }
+
+    private static final void appendItem(StringBuilder sb, String item)
+    {
+        if (sb.length() > 0)
+        {
+            sb.append(GenericConstants.ITEMS_TEXTAREA_DEFAULT_SEPARATOR);
+        }
+        sb.append(item);
+    }
+
+}
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/field/MultilineVarcharField.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/field/MultilineVarcharField.java
index 974a682aae07aa308d728b162faf4057bd43355d..c3e4327e0c14d1c7b306b40930a69c027bde6bfe 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/field/MultilineVarcharField.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/field/MultilineVarcharField.java
@@ -18,8 +18,6 @@ package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field;
 
 import com.extjs.gxt.ui.client.widget.form.TextArea;
 
-import ch.systemsx.cisd.common.shared.basic.utils.StringUtils;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.GenericConstants;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.FieldUtil;
 
 /**
@@ -63,24 +61,4 @@ public class MultilineVarcharField extends TextArea
         return (int) (lines * DEFAULT_LINE_HEIGHT * EM_TO_PIXEL);
     }
 
-    /**
-     * null if the area has not been modified, the list of all items (separated by comma or a new
-     * line) otherwise
-     */
-    public final String[] tryGetModifiedItemList()
-    {
-        if (isDirty() == false)
-        {
-            return null;
-        }
-        String text = getValue();
-        if (StringUtils.isBlank(text) == false)
-        {
-            return text.split(GenericConstants.CODES_TEXTAREA_REGEX);
-        } else
-        {
-            return new String[0];
-        }
-    }
-
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/public/generic-dictionary.js b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/public/generic-dictionary.js
index da71a6b8c3eb5921ea3591fccec8c2757d06eb5d..4be86e8f2c0deeab6da3ff0e5135b94329922caa 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/public/generic-dictionary.js
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/public/generic-dictionary.js
@@ -25,7 +25,7 @@ var generic = {
   
   instance_sample: "Shared",
   generated_from_sample: "Parent",
-  add_parent: "Add Parent",
+  add_parent: "Add Parent...",
   part_of_sample: "Container",
   parents: "Parents",
   
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/IdentifierExtractor.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/IdentifierExtractor.java
new file mode 100644
index 0000000000000000000000000000000000000000..0c2ff0cff18dbaecb2d76fd1f29e0cd73e71c41c
--- /dev/null
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/IdentifierExtractor.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright 2010 ETH Zuerich, CISD
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package ch.systemsx.cisd.openbis.generic.shared.basic;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * @author Piotr Buczek
+ */
+public class IdentifierExtractor
+{
+
+    public static final List<String> extract(
+            Collection<? extends IIdentifierHolder> identifierHolders)
+    {
+        List<String> identifiers = new ArrayList<String>();
+        for (IIdentifierHolder identifierHolder : identifierHolders)
+        {
+            identifiers.add(identifierHolder.getIdentifier());
+        }
+        return identifiers;
+    }
+}
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/AttachmentHolderPE.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/AttachmentHolderPE.java
index 0f3c9ac8e7ddf5764196aea3fe5cb77b0fcea91a..577c8a5b9a1fde141572e6eec050b24687a5fa8a 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/AttachmentHolderPE.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/AttachmentHolderPE.java
@@ -25,6 +25,7 @@ import javax.persistence.MappedSuperclass;
 import javax.persistence.Transient;
 
 import ch.systemsx.cisd.openbis.generic.shared.IServer;
+import ch.systemsx.cisd.openbis.generic.shared.basic.IIdentifierHolder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.IPermIdHolder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.AttachmentHolderKind;
 import ch.systemsx.cisd.openbis.generic.shared.util.HibernateUtils;
@@ -36,7 +37,6 @@ import ch.systemsx.cisd.openbis.generic.shared.util.HibernateUtils;
  */
 @MappedSuperclass
 public abstract class AttachmentHolderPE implements Serializable, IIdentifierHolder, IPermIdHolder
-
 {
     //
     // Version
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/IEntityWithProperties.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/IEntityWithProperties.java
index ce0d34e2c2f82cef0ec1f1d2fa5b941ae76d9ca4..af0fb8257c96704ac0e8a76933cc6f9689cb7c25 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/IEntityWithProperties.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/IEntityWithProperties.java
@@ -18,6 +18,7 @@ package ch.systemsx.cisd.openbis.generic.shared.dto;
 
 import java.util.List;
 
+import ch.systemsx.cisd.openbis.generic.shared.basic.IIdentifierHolder;
 import ch.systemsx.cisd.openbis.generic.shared.dto.properties.EntityKind;
 
 /**
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/IIdentifierHolder.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/IIdentifierHolder.java
deleted file mode 100644
index ac3ee44d87e8e1f06699f7ef58692952e1a9a63f..0000000000000000000000000000000000000000
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/IIdentifierHolder.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright 2008 ETH Zuerich, CISD
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package ch.systemsx.cisd.openbis.generic.shared.dto;
-
-/**
- * A role that holds a identifier.
- * 
- * @author Christian Ribeaud
- */
-public interface IIdentifierHolder
-{
-    /**
-     * Returns a <code>String</code> that uniquely identifies this object.
-     */
-    public String getIdentifier();
-}
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/SamplePE.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/SamplePE.java
index 50e4d2327f000f3b6cbdaea5a94f0e068fd52c15..bb80684d91648304187f1cf12f59dd815bd8a75d 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/SamplePE.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/SamplePE.java
@@ -218,13 +218,10 @@ public class SamplePE extends AttachmentHolderPE implements IIdAndCodeHolder, Co
         getSampleParentRelationships().add(relationship);
     }
 
-	// TODO 2010-08-10, Piotr Buczek: check
     public void removeParentRelationship(final SampleRelationshipPE relationship)
     {
         getSampleParentRelationships().remove(relationship);
-        relationship.getParentSample().getSampleChildRelationships().remove(relationship);
         relationship.setChildSample(null);
-        relationship.setParentSample(null);
     }
 
     /**
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/identifier/IdentifierHelper.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/identifier/IdentifierHelper.java
index f17d95b8cefcce6aefadcd4a96ff4d2f78306690..0f382e8b27ef25d5b53075b6e59b629f53c1ebf6 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/identifier/IdentifierHelper.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/identifier/IdentifierHelper.java
@@ -262,4 +262,5 @@ public final class IdentifierHelper
             sample.getSpaceLevel().setSpaceCode(defaultGroupCode);
         }
     }
+
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/ExperimentSamplesArea.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/ExperimentSamplesArea.java
index 65b2a3bf7c3485546d81e62af98e9b11961dd717..a73926dfb51fd38133f41340bc22212384a95cd8 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/ExperimentSamplesArea.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/ExperimentSamplesArea.java
@@ -16,16 +16,20 @@
 
 package ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.experiment;
 
+import java.util.Collection;
+import java.util.List;
+
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.Dict;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.CodesArea;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IMessageProvider;
-import ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.sample.SamplesArea;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample;
 
 /**
- * {@link SamplesArea} extension to specify samples for an experiment.
+ * {@link CodesArea} extension to specify samples for an experiment.
  * 
  * @author Tomasz Pylak
  */
-final class ExperimentSamplesArea extends SamplesArea
+final class ExperimentSamplesArea extends CodesArea<Sample>
 {
     public static final String ID_SUFFIX_SAMPLES = "_samples";
 
@@ -41,4 +45,23 @@ final class ExperimentSamplesArea extends SamplesArea
         return idPrefix + ID_SUFFIX_SAMPLES;
     }
 
+    // delegation to abstract class methods
+
+    // null if the area has not been modified,
+    // the list of all sample codes otherwise
+    public final String[] tryGetSampleCodes()
+    {
+        return tryGetModifiedItemList();
+    }
+
+    public void setSamples(Collection<Sample> samples)
+    {
+        setCodeProviders(samples);
+    }
+
+    public final void setSampleCodes(List<String> codes)
+    {
+        setItems(codes);
+    }
+
 }
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 95056a502049e5bcbdc167cc9499db573fd47674..9db90cd0a3230c34ee9bff759221016e1bac3403 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
@@ -227,7 +227,7 @@ abstract public class AbstractGenericSampleRegisterEditForm extends
                     if (entity != null)
                     {
                         String sampleIdentifier = entity.getIdentifier();
-                        parentsArea.appendCode(sampleIdentifier);
+                        parentsArea.appendItem(sampleIdentifier);
                     }
                 }
             });
@@ -288,7 +288,7 @@ abstract public class AbstractGenericSampleRegisterEditForm extends
 
     protected String[] getParents()
     {
-        return parentsArea.tryGetSampleCodes();
+        return parentsArea.tryGetSamples();
     }
 
 }
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 6b52f35510a0c3dc5d77a5167c4fed9e9a620b9f..75e92d1c25267cc86d4b0b78117d3852c0ae8b34 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
@@ -106,7 +106,7 @@ public final class GenericSampleEditForm extends AbstractGenericSampleRegisterEd
         experimentField.updateOriginalValue();
         updateFieldOriginalValue(groupSelectionWidget);
         container.updateOriginalValue();
-        parentsArea.setSampleCodes(parents);
+        parentsArea.setSamples(parents);
     }
 
     private void setOriginalSample(Sample sample)
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/ParentSamplesArea.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/ParentSamplesArea.java
index 55fbbc9ab59fafab62d4da7c20ddb0949f0dd4a4..46ef28633ab6b8bfb55a92ae3b8e66a74d41624c 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/ParentSamplesArea.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/ParentSamplesArea.java
@@ -16,22 +16,29 @@
 
 package ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.sample;
 
+import java.util.Collection;
+import java.util.List;
+
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.Dict;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.MultilineItemsField;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IMessageProvider;
+import ch.systemsx.cisd.openbis.generic.shared.basic.IdentifierExtractor;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample;
 
 /**
- * {@link SamplesArea} extension to specify parent samples.
+ * {@link MultilineItemsField} extension to specify parent samples.
  * 
  * @author Piotr Buczek
  */
-final class ParentSamplesArea extends SamplesArea
+final class ParentSamplesArea extends MultilineItemsField
 {
 
     public static final String ID_SUFFIX_PARENT_SAMPLES = "_parent_samples";
 
     public ParentSamplesArea(IMessageProvider messageProvider, String idPrefix)
     {
-        super(messageProvider.getMessage(Dict.SAMPLES_LIST));
+        super("", false);
+        setEmptyText(messageProvider.getMessage(Dict.SAMPLES_LIST));
         setLabelSeparator("");
         setId(createId(idPrefix));
     }
@@ -41,4 +48,24 @@ final class ParentSamplesArea extends SamplesArea
         return idPrefix + ID_SUFFIX_PARENT_SAMPLES;
     }
 
+    public void setSamples(Collection<Sample> samples)
+    {
+        List<String> identifiers = IdentifierExtractor.extract(samples);
+        setSamples(identifiers);
+    }
+
+    // delegation to superclass methods
+
+    // null if the area has not been modified,
+    // the list of all sample codes otherwise
+    public final String[] tryGetSamples()
+    {
+        return tryGetModifiedItemList();
+    }
+
+    public final void setSamples(List<String> codesOrIdentifiers)
+    {
+        setItems(codesOrIdentifiers);
+    }
+
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/SamplesArea.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/SamplesArea.java
index 8772464e680d64079ad63ea155e8628ba19e63af..b4acea077f1e9d14199323b3a87ab71847d4633d 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/SamplesArea.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/SamplesArea.java
@@ -43,13 +43,18 @@ abstract public class SamplesArea extends CodesArea<Sample>
         return tryGetModifiedItemList();
     }
 
-    public final void setSamples(Collection<Sample> samples)
+    public void setSamples(Collection<Sample> samples)
     {
         setCodeProviders(samples);
     }
 
     public final void setSampleCodes(List<String> codes)
     {
-        setCodes(codes);
+        setItems(codes);
+    }
+
+    public final void setSampleIdentifiers(List<String> identifiers)
+    {
+        setItems(identifiers);
     }
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/server/GenericServer.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/server/GenericServer.java
index 24d4167ac95f8ee7480ef813fd3712060b65f10c..0b4c0f6cc66c8ed62d40852a23f6ae00e3fdb81e 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/server/GenericServer.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/server/GenericServer.java
@@ -54,6 +54,7 @@ import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory;
 import ch.systemsx.cisd.openbis.generic.server.plugin.IDataSetTypeSlaveServerPlugin;
 import ch.systemsx.cisd.openbis.generic.server.plugin.ISampleTypeSlaveServerPlugin;
 import ch.systemsx.cisd.openbis.generic.shared.ICommonServer;
+import ch.systemsx.cisd.openbis.generic.shared.basic.IdentifierExtractor;
 import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.AttachmentWithContent;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Code;
@@ -682,7 +683,7 @@ public final class GenericServer extends AbstractServer<IGenericServer> implemen
         SampleUpdateResult result = new SampleUpdateResult();
         SamplePE sample = sampleBO.getSample();
         result.setModificationDate(sample.getModificationDate());
-        List<String> parents = Code.extractCodes(sample.getParents());
+        List<String> parents = IdentifierExtractor.extract(sample.getParents());
         Collections.sort(parents);
         result.setParents(parents);
         return result;
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ExperimentPlateLocationsSection.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ExperimentPlateLocationsSection.java
index cbf96f2508bc72fb14c07f324b2c6ee0f60b8294..a8e7e1c94f72a4cc55d13d41fea978f9fbde0e1f 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ExperimentPlateLocationsSection.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ExperimentPlateLocationsSection.java
@@ -22,7 +22,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DispatcherHelper;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ITabItem;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpPageIdentifier;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.MultilineVarcharField;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.MultilineItemsField;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IDisposableComponent;
 import ch.systemsx.cisd.openbis.generic.shared.basic.IEntityInformationHolderWithIdentifier;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Code;
@@ -46,7 +46,7 @@ public class ExperimentPlateLocationsSection extends SingleSectionPanel
 
     private final IEntityInformationHolderWithIdentifier experiment;
 
-    private final MultilineVarcharField materialListField;
+    private final MultilineItemsField materialListField;
 
     private List<MaterialType> materialTypesOrNull;
 
@@ -71,9 +71,9 @@ public class ExperimentPlateLocationsSection extends SingleSectionPanel
                     });
     }
 
-    private MultilineVarcharField createMaterialListArea()
+    private MultilineItemsField createMaterialListArea()
     {
-        MultilineVarcharField area = new MultilineVarcharField("", true, 10);
+        MultilineItemsField area = new MultilineItemsField("", true, 10);
         area.setWidth(TEXT_AREA_WIDTH);
         area.setEmptyText(screeningViewContext
                 .getMessage(Dict.PLATE_MATERIAL_REVIEWER_SPECIFY_METERIAL_ITEMS));