diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/managed_property/EntityInformationProvider.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/managed_property/EntityInformationProvider.java
index e16f819943fe75b5bc4fef8bf046a816900d4e25..b0ff3aa9165fc3a894d815e5fbf01ecc8e07fa34 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/managed_property/EntityInformationProvider.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/managed_property/EntityInformationProvider.java
@@ -26,7 +26,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.MaterialIdentifier;
 import ch.systemsx.cisd.openbis.generic.shared.dto.MaterialPE;
 import ch.systemsx.cisd.openbis.generic.shared.managed_property.EntityLinkElementTranslator;
-import ch.systemsx.cisd.openbis.generic.shared.managed_property.IEntityInformationProvider;
+import ch.systemsx.cisd.openbis.generic.shared.managed_property.api.IEntityInformationProvider;
 import ch.systemsx.cisd.openbis.generic.shared.managed_property.api.IEntityLinkElement;
 
 /**
@@ -35,10 +35,17 @@ import ch.systemsx.cisd.openbis.generic.shared.managed_property.api.IEntityLinkE
 @Component(value = ResourceNames.ENTITY_INFORMATION_PROVIDER)
 public class EntityInformationProvider implements IEntityInformationProvider
 {
+    // @Autowired
+    private final IDAOFactory daoFactory;
+
     @Autowired
-    private IDAOFactory daoFactory;
+    public EntityInformationProvider(IDAOFactory daoFactory)
+    {
+        assert daoFactory != null;
+        this.daoFactory = daoFactory;
+    }
 
-    public String getIdentifier(EntityKind entityKind, String permId)
+    private String getIdentifier(EntityKind entityKind, String permId)
     {
         IIdentifierHolder identifierHolderOrNull = null;
         switch (entityKind)
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/ManagedPropertyEvaluator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/ManagedPropertyEvaluator.java
index 02bbd219ccf11efdf189e47bbeaca1796b8d4f84..2c8bc15bd3d94a4bfe03e20d954404bcd1a54026 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/ManagedPropertyEvaluator.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/ManagedPropertyEvaluator.java
@@ -106,7 +106,7 @@ public class ManagedPropertyEvaluator
 
     public ManagedPropertyEvaluator(String scriptExpression)
     {
-        evaluator = new Evaluator("", ScriptUtilityFactory.class, scriptExpression);
+        evaluator = new Evaluator("", ManagedPropertyFunctions.class, scriptExpression);
         updateFromBatchFunctionDefined = evaluator.hasFunction(UPDATE_FROM_BATCH_INPUT_FUNCTION);
         List<String> names = new ArrayList<String>();
         if (evaluator.hasFunction(BATCH_COLUMN_NAMES_FUNCTION))
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/ScriptUtilityFactory.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/ManagedPropertyFunctions.java
similarity index 82%
rename from openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/ScriptUtilityFactory.java
rename to openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/ManagedPropertyFunctions.java
index a58bc5c8708f8788716c934b4b4d5bd274b34040..7db779092143f447e91fff39288b2898bc8c4e76 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/ScriptUtilityFactory.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/ManagedPropertyFunctions.java
@@ -8,6 +8,7 @@ import ch.systemsx.cisd.openbis.generic.shared.ResourceNames;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.api.ValidationException;
 import ch.systemsx.cisd.openbis.generic.shared.managed_property.api.IElement;
 import ch.systemsx.cisd.openbis.generic.shared.managed_property.api.IElementFactory;
+import ch.systemsx.cisd.openbis.generic.shared.managed_property.api.IEntityInformationProvider;
 import ch.systemsx.cisd.openbis.generic.shared.managed_property.api.ISimpleTableModelBuilderAdaptor;
 import ch.systemsx.cisd.openbis.generic.shared.managed_property.api.IStructuredPropertyConverter;
 import ch.systemsx.cisd.openbis.generic.shared.managed_property.structured.ElementFactory;
@@ -19,7 +20,7 @@ import ch.systemsx.cisd.openbis.generic.shared.managed_property.structured.XmlSt
  * All public methods of this class are part of the Managed Properties API.
  */
 @Component(value = ResourceNames.MANAGED_PROPERTY_SCRIPT_UTILITY_FACTORY)
-public class ScriptUtilityFactory
+public class ManagedPropertyFunctions
 {
     private static final IElementFactory ELEMENT_FACTORY_INSTANCE = new ElementFactory();
 
@@ -38,10 +39,10 @@ public class ScriptUtilityFactory
     @Resource(name = ResourceNames.ENTITY_INFORMATION_PROVIDER)
     public void setEntityInformationProvider(IEntityInformationProvider entityInformationProvider)
     {
-        ScriptUtilityFactory.entityInformationProvider = entityInformationProvider;
+        ManagedPropertyFunctions.entityInformationProvider = entityInformationProvider;
     }
 
-    private ScriptUtilityFactory()
+    private ManagedPropertyFunctions()
     {
 
     }
@@ -67,7 +68,7 @@ public class ScriptUtilityFactory
     /**
      * @return a factory object that can be used to create {@link IElement}-s.
      */
-    public static IElementFactory getElementFactory()
+    public static IElementFactory elementFactory()
     {
         return ELEMENT_FACTORY_INSTANCE;
     }
@@ -75,9 +76,17 @@ public class ScriptUtilityFactory
     /**
      * @return a converter that can translate {@link IElement} to/from Strings.
      */
-    public static IStructuredPropertyConverter getPropertyConverter()
+    public static IStructuredPropertyConverter propertyConverter()
     {
         return STRUCTURED_PROPERTY_CONVERTER_INSTANCE;
     }
 
+    /**
+     * @return a provider of information about entities.
+     */
+    public static IEntityInformationProvider entityInformationProvider()
+    {
+        return entityInformationProvider;
+    }
+
 }
\ No newline at end of file
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/SimpleTableModelBuilderAdaptor.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/SimpleTableModelBuilderAdaptor.java
index d9510a6c800d29d10a895a6ee88c3aefdd04eb8b..608bece4b357f37553eb98c29bee02cb01a55d14 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/SimpleTableModelBuilderAdaptor.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/SimpleTableModelBuilderAdaptor.java
@@ -21,6 +21,7 @@ import java.util.Date;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityTableCell;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModel;
+import ch.systemsx.cisd.openbis.generic.shared.managed_property.api.IEntityInformationProvider;
 import ch.systemsx.cisd.openbis.generic.shared.managed_property.api.IEntityLinkElement;
 import ch.systemsx.cisd.openbis.generic.shared.managed_property.api.IRowBuilderAdaptor;
 import ch.systemsx.cisd.openbis.generic.shared.managed_property.api.ISimpleTableModelBuilderAdaptor;
@@ -118,7 +119,7 @@ public class SimpleTableModelBuilderAdaptor implements ISimpleTableModelBuilderA
                     final EntityKind entityKind =
                             EntityLinkElementTranslator.translate(value.getEntityLinkKind());
                     final String permId = value.getPermId();
-                    final String identifierOrNull = tryExtractIdentifier(entityKind, permId);
+                    final String identifierOrNull = tryExtractIdentifier(value);
                     return new EntityTableCell(entityKind, permId, identifierOrNull);
                 }
 
@@ -135,8 +136,8 @@ public class SimpleTableModelBuilderAdaptor implements ISimpleTableModelBuilderA
         builder.addFullRow(values);
     }
 
-    private String tryExtractIdentifier(EntityKind entityKind, String permId)
+    private String tryExtractIdentifier(IEntityLinkElement entityLink)
     {
-        return entityInformationProvider.getIdentifier(entityKind, permId);
+        return entityInformationProvider.getIdentifier(entityLink);
     }
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/EntityLinkElementKind.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/EntityLinkElementKind.java
index 6007831c8d5386e675527df8a00a6a168e5063fa..f40f4816410a3f21d9712227035ab7a270ed5f59 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/EntityLinkElementKind.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/EntityLinkElementKind.java
@@ -19,15 +19,18 @@ package ch.systemsx.cisd.openbis.generic.shared.managed_property.api;
 /**
  * The type of an entity link.
  * <p>
+ * <b>All methods of this enum are part of the Managed Properties API.</b>
  * 
  * @author Kaloyan Enimanev
  */
 public enum EntityLinkElementKind
 {
 
-    EXPERIMENT("Experiment"), SAMPLE("Sample"), DATA_SET("Dataset", "Data Set"), MATERIAL("Material");
+    EXPERIMENT("Experiment"), SAMPLE("Sample"), DATA_SET("Dataset", "Data Set"), MATERIAL(
+            "Material");
 
     private final String elementName;
+
     private final String label;
 
     private EntityLinkElementKind(String elementName)
@@ -40,7 +43,7 @@ public enum EntityLinkElementKind
         this.elementName = elementName;
         this.label = label;
     }
-    
+
     /**
      * the {@link IElement} name corresponding to the link.
      */
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/IElement.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/IElement.java
index d2aff9f63290bb1156ea2f2c889d48e4d7a41f4f..f5c35b298384704f5d19bc2e0f692dd056ec9a6f 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/IElement.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/IElement.java
@@ -26,6 +26,8 @@ import java.util.Map;
  * <p>
  * {@link IElement}-s are meant to be used as a convenient, hierarchical property-value persistence
  * technique for managed properties.
+ * <p>
+ * <b>All methods of this interface are part of the Managed Properties API.</b>
  * 
  * @author Piotr Buczek
  * @author Kaloyan Enimanev
@@ -60,9 +62,9 @@ public interface IElement
      * @return all children {@link IElement}-s.
      */
     List<IElement> getChildren();
-    
+
     Map<String, String> getAttributes();
-    
+
     IElement setAttributes(Map<String, String> attributes);
 
     /**
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/IElementFactory.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/IElementFactory.java
index c83730ed94e54d74f9ce772d08d698e28057be33..d78be893ad8fec40cbc99a414301d4efb277f9a2 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/IElementFactory.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/IElementFactory.java
@@ -18,6 +18,8 @@ package ch.systemsx.cisd.openbis.generic.shared.managed_property.api;
 
 /**
  * Contains helper method to construct {@link IElement} instances.
+ * <p>
+ * <b>All methods of this enum are part of the Managed Properties API.</b>
  * 
  * @author Kaloyan Enimanev
  */
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/IEntityInformationProvider.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/IEntityInformationProvider.java
similarity index 68%
rename from openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/IEntityInformationProvider.java
rename to openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/IEntityInformationProvider.java
index 2333d91646cf3de0bf81e71f4e40351f9b1c3641..158fddfa33f802c9dfd488746fb58e870908a0bd 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/IEntityInformationProvider.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/IEntityInformationProvider.java
@@ -14,15 +14,21 @@
  * limitations under the License.
  */
 
-package ch.systemsx.cisd.openbis.generic.shared.managed_property;
-
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind;
+package ch.systemsx.cisd.openbis.generic.shared.managed_property.api;
 
 /**
+ * Provides required information about entities.
+ * <p>
+ * <b>All methods of this enum are part of the Managed Properties API.</b>
+ * 
  * @author Piotr Buczek
  */
 public interface IEntityInformationProvider
 {
-    /** @return identifier of entity with given kind and permid, <code>null</code> if such entity doesn't exist */
-    String getIdentifier(EntityKind entityKind, String permId); 
+    /**
+     * @return identifier of entity specified by given link, <code>null</code> if such an entity
+     *         doesn't exist
+     */
+    String getIdentifier(IEntityLinkElement entityLink);
+
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/IEntityLinkElement.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/IEntityLinkElement.java
index 450a7fad0f045b2b8dc41715f6d494f04bb4c505..391ceef7d689635dd34fb3fc929969c0c4e5c117 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/IEntityLinkElement.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/IEntityLinkElement.java
@@ -16,9 +16,10 @@
 
 package ch.systemsx.cisd.openbis.generic.shared.managed_property.api;
 
-
 /**
  * Denotes a link to an entity in the openBIS database.
+ * <p>
+ * <b>All methods of this enum are part of the Managed Properties API.</b>
  * 
  * @author Kaloyan Enimanev
  */
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/IRowBuilderAdaptor.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/IRowBuilderAdaptor.java
index a83f814cb1d184178741c72d0dd40d1aff67be78..b58eb0b68d6ab994b9e550047a0b76828417275f 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/IRowBuilderAdaptor.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/IRowBuilderAdaptor.java
@@ -21,7 +21,7 @@ import java.util.Date;
 /**
  * Builder of a row of a simple table.
  * <p>
- * All methods of this interface are part of the Managed Properties API.
+ * <b>All methods of this enum are part of the Managed Properties API.</b>
  * 
  * @see ISimpleTableModelBuilderAdaptor
  * @author Piotr Buczek
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/ISimpleTableModelBuilderAdaptor.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/ISimpleTableModelBuilderAdaptor.java
index e05b9777cf9f1b95c5dae8798a0d43e464827fa7..0ab800943b78a9d77ecb98738ad28b493da49c06 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/ISimpleTableModelBuilderAdaptor.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/ISimpleTableModelBuilderAdaptor.java
@@ -22,7 +22,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.api.ITableModel;
 /**
  * Builder of simple table models. All column titles should be unique.
  * <p>
- * All methods of this interface are part of the Managed Properties API.
+ * <b>All methods of this enum are part of the Managed Properties API.</b>
  * 
  * @author Piotr Buczek
  */
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/IStructuredPropertyConverter.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/IStructuredPropertyConverter.java
index bd23080a8163fb1657bc0adb11294637f1734501..a7c63ee69c30ed4b758cb80b670fef0412f99116 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/IStructuredPropertyConverter.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/IStructuredPropertyConverter.java
@@ -23,6 +23,8 @@ import ch.systemsx.cisd.openbis.generic.shared.managed_property.structured.Eleme
 
 /**
  * Abstracts the conversion of {@link Element} objects to/from database strings.
+ * <p>
+ * <b>All methods of this enum are part of the Managed Properties API.</b>
  * 
  * @author Kaloyan Enimanev
  */
@@ -34,10 +36,10 @@ public interface IStructuredPropertyConverter
      * @return an empty list if the value is undefined or special.
      */
     List<IElement> convertToElements(IManagedProperty property);
-    
+
     /**
      * @return a {@link String} representation of the specified elements that can be persisted in
-     *         the database. 
+     *         the database.
      */
     String convertToString(List<IElement> elements);
 
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractBOTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractBOTest.java
index 6609f459d4774f46a16d678bc51b75a7e6b9ecd9..97fbcd3a0436036d8d28862867d0edbc01eeeffc 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractBOTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractBOTest.java
@@ -36,7 +36,6 @@ import ch.systemsx.cisd.openbis.generic.server.dataaccess.IExperimentDAO;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IExternalDataDAO;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IFileFormatTypeDAO;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IGridCustomFilterDAO;
-import ch.systemsx.cisd.openbis.generic.server.dataaccess.ISpaceDAO;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.ILocatorTypeDAO;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IMaterialDAO;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IPersonDAO;
@@ -46,6 +45,7 @@ import ch.systemsx.cisd.openbis.generic.server.dataaccess.IRelationshipTypeDAO;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.ISampleDAO;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.ISampleTypeDAO;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IScriptDAO;
+import ch.systemsx.cisd.openbis.generic.server.dataaccess.ISpaceDAO;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IVocabularyDAO;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IVocabularyTermDAO;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.db.IPermIdDAO;
@@ -186,6 +186,8 @@ public abstract class AbstractBOTest extends AssertJUnit
                     will(returnValue(scriptDAO));
                     allowing(daoFactory).getMaterialDAO();
                     will(returnValue(materialDAO));
+                    allowing(daoFactory).getExperimentDAO();
+                    will(returnValue(experimentDAO));
                 }
             });
     }
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/managed_property/EntityInformationProviderTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/managed_property/EntityInformationProviderTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..ce2622f2823ef87fcaf4f0a4a3ca281fc269c497
--- /dev/null
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/managed_property/EntityInformationProviderTest.java
@@ -0,0 +1,91 @@
+/*
+ * Copyright 2009 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.server.business.bo.managed_property;
+
+import org.jmock.Expectations;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+import ch.systemsx.cisd.common.logging.LogInitializer;
+import ch.systemsx.cisd.openbis.generic.server.business.bo.AbstractBOTest;
+import ch.systemsx.cisd.openbis.generic.shared.CommonTestUtils;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.MaterialIdentifier;
+import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentPE;
+import ch.systemsx.cisd.openbis.generic.shared.dto.SamplePE;
+import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ExperimentIdentifier;
+import ch.systemsx.cisd.openbis.generic.shared.managed_property.api.IEntityLinkElement;
+import ch.systemsx.cisd.openbis.generic.shared.managed_property.structured.ElementFactory;
+
+/**
+ * @author Piotr Buczek
+ */
+public class EntityInformationProviderTest extends AbstractBOTest
+{
+
+    private EntityInformationProvider provider;
+
+    private ElementFactory elementFactory;
+
+    @BeforeMethod
+    public void setUp()
+    {
+        LogInitializer.init();
+        provider = new EntityInformationProvider(daoFactory);
+        elementFactory = new ElementFactory();
+    }
+
+    @Test
+    public void testGetIdentifier()
+    {
+        final String mCode = "mCode";
+        final String mTypeCode = "mTypeCode";
+        final String sPermId = "sPermId";
+        final String ePermId = "ePermId";
+        final String dPermId = "dPermId";
+        IEntityLinkElement sampleLink = elementFactory.createSampleLink(sPermId);
+        IEntityLinkElement experimentLink = elementFactory.createExperimentLink(ePermId);
+        IEntityLinkElement materialLink = elementFactory.createMaterialLink(mCode, mTypeCode);
+        IEntityLinkElement datasetLink = elementFactory.createDataSetLink(dPermId);
+
+        final SamplePE sample = CommonTestUtils.createSample();
+        final ExperimentPE experiment =
+                CommonTestUtils.createExperiment(new ExperimentIdentifier("proj", "exp"));
+        context.checking(new Expectations()
+            {
+                {
+                    one(sampleDAO).tryToFindByPermID(sPermId);
+                    will(returnValue(sample));
+
+                    one(experimentDAO).tryGetByPermID(ePermId);
+                    will(returnValue(experiment));
+                    one(materialDAO).tryFindMaterial(new MaterialIdentifier(mCode, mTypeCode));
+                    // will(returnValue(any(MaterialPE.class)));
+
+                    one(externalDataDAO).tryToFindDataSetByCode(dPermId);
+                    // will(returnValue(any(DataPE.class)));
+                }
+            });
+
+        String sIdentifier = provider.getIdentifier(sampleLink);
+        assertEquals(sample.getIdentifier(), sIdentifier);
+        String eIdentifier = provider.getIdentifier(experimentLink);
+        assertEquals(experiment.getIdentifier(), eIdentifier);
+        String mIdentifier = provider.getIdentifier(materialLink);
+        String dIdentifier = provider.getIdentifier(datasetLink);
+    }
+
+}
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/structured/StructuredPropertyConverterPythonTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/structured/StructuredPropertyConverterPythonTest.java
index 5f79271b9f18501fb2e1db17b0c07f4d5496f477..33806bf1476c78a1b4e56bd2de2e83ed4ee2a3f3 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/structured/StructuredPropertyConverterPythonTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/structured/StructuredPropertyConverterPythonTest.java
@@ -29,7 +29,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityProperty;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ManagedEntityProperty;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.api.IManagedProperty;
 import ch.systemsx.cisd.openbis.generic.shared.managed_property.ManagedPropertyEvaluator;
-import ch.systemsx.cisd.openbis.generic.shared.managed_property.ScriptUtilityFactory;
+import ch.systemsx.cisd.openbis.generic.shared.managed_property.ManagedPropertyFunctions;
 import ch.systemsx.cisd.openbis.generic.shared.managed_property.api.IElement;
 
 /**
@@ -55,7 +55,7 @@ public class StructuredPropertyConverterPythonTest extends AssertJUnit
 
         // the script will create several elements and serialize them in the property value
         List<IElement> elements =
-                ScriptUtilityFactory.getPropertyConverter().convertToElements(managedProperty);
+                ManagedPropertyFunctions.propertyConverter().convertToElements(managedProperty);
 
         assertEquals(3, elements.size());
     }
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/structured/structured-property-test.py b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/structured/structured-property-test.py
index 7fc95c5fd40417657580a7eb657e59e8dfba25fa..958557d1202fd9ed5d97610ece080c8fdded2d4a 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/structured/structured-property-test.py
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/structured/structured-property-test.py
@@ -1,5 +1,5 @@
-factory = getElementFactory()
-converter = getPropertyConverter()
+factory = elementFactory()
+converter = propertyConverter()
 
 #
 # we use a function named "configureUI" to test something completely unrelated,
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/util/SimpleTableModelBuilderTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/util/SimpleTableModelBuilderTest.java
index b66a83118902b98857b0b85d2662d3ca26c776d6..63a539b6274b648915a4cf0c35168250bdb56e10 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/util/SimpleTableModelBuilderTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/util/SimpleTableModelBuilderTest.java
@@ -196,9 +196,9 @@ public class SimpleTableModelBuilderTest extends AssertJUnit
         rowBuilder.setCell("datasetCol", createDataSetCell("d2"));
         rowBuilder = builder.addRow();
         rowBuilder.setCell("materialCol", SimpleTableModelBuilder.createNullCell());
-        rowBuilder.setCell("sampleCol", createSampleCell("s3"));
+        rowBuilder.setCell("sampleCol", createSampleCell("s3", null));
         rowBuilder.setCell("experimentCol", SimpleTableModelBuilder.createNullCell());
-        rowBuilder.setCell("datasetCol", createDataSetCell("d3"));
+        rowBuilder.setCell("datasetCol", createDataSetCell("d3", "d3 id"));
 
         TableModel tableModel = builder.getTableModel();
 
@@ -225,9 +225,13 @@ public class SimpleTableModelBuilderTest extends AssertJUnit
         assertEquals("d2", rows.get(1).getValues().get(3).toString());
         assertEquals(4, rows.get(2).getValues().size());
         assertEquals("", rows.get(2).getValues().get(0).toString());
-        assertEquals("s3", rows.get(2).getValues().get(1).toString());
+        assertEquals("s3 (missing)", rows.get(2).getValues().get(1).toString());
+        assertEquals(true, ((EntityTableCell) rows.get(2).getValues().get(1)).isMissing());
+        assertEquals("s3", ((EntityTableCell) rows.get(2).getValues().get(1)).getPermId());
         assertEquals("", rows.get(2).getValues().get(2).toString());
-        assertEquals("d3", rows.get(2).getValues().get(3).toString());
+        assertEquals("d3 id", rows.get(2).getValues().get(3).toString());
+        assertEquals(false, ((EntityTableCell) rows.get(2).getValues().get(3)).isMissing());
+        assertEquals("d3", ((EntityTableCell) rows.get(2).getValues().get(3)).getPermId());
     }
 
     private static EntityTableCell createMaterialCell(String permId)
@@ -240,6 +244,11 @@ public class SimpleTableModelBuilderTest extends AssertJUnit
         return new EntityTableCell(EntityKind.SAMPLE, permId);
     }
 
+    private static EntityTableCell createSampleCell(String permId, String identifierOrNull)
+    {
+        return new EntityTableCell(EntityKind.SAMPLE, permId, identifierOrNull);
+    }
+
     private static EntityTableCell createExperimentCell(String permId)
     {
         return new EntityTableCell(EntityKind.EXPERIMENT, permId);
@@ -250,6 +259,11 @@ public class SimpleTableModelBuilderTest extends AssertJUnit
         return new EntityTableCell(EntityKind.DATA_SET, permId);
     }
 
+    private static EntityTableCell createDataSetCell(String permId, String identifierOrNull)
+    {
+        return new EntityTableCell(EntityKind.DATA_SET, permId, identifierOrNull);
+    }
+
     private void assertHeader(String expectedTitle, String expectedID, int expectedDefaultWidth,
             int expectedIndex, DataTypeCode expectedDataType, TableModelColumnHeader header)
     {