diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/managed_property/ManagedPropertyGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/managed_property/ManagedPropertyGrid.java
index 8a53854b5038cdbd950e84209e795c4f551c7b23..687d6e3130f4c5853d3f833a57506aaf4b35930a 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/managed_property/ManagedPropertyGrid.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/managed_property/ManagedPropertyGrid.java
@@ -106,7 +106,7 @@ public class ManagedPropertyGrid extends TypedTableGrid<ReportRowModel>
         {
             return;
         }
-        if (managedProperty.getUiDescription().getActions().length > 0)
+        if (managedProperty.getUiDescription().getActions().size() > 0)
         {
             addEntityOperationsLabel();
             addEntityOperationButtons();
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ManagedUiActionDescription.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ManagedUiActionDescription.java
index 913807ad4ef538a2ed0fa2804f9eabe8f6932d13..3d42d5101cdca453ffd40f9b0ba3ba989dc8ef9c 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ManagedUiActionDescription.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ManagedUiActionDescription.java
@@ -67,9 +67,9 @@ public class ManagedUiActionDescription implements IManagedUiAction, ISerializab
         return this;
     }
 
-    public IManagedInputWidgetDescription[] getInputWidgetDescriptions()
+    public List<IManagedInputWidgetDescription> getInputWidgetDescriptions()
     {
-        return inputWidgets.toArray(new IManagedInputWidgetDescription[inputWidgets.size()]);
+        return inputWidgets;
     }
 
     public void setInputWidgetDescriptions(List<IManagedInputWidgetDescription> widgetDescriptions)
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ManagedUiDescription.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ManagedUiDescription.java
index 6194b4822cc0dc04bf875ba81956410a89a9243d..f298ac9b2ac82efc75cd07e31adab44a2c6533a3 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ManagedUiDescription.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ManagedUiDescription.java
@@ -66,9 +66,9 @@ public class ManagedUiDescription implements IManagedUiDescription, ISerializabl
         return action;
     }
 
-    public IManagedUiAction[] getActions()
+    public List<IManagedUiAction> getActions()
     {
-        return actions.toArray(new IManagedUiAction[actions.size()]);
+        return actions;
     }
 
     public void useTableOutput(ITableModel tableModel)
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ManagedUiTableActionDescription.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ManagedUiTableActionDescription.java
index c11dbe9c68340b9b6845935ed6428f094881165d..c98c00fd19fcf959e488c2ae26384c4e4bf622f3 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ManagedUiTableActionDescription.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ManagedUiTableActionDescription.java
@@ -80,14 +80,9 @@ public class ManagedUiTableActionDescription extends ManagedUiActionDescription
         return this;
     }
 
-    public int[] getSelectedRows()
+    public List<Integer> getSelectedRows()
     {
-        int[] result = new int[selectedRows.size()];
-        for (int i = 0; i < result.length; i++)
-        {
-            result[i] = selectedRows.get(i);
-        }
-        return result;
+        return selectedRows;
     }
 
     public void setSelectedRows(List<Integer> selectedRows)
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/api/IManagedUiAction.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/api/IManagedUiAction.java
index f75df268712569e3ae23801e34b25d5ae9f4f0b8..80534180ed219b49a347594edcb29e8581a6233b 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/api/IManagedUiAction.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/api/IManagedUiAction.java
@@ -16,6 +16,8 @@
 
 package ch.systemsx.cisd.openbis.generic.shared.basic.dto.api;
 
+import java.util.List;
+
 import ch.systemsx.cisd.openbis.generic.shared.basic.ISerializable;
 
 /**
@@ -64,10 +66,10 @@ public interface IManagedUiAction extends ISerializable
     public IManagedInputWidgetDescription addComboBoxInputField(String labels, String[] values);
 
     /**
-     * Returns an array of objects describing input widgets that will be used in user interface user
+     * Returns list of objects describing input widgets that will be used in user interface user
      * interface for modification of the managed property.
      */
-    public IManagedInputWidgetDescription[] getInputWidgetDescriptions();
+    public List<IManagedInputWidgetDescription> getInputWidgetDescriptions();
 
     /**
      * Convenience method returning value of input widget with given label or null if such widget
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/api/IManagedUiDescription.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/api/IManagedUiDescription.java
index 9e42436cf10f8a7a973948ff329889a06ac33568..204d6f4776ad5d7bf0b7a60832aede670149970e 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/api/IManagedUiDescription.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/api/IManagedUiDescription.java
@@ -16,6 +16,8 @@
 
 package ch.systemsx.cisd.openbis.generic.shared.basic.dto.api;
 
+import java.util.List;
+
 import ch.systemsx.cisd.openbis.generic.shared.basic.ISerializable;
 
 /**
@@ -35,7 +37,7 @@ public interface IManagedUiDescription extends ISerializable
 
     IManagedUiTableAction addTableAction(String name);
 
-    IManagedUiAction[] getActions();
+    List<IManagedUiAction> getActions();
 
     /**
      * Returns description of the widget that will be shown in detail view of the entity owning the
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/api/IManagedUiTableAction.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/api/IManagedUiTableAction.java
index 2612a7d6df758bb196a5e389bed0d51e9d791ae2..6810a8e23e126cb34e742c0a8e19a53507ad48b6 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/api/IManagedUiTableAction.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/api/IManagedUiTableAction.java
@@ -16,6 +16,7 @@
 
 package ch.systemsx.cisd.openbis.generic.shared.basic.dto.api;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -61,7 +62,7 @@ public interface IManagedUiTableAction extends IManagedUiAction
     /**
      * Returns list of indices of selected rows (empty if no row was selected).
      */
-    int[] getSelectedRows();
+    List<Integer> getSelectedRows();
 
     /**
      * Adds a binding between input field and table column.
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
index ce2622f2823ef87fcaf4f0a4a3ca281fc269c497..82cc2e388457450816c92fa80b6f3e1090d77ba1 100644
--- 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
@@ -24,9 +24,10 @@ 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.DataPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentPE;
+import ch.systemsx.cisd.openbis.generic.shared.dto.MaterialPE;
 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;
 
@@ -62,30 +63,57 @@ public class EntityInformationProviderTest extends AbstractBOTest
         IEntityLinkElement datasetLink = elementFactory.createDataSetLink(dPermId);
 
         final SamplePE sample = CommonTestUtils.createSample();
-        final ExperimentPE experiment =
-                CommonTestUtils.createExperiment(new ExperimentIdentifier("proj", "exp"));
+        final ExperimentPE experiment = CommonTestUtils.createExperiment();
+        final DataPE dataSet = CommonTestUtils.createDataSet();
+        final MaterialPE material = CommonTestUtils.createMaterial(mCode, mTypeCode);
         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)));
+                    will(returnValue(dataSet));
+                    one(materialDAO).tryFindMaterial(new MaterialIdentifier(mCode, mTypeCode));
+                    will(returnValue(material));
                 }
             });
 
         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);
-    }
+        assertEquals(dataSet.getIdentifier(), dIdentifier);
 
+        String mIdentifier = provider.getIdentifier(materialLink);
+        assertEquals(MaterialIdentifier.print(mCode, mTypeCode), mIdentifier);
+
+        // get identifiers of missing entities
+        final String fakePermId = "fakePermId";
+        final String fakeMCode = "fakeMCode";
+        final String fakeMTypeCode = "fakeMTypeCode";
+        context.checking(new Expectations()
+            {
+                {
+                    one(sampleDAO).tryToFindByPermID(fakePermId);
+                    will(returnValue(null));
+                    one(experimentDAO).tryGetByPermID(fakePermId);
+                    will(returnValue(null));
+                    one(externalDataDAO).tryToFindDataSetByCode(fakePermId);
+                    will(returnValue(null));
+                    one(materialDAO).tryFindMaterial(
+                            new MaterialIdentifier(fakeMCode, fakeMTypeCode));
+                    will(returnValue(null));
+                }
+            });
+        assertNull(provider.getIdentifier(elementFactory.createSampleLink(fakePermId)));
+        assertNull(provider.getIdentifier(elementFactory.createExperimentLink(fakePermId)));
+        assertNull(provider.getIdentifier(elementFactory.createDataSetLink(fakePermId)));
+        assertNull(provider.getIdentifier(elementFactory.createMaterialLink(fakeMCode,
+                fakeMTypeCode)));
+    }
 }
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/CommonTestUtils.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/CommonTestUtils.java
index 0553e457ef1c99f175411472eb222b98a3e0d8bb..65eff158fbe549a413e3ddf062c7f5c8748d9c41 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/CommonTestUtils.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/CommonTestUtils.java
@@ -24,6 +24,8 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataTypeCode;
 import ch.systemsx.cisd.openbis.generic.shared.dto.AttachmentContentPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.AttachmentPE;
+import ch.systemsx.cisd.openbis.generic.shared.dto.DataPE;
+import ch.systemsx.cisd.openbis.generic.shared.dto.DataSetTypePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.DataTypePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.DatabaseInstancePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.EntityPropertyPE;
@@ -33,6 +35,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentPropertyPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentTypePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentTypePropertyTypePE;
+import ch.systemsx.cisd.openbis.generic.shared.dto.MaterialPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.MaterialTypePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.PersonPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.ProjectPE;
@@ -81,6 +84,10 @@ public class CommonTestUtils
 
     private static final String SAMPLE_TYPE = "SAMPLE_TYPE";
 
+    private static final String DATA_SET_CODE = "20081105092158673-1";
+
+    private static final String DATA_SET_TYPE = "PROPRIETARY";
+
     public static final String USER_ID = "test";
 
     private static final String MATERIAL_TYPE_VIRUS = "MATERIAL_TYPE_VIRUS";
@@ -288,6 +295,25 @@ public class CommonTestUtils
         return samplePE;
     }
 
+    public static final DataPE createDataSet()
+    {
+        final DataPE dataPE = new DataPE();
+        dataPE.setCode(CommonTestUtils.DATA_SET_CODE);
+        final DataSetTypePE dataSetTypePE = new DataSetTypePE();
+        dataSetTypePE.setCode(CommonTestUtils.DATA_SET_TYPE);
+        dataPE.setDataSetType(dataSetTypePE);
+        return dataPE;
+    }
+
+    public static final MaterialPE createMaterial(String materialCode, String typeCode)
+    {
+        final MaterialPE materialPE = new MaterialPE();
+        materialPE.setCode(materialCode);
+        final MaterialTypePE materialTypePE = createMaterialType(typeCode);
+        materialPE.setMaterialType(materialTypePE);
+        return materialPE;
+    }
+
     public static final ExperimentIdentifier createExperimentIdentifier()
     {
         final ExperimentIdentifier identifier =
@@ -295,6 +321,11 @@ public class CommonTestUtils
         return identifier;
     }
 
+    public static final ExperimentPE createExperiment()
+    {
+        return createExperiment(createExperimentIdentifier());
+    }
+
     public static final ExperimentPE createExperiment(final ExperimentIdentifier ei)
     {
         final ExperimentPE exp = new ExperimentPE();
@@ -325,9 +356,13 @@ public class CommonTestUtils
 
     public static MaterialTypePE createMaterialType()
     {
+        return createMaterialType(MATERIAL_TYPE_VIRUS);
+    }
 
+    public static MaterialTypePE createMaterialType(String typeCode)
+    {
         final MaterialTypePE type = new MaterialTypePE();
-        type.setCode(MATERIAL_TYPE_VIRUS);
+        type.setCode(typeCode);
         type.setDatabaseInstance(createHomeDatabaseInstance());
         return type;
     }
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/ManagedPropertyEvaluatorTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/ManagedPropertyEvaluatorTest.java
index 44b7bdbba636a57298d66fa7716599da5b780e5e..8cdd02949274304c08b8f3cf98a6a5dd8a8ed119 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/ManagedPropertyEvaluatorTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/ManagedPropertyEvaluatorTest.java
@@ -18,6 +18,7 @@ package ch.systemsx.cisd.openbis.generic.shared.managed_property;
 
 import java.util.Arrays;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 import org.testng.AssertJUnit;
@@ -150,33 +151,33 @@ public class ManagedPropertyEvaluatorTest extends AssertJUnit
         evaluator.configureUI(managedProperty);
         assertEquals(false, managedProperty.isOwnTab());
 
-        IManagedUiAction[] actions = managedProperty.getUiDescription().getActions();
-        assertEquals(1, actions.length);
-        IManagedUiAction action = actions[0];
+        List<IManagedUiAction> actions = managedProperty.getUiDescription().getActions();
+        assertEquals(1, actions.size());
+        IManagedUiAction action = actions.get(0);
         assertEquals("Create", action.getName());
 
-        IManagedInputWidgetDescription[] inputWidgets = action.getInputWidgetDescriptions();
-        assertEquals(5, inputWidgets.length);
-        checkInputFieldWidget(inputWidgets[0], ManagedInputFieldType.TEXT, "t1", null, null,
+        List<IManagedInputWidgetDescription> inputWidgets = action.getInputWidgetDescriptions();
+        assertEquals(5, inputWidgets.size());
+        checkInputFieldWidget(inputWidgets.get(0), ManagedInputFieldType.TEXT, "t1", null, null,
                 false);
-        checkInputFieldWidget(inputWidgets[1], ManagedInputFieldType.TEXT, "t2", "default 2",
+        checkInputFieldWidget(inputWidgets.get(1), ManagedInputFieldType.TEXT, "t2", "default 2",
                 null, false);
-        checkInputFieldWidget(inputWidgets[2], ManagedInputFieldType.TEXT, "t3", null,
+        checkInputFieldWidget(inputWidgets.get(2), ManagedInputFieldType.TEXT, "t3", null,
                 "description 3", false);
-        checkInputFieldWidget(inputWidgets[3], ManagedInputFieldType.MULTILINE_TEXT, "multi",
+        checkInputFieldWidget(inputWidgets.get(3), ManagedInputFieldType.MULTILINE_TEXT, "multi",
                 "default m", "multiline", false);
-        checkInputFieldWidget(inputWidgets[4], ManagedInputFieldType.COMBO_BOX, "combo", null,
+        checkInputFieldWidget(inputWidgets.get(4), ManagedInputFieldType.COMBO_BOX, "combo", null,
                 "select from list", true);
-        if (inputWidgets[4] instanceof ManagedComboBoxInputWidgetDescription)
+        if (inputWidgets.get(4) instanceof ManagedComboBoxInputWidgetDescription)
         {
             ManagedComboBoxInputWidgetDescription comboBox =
-                    (ManagedComboBoxInputWidgetDescription) inputWidgets[4];
+                    (ManagedComboBoxInputWidgetDescription) inputWidgets.get(4);
             assertEquals("[v1, v2, v3]", comboBox.getOptions().toString());
         } else
         {
             fail("expected instance of "
                     + ManagedComboBoxInputWidgetDescription.class.getSimpleName() + ", got "
-                    + inputWidgets[4].getClass().getSimpleName());
+                    + inputWidgets.get(4).getClass().getSimpleName());
         }
     }