diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/CommonClientService.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/CommonClientService.java
index 5b9be0a09e750bbb048faff749971dcc5e3628b2..b7f992069b06e422c26d38cd64f0721489263136 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/CommonClientService.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/CommonClientService.java
@@ -2775,7 +2775,21 @@ public final class CommonClientService extends AbstractClientService implements
         try
         {
             final String sessionToken = getSessionToken();
-            commonServer.updateProperty(sessionToken, kind, entityId, propertyColumnName, value);
+            switch (kind)
+            {
+                case DATA_SET:
+                    commonServer.updateDataSetProperty(sessionToken, entityId, propertyColumnName, value);
+                    break;
+                case EXPERIMENT:
+                    commonServer.updateExperimentProperty(sessionToken, entityId, propertyColumnName, value);
+                    break;
+                case MATERIAL:
+                    commonServer.updateMaterialProperty(sessionToken, entityId, propertyColumnName, value);
+                    break;
+                case SAMPLE:
+                    commonServer.updateSampleProperty(sessionToken, entityId, propertyColumnName, value);
+                    break;
+            }
         } catch (final UserFailureException e)
         {
             throw UserFailureExceptionTranslator.translate(e);
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 8cb8c7999764e3701573c97ec6c89a92c9935aec..fb73b4c172ec81c34ddc01027e612cfa15298977 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
@@ -2487,56 +2487,15 @@ public final class CommonServer extends AbstractCommonServer<ICommonServerForInt
         return dataStores.get(0).getDownloadUrl();
     }
 
-    public void updateProperty(String sessionToken, EntityKind kind, TechId entityId,
-            String propertyTypeCode, String value)
+    public void updateDataSetProperty(String sessionToken, TechId entityId,
+            String propertyColumnName, String value)
     {
         checkSession(sessionToken);
-        Map<String, String> properties = new HashMap<String, String>();
-        properties.put(CodeConverter.getPropertyTypeCode(propertyTypeCode), value);
-        switch (kind)
-        {
-            case MATERIAL:
-                updateMaterialProperties(sessionToken, entityId, properties);
-                break;
-            case EXPERIMENT:
-                updateExperimentProperties(sessionToken, entityId, properties);
-                break;
-            case SAMPLE:
-                EntityHelper.updateSampleProperties(this, sessionToken, entityId, properties);
-                break;
-            case DATA_SET:
-                updateDataSetProperties(sessionToken, entityId, properties);
-                break;
-        }
-    }
-
-    private void updateMaterialProperties(String sessionToken, TechId entityId,
-            Map<String, String> properties)
-    {
-        Date modificationDate = getDAOFactory().getMaterialDAO().tryGetByTechId(entityId).getModificationDate();
-        updateMaterial(sessionToken, entityId, EntityHelper.translatePropertiesMapToList(properties), modificationDate);
-    }
-
-    private void updateExperimentProperties(String sessionToken, TechId entityId,
-            Map<String, String> properties)
-    {
-        Experiment experiment = getExperimentInfo(sessionToken, entityId);
-        ExperimentUpdatesDTO updates = new ExperimentUpdatesDTO();
-        updates.setVersion(experiment.getModificationDate());
-        updates.setExperimentId(entityId);
-        updates.setAttachments(Collections.<NewAttachment>emptySet());
-        updates.setProjectIdentifier(new ProjectIdentifierFactory(experiment.getProject().getIdentifier()).createIdentifier());
-        updates.setProperties(EntityHelper.translatePropertiesMapToList(properties));
-        updateExperiment(sessionToken, updates);
-    }
-
-    private void updateDataSetProperties(String sessionToken, TechId dataSetID,
-            Map<String, String> properties)
-    {
-        ExternalData dataSet = getDataSetInfo(sessionToken, dataSetID);
+        ExternalData dataSet = getDataSetInfo(sessionToken, entityId);
         DataSetUpdatesDTO updates = new DataSetUpdatesDTO();
-        updates.setDatasetId(dataSetID);
+        updates.setDatasetId(entityId);
         updates.setVersion(dataSet.getModificationDate());
+        Map<String, String> properties = createPropertiesMap(propertyColumnName, value);
         updates.setProperties(EntityHelper.translatePropertiesMapToList(properties));
         Experiment exp = dataSet.getExperiment();
         if (exp != null)
@@ -2554,5 +2513,47 @@ public final class CommonServer extends AbstractCommonServer<ICommonServerForInt
         }
         updateDataSet(sessionToken, updates);
     }
+
+    public void updateExperimentProperty(String sessionToken, TechId entityId,
+            String propertyColumnName, String value)
+    {
+        checkSession(sessionToken);
+        Experiment experiment = getExperimentInfo(sessionToken, entityId);
+        ExperimentUpdatesDTO updates = new ExperimentUpdatesDTO();
+        updates.setVersion(experiment.getModificationDate());
+        updates.setExperimentId(entityId);
+        updates.setAttachments(Collections.<NewAttachment> emptySet());
+        updates.setProjectIdentifier(new ProjectIdentifierFactory(experiment.getProject()
+                .getIdentifier()).createIdentifier());
+        Map<String, String> properties = createPropertiesMap(propertyColumnName, value);
+        updates.setProperties(EntityHelper.translatePropertiesMapToList(properties));
+        updateExperiment(sessionToken, updates);
+    }
+
+    public void updateSampleProperty(String sessionToken, TechId entityId,
+            String propertyColumnName, String value)
+    {
+        checkSession(sessionToken);
+        Map<String, String> properties = createPropertiesMap(propertyColumnName, value);
+        EntityHelper.updateSampleProperties(this, sessionToken, entityId, properties);
+    }
+
+    public void updateMaterialProperty(String sessionToken, TechId entityId,
+            String propertyColumnName, String value)
+    {
+        checkSession(sessionToken);
+        Date modificationDate =
+                getDAOFactory().getMaterialDAO().tryGetByTechId(entityId).getModificationDate();
+        Map<String, String> properties = createPropertiesMap(propertyColumnName, value);
+        updateMaterial(sessionToken, entityId,
+                EntityHelper.translatePropertiesMapToList(properties), modificationDate);
+    }
+
+    private Map<String, String> createPropertiesMap(String propertyColumnName, String value)
+    {
+        Map<String, String> properties = new HashMap<String, String>();
+        properties.put(CodeConverter.getPropertyTypeCode(propertyColumnName), value);
+        return properties;
+    }
     
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServerLogger.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServerLogger.java
index 371dead6f423ccc549c97328eceb6373b1bb0c25..350f265e305d0753b59a7cd2d635f6a3c9e03df8 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServerLogger.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServerLogger.java
@@ -1067,11 +1067,31 @@ final class CommonServerLogger extends AbstractServerLogger implements ICommonSe
         return null;
     }
 
-    public void updateProperty(String sessionToken, EntityKind kind, TechId entityId,
-            String propertyTypeCode, String value)
+    public void updateDataSetProperty(String sessionToken, TechId entityId,
+            String propertyColumnName, String value)
     {
-        logTracking(sessionToken, "updateProperty",
-                "ENTITY_KIND(%s) ID(%s) PROPERTY_COLUMN_NAME(%s) VALUE(%s)", kind, entityId,
-                propertyTypeCode, value);
+        logTracking(sessionToken, "updateDataSetProperty",
+                "ID(%s) PROPERTY_COLUMN_NAME(%s) VALUE(%s)", entityId, propertyColumnName, value);
+    }
+
+    public void updateExperimentProperty(String sessionToken, TechId entityId,
+            String propertyColumnName, String value)
+    {
+        logTracking(sessionToken, "updateExperimentProperty",
+                "ID(%s) PROPERTY_COLUMN_NAME(%s) VALUE(%s)", entityId, propertyColumnName, value);
+    }
+
+    public void updateSampleProperty(String sessionToken, TechId entityId,
+            String propertyColumnName, String value)
+    {
+        logTracking(sessionToken, "updateSampleProperty",
+                "ID(%s) PROPERTY_COLUMN_NAME(%s) VALUE(%s)", entityId, propertyColumnName, value);
+    }
+
+    public void updateMaterialProperty(String sessionToken, TechId entityId,
+            String propertyColumnName, String value)
+    {
+        logTracking(sessionToken, "updateMaterialProperty",
+                "ID(%s) PROPERTY_COLUMN_NAME(%s) VALUE(%s)", entityId, propertyColumnName, value);
     }
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/ICommonServer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/ICommonServer.java
index f9aadb8a6e699e4426fa7e64a5e4b2b653d25380..558c925c056bf41d86b38336068e2dc7aff5f87c 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/ICommonServer.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/ICommonServer.java
@@ -1344,7 +1344,25 @@ public interface ICommonServer extends IServer
 
     @Transactional
     @RolesAllowed(RoleWithHierarchy.SPACE_USER)
-    public void updateProperty(String sessionToken, EntityKind kind, TechId entityId,
+    public void updateDataSetProperty(String sessionToken,
+            @AuthorizationGuard(guardClass = DataSetTechIdPredicate.class) TechId entityId,
+            String propertyColumnName, String value);
+
+    @Transactional
+    @RolesAllowed(RoleWithHierarchy.SPACE_USER)
+    public void updateExperimentProperty(String sessionToken,
+            @AuthorizationGuard(guardClass = ExperimentTechIdPredicate.class) TechId entityId,
+            String propertyColumnName, String value);
+
+    @Transactional
+    @RolesAllowed(RoleWithHierarchy.SPACE_USER)
+    public void updateSampleProperty(String sessionToken,
+            @AuthorizationGuard(guardClass = SampleTechIdPredicate.class) TechId entityId,
+            String propertyColumnName, String value);
+
+    @Transactional
+    @RolesAllowed(RoleWithHierarchy.INSTANCE_ADMIN)
+    public void updateMaterialProperty(String sessionToken, TechId entityId,
             String propertyColumnName, String value);
 
 }
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/ICommonServer.java.expected b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/ICommonServer.java.expected
index f9aadb8a6e699e4426fa7e64a5e4b2b653d25380..558c925c056bf41d86b38336068e2dc7aff5f87c 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/ICommonServer.java.expected
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/ICommonServer.java.expected
@@ -1344,7 +1344,25 @@ public interface ICommonServer extends IServer
 
     @Transactional
     @RolesAllowed(RoleWithHierarchy.SPACE_USER)
-    public void updateProperty(String sessionToken, EntityKind kind, TechId entityId,
+    public void updateDataSetProperty(String sessionToken,
+            @AuthorizationGuard(guardClass = DataSetTechIdPredicate.class) TechId entityId,
+            String propertyColumnName, String value);
+
+    @Transactional
+    @RolesAllowed(RoleWithHierarchy.SPACE_USER)
+    public void updateExperimentProperty(String sessionToken,
+            @AuthorizationGuard(guardClass = ExperimentTechIdPredicate.class) TechId entityId,
+            String propertyColumnName, String value);
+
+    @Transactional
+    @RolesAllowed(RoleWithHierarchy.SPACE_USER)
+    public void updateSampleProperty(String sessionToken,
+            @AuthorizationGuard(guardClass = SampleTechIdPredicate.class) TechId entityId,
+            String propertyColumnName, String value);
+
+    @Transactional
+    @RolesAllowed(RoleWithHierarchy.INSTANCE_ADMIN)
+    public void updateMaterialProperty(String sessionToken, TechId entityId,
             String propertyColumnName, String value);
 
 }