diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServer.java
index 0b18247b6b77472f01eecdbe7398d71ec2a61258..1d7ac0bb014a58b63147bfd62dc045d2b2c4f210 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServer.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServer.java
@@ -1526,7 +1526,7 @@ public final class CommonServer extends AbstractCommonServer<ICommonServerForInt
     private static final String UPDATE_TEMPLATE_COMMENT =
             "# If one doesn't want to modify values in a column the column can be removed completely from the file.\n"
                     + "# Empty value in a column also means that the value stored in openBIS shouldn't be changed.\n "
-                    + "# To delete a value/connection from openBIS one needs to put '<DELETE>' into the corresponding cell.\n";
+                    + "# To delete a value/connection from openBIS one needs to put \"--DELETE--\" into the corresponding cell.\n";
 
     private String createTemplateForType(EntityKind entityKind, boolean autoGenerate,
             EntityTypePE entityType, boolean addComments, boolean withExperiments,
@@ -1577,10 +1577,12 @@ public final class CommonServer extends AbstractCommonServer<ICommonServerForInt
                     }
                     break;
                 case UPDATE:
-                    sb.insert(0, UPDATE_TEMPLATE_COMMENT);
                     if (entityKind.equals(EntityKind.SAMPLE))
                     {
                         sb.insert(0, UpdatedSample.SAMPLE_UPDATE_TEMPLATE_COMMENT);
+                    } else
+                    {
+                        sb.insert(0, UPDATE_TEMPLATE_COMMENT);
                     }
                     break;
             }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/AbstractEntityProperty.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/AbstractEntityProperty.java
index 42b1dcb0473a204873222a8bcf287ea577e524de..49e8eb3a14fd0a7aa29ba03cc9fdb136ad3e9969 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/AbstractEntityProperty.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/AbstractEntityProperty.java
@@ -111,6 +111,16 @@ public abstract class AbstractEntityProperty implements IEntityProperty
         return ordinal;
     }
 
+    //
+    // Object
+    //
+
+    @Override
+    public String toString()
+    {
+        return propertyType + ": " + tryGetAsString();
+    }
+
     // 
     // Comparable
     // 
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 e1cfb3838d27db485e01bbab7eba5b4bd3235215..c028671370816ef1b291ebb5b65e6ba67fbd5c80 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
@@ -27,8 +27,8 @@ public final class UpdatedSample extends NewSample
 
     public static final String SAMPLE_UPDATE_TEMPLATE_COMMENT =
             "# All columns except \"identifier\" can be removed from the file.\n"
-                    + "# If a column is removed from the file corresponding values of updated samples will be preserved.\n"
-                    + "# If a value in a column is empty for a certain sample, the corresponding property data of the sample will be cleared\n"
+                    + "# If a column is removed from the file or a cell in a column is left empty the corresponding values of updated samples will be preserved.\n"
+                    + "# To delete a value/connection from openBIS one needs to put \"--DELETE--\" into the corresponding cell\n"
                     + "# (in particular, a sample can become detached from an experiment, container or parent sample this way).\n"
                     + "# Basically the \"identifier\" column should contain sample identifiers, e.g. /SPACE/SAMPLE_1,\n"
                     + "# but for samples from default space (if it was provided in the form) it is enough to put sample codes (e.g. SAMPLE_1) into the column.\n"
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/server/parser/UpdatedSampleParserObjectFactory.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/server/parser/UpdatedSampleParserObjectFactory.java
index e19e568b7595cd7a1cddf453392afd920550a4c7..22d89add52e973db5ea0a56ea7d5ee78daecbbbd 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/server/parser/UpdatedSampleParserObjectFactory.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/server/parser/UpdatedSampleParserObjectFactory.java
@@ -16,9 +16,15 @@
 
 package ch.systemsx.cisd.openbis.plugin.generic.client.web.server.parser;
 
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
 import ch.systemsx.cisd.common.parser.IPropertyMapper;
 import ch.systemsx.cisd.common.parser.ParserException;
 import ch.systemsx.cisd.common.shared.basic.utils.StringUtils;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityProperty;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewSample;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleBatchUpdateDetails;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleType;
@@ -75,46 +81,60 @@ final class UpdatedSampleParserObjectFactory extends NewSampleParserObjectFactor
      */
     private SampleBatchUpdateDetails createBatchUpdateDetails(NewSample newSample)
     {
-        boolean updateExperiment =
+        final boolean updateExperiment =
                 basicBatchUpdateDetails.isExperimentUpdateRequested()
                         && isNotEmpty(newSample.getExperimentIdentifier());
-        boolean updateParent =
+        final boolean updateParent =
                 basicBatchUpdateDetails.isParentUpdateRequested()
                         && isNotEmpty(newSample.getParentIdentifier());
-        boolean updateContainer =
+        final boolean updateContainer =
                 basicBatchUpdateDetails.isContainerUpdateRequested()
                         && isNotEmpty(newSample.getContainerIdentifier());
 
-        // TODO 2010-09-17, Piotr Buczek: properties
+        final Set<String> propertiesToUpdate = new HashSet<String>();
+        for (IEntityProperty property : newSample.getProperties())
+        {
+            propertiesToUpdate.add(property.getPropertyType().getCode());
+        }
+
         return new SampleBatchUpdateDetails(updateExperiment, updateParent, updateContainer,
-                basicBatchUpdateDetails.getPropertiesToUpdate());
+                propertiesToUpdate);
     }
 
-    /** Cleans the placeholders used to mark deletion of values in the specified sample. */
+    /** Cleans properties and connections of the specified sample that are marked for deletion. */
     private void cleanUp(NewSample newSample)
     {
-        if (shouldDelete(newSample.getExperimentIdentifier()))
+        if (isDeleteMark(newSample.getExperimentIdentifier()))
         {
             newSample.setExperimentIdentifier(null);
         }
-        if (shouldDelete(newSample.getParentIdentifier()))
+        if (isDeleteMark(newSample.getParentIdentifier()))
         {
             newSample.setParentIdentifier(null);
         }
-        if (shouldDelete(newSample.getContainerIdentifier()))
+        if (isDeleteMark(newSample.getContainerIdentifier()))
         {
             newSample.setContainerIdentifier(null);
         }
+        final List<IEntityProperty> updatedProperties = new ArrayList<IEntityProperty>();
+        for (IEntityProperty property : newSample.getProperties())
+        {
+            if (isDeleteMark(property.getValue()) == false)
+            {
+                updatedProperties.add(property);
+            }
+        }
+        newSample.setProperties(updatedProperties.toArray(new IEntityProperty[0]));
     }
 
-    private static final String DELETE = "<DELETE>";
+    private static final String DELETE = "--DELETE--";
 
     private static boolean isNotEmpty(String value)
     {
         return StringUtils.isBlank(value) == false;
     }
 
-    private static boolean shouldDelete(String value)
+    private static boolean isDeleteMark(String value)
     {
         return DELETE.equals(value);
     }