diff --git a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/main/TrackingBO.java b/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/main/TrackingBO.java
index 009f7b4d83a89150d7e9db0cd84e0c9797f54b58..3f7f72c74baf5d0883dc5d1bd2f65af4acc1f135 100644
--- a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/main/TrackingBO.java
+++ b/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/main/TrackingBO.java
@@ -30,7 +30,7 @@ import ch.systemsx.cisd.common.collections.CollectionUtils;
 import ch.systemsx.cisd.common.mail.From;
 import ch.systemsx.cisd.common.mail.IMailClient;
 import ch.systemsx.cisd.openbis.generic.shared.ITrackingServer;
-import ch.systemsx.cisd.openbis.generic.shared.basic.IIdentifiable;
+import ch.systemsx.cisd.openbis.generic.shared.basic.IIdAndCodeHolder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TrackingDataSetCriteria;
@@ -234,10 +234,10 @@ public class TrackingBO
             }
         }
 
-        private static long calcMaxId(List<? extends IIdentifiable> entities, long initialValue)
+        private static long calcMaxId(List<? extends IIdAndCodeHolder> entities, long initialValue)
         {
             long max = initialValue;
-            for (IIdentifiable entity : entities)
+            for (IIdAndCodeHolder entity : entities)
             {
                 max = Math.max(max, entity.getId());
             }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/MatchingEntitiesPanel.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/MatchingEntitiesPanel.java
index bdf96ae3274201362e614597a57c5b0090d26270..7f49a6f4fedf3d8555ac976719868826b286542b 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/MatchingEntitiesPanel.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/MatchingEntitiesPanel.java
@@ -49,7 +49,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.dto.SearchableEntity;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.TableExportCriteria;
 import ch.systemsx.cisd.openbis.generic.shared.basic.GridRowModel;
 import ch.systemsx.cisd.openbis.generic.shared.basic.IColumnDefinition;
-import ch.systemsx.cisd.openbis.generic.shared.basic.IIdentifiable;
+import ch.systemsx.cisd.openbis.generic.shared.basic.IIdAndCodeHolder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.BasicEntityType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind;
@@ -159,7 +159,7 @@ final class MatchingEntitiesPanel extends AbstractBrowserGrid<MatchingEntity, Ma
                 viewContext.getClientPluginFactoryProvider().getClientPluginFactory(entityKind,
                         entityType);
         // NOTE: createEntityViewer is the only allowed operation for MatchingEntityPanel
-        final IClientPlugin<BasicEntityType, IIdentifiable> clientPlugin =
+        final IClientPlugin<BasicEntityType, IIdAndCodeHolder> clientPlugin =
                 clientPluginFactory.createClientPlugin(entityKind);
         final AbstractTabItemFactory tabView =
                 clientPlugin.createEntityViewer(entityType, matchingEntity.asIdentifiable());
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/plugin/ClientPluginAdapter.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/plugin/ClientPluginAdapter.java
index c853592f95ca516fe76a46e9658c49c38e0b7e5d..86aa3b07b187cd1d850d7c3f545db509a784378b 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/plugin/ClientPluginAdapter.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/plugin/ClientPluginAdapter.java
@@ -20,7 +20,7 @@ import com.google.gwt.user.client.ui.Widget;
 
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.AbstractTabItemFactory;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DatabaseModificationAwareWidget;
-import ch.systemsx.cisd.openbis.generic.shared.basic.IIdentifiable;
+import ch.systemsx.cisd.openbis.generic.shared.basic.IIdAndCodeHolder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.BasicEntityType;
 
 /**
@@ -29,7 +29,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.BasicEntityType;
  * 
  * @author Christian Ribeaud
  */
-public class ClientPluginAdapter<E extends BasicEntityType, I extends IIdentifiable> implements
+public class ClientPluginAdapter<E extends BasicEntityType, I extends IIdAndCodeHolder> implements
         IClientPlugin<E, I>
 {
 
@@ -48,7 +48,7 @@ public class ClientPluginAdapter<E extends BasicEntityType, I extends IIdentifia
     }
 
     public AbstractTabItemFactory createEntityViewer(final BasicEntityType entityType,
-            final IIdentifiable identifiable)
+            final IIdAndCodeHolder identifiable)
     {
         throw new UnsupportedOperationException("Not yet implemented.");
     }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/plugin/IClientPlugin.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/plugin/IClientPlugin.java
index d310dbbf114e82228761d359a06bb24e390cc096..acd32ace8a0a18ea7210270bbb1332b773eb4a7f 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/plugin/IClientPlugin.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/plugin/IClientPlugin.java
@@ -20,7 +20,7 @@ import com.google.gwt.user.client.ui.Widget;
 
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.AbstractTabItemFactory;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DatabaseModificationAwareWidget;
-import ch.systemsx.cisd.openbis.generic.shared.basic.IIdentifiable;
+import ch.systemsx.cisd.openbis.generic.shared.basic.IIdAndCodeHolder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.BasicEntityType;
 
 /**
@@ -35,14 +35,14 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.BasicEntityType;
  * 
  * @author Christian Ribeaud
  */
-public interface IClientPlugin<T extends BasicEntityType, I extends IIdentifiable>
+public interface IClientPlugin<T extends BasicEntityType, I extends IIdAndCodeHolder>
 {
     /**
      * Shows a detailed view of the entity specified by its <var>identifier</var>.
      */
     // NOTE: BasicEntityType is used here to allow viewing entities from MatchingEntitiesPanel
     public AbstractTabItemFactory createEntityViewer(final BasicEntityType entityType,
-            final IIdentifiable identifiable);
+            final IIdAndCodeHolder identifiable);
             
     /**
      * Shows a registration form for entities of given <var>entityType</var>.
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/plugin/IClientPluginFactory.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/plugin/IClientPluginFactory.java
index 2e874711e3a9e8bef4d308fc9eef3c00191735a6..9177a1ecfe3c1e00477743f8a1af8db7fc0047f1 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/plugin/IClientPluginFactory.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/plugin/IClientPluginFactory.java
@@ -18,7 +18,7 @@ package ch.systemsx.cisd.openbis.generic.client.web.client.application.plugin;
 
 import java.util.Set;
 
-import ch.systemsx.cisd.openbis.generic.shared.basic.IIdentifiable;
+import ch.systemsx.cisd.openbis.generic.shared.basic.IIdAndCodeHolder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.BasicEntityType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind;
 
@@ -39,7 +39,7 @@ public interface IClientPluginFactory
      * Creates and returns a {@link IClientPlugin} implementation specific to given
      * <var>entityKind</var> and given <var>entityType</var> each time this method is called.
      */
-    public <T extends BasicEntityType, I extends IIdentifiable> IClientPlugin<T, I> createClientPlugin(
+    public <T extends BasicEntityType, I extends IIdAndCodeHolder> IClientPlugin<T, I> createClientPlugin(
             final EntityKind entityKind);
 
     /**
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/AbstractRegistrationForm.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/AbstractRegistrationForm.java
index 78c2eaa20e2e7918cd37ab0540055b71d89457e8..a558922cf590203c2104283c9ee99552a8cf133b 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/AbstractRegistrationForm.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/AbstractRegistrationForm.java
@@ -46,7 +46,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.InfoBoxCal
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.ClickableFormPanel;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.InfoBox;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IMessageProvider;
-import ch.systemsx.cisd.openbis.generic.shared.basic.IIdentifiable;
+import ch.systemsx.cisd.openbis.generic.shared.basic.IIdAndCodeHolder;
 
 /**
  * An <i>abstract</i> registration form.
@@ -324,7 +324,7 @@ public abstract class AbstractRegistrationForm extends ContentPanel
     }
 
     public static String getEditTitle(final IMessageProvider messageProvider,
-            final String entityKindDictKey, final IIdentifiable identifiable)
+            final String entityKindDictKey, final IIdAndCodeHolder identifiable)
     {
         return messageProvider.getMessage(Dict.EDIT_TITLE, messageProvider
                 .getMessage(entityKindDictKey), identifiable.getCode());
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/AbstractViewer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/AbstractViewer.java
index 7aafb5bfb5f5f831d155aa4df094b518b1595dea..0b4305ffbb54f89fbbd67a4f114682e01d816e8d 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/AbstractViewer.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/AbstractViewer.java
@@ -43,9 +43,9 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.plugin.ICl
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.GWTUtils;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IDelegatedAction;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IMessageProvider;
-import ch.systemsx.cisd.openbis.generic.shared.basic.ICodeProvider;
+import ch.systemsx.cisd.openbis.generic.shared.basic.ICodeHolder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.IEntityInformationHolder;
-import ch.systemsx.cisd.openbis.generic.shared.basic.IIdentifiable;
+import ch.systemsx.cisd.openbis.generic.shared.basic.IIdAndCodeHolder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.BasicEntityType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind;
 
@@ -159,14 +159,14 @@ public abstract class AbstractViewer<D extends IEntityInformationHolder> extends
     }
 
     private final void showEntityEditor(EntityKind entityKind, BasicEntityType type,
-            IIdentifiable identifiable, boolean inBackground)
+            IIdAndCodeHolder identifiable, boolean inBackground)
     {
         assert type != null : "entity type is not provided";
         final AbstractTabItemFactory tabView;
         final IClientPluginFactory clientPluginFactory =
                 viewContext.getClientPluginFactoryProvider().getClientPluginFactory(entityKind,
                         type);
-        final IClientPlugin<BasicEntityType, IIdentifiable> createClientPlugin =
+        final IClientPlugin<BasicEntityType, IIdAndCodeHolder> createClientPlugin =
                 clientPluginFactory.createClientPlugin(entityKind);
         tabView = createClientPlugin.createEntityEditor(type, identifiable);
         tabView.setInBackground(inBackground);
@@ -174,7 +174,7 @@ public abstract class AbstractViewer<D extends IEntityInformationHolder> extends
     }
 
     public static String getTitle(final IMessageProvider messageProvider,
-            final String entityKindDictKey, final ICodeProvider codeProvider)
+            final String entityKindDictKey, final ICodeHolder codeProvider)
     {
         return messageProvider.getMessage(Dict.DETAILS_TITLE, messageProvider
                 .getMessage(entityKindDictKey), codeProvider.getCode());
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/framework/LinkExtractor.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/framework/LinkExtractor.java
index f4c7fa3a49b6d2d20542f323e14013ee6a467f0f..883fce71c5116c540d589ed0c5102c7d0aa104fc 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/framework/LinkExtractor.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/framework/LinkExtractor.java
@@ -17,15 +17,11 @@
 package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.columns.framework;
 
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.locator.ProjectLocatorResolver;
-import ch.systemsx.cisd.openbis.generic.shared.basic.IEntityInformationHolder;
+import ch.systemsx.cisd.openbis.generic.shared.basic.IEntityInformationHolderWithIdentifier;
 import ch.systemsx.cisd.openbis.generic.shared.basic.PermlinkUtilities;
 import ch.systemsx.cisd.openbis.generic.shared.basic.URLMethodWithParameters;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Material;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Project;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample;
 
 /**
  * Defines the ways links are created for objects of selected types.
@@ -35,27 +31,6 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample;
 public class LinkExtractor
 {
 
-    public static final String tryExtract(IEntityInformationHolder o)
-    {
-        if (o == null)
-        {
-            return null;
-        }
-        switch (o.getEntityKind())
-        {
-            case EXPERIMENT:
-                return tryExtract((Experiment) o);
-            case SAMPLE:
-                return tryExtract((Sample) o);
-            case DATA_SET:
-                return tryExtract((ExternalData) o);
-            case MATERIAL:
-                return tryExtract((Material) o);
-            default:
-                return null;
-        }
-    }
-
     public static final String tryExtract(Project p)
     {
         if (p == null)
@@ -79,54 +54,24 @@ public class LinkExtractor
         URLMethodWithParameters url = new URLMethodWithParameters("");
         url.addParameter(PermlinkUtilities.ENTITY_KIND_PARAMETER_KEY, m.getEntityKind().name());
         url.addParameter("code", m.getCode());
-        url.addParameter("type", m.getMaterialType().getCode());// FIXME: move to common
+        url.addParameter("type", m.getMaterialType().getCode());
         return print(url);
     }
 
-    // TODO 2010-04-21, IA: To be removed after there are click handler->href conversion is
-    // finnished
-    private static String print(URLMethodWithParameters url)
-    {
-        return url.toString().substring(1);
-    }
-
-    public static final String tryExtract(Sample s)
-    {
-        if (s == null)
-        {
-            return null;
-        }
-        return createPermLink(s.getEntityKind(), s.getPermId());
-    }
-
-    public static final String tryExtract(Experiment e)
+    public static String tryExtract(IEntityInformationHolderWithIdentifier e)
     {
         if (e == null)
         {
             return null;
         }
-        return createPermLink(e.getEntityKind(), e.getPermId());
-    }
-
-    public static String tryExtract(ExternalData e)
-    {
-        if (e == null)
-        {
-            return null;
-        }
-        return createPermLink(e.getEntityKind(), e.getPermId());
-    }
-
-    private static String createPermLink(EntityKind kind, String permId)
-    {
-        if (permId == null)
-        {
-            return null;
-        }
         URLMethodWithParameters url = new URLMethodWithParameters("");
-        url.addParameter(PermlinkUtilities.ENTITY_KIND_PARAMETER_KEY, kind.name());
-        url.addParameter(PermlinkUtilities.PERM_ID_PARAMETER_KEY, permId);
+        url.addParameter(PermlinkUtilities.ENTITY_KIND_PARAMETER_KEY, e.getEntityKind().name());
+        url.addParameter(PermlinkUtilities.PERM_ID_PARAMETER_KEY, e.getPermId());
         return print(url);
     }
 
+    private static String print(URLMethodWithParameters url)
+    {
+        return url.toString().substring(1);
+    }
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ProjectSelectionTreeGridContainer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ProjectSelectionTreeGridContainer.java
index 85b5612064b3f25c210437554bb4c025f6bd9293..187de3523ebd759b3920f976d1af371fe70f388d 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ProjectSelectionTreeGridContainer.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ProjectSelectionTreeGridContainer.java
@@ -62,7 +62,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.Widge
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.lang.StringEscapeUtils;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DefaultResultSetConfig;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ResultSet;
-import ch.systemsx.cisd.openbis.generic.shared.basic.ICodeProvider;
+import ch.systemsx.cisd.openbis.generic.shared.basic.ICodeHolder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Project;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Space;
@@ -443,7 +443,7 @@ public final class ProjectSelectionTreeGridContainer extends LayoutContainer imp
     {
         private static final long serialVersionUID = 1L;
 
-        public BaseModelDataWithCode(ICodeProvider codeProvider)
+        public BaseModelDataWithCode(ICodeHolder codeProvider)
         {
             set(ModelDataPropertyNames.CODE, codeProvider.getCode());
             set(ModelDataPropertyNames.OBJECT, codeProvider);
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/AbstractBrowserGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/AbstractBrowserGrid.java
index bc19952fb7d085f3f83105574d4c3929caeabd8e..28d941b941223f96867be2d4f9af09a7cd3d6840 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/AbstractBrowserGrid.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/AbstractBrowserGrid.java
@@ -104,7 +104,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.dto.TableExportCriteri
 import ch.systemsx.cisd.openbis.generic.shared.basic.GridRowModel;
 import ch.systemsx.cisd.openbis.generic.shared.basic.IColumnDefinition;
 import ch.systemsx.cisd.openbis.generic.shared.basic.IEntityInformationHolder;
-import ch.systemsx.cisd.openbis.generic.shared.basic.IIdentifiable;
+import ch.systemsx.cisd.openbis.generic.shared.basic.IIdAndCodeHolder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.URLMethodWithParameters;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.BasicEntityType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ColumnSetting;
@@ -315,7 +315,7 @@ public abstract class AbstractBrowserGrid<T/* Entity */, M extends BaseEntityMod
         final IClientPluginFactory clientPluginFactory =
                 viewContext.getClientPluginFactoryProvider().getClientPluginFactory(entityKind,
                         entityType);
-        final IClientPlugin<BasicEntityType, IIdentifiable> createClientPlugin =
+        final IClientPlugin<BasicEntityType, IIdAndCodeHolder> createClientPlugin =
                 clientPluginFactory.createClientPlugin(entityKind);
         if (editMode)
         {
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/listener/OpenEntityDetailsTabAction.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/listener/OpenEntityDetailsTabAction.java
index cc5034dff67d28f9852249270e197477369ba7a0..8b0167072d95dcb636fcfcaa4428ea32ca23a948 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/listener/OpenEntityDetailsTabAction.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/listener/OpenEntityDetailsTabAction.java
@@ -23,7 +23,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.plugin.ICl
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.plugin.IClientPluginFactory;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IDelegatedAction;
 import ch.systemsx.cisd.openbis.generic.shared.basic.IEntityInformationHolder;
-import ch.systemsx.cisd.openbis.generic.shared.basic.IIdentifiable;
+import ch.systemsx.cisd.openbis.generic.shared.basic.IIdAndCodeHolder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.BasicEntityType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind;
 
@@ -61,7 +61,7 @@ public final class OpenEntityDetailsTabAction implements IDelegatedAction
         final IClientPluginFactory clientPluginFactory =
                 viewContext.getClientPluginFactoryProvider().getClientPluginFactory(entityKind,
                         entityType);
-        final IClientPlugin<BasicEntityType, IIdentifiable> createClientPlugin =
+        final IClientPlugin<BasicEntityType, IIdAndCodeHolder> createClientPlugin =
                 clientPluginFactory.createClientPlugin(entityKind);
         final AbstractTabItemFactory tabView =
                 createClientPlugin.createEntityViewer(entityType, entity);
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/material/MaterialBatchRegistrationPanel.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/material/MaterialBatchRegistrationPanel.java
index 7fd7eab1e6b8af7f6380b05f8bf59bf285926df9..d8d8108962278ef7a3b2490aeae063054b8464f1 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/material/MaterialBatchRegistrationPanel.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/material/MaterialBatchRegistrationPanel.java
@@ -31,7 +31,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.MaterialTypeModel;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.plugin.IClientPlugin;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.plugin.IClientPluginFactory;
-import ch.systemsx.cisd.openbis.generic.shared.basic.IIdentifiable;
+import ch.systemsx.cisd.openbis.generic.shared.basic.IIdAndCodeHolder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.MaterialType;
@@ -84,7 +84,7 @@ public final class MaterialBatchRegistrationPanel extends LayoutContainer
                                 final IClientPluginFactory clientPluginFactory =
                                         viewContext.getClientPluginFactoryProvider()
                                                 .getClientPluginFactory(entityKind, materialType);
-                                final IClientPlugin<EntityType, IIdentifiable> createClientPlugin =
+                                final IClientPlugin<EntityType, IIdAndCodeHolder> createClientPlugin =
                                         clientPluginFactory.createClientPlugin(entityKind);
                                 add(createClientPlugin
                                         .createBatchRegistrationForEntityType(materialType));
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleBatchRegisterUpdatePanel.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleBatchRegisterUpdatePanel.java
index f89ceba7d80d85e7df256c533fd032378da8732b..109a1a991f42fd91dbe7e43ee8767be875739012 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleBatchRegisterUpdatePanel.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleBatchRegisterUpdatePanel.java
@@ -31,7 +31,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewConte
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DatabaseModificationAwareComponent;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.SampleTypeModel;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.plugin.IClientPlugin;
-import ch.systemsx.cisd.openbis.generic.shared.basic.IIdentifiable;
+import ch.systemsx.cisd.openbis.generic.shared.basic.IIdAndCodeHolder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleType;
@@ -94,7 +94,7 @@ public final class SampleBatchRegisterUpdatePanel extends LayoutContainer
                                 removeAll();
                                 final EntityKind entityKind = EntityKind.SAMPLE;
                                 add(toolBar);
-                                final IClientPlugin<EntityType, IIdentifiable> createClientPlugin =
+                                final IClientPlugin<EntityType, IIdAndCodeHolder> createClientPlugin =
                                         viewContext.getClientPluginFactoryProvider()
                                                 .getClientPluginFactory(entityKind, sampleType)
                                                 .createClientPlugin(entityKind);
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/EntityRegistrationPanel.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/EntityRegistrationPanel.java
index 4f97bd3687050c299dd71a3a4aad49db9fd834f6..397b2f19c15f4ad6d0793cdc3c3baf026dcb0f9f 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/EntityRegistrationPanel.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/EntityRegistrationPanel.java
@@ -38,7 +38,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.IDatabaseModificationObserver;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.ModelDataPropertyNames;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.plugin.IClientPlugin;
-import ch.systemsx.cisd.openbis.generic.shared.basic.IIdentifiable;
+import ch.systemsx.cisd.openbis.generic.shared.basic.IIdAndCodeHolder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityType;
@@ -136,7 +136,7 @@ abstract public class EntityRegistrationPanel<T extends ModelData, S extends Dro
     private void showRegistrationForm(final EntityType entityType)
     {
         removeAll();
-        final IClientPlugin<EntityType, IIdentifiable> clientPlugin =
+        final IClientPlugin<EntityType, IIdAndCodeHolder> clientPlugin =
                 viewContext.getClientPluginFactoryProvider().getClientPluginFactory(entityKind,
                         entityType).createClientPlugin(entityKind);
         registrationWidget = clientPlugin.createRegistrationForEntityType(entityType);
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/VocabularyBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/VocabularyBO.java
index 4d7d0c0dcce14c946bb556466b0fd7adef3d8815..967603023a0fe1c3ee437fb527094fb756697008 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/VocabularyBO.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/VocabularyBO.java
@@ -38,7 +38,7 @@ import ch.systemsx.cisd.common.exceptions.UserFailureException;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IEntityPropertyTypeDAO;
 import ch.systemsx.cisd.openbis.generic.server.util.KeyExtractorFactory;
-import ch.systemsx.cisd.openbis.generic.shared.basic.ICodeProvider;
+import ch.systemsx.cisd.openbis.generic.shared.basic.ICodeHolder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IVocabularyUpdates;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewVocabulary;
@@ -452,10 +452,10 @@ public class VocabularyBO extends AbstractBusinessObject implements IVocabularyB
         }
     }
 
-    private <T extends ICodeProvider> Collection<String> convert(Collection<T> terms)
+    private <T extends ICodeHolder> Collection<String> convert(Collection<T> terms)
     {
         ArrayList<String> list = new ArrayList<String>();
-        for (ICodeProvider t : terms)
+        for (ICodeHolder t : terms)
         {
             list.add(t.getCode());
         }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/IAttachmentHolder.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/IAttachmentHolder.java
index b3ed9b71f519a948ac1112b9e2caef27ab855bb4..e2be2ced7b16a6708cffcf0357808faedda97cae 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/IAttachmentHolder.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/IAttachmentHolder.java
@@ -21,7 +21,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.AttachmentHolderKind;
 /**
  * @author Izabela Adamczyk
  */
-public interface IAttachmentHolder extends IIdentifiable
+public interface IAttachmentHolder extends IIdAndCodeHolder
 {
     public AttachmentHolderKind getAttachmentHolderKind();
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/ICodeProvider.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/ICodeHolder.java
similarity index 93%
rename from openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/ICodeProvider.java
rename to openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/ICodeHolder.java
index 26c49d29a6b84baedaef1f2ff9317eed78d624c5..2bcbc35f00210da4492c38a50e71001ce8750ae1 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/ICodeProvider.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/ICodeHolder.java
@@ -17,11 +17,11 @@
 package ch.systemsx.cisd.openbis.generic.shared.basic;
 
 /**
- * A code provider.
+ * A code holder.
  * 
  * @author     Franz-Josef Elmer
  */
-public interface ICodeProvider
+public interface ICodeHolder
 {
 
     /** Returns the code. */
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/IEntityInformationHolder.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/IEntityInformationHolder.java
index d6d2326da14a10d50db180c534bb148b5c0e7f90..fa040a1703f99fa9f262fd3d77963b9bce886d4a 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/IEntityInformationHolder.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/IEntityInformationHolder.java
@@ -25,7 +25,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind;
  * 
  * @author Piotr Buczek
  */
-public interface IEntityInformationHolder extends IIdentifiable
+public interface IEntityInformationHolder extends IIdAndCodeHolder
 {
     /**
      * Returns the entity type of this matching entity.
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/IEntityInformationHolderWithIdentifier.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/IEntityInformationHolderWithIdentifier.java
index 37b6290667776554b9bb443514c8962ec785f1bf..b4aeab9a112e04e93e6c49a98808afaba052a833 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/IEntityInformationHolderWithIdentifier.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/IEntityInformationHolderWithIdentifier.java
@@ -23,6 +23,6 @@ package ch.systemsx.cisd.openbis.generic.shared.basic;
  * @author Izabela Adamczyk
  */
 public interface IEntityInformationHolderWithIdentifier extends IIdentifierHolder,
-        IEntityInformationHolder
+        IEntityInformationHolder, IPermIdHolder
 {
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/IIdentifiable.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/IIdAndCodeHolder.java
similarity index 90%
rename from openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/IIdentifiable.java
rename to openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/IIdAndCodeHolder.java
index 6b772f7f597aef21bc8f0db2dcf9001e7695fe8a..f2d7791801ba501999aed89f799cd9841ffd856d 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/IIdentifiable.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/IIdAndCodeHolder.java
@@ -19,10 +19,10 @@ package ch.systemsx.cisd.openbis.generic.shared.basic;
 /**
  * Read-only interface for beans witch provide a code and a unique technical ID.
  * 
- * @see ICodeProvider
+ * @see ICodeHolder
  * @see IIdHolder
  * @author Piotr Buczek
  */
-public interface IIdentifiable extends IIdHolder, ICodeProvider
+public interface IIdAndCodeHolder extends IIdHolder, ICodeHolder
 {
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/TechId.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/TechId.java
index 944958dcb0814d2dc39161d4125af261751a8faa..a0a130b4d1e81f3933c57085cdc366abda6f2038 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/TechId.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/TechId.java
@@ -52,7 +52,7 @@ public class TechId implements IIdHolder, IsSerializable, Serializable
         this.id = id.longValue();
     }
 
-    public TechId(IIdentifiable identifiable)
+    public TechId(IIdAndCodeHolder identifiable)
     {
         this(identifiable.getId());
     }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/Code.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/Code.java
index bac4025f769ad9a40286491d85f3429b0b71459b..964f1f39467c60659163b0c1c2cdc7aa8d0f4bca 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/Code.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/Code.java
@@ -24,21 +24,21 @@ import java.util.List;
 import com.google.gwt.user.client.rpc.IsSerializable;
 
 import ch.systemsx.cisd.common.annotation.BeanProperty;
-import ch.systemsx.cisd.openbis.generic.shared.basic.ICodeProvider;
+import ch.systemsx.cisd.openbis.generic.shared.basic.ICodeHolder;
 
 /**
  * A code.
  * 
  * @author Christian Ribeaud
  */
-public class Code<T extends Code<T>> implements IsSerializable, ICodeProvider, Comparable<T>,
+public class Code<T extends Code<T>> implements IsSerializable, ICodeHolder, Comparable<T>,
         Serializable
 {
     private static final long serialVersionUID = ServiceVersionHolder.VERSION;
 
     public static final String CODE = "code";
 
-    public final static Comparator<ICodeProvider> CODE_PROVIDER_COMPARATOR =
+    public final static Comparator<ICodeHolder> CODE_PROVIDER_COMPARATOR =
             new CodeProviderComparator();
 
     private String code;
@@ -102,17 +102,17 @@ public class Code<T extends Code<T>> implements IsSerializable, ICodeProvider, C
     // Helper classes
     //
 
-    public final static List<String> extractCodes(List<? extends ICodeProvider> codeProviders)
+    public final static List<String> extractCodes(List<? extends ICodeHolder> codeProviders)
     {
         List<String> codes = new ArrayList<String>();
-        for (ICodeProvider codeProvider : codeProviders)
+        for (ICodeHolder codeProvider : codeProviders)
         {
             codes.add(codeProvider.getCode());
         }
         return codes;
     }
 
-    public final static class CodeProviderComparator implements Comparator<ICodeProvider>,
+    public final static class CodeProviderComparator implements Comparator<ICodeHolder>,
             Serializable
     {
         private static final long serialVersionUID = 1L;
@@ -121,7 +121,7 @@ public class Code<T extends Code<T>> implements IsSerializable, ICodeProvider, C
         // Comparable
         //
 
-        public int compare(final ICodeProvider o1, final ICodeProvider o2)
+        public int compare(final ICodeHolder o1, final ICodeHolder o2)
         {
             assert o1 != null : "Unspecified code provider.";
             assert o2 != null : "Unspecified code provider.";
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/CodeWithRegistration.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/CodeWithRegistration.java
index f569efb67735413a06d343945dbe97dc5940428b..ebc705ddd469d8b29d2b186fb22ec4d198c10f1a 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/CodeWithRegistration.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/CodeWithRegistration.java
@@ -16,7 +16,7 @@
 
 package ch.systemsx.cisd.openbis.generic.shared.basic.dto;
 
-import ch.systemsx.cisd.openbis.generic.shared.basic.ICodeProvider;
+import ch.systemsx.cisd.openbis.generic.shared.basic.ICodeHolder;
 
 /**
  * An {@link AbstractRegistrationHolder} extension which holds a code.
@@ -24,7 +24,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.ICodeProvider;
  * @author Christian Ribeaud
  */
 public class CodeWithRegistration<T extends CodeWithRegistration<T>> extends
-        AbstractRegistrationHolder implements ICodeProvider, Comparable<T>
+        AbstractRegistrationHolder implements ICodeHolder, Comparable<T>
 {
     private static final long serialVersionUID = ServiceVersionHolder.VERSION;
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/Experiment.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/Experiment.java
index e479b3cc26a947af4599ab1148387d064691e70d..548a662146f7e0e679b8f7344445fbff64477652 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/Experiment.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/Experiment.java
@@ -21,7 +21,7 @@ import java.util.List;
 
 import ch.systemsx.cisd.openbis.generic.shared.basic.IAttachmentHolder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.IEntityInformationHolderWithIdentifier;
-import ch.systemsx.cisd.openbis.generic.shared.basic.IIdentifiable;
+import ch.systemsx.cisd.openbis.generic.shared.basic.IIdAndCodeHolder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.IInvalidationProvider;
 import ch.systemsx.cisd.openbis.generic.shared.basic.IPermIdHolder;
 
@@ -32,7 +32,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.IPermIdHolder;
  */
 public class Experiment extends CodeWithRegistration<Experiment> implements IInvalidationProvider,
         IEntityInformationHolderWithIdentifier, IAttachmentHolder, IEntityPropertiesHolder,
-        IIdentifiable, IPermIdHolder
+        IIdAndCodeHolder, IPermIdHolder
 {
     private static final long serialVersionUID = ServiceVersionHolder.VERSION;
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ExternalData.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ExternalData.java
index 8f97c579e247b7a1a5155d5910d49d81fb97c37d..b7dbfa001d1351e353a891c5737a01465c3e579e 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ExternalData.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ExternalData.java
@@ -21,7 +21,7 @@ import java.util.Date;
 import java.util.List;
 
 import ch.systemsx.cisd.openbis.generic.shared.basic.IEntityInformationHolderWithIdentifier;
-import ch.systemsx.cisd.openbis.generic.shared.basic.IIdentifiable;
+import ch.systemsx.cisd.openbis.generic.shared.basic.IIdAndCodeHolder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.IInvalidationProvider;
 import ch.systemsx.cisd.openbis.generic.shared.basic.IPermIdHolder;
 
@@ -32,7 +32,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.IPermIdHolder;
  */
 public class ExternalData extends CodeWithRegistration<ExternalData> implements
         IInvalidationProvider, IEntityInformationHolderWithIdentifier, IEntityPropertiesHolder,
-        IIdentifiable, IPermIdHolder
+        IIdAndCodeHolder, IPermIdHolder
 {
     private static final long serialVersionUID = ServiceVersionHolder.VERSION;
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/IPropertyTypeUpdates.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/IPropertyTypeUpdates.java
index ce0a03249479087564f71b766dcaa83e6f3522e3..64c014804ab7fc07e19ac3c9dd35ed22afafe65f 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/IPropertyTypeUpdates.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/IPropertyTypeUpdates.java
@@ -16,7 +16,7 @@
 
 package ch.systemsx.cisd.openbis.generic.shared.basic.dto;
 
-import ch.systemsx.cisd.openbis.generic.shared.basic.ICodeProvider;
+import ch.systemsx.cisd.openbis.generic.shared.basic.ICodeHolder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.IIdHolder;
 
 /**
@@ -24,7 +24,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.IIdHolder;
  * 
  * @author Piotr Buczek
  */
-public interface IPropertyTypeUpdates extends IIdHolder, ICodeProvider
+public interface IPropertyTypeUpdates extends IIdHolder, ICodeHolder
 {
     String getDescription();
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ISpaceUpdates.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ISpaceUpdates.java
index 6af7fe28f34490629d4c3a96c1f92405d944ac9f..b23115acce9999f3d5df0130e9e66881e4b8807d 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ISpaceUpdates.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ISpaceUpdates.java
@@ -16,7 +16,7 @@
 
 package ch.systemsx.cisd.openbis.generic.shared.basic.dto;
 
-import ch.systemsx.cisd.openbis.generic.shared.basic.ICodeProvider;
+import ch.systemsx.cisd.openbis.generic.shared.basic.ICodeHolder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.IIdHolder;
 
 /**
@@ -24,7 +24,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.IIdHolder;
  * 
  * @author Piotr Buczek
  */
-public interface ISpaceUpdates extends IIdHolder, ICodeProvider
+public interface ISpaceUpdates extends IIdHolder, ICodeHolder
 {
     String getDescription();
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/IVocabularyTermUpdates.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/IVocabularyTermUpdates.java
index 61c4df7d2955a244585f5fdabe5afff6136ae409..fafd472c3cbdf62bd2e11cd525d1e12a66576b8c 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/IVocabularyTermUpdates.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/IVocabularyTermUpdates.java
@@ -16,7 +16,7 @@
 
 package ch.systemsx.cisd.openbis.generic.shared.basic.dto;
 
-import ch.systemsx.cisd.openbis.generic.shared.basic.ICodeProvider;
+import ch.systemsx.cisd.openbis.generic.shared.basic.ICodeHolder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.IIdHolder;
 
 /**
@@ -24,7 +24,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.IIdHolder;
  * 
  * @author Piotr Buczek
  */
-public interface IVocabularyTermUpdates extends IIdHolder, ICodeProvider
+public interface IVocabularyTermUpdates extends IIdHolder, ICodeHolder
 {
     String getDescription();
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/IVocabularyUpdates.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/IVocabularyUpdates.java
index 5f77462343c8079ba5d25d2f9f71be8b66ed5528..8d8f82451b3452064d2c310060ae1aa4f43e894c 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/IVocabularyUpdates.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/IVocabularyUpdates.java
@@ -16,7 +16,7 @@
 
 package ch.systemsx.cisd.openbis.generic.shared.basic.dto;
 
-import ch.systemsx.cisd.openbis.generic.shared.basic.ICodeProvider;
+import ch.systemsx.cisd.openbis.generic.shared.basic.ICodeHolder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.IIdHolder;
 
 /**
@@ -24,7 +24,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.IIdHolder;
  * 
  * @author Piotr Buczek
  */
-public interface IVocabularyUpdates extends IIdHolder, ICodeProvider
+public interface IVocabularyUpdates extends IIdHolder, ICodeHolder
 {
     String getDescription();
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/MatchingEntity.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/MatchingEntity.java
index 99405a961b88c2a9c7e17ddbd3cef08817419660..886310eb0fe6207953ffd2e5f8e7574d9c41b0b4 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/MatchingEntity.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/MatchingEntity.java
@@ -19,7 +19,7 @@ package ch.systemsx.cisd.openbis.generic.shared.basic.dto;
 import com.google.gwt.user.client.rpc.IsSerializable;
 
 import ch.systemsx.cisd.openbis.generic.shared.basic.IEntityInformationHolder;
-import ch.systemsx.cisd.openbis.generic.shared.basic.IIdentifiable;
+import ch.systemsx.cisd.openbis.generic.shared.basic.IIdAndCodeHolder;
 
 /**
  * An entity that matches the <i>Hibernate Search</i> query and which has been returned by the
@@ -137,10 +137,10 @@ public final class MatchingEntity implements IsSerializable, IEntityInformationH
         this.code = code;
     }
 
-    public IIdentifiable asIdentifiable()
+    public IIdAndCodeHolder asIdentifiable()
     {
         final MatchingEntity entity = this;
-        return new IIdentifiable()
+        return new IIdAndCodeHolder()
             {
                 public Long getId()
                 {
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/Material.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/Material.java
index 6c40e519df40f9c17d56d5447f13b4468d44d0ec..0fc24bfc278f6c4abbbb428bbd8c92baa9536ca4 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/Material.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/Material.java
@@ -20,7 +20,7 @@ import java.util.Date;
 import java.util.List;
 
 import ch.systemsx.cisd.openbis.generic.shared.basic.IEntityInformationHolderWithIdentifier;
-import ch.systemsx.cisd.openbis.generic.shared.basic.IIdentifiable;
+import ch.systemsx.cisd.openbis.generic.shared.basic.IIdAndCodeHolder;
 
 /**
  * The <i>GWT</i> equivalent to MaterialPE.
@@ -28,7 +28,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.IIdentifiable;
  * @author Izabela Adamczyk
  */
 public class Material extends CodeWithRegistration<Material> implements
-        IEntityInformationHolderWithIdentifier, IEntityPropertiesHolder, IIdentifiable
+        IEntityInformationHolderWithIdentifier, IEntityPropertiesHolder, IIdAndCodeHolder
 {
 
     private static final long serialVersionUID = ServiceVersionHolder.VERSION;
@@ -121,4 +121,9 @@ public class Material extends CodeWithRegistration<Material> implements
     {
         return getIdentifier().compareTo(o.getIdentifier());
     }
+
+    public String getPermId()
+    {
+        return getIdentifier();
+    }
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/Project.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/Project.java
index f0441286420c440cfdd1303a4a4f00627917276d..91f71ce68340333d78d951c99e0bbf46511c22ad 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/Project.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/Project.java
@@ -20,7 +20,7 @@ import java.util.Date;
 import java.util.List;
 
 import ch.systemsx.cisd.openbis.generic.shared.basic.IAttachmentHolder;
-import ch.systemsx.cisd.openbis.generic.shared.basic.IIdentifiable;
+import ch.systemsx.cisd.openbis.generic.shared.basic.IIdAndCodeHolder;
 
 /**
  * The <i>GWT</i> equivalent to ProjectPE.
@@ -28,7 +28,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.IIdentifiable;
  * @author Tomasz Pylak
  */
 public class Project extends CodeWithRegistration<Project> implements IAttachmentHolder,
-        IIdentifiable
+        IIdAndCodeHolder
 {
     private static final long serialVersionUID = ServiceVersionHolder.VERSION;
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/Sample.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/Sample.java
index 0b46ba8ca2e1ae6dd4a43323ced608cc5c05a8a3..3affb106a7f713d2387141da088bee7a31d321d5 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/Sample.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/Sample.java
@@ -23,7 +23,7 @@ import java.util.List;
 import ch.systemsx.cisd.common.annotation.CollectionMapping;
 import ch.systemsx.cisd.openbis.generic.shared.basic.IAttachmentHolder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.IEntityInformationHolderWithIdentifier;
-import ch.systemsx.cisd.openbis.generic.shared.basic.IIdentifiable;
+import ch.systemsx.cisd.openbis.generic.shared.basic.IIdAndCodeHolder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.IInvalidationProvider;
 import ch.systemsx.cisd.openbis.generic.shared.basic.IPermIdHolder;
 
@@ -34,7 +34,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.IPermIdHolder;
  */
 public final class Sample extends CodeWithRegistration<Sample> implements IInvalidationProvider,
         Comparable<Sample>, IEntityInformationHolderWithIdentifier, IAttachmentHolder,
-        IEntityPropertiesHolder, IIdentifiable, IPermIdHolder
+        IEntityPropertiesHolder, IIdAndCodeHolder, IPermIdHolder
 {
     private static final long serialVersionUID = ServiceVersionHolder.VERSION;
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/IEntityInformationHolderDTO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/IEntityInformationHolderDTO.java
index af706d4880579a678f92a02a7f58506452e7da8e..7a969accda67900f4bf9ac7e3f24a9842caad249 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/IEntityInformationHolderDTO.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/IEntityInformationHolderDTO.java
@@ -16,7 +16,7 @@
 
 package ch.systemsx.cisd.openbis.generic.shared.dto;
 
-import ch.systemsx.cisd.openbis.generic.shared.basic.IIdentifiable;
+import ch.systemsx.cisd.openbis.generic.shared.basic.IIdAndCodeHolder;
 import ch.systemsx.cisd.openbis.generic.shared.dto.properties.EntityKind;
 
 /**
@@ -24,7 +24,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.properties.EntityKind;
  * 
  * @author Izabela Adamczyk
  */
-public interface IEntityInformationHolderDTO extends IIdentifiable
+public interface IEntityInformationHolderDTO extends IIdAndCodeHolder
 {
     /**
      * Returns the entity type of this matching entity.
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/IIdAndCodeHolder.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/IIdAndCodeHolder.java
index e6c983eee3f935bddecddd4347064989435ce9c2..4c01667c26dd2a86b804282f938d810e16131c63 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/IIdAndCodeHolder.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/IIdAndCodeHolder.java
@@ -16,7 +16,7 @@
 
 package ch.systemsx.cisd.openbis.generic.shared.dto;
 
-import ch.systemsx.cisd.openbis.generic.shared.basic.ICodeProvider;
+import ch.systemsx.cisd.openbis.generic.shared.basic.ICodeHolder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.IIdHolder;
 
 /**
@@ -25,7 +25,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.IIdHolder;
  * 
  * @author Franz-Josef Elmer
  */
-public interface IIdAndCodeHolder extends IIdHolder, ICodeProvider
+public interface IIdAndCodeHolder extends IIdHolder, ICodeHolder
 {
 
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/demo/client/web/client/application/ClientPluginFactory.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/demo/client/web/client/application/ClientPluginFactory.java
index fd29053662790c07fc971cf8ba6b1bd6867fa101..3bbade751df23319a3227eab14efeae795682ba5 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/demo/client/web/client/application/ClientPluginFactory.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/demo/client/web/client/application/ClientPluginFactory.java
@@ -37,7 +37,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.plugin.Cli
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.plugin.IClientPlugin;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.plugin.IClientPluginFactory;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.plugin.IModule;
-import ch.systemsx.cisd.openbis.generic.shared.basic.IIdentifiable;
+import ch.systemsx.cisd.openbis.generic.shared.basic.IIdAndCodeHolder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.BasicEntityType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind;
@@ -87,7 +87,7 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<DemoV
     }
 
     @SuppressWarnings("unchecked")
-    public <T extends BasicEntityType, I extends IIdentifiable> IClientPlugin<T, I> createClientPlugin(
+    public <T extends BasicEntityType, I extends IIdAndCodeHolder> IClientPlugin<T, I> createClientPlugin(
             final EntityKind entityKind)
     {
         if (EntityKind.EXPERIMENT.equals(entityKind))
@@ -106,14 +106,14 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<DemoV
     // Helper classes
     //
 
-    private final class SampleClientPlugin implements IClientPlugin<SampleType, IIdentifiable>
+    private final class SampleClientPlugin implements IClientPlugin<SampleType, IIdAndCodeHolder>
     {
         //
         // IViewClientPlugin
         //
 
         public final AbstractTabItemFactory createEntityViewer(final BasicEntityType sampleType,
-                final IIdentifiable identifiable)
+                final IIdAndCodeHolder identifiable)
         {
             final TechId sampleId = TechId.create(identifiable);
             return new AbstractTabItemFactory()
@@ -161,7 +161,7 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<DemoV
         }
 
         public AbstractTabItemFactory createEntityEditor(final SampleType sampleType,
-                final IIdentifiable identifiable)
+                final IIdAndCodeHolder identifiable)
         {
             return new AbstractTabItemFactory()
                 {
@@ -188,7 +188,7 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<DemoV
     }
 
     private final static class ExperimentClientPlugin extends
-            ClientPluginAdapter<ExperimentType, IIdentifiable>
+            ClientPluginAdapter<ExperimentType, IIdAndCodeHolder>
     {
 
         //
@@ -197,7 +197,7 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<DemoV
 
         @Override
         public final AbstractTabItemFactory createEntityViewer(
-                final BasicEntityType experimentType, final IIdentifiable identifiable)
+                final BasicEntityType experimentType, final IIdAndCodeHolder identifiable)
         {
             return new AbstractTabItemFactory()
                 {
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/AbstractGenericEntityRegistrationForm.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/AbstractGenericEntityRegistrationForm.java
index ec16c67b02d922c84f29d42a7446263b01a64d84..bcb305e24686c61ae9b43f6b7db28f9c1cf98c33 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/AbstractGenericEntityRegistrationForm.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/AbstractGenericEntityRegistrationForm.java
@@ -33,7 +33,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.IDatabaseModificationObserver;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.AbstractRegistrationForm;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.CodeFieldWithGenerator;
-import ch.systemsx.cisd.openbis.generic.shared.basic.IIdentifiable;
+import ch.systemsx.cisd.openbis.generic.shared.basic.IIdAndCodeHolder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind;
@@ -76,7 +76,7 @@ public abstract class AbstractGenericEntityRegistrationForm<T extends EntityType
      */
     protected AbstractGenericEntityRegistrationForm(
             final IViewContext<IGenericClientServiceAsync> viewContext,
-            IIdentifiable identifiableOrNull, EntityKind entityKind)
+            IIdAndCodeHolder identifiableOrNull, EntityKind entityKind)
     {
         super(viewContext, createId(identifiableOrNull, entityKind), DEFAULT_LABEL_WIDTH + 20,
                 DEFAULT_FIELD_WIDTH);
@@ -109,10 +109,10 @@ public abstract class AbstractGenericEntityRegistrationForm<T extends EntityType
     // ID generation
     // ---------------------------------------------------------------------------------------------
     /**
-     * Creates unique id based on {@link #createSimpleId(IIdentifiable, EntityKind)} and application
+     * Creates unique id based on {@link #createSimpleId(IIdAndCodeHolder, EntityKind)} and application
      * specific ID prefix.
      */
-    public static final String createId(IIdentifiable identifiable, EntityKind entityKind)
+    public static final String createId(IIdAndCodeHolder identifiable, EntityKind entityKind)
     {
         return ID_PREFIX + createSimpleId(identifiable, entityKind);
     }
@@ -129,7 +129,7 @@ public abstract class AbstractGenericEntityRegistrationForm<T extends EntityType
     /**
      * Creates unique form id for given entity.
      */
-    protected static final String createSimpleId(IIdentifiable identifiable, EntityKind entityKind)
+    protected static final String createSimpleId(IIdAndCodeHolder identifiable, EntityKind entityKind)
     {
         return createSimpleId(TechId.create(identifiable), entityKind);
     }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/ClientPluginFactory.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/ClientPluginFactory.java
index aa8b8618ae415f7bdc061a3c5b8db262cb1877a5..01c27d4302a380c242e227125393c5523cc94171 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/ClientPluginFactory.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/ClientPluginFactory.java
@@ -37,7 +37,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.plugin.ICl
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.plugin.IClientPluginFactory;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.AbstractRegistrationForm;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.AbstractViewer;
-import ch.systemsx.cisd.openbis.generic.shared.basic.IIdentifiable;
+import ch.systemsx.cisd.openbis.generic.shared.basic.IIdAndCodeHolder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.BasicEntityType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetType;
@@ -87,7 +87,7 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<Gener
     //
 
     @SuppressWarnings("unchecked")
-    public final <T extends BasicEntityType, I extends IIdentifiable> IClientPlugin<T, I> createClientPlugin(
+    public final <T extends BasicEntityType, I extends IIdAndCodeHolder> IClientPlugin<T, I> createClientPlugin(
             EntityKind entityKind)
     {
         if (EntityKind.EXPERIMENT.equals(entityKind))
@@ -117,12 +117,12 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<Gener
                 "Generic plugin factory supports every sample type.");
     }
 
-    private String getViewerTitle(final String entityKindDictKey, final IIdentifiable identifiable)
+    private String getViewerTitle(final String entityKindDictKey, final IIdAndCodeHolder identifiable)
     {
         return AbstractViewer.getTitle(getViewContext(), entityKindDictKey, identifiable);
     }
 
-    private String getEditorTitle(final String entityKindDictKey, final IIdentifiable identifiable)
+    private String getEditorTitle(final String entityKindDictKey, final IIdAndCodeHolder identifiable)
     {
         return AbstractRegistrationForm.getEditTitle(getViewContext(), entityKindDictKey,
                 identifiable);
@@ -132,7 +132,7 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<Gener
     // Helper classes
     //
 
-    private final class SampleClientPlugin implements IClientPlugin<SampleType, IIdentifiable>
+    private final class SampleClientPlugin implements IClientPlugin<SampleType, IIdAndCodeHolder>
     {
 
         //
@@ -140,7 +140,7 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<Gener
         //
 
         public AbstractTabItemFactory createEntityViewer(final BasicEntityType sampleType,
-                final IIdentifiable identifiable)
+                final IIdAndCodeHolder identifiable)
         {
             return new AbstractTabItemFactory()
                 {
@@ -186,7 +186,7 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<Gener
         }
 
         public AbstractTabItemFactory createEntityEditor(final SampleType sampleType,
-                final IIdentifiable identifiable)
+                final IIdAndCodeHolder identifiable)
         {
             return new AbstractTabItemFactory()
                 {
@@ -216,7 +216,7 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<Gener
     }
 
     private final class MaterialClientPlugin extends
-            ClientPluginAdapter<MaterialType, IIdentifiable>
+            ClientPluginAdapter<MaterialType, IIdAndCodeHolder>
     {
 
         @Override
@@ -227,7 +227,7 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<Gener
 
         @Override
         public final AbstractTabItemFactory createEntityViewer(final BasicEntityType materialType,
-                final IIdentifiable identifiable)
+                final IIdAndCodeHolder identifiable)
         {
             final TechId techId = TechId.create(identifiable);
             return new AbstractTabItemFactory()
@@ -257,7 +257,7 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<Gener
 
         @Override
         public AbstractTabItemFactory createEntityEditor(final MaterialType materialType,
-                final IIdentifiable identifiable)
+                final IIdAndCodeHolder identifiable)
         {
             return new AbstractTabItemFactory()
                 {
@@ -287,7 +287,7 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<Gener
     }
 
     private final class ExperimentClientPlugin extends
-            ClientPluginAdapter<ExperimentType, IIdentifiable>
+            ClientPluginAdapter<ExperimentType, IIdAndCodeHolder>
     {
 
         //
@@ -296,7 +296,7 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<Gener
 
         @Override
         public final AbstractTabItemFactory createEntityViewer(
-                final BasicEntityType experimentType, final IIdentifiable experimentId)
+                final BasicEntityType experimentType, final IIdAndCodeHolder experimentId)
         {
             return new AbstractTabItemFactory()
                 {
@@ -336,7 +336,7 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<Gener
 
         @Override
         public AbstractTabItemFactory createEntityEditor(final ExperimentType entityType,
-                final IIdentifiable identifiable)
+                final IIdAndCodeHolder identifiable)
         {
             return new AbstractTabItemFactory()
                 {
@@ -366,12 +366,12 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<Gener
         }
     }
 
-    private final class DataSetClientPlugin extends ClientPluginAdapter<DataSetType, IIdentifiable>
+    private final class DataSetClientPlugin extends ClientPluginAdapter<DataSetType, IIdAndCodeHolder>
     {
 
         @Override
         public final AbstractTabItemFactory createEntityViewer(final BasicEntityType dataSetType,
-                final IIdentifiable identifiable)
+                final IIdAndCodeHolder identifiable)
         {
             return new AbstractTabItemFactory()
                 {
@@ -400,7 +400,7 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<Gener
 
         @Override
         public AbstractTabItemFactory createEntityEditor(final DataSetType dataSetType,
-                final IIdentifiable identifiable)
+                final IIdAndCodeHolder identifiable)
         {
             return new AbstractTabItemFactory()
                 {
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/GenericDataSetEditForm.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/GenericDataSetEditForm.java
index 5ebed4ae5cbab1eedaca9d2da0a92d4c80fc3c55..616ab46729d5491d6c03c0bfd5bea070d2979571 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/GenericDataSetEditForm.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/GenericDataSetEditForm.java
@@ -46,7 +46,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DataSetUpdates;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DefaultResultSetConfig;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExperimentIdentifier;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ResultSetWithEntityTypes;
-import ch.systemsx.cisd.openbis.generic.shared.basic.IIdentifiable;
+import ch.systemsx.cisd.openbis.generic.shared.basic.IIdAndCodeHolder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetRelationshipRole;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetTypePropertyType;
@@ -89,14 +89,14 @@ public final class GenericDataSetEditForm extends
     private ExternalData originalDataSet;
 
     public static DatabaseModificationAwareComponent create(
-            IViewContext<IGenericClientServiceAsync> viewContext, IIdentifiable identifiable)
+            IViewContext<IGenericClientServiceAsync> viewContext, IIdAndCodeHolder identifiable)
     {
         GenericDataSetEditForm form = new GenericDataSetEditForm(viewContext, identifiable);
         return new DatabaseModificationAwareComponent(form, form);
     }
 
     private GenericDataSetEditForm(IViewContext<IGenericClientServiceAsync> viewContext,
-            IIdentifiable identifiable)
+            IIdAndCodeHolder identifiable)
     {
         super(viewContext, identifiable, EntityKind.DATA_SET);
         simpleId = createSimpleId(identifiable, EntityKind.DATA_SET);
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/GenericDataSetViewer.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/GenericDataSetViewer.java
index 4f58220a4009034fb90bf72c5b48bdf86342945c..f223dad9c8708ceb32bcdcb2a922083b0b6c7063 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/GenericDataSetViewer.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/GenericDataSetViewer.java
@@ -46,7 +46,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IDelegatedAction;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IMessageProvider;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DisplayedOrSelectedDatasetCriteria;
-import ch.systemsx.cisd.openbis.generic.shared.basic.IIdentifiable;
+import ch.systemsx.cisd.openbis.generic.shared.basic.IIdAndCodeHolder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataStoreServiceKind;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind;
@@ -77,7 +77,7 @@ abstract public class GenericDataSetViewer extends AbstractViewer<ExternalData>
 
     public static DatabaseModificationAwareComponent create(
             final IViewContext<IGenericClientServiceAsync> viewContext,
-            final IIdentifiable identifiable)
+            final IIdAndCodeHolder identifiable)
     {
         GenericDataSetViewer viewer = new GenericDataSetViewer(viewContext, identifiable)
             {
@@ -93,7 +93,7 @@ abstract public class GenericDataSetViewer extends AbstractViewer<ExternalData>
     }
 
     protected GenericDataSetViewer(final IViewContext<?> viewContext,
-            final IIdentifiable identifiable)
+            final IIdAndCodeHolder identifiable)
     {
         super(viewContext, createId(identifiable));
         setLayout(new BorderLayout());
@@ -134,7 +134,7 @@ abstract public class GenericDataSetViewer extends AbstractViewer<ExternalData>
         addToolBarButton(processButtonHolder.getButton());
     }
 
-    public static final String createId(final IIdentifiable identifiable)
+    public static final String createId(final IIdAndCodeHolder identifiable)
     {
         return createId(TechId.create(identifiable));
     }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/AbstractGenericExperimentRegisterEditForm.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/AbstractGenericExperimentRegisterEditForm.java
index c3265a074a512b03b7afe1bf316ec34643d6fbba..3f3d6c57607a0ab2d16fb5495be6f8199c663b36 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/AbstractGenericExperimentRegisterEditForm.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/AbstractGenericExperimentRegisterEditForm.java
@@ -51,7 +51,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.file.Ba
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.sample.SampleTypeSelectionWidget;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.FieldUtil;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.WindowUtils;
-import ch.systemsx.cisd.openbis.generic.shared.basic.IIdentifiable;
+import ch.systemsx.cisd.openbis.generic.shared.basic.IIdAndCodeHolder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.BatchOperationKind;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExperimentType;
@@ -100,7 +100,7 @@ abstract public class AbstractGenericExperimentRegisterEditForm extends
     }
 
     protected AbstractGenericExperimentRegisterEditForm(
-            IViewContext<IGenericClientServiceAsync> viewContext, IIdentifiable identifiable)
+            IViewContext<IGenericClientServiceAsync> viewContext, IIdAndCodeHolder identifiable)
     {
         super(viewContext, identifiable, EntityKind.EXPERIMENT);
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/ExperimentSamplesSection.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/ExperimentSamplesSection.java
index 1da1d76e815ef70887ea755222d5fbec0025f673..3b6a3691ae55d7c787bcaa3d9020a30963271913 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/ExperimentSamplesSection.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/ExperimentSamplesSection.java
@@ -22,7 +22,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewConte
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.SingleSectionPanel;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IDisposableComponent;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.sample.SampleBrowserGrid;
-import ch.systemsx.cisd.openbis.generic.shared.basic.IIdentifiable;
+import ch.systemsx.cisd.openbis.generic.shared.basic.IIdAndCodeHolder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.BasicEntityType;
 
@@ -42,7 +42,7 @@ public class ExperimentSamplesSection extends DisposableSectionPanel
     private final TechId experimentId;
 
     public ExperimentSamplesSection(IViewContext<?> viewContext, BasicEntityType experimentType,
-            IIdentifiable experimentId)
+            IIdAndCodeHolder experimentId)
     {
         super("Samples", viewContext);
         this.experimentType = experimentType;
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentEditForm.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentEditForm.java
index 0ac2a9565cd51c82064f8174f5a27dd51c43a781..4dc022051d80f781f98faf0b1f390e8a5cbf9396 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentEditForm.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentEditForm.java
@@ -23,7 +23,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.AbstractRegistrationForm;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ListSampleDisplayCriteria;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ResultSetWithEntityTypes;
-import ch.systemsx.cisd.openbis.generic.shared.basic.IIdentifiable;
+import ch.systemsx.cisd.openbis.generic.shared.basic.IIdAndCodeHolder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExperimentUpdateResult;
@@ -41,14 +41,14 @@ public final class GenericExperimentEditForm extends AbstractGenericExperimentRe
     private Experiment originalExperiment;
 
     public static DatabaseModificationAwareComponent create(
-            IViewContext<IGenericClientServiceAsync> viewContext, IIdentifiable identifiable)
+            IViewContext<IGenericClientServiceAsync> viewContext, IIdAndCodeHolder identifiable)
     {
         GenericExperimentEditForm form = new GenericExperimentEditForm(viewContext, identifiable);
         return new DatabaseModificationAwareComponent(form, form);
     }
 
     private GenericExperimentEditForm(IViewContext<IGenericClientServiceAsync> viewContext,
-            IIdentifiable identifiable)
+            IIdAndCodeHolder identifiable)
     {
         super(viewContext, identifiable);
     }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentViewer.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentViewer.java
index 2b32e08bc7d89ca9ae926747c4828f60910be31c..f1c562dea3a75b8303fb1c59f63de00fbfee0cc6 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentViewer.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentViewer.java
@@ -42,7 +42,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.GWTUtils;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IDelegatedAction;
 import ch.systemsx.cisd.openbis.generic.shared.basic.IAttachmentHolder;
-import ch.systemsx.cisd.openbis.generic.shared.basic.IIdentifiable;
+import ch.systemsx.cisd.openbis.generic.shared.basic.IIdAndCodeHolder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.AttachmentHolderKind;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.BasicEntityType;
@@ -66,7 +66,7 @@ public class GenericExperimentViewer extends AbstractViewer<Experiment> implemen
 
     private final IViewContext<IGenericClientServiceAsync> viewContext;
 
-    protected final IIdentifiable experimentId;
+    protected final IIdAndCodeHolder experimentId;
 
     protected final BasicEntityType experimentType;
 
@@ -76,7 +76,7 @@ public class GenericExperimentViewer extends AbstractViewer<Experiment> implemen
 
     public static DatabaseModificationAwareComponent create(
             final IViewContext<IGenericClientServiceAsync> viewContext,
-            final BasicEntityType experimentType, final IIdentifiable identifiable)
+            final BasicEntityType experimentType, final IIdAndCodeHolder identifiable)
     {
         GenericExperimentViewer viewer =
                 new GenericExperimentViewer(viewContext, experimentType, identifiable);
@@ -84,7 +84,7 @@ public class GenericExperimentViewer extends AbstractViewer<Experiment> implemen
     }
 
     protected GenericExperimentViewer(final IViewContext<IGenericClientServiceAsync> viewContext,
-            final BasicEntityType experimentType, final IIdentifiable experimentId)
+            final BasicEntityType experimentType, final IIdAndCodeHolder experimentId)
     {
         super(viewContext, createId(experimentId));
 
@@ -162,7 +162,7 @@ public class GenericExperimentViewer extends AbstractViewer<Experiment> implemen
             });
     }
 
-    public static final String createId(final IIdentifiable identifiable)
+    public static final String createId(final IIdAndCodeHolder identifiable)
     {
         return createId(TechId.create(identifiable));
     }
@@ -184,7 +184,7 @@ public class GenericExperimentViewer extends AbstractViewer<Experiment> implemen
         return new AttachmentVersionsSection(viewContext.getCommonViewContext(), newExperiment);
     }
 
-    private static IAttachmentHolder asExperimentAttachmentHolder(final IIdentifiable identifiable)
+    private static IAttachmentHolder asExperimentAttachmentHolder(final IIdAndCodeHolder identifiable)
     {
         return new IAttachmentHolder()
             {
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/material/GenericMaterialEditForm.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/material/GenericMaterialEditForm.java
index 80edc347566b9436c7e993e4a588649162c14f2f..a60486cf72871db19628296533326058835c3801 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/material/GenericMaterialEditForm.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/material/GenericMaterialEditForm.java
@@ -26,7 +26,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewConte
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DatabaseModificationAwareComponent;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DatabaseModificationAwareField;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.AbstractRegistrationForm;
-import ch.systemsx.cisd.openbis.generic.shared.basic.IIdentifiable;
+import ch.systemsx.cisd.openbis.generic.shared.basic.IIdAndCodeHolder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Material;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.MaterialType;
@@ -46,7 +46,7 @@ public final class GenericMaterialEditForm extends
     private Material originalMaterial;
 
     public static DatabaseModificationAwareComponent create(
-            IViewContext<IGenericClientServiceAsync> viewContext, IIdentifiable identifiable,
+            IViewContext<IGenericClientServiceAsync> viewContext, IIdAndCodeHolder identifiable,
             boolean editMode)
     {
         GenericMaterialEditForm form =
@@ -55,7 +55,7 @@ public final class GenericMaterialEditForm extends
     }
 
     private GenericMaterialEditForm(IViewContext<IGenericClientServiceAsync> viewContext,
-            IIdentifiable identifiable, boolean editMode)
+            IIdAndCodeHolder identifiable, boolean editMode)
     {
         super(viewContext, identifiable, EntityKind.MATERIAL);
     }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/AbstractGenericSampleRegisterEditForm.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/AbstractGenericSampleRegisterEditForm.java
index fd4e02a5a704ed87ebd1aba5810ed3ec861cb46a..00384a89da6d6935494328a903c6179794a64a64 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/AbstractGenericSampleRegisterEditForm.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/AbstractGenericSampleRegisterEditForm.java
@@ -38,7 +38,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.E
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.SampleChooserField.SampleChooserFieldAdaptor;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.file.AttachmentsFileFieldManager;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.FieldUtil;
-import ch.systemsx.cisd.openbis.generic.shared.basic.IIdentifiable;
+import ch.systemsx.cisd.openbis.generic.shared.basic.IIdAndCodeHolder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Space;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleType;
@@ -84,7 +84,7 @@ abstract public class AbstractGenericSampleRegisterEditForm extends
     }
 
     protected AbstractGenericSampleRegisterEditForm(
-            IViewContext<IGenericClientServiceAsync> viewContext, IIdentifiable identifiable)
+            IViewContext<IGenericClientServiceAsync> viewContext, IIdAndCodeHolder identifiable)
     {
         super(viewContext, identifiable, EntityKind.SAMPLE);
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleEditForm.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleEditForm.java
index 2f5c03471dadb7444e6ef8f685e3f499e2dcdc6a..99a906374e56ce012e15740179c30127aa770497 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleEditForm.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleEditForm.java
@@ -27,7 +27,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.GroupSe
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.StringUtils;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExperimentIdentifier;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.SampleUpdates;
-import ch.systemsx.cisd.openbis.generic.shared.basic.IIdentifiable;
+import ch.systemsx.cisd.openbis.generic.shared.basic.IIdAndCodeHolder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Space;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityProperty;
@@ -46,14 +46,14 @@ public final class GenericSampleEditForm extends AbstractGenericSampleRegisterEd
     private Sample originalSample;
 
     public static DatabaseModificationAwareComponent create(
-            IViewContext<IGenericClientServiceAsync> viewContext, IIdentifiable identifiable)
+            IViewContext<IGenericClientServiceAsync> viewContext, IIdAndCodeHolder identifiable)
     {
         GenericSampleEditForm form = new GenericSampleEditForm(viewContext, identifiable);
         return new DatabaseModificationAwareComponent(form, form);
     }
 
     private GenericSampleEditForm(IViewContext<IGenericClientServiceAsync> viewContext,
-            IIdentifiable identifiable)
+            IIdAndCodeHolder identifiable)
     {
         super(viewContext, identifiable);
     }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleViewer.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleViewer.java
index 5fefcbd1645b4e5acbbdf6b1d922195c1ff510e5..648d34d84c3e628fb0fa3953f0d355d83fe9ad30 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleViewer.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleViewer.java
@@ -57,7 +57,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.EntityPropertyUtils;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IDelegatedAction;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IMessageProvider;
-import ch.systemsx.cisd.openbis.generic.shared.basic.IIdentifiable;
+import ch.systemsx.cisd.openbis.generic.shared.basic.IIdAndCodeHolder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityProperty;
@@ -114,7 +114,7 @@ abstract public class GenericSampleViewer extends AbstractViewer<Sample> impleme
 
     public static DatabaseModificationAwareComponent create(
             final IViewContext<IGenericClientServiceAsync> viewContext,
-            final IIdentifiable identifiable)
+            final IIdAndCodeHolder identifiable)
     {
         GenericSampleViewer viewer = new GenericSampleViewer(viewContext, identifiable)
             {
@@ -135,7 +135,7 @@ abstract public class GenericSampleViewer extends AbstractViewer<Sample> impleme
             AsyncCallback<SampleParentWithDerived> asyncCallback);
 
     protected GenericSampleViewer(final IViewContext<?> viewContext,
-            final IIdentifiable identifiable)
+            final IIdAndCodeHolder identifiable)
     {
         super(viewContext, createId(identifiable));
         setLayout(new BorderLayout());
@@ -166,7 +166,7 @@ abstract public class GenericSampleViewer extends AbstractViewer<Sample> impleme
         reloadSampleGenerationData(new SampleGenerationInfoCallback(viewContext, this));
     }
 
-    public static final String createId(final IIdentifiable identifiable)
+    public static final String createId(final IIdAndCodeHolder identifiable)
     {
         return createId(TechId.create(identifiable));
     }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/client/web/client/application/ClientPluginFactory.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/client/web/client/application/ClientPluginFactory.java
index 71d0cc10de29b2791fc7e6ecddcc34be299138b1..eefc180ddd858d3a0a9da71d1fb7ccfa6212283c 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/client/web/client/application/ClientPluginFactory.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/client/web/client/application/ClientPluginFactory.java
@@ -24,7 +24,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractCl
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.plugin.IClientPlugin;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.plugin.IModule;
-import ch.systemsx.cisd.openbis.generic.shared.basic.IIdentifiable;
+import ch.systemsx.cisd.openbis.generic.shared.basic.IIdAndCodeHolder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.BasicEntityType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind;
 
@@ -46,7 +46,7 @@ public class ClientPluginFactory extends AbstractClientPluginFactory<QueryViewCo
         return new QueryViewContext(originalViewContext);
     }
 
-    public <T extends BasicEntityType, I extends IIdentifiable> IClientPlugin<T, I> createClientPlugin(
+    public <T extends BasicEntityType, I extends IIdAndCodeHolder> IClientPlugin<T, I> createClientPlugin(
             EntityKind entityKind)
     {
         throw new UnsupportedOperationException("IClientPlugin for entity kind '" + entityKind
diff --git a/openbis/source/java/service.properties b/openbis/source/java/service.properties
index 9b9f71b4b3c592484394dbf95cfa5d8a9e2ecc5e..7cbf4ed695047f9b6179e55c406e9aa8ecc8c7ba 100644
--- a/openbis/source/java/service.properties
+++ b/openbis/source/java/service.properties
@@ -15,7 +15,7 @@ database.create-from-scratch = false
 # For debugging set this value to true.
 database.script-single-step-mode = false
 database.url-host-part =
-database.kind = dev
+database.kind = yeastx
 # database.kind = system_test
 # database.kind = system_test_strict
 # database.kind = system_test_plates_on_demand
@@ -51,8 +51,8 @@ cifex-recipient = id:cifexdatamanager
 hibernate.search.index-base = ./targets/indices-${database.kind}
 # One of NO_INDEX, SKIP_IF_MARKER_FOUND, INDEX_FROM_SCRATCH.
 # If not specified, default (SKIP_IF_MARKER_FOUND) is taken.
-hibernate.search.index-mode = SKIP_IF_MARKER_FOUND
-#hibernate.search.index-mode = INDEX_FROM_SCRATCH
+#hibernate.search.index-mode = SKIP_IF_MARKER_FOUND
+hibernate.search.index-mode = INDEX_FROM_SCRATCH
 # Defines the maximum number of elements indexed before flushing the transaction-bound queue.
 # Default is 1000.
 hibernate.search.batch-size = 1000
@@ -78,7 +78,6 @@ query-database.label = openBIS meta data
 query-database.databaseEngineCode = ${database.engine}
 query-database.basicDatabaseName = openbis
 query-database.databaseKind = ${database.kind}
-
 # Comma-separated list of host names and IP addresses of clients on which an INSTANCE_ADMIN
 # user is allowed to change identity
 accepted-remote-hosts-for-identity-change = localhost
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/testframework/AbstractProperty.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/testframework/AbstractProperty.java
index 14df044f350e6f0074e8081cd1df1d484de3755e..a27280521028bb27c2b33d62ea01f3cfb26bd76d 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/testframework/AbstractProperty.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/testframework/AbstractProperty.java
@@ -18,7 +18,7 @@ package ch.systemsx.cisd.openbis.generic.client.web.client.testframework;
 
 import junit.framework.Assert;
 
-import ch.systemsx.cisd.openbis.generic.shared.basic.ICodeProvider;
+import ch.systemsx.cisd.openbis.generic.shared.basic.ICodeHolder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.IInvalidationProvider;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityProperty;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityProperty;
@@ -102,14 +102,14 @@ public abstract class AbstractProperty<C extends IPropertyChecker<?>> implements
     }
 
     /**
-     * Sets assertion that the property value is of type {@link ICodeProvider} with a code equals
+     * Sets assertion that the property value is of type {@link ICodeHolder} with a code equals
      * the specified code.
      */
     public C asCode(final String expectedCode)
     {
-        return by(new IValueAssertion<ICodeProvider>()
+        return by(new IValueAssertion<ICodeHolder>()
             {
-                public void assertValue(final ICodeProvider code)
+                public void assertValue(final ICodeHolder code)
                 {
                     Assert.assertEquals(message, expectedCode, code.getCode());
                 }
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/ClientPluginFactory.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/ClientPluginFactory.java
index 8b10ab16c0fb1683148ea53739694108d11162a3..642932fc0d1bf9d278aa75839d28cb107b5d1584 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/ClientPluginFactory.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/ClientPluginFactory.java
@@ -36,7 +36,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.plugin.ICl
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.plugin.IModule;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.AbstractRegistrationForm;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.AbstractViewer;
-import ch.systemsx.cisd.openbis.generic.shared.basic.IIdentifiable;
+import ch.systemsx.cisd.openbis.generic.shared.basic.IIdAndCodeHolder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.BasicEntityType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExperimentType;
@@ -80,7 +80,7 @@ public class ClientPluginFactory extends AbstractClientPluginFactory<ViewContext
     }
 
     @SuppressWarnings("unchecked")
-    public <T extends BasicEntityType, I extends IIdentifiable> IClientPlugin<T, I> createClientPlugin(
+    public <T extends BasicEntityType, I extends IIdAndCodeHolder> IClientPlugin<T, I> createClientPlugin(
             EntityKind entityKind)
     {
         if (EntityKind.EXPERIMENT.equals(entityKind))
@@ -96,7 +96,7 @@ public class ClientPluginFactory extends AbstractClientPluginFactory<ViewContext
     //
 
     private final class ExperimentClientPlugin extends
-            ClientPluginAdapter<ExperimentType, IIdentifiable>
+            ClientPluginAdapter<ExperimentType, IIdAndCodeHolder>
     {
         //
         // IViewClientPlugin
@@ -104,7 +104,7 @@ public class ClientPluginFactory extends AbstractClientPluginFactory<ViewContext
 
         @Override
         public final AbstractTabItemFactory createEntityViewer(
-                final BasicEntityType experimentType, final IIdentifiable identifiable)
+                final BasicEntityType experimentType, final IIdAndCodeHolder identifiable)
         {
             return new AbstractTabItemFactory()
                 {
@@ -144,7 +144,7 @@ public class ClientPluginFactory extends AbstractClientPluginFactory<ViewContext
 
         @Override
         public AbstractTabItemFactory createEntityEditor(final ExperimentType experimentType,
-                final IIdentifiable identifiable)
+                final IIdAndCodeHolder identifiable)
         {
             return new AbstractTabItemFactory()
                 {
@@ -175,13 +175,13 @@ public class ClientPluginFactory extends AbstractClientPluginFactory<ViewContext
         }
 
         private String getViewerTitle(final String entityKindDictKey,
-                final IIdentifiable identifiable)
+                final IIdAndCodeHolder identifiable)
         {
             return AbstractViewer.getTitle(getViewContext(), entityKindDictKey, identifiable);
         }
 
         private String getEditorTitle(final String entityKindDictKey,
-                final IIdentifiable identifiable)
+                final IIdAndCodeHolder identifiable)
         {
             return AbstractRegistrationForm.getEditTitle(getViewContext(), entityKindDictKey,
                     identifiable);
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/DataSetProteinGrid.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/DataSetProteinGrid.java
index b7c4c3421e120b2b3d5622f7055b2c5105c109f3..6878b43c1a89a211811970eb9f56ece90c393a8a 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/DataSetProteinGrid.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/DataSetProteinGrid.java
@@ -28,7 +28,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DefaultResultSetCo
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ResultSet;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.TableExportCriteria;
 import ch.systemsx.cisd.openbis.generic.shared.basic.IColumnDefinition;
-import ch.systemsx.cisd.openbis.generic.shared.basic.IIdentifiable;
+import ch.systemsx.cisd.openbis.generic.shared.basic.IIdAndCodeHolder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind;
 import ch.systemsx.cisd.openbis.plugin.phosphonetx.client.web.client.IPhosphoNetXClientServiceAsync;
@@ -48,13 +48,13 @@ class DataSetProteinGrid extends AbstractSimpleBrowserGrid<DataSetProtein>
     public static final String GRID_ID = PREFIX + "_grid";
 
     static IDisposableComponent create(IViewContext<IPhosphoNetXClientServiceAsync> viewContext,
-            IIdentifiable experimentIdOrNull, TechId proteinReferenceID)
+            IIdAndCodeHolder experimentIdOrNull, TechId proteinReferenceID)
     {
         return new DataSetProteinGrid(viewContext, experimentIdOrNull, proteinReferenceID)
                 .asDisposableWithoutToolbar();
     }
 
-    private static String createWidgetID(IIdentifiable experimentIdOrNull, TechId proteinReferenceID)
+    private static String createWidgetID(IIdAndCodeHolder experimentIdOrNull, TechId proteinReferenceID)
     {
         return "-" + (experimentIdOrNull == null ? "" : experimentIdOrNull.getId() + "-")
                 + proteinReferenceID;
@@ -65,7 +65,7 @@ class DataSetProteinGrid extends AbstractSimpleBrowserGrid<DataSetProtein>
     private ListProteinByExperimentAndReferenceCriteria criteria;
 
     private DataSetProteinGrid(IViewContext<IPhosphoNetXClientServiceAsync> viewContext,
-            IIdentifiable experimentIdOrNull, TechId proteinReferenceID)
+            IIdAndCodeHolder experimentIdOrNull, TechId proteinReferenceID)
     {
         super(viewContext.getCommonViewContext(), BROWSER_ID
                 + createWidgetID(experimentIdOrNull, proteinReferenceID), GRID_ID
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/ExperimentViewer.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/ExperimentViewer.java
index ef7ff55662bb675ada434101f835195c0a5bd35d..4887d4eac8da65205242412cb3f1a5ade7512b8a 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/ExperimentViewer.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/ExperimentViewer.java
@@ -23,7 +23,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.Disposable
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DatabaseModificationAwareComponent;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IDisposableComponent;
-import ch.systemsx.cisd.openbis.generic.shared.basic.IIdentifiable;
+import ch.systemsx.cisd.openbis.generic.shared.basic.IIdAndCodeHolder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.BasicEntityType;
 import ch.systemsx.cisd.openbis.plugin.generic.client.web.client.IGenericClientServiceAsync;
 import ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.GenericViewContext;
@@ -37,7 +37,7 @@ public class ExperimentViewer extends GenericExperimentViewer
 {
     public static DatabaseModificationAwareComponent create(
             IViewContext<IPhosphoNetXClientServiceAsync> viewContext,
-            BasicEntityType experimentType, IIdentifiable experimentId)
+            BasicEntityType experimentType, IIdAndCodeHolder experimentId)
     {
         ExperimentViewer viewer =
                 new ExperimentViewer(new GenericViewContext(viewContext.getCommonViewContext()),
@@ -49,7 +49,7 @@ public class ExperimentViewer extends GenericExperimentViewer
 
     protected ExperimentViewer(IViewContext<IGenericClientServiceAsync> viewContext,
             IViewContext<IPhosphoNetXClientServiceAsync> specificViewContext,
-            BasicEntityType experimentType, IIdentifiable experimentId)
+            BasicEntityType experimentType, IIdAndCodeHolder experimentId)
     {
         super(viewContext, experimentType, experimentId);
         this.specificViewContext = specificViewContext;
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/ProteinByExperimentBrowerToolBar.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/ProteinByExperimentBrowerToolBar.java
index fcb35ca17df731bc5679ef6a69fa45f00e3f17d9..5f23d58d878368ccd59e012148e0479df81b7262 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/ProteinByExperimentBrowerToolBar.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/ProteinByExperimentBrowerToolBar.java
@@ -38,7 +38,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.NonH
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.VocabularyTermModel;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.VocabularyTermSelectionWidget;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.IDataRefreshCallback;
-import ch.systemsx.cisd.openbis.generic.shared.basic.IIdentifiable;
+import ch.systemsx.cisd.openbis.generic.shared.basic.IIdAndCodeHolder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Vocabulary;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.VocabularyTerm;
@@ -160,12 +160,12 @@ class ProteinByExperimentBrowerToolBar extends ToolBar
 
     private ProteinByExperimentBrowserGrid browserGrid;
 
-    private IIdentifiable experimentId;
+    private IIdAndCodeHolder experimentId;
 
     private ProteinSummaryGrid summaryGrid;
 
     ProteinByExperimentBrowerToolBar(IViewContext<IPhosphoNetXClientServiceAsync> viewContext,
-            IIdentifiable experimentId)
+            IIdAndCodeHolder experimentId)
     {
         this.viewContext = viewContext;
         this.experimentId = experimentId;
@@ -275,7 +275,7 @@ class ProteinByExperimentBrowerToolBar extends ToolBar
         return comboBox;
     }
 
-    IIdentifiable getExperimentOrNull()
+    IIdAndCodeHolder getExperimentOrNull()
     {
         return experimentId;
     }
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/ProteinByExperimentBrowserGrid.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/ProteinByExperimentBrowserGrid.java
index 98d278f284ac047e20533130b0a71ae5874814dc..493f87cd26dc7f4e12f157667ad8d5d97d585387 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/ProteinByExperimentBrowserGrid.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/ProteinByExperimentBrowserGrid.java
@@ -51,7 +51,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ResultSet;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.TableExportCriteria;
 import ch.systemsx.cisd.openbis.generic.shared.basic.GridRowModel;
 import ch.systemsx.cisd.openbis.generic.shared.basic.IColumnDefinition;
-import ch.systemsx.cisd.openbis.generic.shared.basic.IIdentifiable;
+import ch.systemsx.cisd.openbis.generic.shared.basic.IIdAndCodeHolder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.BasicEntityType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind;
@@ -97,7 +97,7 @@ class ProteinByExperimentBrowserGrid extends AbstractSimpleBrowserGrid<ProteinIn
 
     static IDisposableComponent create(
             final IViewContext<IPhosphoNetXClientServiceAsync> viewContext,
-            BasicEntityType experimentType, IIdentifiable experimentId)
+            BasicEntityType experimentType, IIdAndCodeHolder experimentId)
     {
         final IDisposableComponent summaryGrid = ProteinSummaryGrid.create(viewContext);
         ProteinByExperimentBrowserGrid browserGrid =
@@ -152,7 +152,7 @@ class ProteinByExperimentBrowserGrid extends AbstractSimpleBrowserGrid<ProteinIn
 
     private ProteinByExperimentBrowserGrid(
             final IViewContext<IPhosphoNetXClientServiceAsync> viewContext,
-            IIdentifiable experimentId)
+            IIdAndCodeHolder experimentId)
     {
         super(viewContext.getCommonViewContext(), BROWSER_ID, GRID_ID, false,
                 PhosphoNetXDisplayTypeIDGenerator.PROTEIN_BY_EXPERIMENT_BROWSER_GRID);
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/ProteinSamplesSection.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/ProteinSamplesSection.java
index 7992a4f3142b0186b1e0b0952a23fa4ab0c2e286..c3f5f492ac493b6f346be64d76e07a057e713019 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/ProteinSamplesSection.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/ProteinSamplesSection.java
@@ -21,7 +21,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.GenericCon
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.SingleSectionPanel;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IDisposableComponent;
-import ch.systemsx.cisd.openbis.generic.shared.basic.IIdentifiable;
+import ch.systemsx.cisd.openbis.generic.shared.basic.IIdAndCodeHolder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
 import ch.systemsx.cisd.openbis.plugin.phosphonetx.client.web.client.IPhosphoNetXClientServiceAsync;
 
@@ -40,10 +40,10 @@ public class ProteinSamplesSection extends DisposableSectionPanel
 
     private final TechId proteinReferenceID;
 
-    private final IIdentifiable experimentOrNull;
+    private final IIdAndCodeHolder experimentOrNull;
 
     public ProteinSamplesSection(final IViewContext<IPhosphoNetXClientServiceAsync> viewContext,
-            final TechId proteinReferenceID, IIdentifiable experimentOrNull)
+            final TechId proteinReferenceID, IIdAndCodeHolder experimentOrNull)
     {
         super("Samples", viewContext);
         this.viewContext = viewContext;
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/ProteinViewer.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/ProteinViewer.java
index 7cf47d189f466e7e43db6b624c2530e71ef6099d..991b92750f6c9a0ea4ad0a90dda1d7b17b3243d1 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/ProteinViewer.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/ProteinViewer.java
@@ -32,12 +32,12 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAs
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.DisposableSectionPanel;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.GenericConstants;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.AbstractTabItemFactory;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.CompositeDatabaseModificationObserver;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DatabaseModificationAwareComponent;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DefaultTabItem;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.IDatabaseModificationObserver;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ITabItem;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.AbstractTabItemFactory;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpPageIdentifier;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.AbstractViewer;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IDisposableComponent;
@@ -45,7 +45,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.propert
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.StringUtils;
 import ch.systemsx.cisd.openbis.generic.shared.basic.IEntityInformationHolder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.IEntityInformationHolderWithIdentifier;
-import ch.systemsx.cisd.openbis.generic.shared.basic.IIdentifiable;
+import ch.systemsx.cisd.openbis.generic.shared.basic.IIdAndCodeHolder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind;
@@ -74,7 +74,7 @@ public class ProteinViewer extends AbstractViewer<IEntityInformationHolder> impl
 
     static AbstractTabItemFactory createTabItemFactory(
             final IViewContext<IPhosphoNetXClientServiceAsync> viewContext,
-            final IIdentifiable experimentId, final ProteinInfo proteinInfo)
+            final IIdAndCodeHolder experimentId, final ProteinInfo proteinInfo)
     {
         return new AbstractTabItemFactory()
             {
@@ -116,7 +116,7 @@ public class ProteinViewer extends AbstractViewer<IEntityInformationHolder> impl
         return StringUtils.abbreviate(info, 30);
     }
 
-    static String createWidgetID(IIdentifiable experimentIdOrNull, TechId proteinReferenceID)
+    static String createWidgetID(IIdAndCodeHolder experimentIdOrNull, TechId proteinReferenceID)
     {
         Long experimentID = experimentIdOrNull == null ? null : experimentIdOrNull.getId();
         return ID_PREFIX + experimentID + "_" + proteinReferenceID.getId();
@@ -124,14 +124,14 @@ public class ProteinViewer extends AbstractViewer<IEntityInformationHolder> impl
 
     private final IViewContext<IPhosphoNetXClientServiceAsync> viewContext;
 
-    private final IIdentifiable experimentIdOrNull;
+    private final IIdAndCodeHolder experimentIdOrNull;
 
     private final TechId proteinReferenceID;
 
     private ProteinSamplesSection proteinSamplesSection;
 
     private ProteinViewer(IViewContext<IPhosphoNetXClientServiceAsync> viewContext,
-            IIdentifiable experimentId, TechId proteinReferenceID)
+            IIdAndCodeHolder experimentId, TechId proteinReferenceID)
     {
         super(viewContext, "", createWidgetID(experimentId, proteinReferenceID), false);
         this.viewContext = viewContext;
@@ -317,6 +317,11 @@ public class ProteinViewer extends AbstractViewer<IEntityInformationHolder> impl
         {
             return proteinDetails.getDataSetPermID();
         }
+
+        public String getPermId()
+        {
+            return getIdentifier();
+        }
     }
 
     public DatabaseModificationKind[] getRelevantModifications()
diff --git a/rtd_phosphonetx/source/java/service.properties b/rtd_phosphonetx/source/java/service.properties
index 15fd9cc901bc7a00c0a2b1f157397d831eea90d5..6881016234e9f4ea7ddd1d51d295a0d3da33d6dd 100644
--- a/rtd_phosphonetx/source/java/service.properties
+++ b/rtd_phosphonetx/source/java/service.properties
@@ -15,7 +15,7 @@ database.create-from-scratch = false
 # For debugging set this value to true.
 database.script-single-step-mode = false
 database.url-host-part =
-database.kind = dev
+database.kind = phosphonetx
 # database.kind = system_test
 # database.kind = system_test_strict
 # database.kind = system_test_plates_on_demand
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/ClientPluginFactory.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/ClientPluginFactory.java
index b2627eee69a86cceabeed8d2b939c68d64dac6ee..bf063dcee55f7803a057d16c73ba68491b32ecd1 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/ClientPluginFactory.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/ClientPluginFactory.java
@@ -36,8 +36,8 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.plugin.ICl
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.AbstractViewer;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IMessageProvider;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExperimentIdentifier;
-import ch.systemsx.cisd.openbis.generic.shared.basic.ICodeProvider;
-import ch.systemsx.cisd.openbis.generic.shared.basic.IIdentifiable;
+import ch.systemsx.cisd.openbis.generic.shared.basic.ICodeHolder;
+import ch.systemsx.cisd.openbis.generic.shared.basic.IIdAndCodeHolder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.BasicEntityType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetType;
@@ -100,7 +100,7 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<Scree
     }
 
     @SuppressWarnings("unchecked")
-    public <T extends BasicEntityType, I extends IIdentifiable> IClientPlugin<T, I> createClientPlugin(
+    public <T extends BasicEntityType, I extends IIdAndCodeHolder> IClientPlugin<T, I> createClientPlugin(
             final EntityKind entityKind)
     {
         ScreeningViewContext viewContext = getViewContext();
@@ -133,14 +133,14 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<Scree
 
         @Override
         public final AbstractTabItemFactory createEntityViewer(final BasicEntityType materialType,
-                final IIdentifiable materialId)
+                final IIdAndCodeHolder materialId)
         {
             return createGeneMaterialViewerTabFactory(materialId, null, getViewContext());
         }
     }
 
     /** opens gene viewer with a selected experiment */
-    public static final void openGeneMaterialViewer(final IIdentifiable materialId,
+    public static final void openGeneMaterialViewer(final IIdAndCodeHolder materialId,
             final ExperimentIdentifier experimentIdentifier,
             final IViewContext<IScreeningClientServiceAsync> viewContext)
     {
@@ -151,7 +151,7 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<Scree
     }
 
     private static final AbstractTabItemFactory createGeneMaterialViewerTabFactory(
-            final IIdentifiable materialId, final ExperimentIdentifier experimentIdentifierOrNull,
+            final IIdAndCodeHolder materialId, final ExperimentIdentifier experimentIdentifierOrNull,
             final IViewContext<IScreeningClientServiceAsync> viewContext)
     {
         return new AbstractTabItemFactory()
@@ -179,7 +179,7 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<Scree
             };
     }
 
-    private static ITabItem createMaterialViewerTab(final IIdentifiable materialId,
+    private static ITabItem createMaterialViewerTab(final IIdAndCodeHolder materialId,
             final DatabaseModificationAwareComponent viewer, IViewContext<?> viewContext)
     {
         return createViewerTab(viewer, materialId, Dict.MATERIAL, viewContext);
@@ -197,7 +197,7 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<Scree
 
         @Override
         public final AbstractTabItemFactory createEntityViewer(final BasicEntityType dataSetType,
-                final IIdentifiable identifiable)
+                final IIdAndCodeHolder identifiable)
         {
             return new AbstractTabItemFactory()
                 {
@@ -238,7 +238,7 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<Scree
 
         @Override
         public final AbstractTabItemFactory createEntityViewer(final BasicEntityType sampleType,
-                final IIdentifiable identifiable)
+                final IIdAndCodeHolder identifiable)
         {
             return new AbstractTabItemFactory()
                 {
@@ -280,13 +280,13 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<Scree
     }
 
     private static ITabItem createViewerTab(DatabaseModificationAwareComponent viewer,
-            ICodeProvider codeProvider, String dictTitleKey, IViewContext<?> viewContext)
+            ICodeHolder codeProvider, String dictTitleKey, IViewContext<?> viewContext)
     {
         String title = getViewerTitle(dictTitleKey, codeProvider, viewContext);
         return DefaultTabItem.create(title, viewer, viewContext, false);
     }
 
-    private static String getViewerTitle(String dictTitleKey, ICodeProvider codeProvider,
+    private static String getViewerTitle(String dictTitleKey, ICodeHolder codeProvider,
             IMessageProvider messageProvider)
     {
         return AbstractViewer.getTitle(messageProvider, dictTitleKey, codeProvider);
@@ -297,9 +297,9 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<Scree
      * functionality can override the default behaviour
      */
     private static class DelegatedClientPlugin<T extends BasicEntityType> implements
-            IClientPlugin<T, IIdentifiable>
+            IClientPlugin<T, IIdAndCodeHolder>
     {
-        private final IClientPlugin<T, IIdentifiable> delegator;
+        private final IClientPlugin<T, IIdAndCodeHolder> delegator;
 
         private DelegatedClientPlugin(IViewContext<?> viewContext, EntityKind entityKind)
         {
@@ -316,7 +316,7 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<Scree
         }
 
         public AbstractTabItemFactory createEntityViewer(final BasicEntityType entityType,
-                final IIdentifiable identifiable)
+                final IIdAndCodeHolder identifiable)
         {
             return delegator.createEntityViewer(entityType, identifiable);
         }
@@ -332,7 +332,7 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<Scree
         }
 
         public AbstractTabItemFactory createEntityEditor(final T entityType,
-                final IIdentifiable identifiable)
+                final IIdAndCodeHolder identifiable)
         {
             return delegator.createEntityEditor(entityType, identifiable);
         }
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/GeneMaterialViewer.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/GeneMaterialViewer.java
index 6e8336f18483ada664c210e45dcc1e37cec2c08e..e1252b6f904fccf83f01e5a249d55d845184f8b2 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/GeneMaterialViewer.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/GeneMaterialViewer.java
@@ -45,7 +45,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.E
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.listener.OpenEntityDetailsTabClickListener;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExperimentIdentifier;
 import ch.systemsx.cisd.openbis.generic.shared.basic.IEntityInformationHolder;
-import ch.systemsx.cisd.openbis.generic.shared.basic.IIdentifiable;
+import ch.systemsx.cisd.openbis.generic.shared.basic.IIdAndCodeHolder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Material;
@@ -74,7 +74,7 @@ public class GeneMaterialViewer extends AbstractViewer<Material>
      *            automatically when the window opens.
      */
     public static DatabaseModificationAwareComponent create(
-            IViewContext<IScreeningClientServiceAsync> viewContext, IIdentifiable materialId,
+            IViewContext<IScreeningClientServiceAsync> viewContext, IIdAndCodeHolder materialId,
             ExperimentIdentifier experimentIdentifierOrNull)
     {
         GeneMaterialViewer viewer =
@@ -90,7 +90,7 @@ public class GeneMaterialViewer extends AbstractViewer<Material>
     private final DefaultChannelState channelState;
 
     private GeneMaterialViewer(final IViewContext<IScreeningClientServiceAsync> viewContext,
-            final IIdentifiable materialId, ExperimentIdentifier experimentIdentifierOrNull)
+            final IIdAndCodeHolder materialId, ExperimentIdentifier experimentIdentifierOrNull)
     {
         super(viewContext, createId(materialId));
         TechId materialTechId = TechId.create(materialId);
@@ -265,7 +265,7 @@ public class GeneMaterialViewer extends AbstractViewer<Material>
         return LinkRenderer.getLinkWidget(label, listener);
     }
 
-    public static final String createId(final IIdentifiable materialId)
+    public static final String createId(final IIdAndCodeHolder materialId)
     {
         return PREFIX + materialId.getId();
     }
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/PlateDatasetViewer.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/PlateDatasetViewer.java
index aec6262d48efef0a0991db1f55c0edfc5fb3bee2..79cd350eaacfdb3e1b2d736e7b4c46192e97c38a 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/PlateDatasetViewer.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/PlateDatasetViewer.java
@@ -23,7 +23,7 @@ import com.google.gwt.user.client.rpc.AsyncCallback;
 
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.SingleSectionPanel;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DatabaseModificationAwareComponent;
-import ch.systemsx.cisd.openbis.generic.shared.basic.IIdentifiable;
+import ch.systemsx.cisd.openbis.generic.shared.basic.IIdAndCodeHolder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData;
 import ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.dataset.GenericDataSetViewer;
@@ -37,7 +37,7 @@ import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.S
 public final class PlateDatasetViewer extends GenericDataSetViewer
 {
     public static DatabaseModificationAwareComponent create(final ScreeningViewContext viewContext,
-            final IIdentifiable identifiable)
+            final IIdAndCodeHolder identifiable)
     {
         PlateDatasetViewer viewer = new PlateDatasetViewer(viewContext, identifiable);
         viewer.reloadAllData();
@@ -47,7 +47,7 @@ public final class PlateDatasetViewer extends GenericDataSetViewer
     private final ScreeningViewContext screeningViewContext;
 
     public PlateDatasetViewer(final ScreeningViewContext viewContext,
-            final IIdentifiable identifiable)
+            final IIdAndCodeHolder identifiable)
     {
         super(viewContext, identifiable);
         this.screeningViewContext = viewContext;
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/PlateSampleViewer.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/PlateSampleViewer.java
index 5ff75844eddbc2af02468ff1296a12e3780c64e2..858bb606d5401e3034f2ad29691bc468bf197685 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/PlateSampleViewer.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/PlateSampleViewer.java
@@ -23,7 +23,7 @@ import com.google.gwt.user.client.rpc.AsyncCallback;
 
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.SingleSectionPanel;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DatabaseModificationAwareComponent;
-import ch.systemsx.cisd.openbis.generic.shared.basic.IIdentifiable;
+import ch.systemsx.cisd.openbis.generic.shared.basic.IIdAndCodeHolder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleParentWithDerived;
 import ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.sample.GenericSampleViewer;
@@ -37,7 +37,7 @@ import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.S
 public final class PlateSampleViewer extends GenericSampleViewer
 {
     public static DatabaseModificationAwareComponent create(final ScreeningViewContext viewContext,
-            final IIdentifiable identifiable)
+            final IIdAndCodeHolder identifiable)
     {
         PlateSampleViewer viewer = new PlateSampleViewer(viewContext, identifiable);
         viewer.reloadAllData();
@@ -47,7 +47,7 @@ public final class PlateSampleViewer extends GenericSampleViewer
     private final ScreeningViewContext screeningViewContext;
 
     public PlateSampleViewer(final ScreeningViewContext viewContext,
-            final IIdentifiable identifiable)
+            final IIdAndCodeHolder identifiable)
     {
         super(viewContext, identifiable);
         this.screeningViewContext = viewContext;