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 4a562c7f690bdb82aea55f6d2866d8800f641b6f..c3f7ed8094cdcef2ebbed05b81c423f176480cc1 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
@@ -641,8 +641,7 @@ public final class CommonServer extends AbstractCommonServer<ICommonServer> impl
         IEntityTypePropertyTypeBO etptBO =
                 businessObjectFactory.createEntityTypePropertyTypeBO(session, DtoConverters
                         .convertEntityKind(entityKind));
-        etptBO.loadAssignment(propertyTypeCode, entityTypeCode);
-        return etptBO.getLoadedAssignment().getPropertyValues().size();
+        return etptBO.countAssignmentValues(propertyTypeCode, entityTypeCode);
     }
 
     public final void registerPropertyType(final String sessionToken,
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/EntityTypePropertyTypeBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/EntityTypePropertyTypeBO.java
index c0a4b11b871d44cdec4b167f9b3dc300ea4964ed..4bae4196747265735123cdf38905b09925bcf85a 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/EntityTypePropertyTypeBO.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/EntityTypePropertyTypeBO.java
@@ -19,6 +19,7 @@ package ch.systemsx.cisd.openbis.generic.server.business.bo;
 import java.util.List;
 
 import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang.time.StopWatch;
 import org.springframework.dao.DataAccessException;
 
 import ch.rinn.restrictions.Private;
@@ -84,12 +85,20 @@ public class EntityTypePropertyTypeBO extends AbstractBusinessObject implements
 
     public void loadAssignment(String propertyTypeCode, String entityTypeCode)
     {
+        StopWatch watch = new StopWatch();
+        watch.start();
         EntityTypePE entityType = findEntityType(entityTypeCode);
         PropertyTypePE propertyType = findPropertyType(propertyTypeCode);
         IEntityPropertyTypeDAO entityPropertyTypeDAO = getEntityPropertyTypeDAO(entityKind);
         assignment = entityPropertyTypeDAO.tryFindAssignment(entityType, propertyType);
     }
 
+    public int countAssignmentValues(String propertyTypeCode, String entityTypeCode)
+    {
+        IEntityPropertyTypeDAO entityPropertyTypeDAO = getEntityPropertyTypeDAO(entityKind);
+        return entityPropertyTypeDAO.countAssignmentValues(entityTypeCode, propertyTypeCode);
+    }
+
     public void createAssignment(String propertyTypeCode, String entityTypeCode,
             boolean isMandatory, String defaultValue, String section, Long previousETPTOrdinal)
     {
@@ -101,11 +110,11 @@ public class EntityTypePropertyTypeBO extends AbstractBusinessObject implements
         // fill default property values
         if (isMandatory)
         {
-            List<IEntityPropertiesHolder> entities = getAllEntities(entityType);
             String errorMsgTemplate =
                     "Cannot create mandatory assignment. "
                             + "Please specify 'Initial Value', which will be used for %s %s%s "
                             + "of type '%s' already existing in the database.";
+            List<IEntityPropertiesHolder> entities = getAllEntities(entityType);
             addPropertyWithDefaultValue(entityType, propertyType, defaultValue, entities,
                     errorMsgTemplate);
         } else if (StringUtils.isEmpty(defaultValue) == false)
@@ -132,7 +141,6 @@ public class EntityTypePropertyTypeBO extends AbstractBusinessObject implements
                         .getLabel(), createPlural(size), entityType.getCode()));
             }
         }
-        // TODO 2009-06-01, Piotr Buczek: no validation of default value
         for (IEntityPropertiesHolder entity : entities)
         {
             final EntityPropertyPE property =
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/IEntityTypePropertyTypeBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/IEntityTypePropertyTypeBO.java
index c0c976fb130861020698dc8bd9483a9b22cbc5f1..55a0fc87423d3ff1213245e6057ac58c8befcf83 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/IEntityTypePropertyTypeBO.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/IEntityTypePropertyTypeBO.java
@@ -37,6 +37,12 @@ public interface IEntityTypePropertyTypeBO
      */
     void loadAssignment(String propertyTypeCode, String entityTypeCode);
 
+    /**
+     * Returns number of property values used by entities for assignment between specified property
+     * type and entity type.
+     */
+    int countAssignmentValues(String propertyTypeCode, String entityTypeCode);
+
     /**
      * Returns loaded assignment.
      */
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/IEntityPropertyTypeDAO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/IEntityPropertyTypeDAO.java
index a24c1e9132ebcd3762ecdde5893a770eb96fd60a..dbf8508c0ca6346e30efcb0acbb893bf3dfeb9df 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/IEntityPropertyTypeDAO.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/IEntityPropertyTypeDAO.java
@@ -51,6 +51,8 @@ public interface IEntityPropertyTypeDAO
     public EntityTypePropertyTypePE tryFindAssignment(EntityTypePE entityType,
             PropertyTypePE propertyType);
 
+    public int countAssignmentValues(String entityTypeCode, String propertyTypeCode);
+
     /**
      * Creates a new {@link EntityTypePropertyTypePE} assignment.
      */
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/EntityPropertyTypeDAO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/EntityPropertyTypeDAO.java
index faad74b2ae4a407669b328a1e9887173be8a1f0f..1aa7c0be941a83eb1ce9aae918701a0c0c32249e 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/EntityPropertyTypeDAO.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/EntityPropertyTypeDAO.java
@@ -110,6 +110,21 @@ final class EntityPropertyTypeDAO extends AbstractDAO implements IEntityProperty
         return etpt;
     }
 
+    public int countAssignmentValues(String entityTypeCode, String propertyTypeCode)
+    {
+        assert entityTypeCode != null : "Unspecified entity type.";
+        assert propertyTypeCode != null : "Unspecified property type.";
+
+        String query =
+                String.format("select count(pv) from %s pa join pa.propertyValues pv "
+                        + "where pa.propertyTypeInternal.simpleCode = ? "
+                        + "and pa.entityTypeInternal.code = ?", entityKind
+                        .getEntityTypePropertyTypeAssignmentClass().getSimpleName(), entityKind
+                        .getEntityPropertyClass().getSimpleName());
+        return ((Long) (getHibernateTemplate().find(query,
+                toArray(propertyTypeCode, entityTypeCode)).get(0))).intValue();
+    }
+
     public final void createEntityPropertyTypeAssignment(
             final EntityTypePropertyTypePE entityPropertyTypeAssignement)
             throws DataAccessException
@@ -307,7 +322,7 @@ final class EntityPropertyTypeDAO extends AbstractDAO implements IEntityProperty
     {
         for (EntityPropertyPE propertyValue : propertyValues)
         {
-            propertyValue.getEntity().removeProperty(propertyValue);
+            propertyValue.getEntity().removeProperty(propertyValue); // FIXME loads entities?
         }
     }