From 73195351f17b3a9ebf149d47e3b10f7a058fd3f7 Mon Sep 17 00:00:00 2001
From: tpylak <tpylak>
Date: Fri, 30 Jan 2009 13:44:43 +0000
Subject: [PATCH] LMS-715 Browsing projects. Generic control for simple
 browsers without toolbar. Simplification of ModelData for generic browser.

SVN: 9624
---
 .../client/shared/EntityTypePropertyType.java |  13 +
 .../shared/ExperimentTypePropertyType.java    |   5 +
 .../shared/MaterialTypePropertyType.java      |   5 +
 .../client/shared/SampleTypePropertyType.java |   6 +
 .../web/client/ICommonClientService.java      |  89 +++--
 .../web/client/ICommonClientServiceAsync.java |  74 +++--
 .../application/MatchingEntitiesPanel.java    |   6 +-
 .../framework/ComponentProvider.java          |  16 +-
 .../model/AbstractEntityModel.java            |   9 +-
 .../client/application/model/ETPTModel.java   |  51 +--
 .../application/model/ExperimentModel.java    |  13 +-
 .../model/MatchingEntityModel.java            |  12 -
 .../model/ModelDataPropertyNames.java         |  22 --
 .../application/model/ProjectModel.java       |  39 +--
 .../application/model/PropertyTypeModel.java  |  31 +-
 .../application/ui/data/ExternalDataGrid.java |   6 +-
 .../ui/experiment/ExperimentBrowserGrid.java  |   8 +-
 .../ui/experiment/ProjectSelectionWidget.java |  51 ++-
 .../ui/grid/AbstractBrowserGrid.java          |  13 +-
 .../ui/grid/AbstractColumnDefinitionKind.java |   2 +
 .../ui/grid/AbstractSimpleBrowserGrid.java    |  71 ++++
 .../ColumnDefsAndConfigs.java                 |   3 +-
 .../ui/project/ProjectBrowser.java            |  85 -----
 .../ui/project/ProjectColDefKind.java         | 106 ++++++
 .../application/ui/project/ProjectGrid.java   |  91 +++---
 .../PropertyTypeAssignmentBrowser.java        |  91 ------
 .../PropertyTypeAssignmentColDefKind.java     | 100 ++++++
 .../PropertyTypeAssignmentGrid.java           |  92 +++---
 .../ui/property_type/PropertyTypeGrid.java    |  43 +--
 .../PropertyTypeSelectionWidget.java          |  36 ++-
 .../ui/sample/SampleBrowserGrid.java          |   8 +-
 .../columns/CommonSampleColDefKind.java       |   3 +-
 .../ui/sample/columns/SampleModel.java        |   1 +
 .../client/dto/DefaultResultSetConfig.java    |   5 +
 .../web/server/CommonClientService.java       | 306 ++++++++++--------
 .../server/translator/ProjectTranslator.java  |  13 +
 .../translator/PropertyTypeTranslator.java    |  13 +
 .../EntityTypePropertyTypeAssignmentTest.java |  27 +-
 .../application/ExperimentBrowserTest.java    |   4 +-
 .../application/ProjectRegistrationTest.java  |   6 +-
 .../PropertyTypeAssignmentBrowserTest.java    |   9 +-
 .../ui/experiment/ListExperiments.java        |   3 +-
 .../ui/project/CheckProjectTable.java         |   2 +-
 .../CheckPropertyTypeAssignmentTable.java     |   4 +-
 .../FillPropertyTypeAssignmentForm.java       |  19 +-
 ...nericExperimentAttachmentDownloadTest.java |   2 +-
 .../GenericExperimentViewerTest.java          |   4 +-
 47 files changed, 882 insertions(+), 736 deletions(-)
 create mode 100644 openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/AbstractSimpleBrowserGrid.java
 rename openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/{sample/columns => grid}/ColumnDefsAndConfigs.java (95%)
 delete mode 100644 openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/project/ProjectBrowser.java
 create mode 100644 openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/project/ProjectColDefKind.java
 delete mode 100644 openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/PropertyTypeAssignmentBrowser.java
 create mode 100644 openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/PropertyTypeAssignmentColDefKind.java

diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/shared/EntityTypePropertyType.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/shared/EntityTypePropertyType.java
index 4d0bae97b19..716e08c1094 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/shared/EntityTypePropertyType.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/shared/EntityTypePropertyType.java
@@ -18,6 +18,7 @@ package ch.systemsx.cisd.openbis.generic.client.shared;
 
 import com.google.gwt.user.client.rpc.IsSerializable;
 
+import ch.systemsx.cisd.openbis.generic.client.web.client.dto.EntityKind;
 
 /**
  * An <i>abstract</i> entity type property type.
@@ -27,6 +28,8 @@ import com.google.gwt.user.client.rpc.IsSerializable;
 public abstract class EntityTypePropertyType<T extends EntityType> implements IsSerializable,
         Comparable<EntityTypePropertyType<T>>
 {
+    private EntityKind entityKind;
+
     private boolean mandatory;
 
     private boolean managedInternally;
@@ -35,6 +38,16 @@ public abstract class EntityTypePropertyType<T extends EntityType> implements Is
 
     private T entityType;
 
+    public EntityTypePropertyType(EntityKind entityKind)
+    {
+        this.entityKind = entityKind;
+    }
+
+    public EntityKind getEntityKind()
+    {
+        return entityKind;
+    }
+
     public final boolean isMandatory()
     {
         return mandatory;
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/shared/ExperimentTypePropertyType.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/shared/ExperimentTypePropertyType.java
index b11b11a47f5..7515b37f3d2 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/shared/ExperimentTypePropertyType.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/shared/ExperimentTypePropertyType.java
@@ -18,6 +18,7 @@ package ch.systemsx.cisd.openbis.generic.client.shared;
 
 import com.google.gwt.user.client.rpc.IsSerializable;
 
+import ch.systemsx.cisd.openbis.generic.client.web.client.dto.EntityKind;
 
 /**
  * The {@link EntityTypePropertyType} extension for <i>Experiment Type</i>.
@@ -27,4 +28,8 @@ import com.google.gwt.user.client.rpc.IsSerializable;
 public class ExperimentTypePropertyType extends EntityTypePropertyType<ExperimentType> implements
         IsSerializable
 {
+    public ExperimentTypePropertyType()
+    {
+        super(EntityKind.EXPERIMENT);
+    }
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/shared/MaterialTypePropertyType.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/shared/MaterialTypePropertyType.java
index c5dd8161446..ddcbd824ad4 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/shared/MaterialTypePropertyType.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/shared/MaterialTypePropertyType.java
@@ -18,6 +18,7 @@ package ch.systemsx.cisd.openbis.generic.client.shared;
 
 import com.google.gwt.user.client.rpc.IsSerializable;
 
+import ch.systemsx.cisd.openbis.generic.client.web.client.dto.EntityKind;
 
 /**
  * The {@link EntityTypePropertyType} extension for <i>Material Type</i>.
@@ -27,4 +28,8 @@ import com.google.gwt.user.client.rpc.IsSerializable;
 public class MaterialTypePropertyType extends EntityTypePropertyType<MaterialType> implements
         IsSerializable
 {
+    public MaterialTypePropertyType()
+    {
+        super(EntityKind.MATERIAL);
+    }
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/shared/SampleTypePropertyType.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/shared/SampleTypePropertyType.java
index 54199578117..a6a8692368d 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/shared/SampleTypePropertyType.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/shared/SampleTypePropertyType.java
@@ -18,6 +18,7 @@ package ch.systemsx.cisd.openbis.generic.client.shared;
 
 import com.google.gwt.user.client.rpc.IsSerializable;
 
+import ch.systemsx.cisd.openbis.generic.client.web.client.dto.EntityKind;
 
 /**
  * The {@link EntityTypePropertyType} extension for <i>Sample Type</i>.
@@ -27,6 +28,11 @@ import com.google.gwt.user.client.rpc.IsSerializable;
 public class SampleTypePropertyType extends EntityTypePropertyType<SampleType> implements
         IsSerializable
 {
+    public SampleTypePropertyType()
+    {
+        super(EntityKind.SAMPLE);
+    }
+
     private boolean isDisplayed;
 
     public final boolean isDisplayed()
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientService.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientService.java
index bb0e02343bc..85203fae2f1 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientService.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientService.java
@@ -19,6 +19,7 @@ package ch.systemsx.cisd.openbis.generic.client.web.client;
 import java.util.List;
 
 import ch.systemsx.cisd.openbis.generic.client.shared.DataType;
+import ch.systemsx.cisd.openbis.generic.client.shared.EntityTypePropertyType;
 import ch.systemsx.cisd.openbis.generic.client.shared.ExperimentType;
 import ch.systemsx.cisd.openbis.generic.client.shared.Person;
 import ch.systemsx.cisd.openbis.generic.client.shared.PropertyType;
@@ -115,86 +116,104 @@ public interface ICommonClientService extends IClientService
             throws UserFailureException;
 
     /**
-     * Returns a key which can be used be the export servlet (and eventually
-     * {@link #getExportTable(String)}) to reference the export criteria in an easy way.
+     * Returns a list of experiments.
+     */
+    public ResultSet<Experiment> listExperiments(final ListExperimentsCriteria criteria)
+            throws UserFailureException;
+
+    /**
+     * Like {@link #prepareExportSamples(TableExportCriteria)}, but for experiments.
      */
+
     public String prepareExportExperiments(final TableExportCriteria<Experiment> criteria)
             throws UserFailureException;
 
     /**
-     * Returns a key which can be used be the export servlet (and eventually
-     * {@link #getExportTable(String)}) to reference the export criteria in an easy way.
+     * Lists the entities matching the search.
      */
-    public String prepareExportMatchingEntities(final TableExportCriteria<MatchingEntity> criteria)
+    public ResultSet<MatchingEntity> listMatchingEntities(
+            final SearchableEntity searchableEntityOrNull, final String queryText,
+            final IResultSetConfig<String, MatchingEntity> resultSetConfig)
             throws UserFailureException;
 
     /**
-     * Returns a key which can be used be the export servlet (and eventually
-     * {@link #getExportTable(String)}) to reference the export criteria in an easy way.
+     * Like {@link #prepareExportSamples(TableExportCriteria)}, but for matching entites.
      */
-    public String prepareExportPropertyTypes(final TableExportCriteria<PropertyType> criteria)
+    public String prepareExportMatchingEntities(final TableExportCriteria<MatchingEntity> criteria)
             throws UserFailureException;
 
     /**
-     * Assumes that preparation of the export ({@link #prepareExportSamples(TableExportCriteria)}
-     * or {@link #prepareExportExperiments(TableExportCriteria)} has been invoked before and
-     * returned with an exportDataKey passed here as a parameter.
+     * Returns a list of all property types.
      */
-    public String getExportTable(String exportDataKey) throws UserFailureException;
+    public List<PropertyType> listPropertyTypes() throws UserFailureException;
 
     /**
-     * Returns a list of experiments.
+     * Returns a chunk of the property types list.
      */
-    public ResultSet<Experiment> listExperiments(final ListExperimentsCriteria criteria)
-            throws UserFailureException;
+    public ResultSet<PropertyType> listPropertyTypes(
+            DefaultResultSetConfig<String, PropertyType> criteria) throws UserFailureException;
 
     /**
-     * For given <var>sampleIdentifier</var> returns corresponding list of {@link ExternalData}.
+     * Like {@link #prepareExportSamples(TableExportCriteria)}, but for property types.
      */
-    public List<ExternalData> listExternalData(final String sampleIdentifier)
+    public String prepareExportPropertyTypes(final TableExportCriteria<PropertyType> criteria)
             throws UserFailureException;
 
-    public List<ExternalData> listExternalDataForExperiment(String experimentIdentifier)
+    /**
+     * Returns a chunk of the property types assignment list.
+     */
+    public ResultSet<EntityTypePropertyType<?>> listPropertyTypeAssignments(
+            DefaultResultSetConfig<String, EntityTypePropertyType<?>> criteria);
+
+    /**
+     * Like {@link #prepareExportSamples(TableExportCriteria)}, but for property types assignments.
+     */
+    public String prepareExportPropertyTypeAssignments(
+            final TableExportCriteria<EntityTypePropertyType<?>> criteria)
             throws UserFailureException;
 
     /**
-     * Lists the searchable entities.
+     * Returns a list of all projects.
      */
-    public List<SearchableEntity> listSearchableEntities() throws UserFailureException;
+    public ResultSet<Project> listProjects(DefaultResultSetConfig<String, Project> criteria)
+            throws UserFailureException;
 
     /**
-     * Lists the entities matching the search.
+     * Like {@link #prepareExportSamples(TableExportCriteria)}, but for projects.
      */
-    public ResultSet<MatchingEntity> listMatchingEntities(
-            final SearchableEntity searchableEntityOrNull, final String queryText,
-            final IResultSetConfig<String, MatchingEntity> resultSetConfig)
+    public String prepareExportProjects(final TableExportCriteria<Project> criteria)
             throws UserFailureException;
 
     /**
-     * Removes the session result set associated with given key.
+     * Assumes that preparation of the export ({@link #prepareExportSamples(TableExportCriteria)}
+     * or {@link #prepareExportExperiments(TableExportCriteria)} has been invoked before and
+     * returned with an exportDataKey passed here as a parameter.
      */
-    public void removeResultSet(final String resultSetKey) throws UserFailureException;
+    public String getExportTable(String exportDataKey) throws UserFailureException;
 
     /**
-     * Returns a list of all projects.
+     * Removes the session result set associated with given key.
      */
-    public List<Project> listProjects() throws UserFailureException;
+    public void removeResultSet(final String resultSetKey) throws UserFailureException;
 
     /**
-     * Returns a list of all experiment types.
+     * For given <var>sampleIdentifier</var> returns corresponding list of {@link ExternalData}.
      */
-    public List<ExperimentType> listExperimentTypes() throws UserFailureException;
+    public List<ExternalData> listExternalData(final String sampleIdentifier)
+            throws UserFailureException;
+
+    public List<ExternalData> listExternalDataForExperiment(String experimentIdentifier)
+            throws UserFailureException;
 
     /**
-     * Returns a list of all property types.
+     * Lists the searchable entities.
      */
-    public List<PropertyType> listPropertyTypes() throws UserFailureException;
+    public List<SearchableEntity> listSearchableEntities() throws UserFailureException;
 
     /**
-     * Returns a chunk of the property types list.
+     * Returns a list of all experiment types.
      */
-    public ResultSet<PropertyType> listPropertyTypes(
-            DefaultResultSetConfig<String, PropertyType> criteria) throws UserFailureException;
+    public List<ExperimentType> listExperimentTypes() throws UserFailureException;
 
     /**
      * Returns a list of all data types.
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientServiceAsync.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientServiceAsync.java
index 7b9cfb678d1..09b0337bf29 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientServiceAsync.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientServiceAsync.java
@@ -21,6 +21,7 @@ import java.util.List;
 import com.google.gwt.user.client.rpc.AsyncCallback;
 
 import ch.systemsx.cisd.openbis.generic.client.shared.DataType;
+import ch.systemsx.cisd.openbis.generic.client.shared.EntityTypePropertyType;
 import ch.systemsx.cisd.openbis.generic.client.shared.ExperimentType;
 import ch.systemsx.cisd.openbis.generic.client.shared.Person;
 import ch.systemsx.cisd.openbis.generic.client.shared.PropertyType;
@@ -96,33 +97,72 @@ public interface ICommonClientServiceAsync extends IClientServiceAsync
     public void prepareExportSamples(final TableExportCriteria<Sample> criteria,
             AsyncCallback<String> asyncCallback);
 
+    /** @see ICommonClientService#listPropertyTypeAssignments(DefaultResultSetConfig) */
+    public void listPropertyTypeAssignments(
+            DefaultResultSetConfig<String, EntityTypePropertyType<?>> criteria,
+            final AsyncCallback<ResultSet<EntityTypePropertyType<?>>> asyncCallback);
+
     /**
-     * @see ICommonClientService#prepareExportPropertyTypes(TableExportCriteria)
+     * @see ICommonClientService#prepareExportPropertyTypeAssignments(TableExportCriteria)
      */
-    public void prepareExportPropertyTypes(final TableExportCriteria<PropertyType> criteria,
+    public void prepareExportPropertyTypeAssignments(
+            final TableExportCriteria<EntityTypePropertyType<?>> criteria,
             AsyncCallback<String> asyncCallback);
 
+    /**
+     * @see ICommonClientService#listExperiments(ListExperimentsCriteria)
+     */
+    public void listExperiments(
+            final ListExperimentsCriteria criteria,
+            AsyncCallback<ResultSet<ch.systemsx.cisd.openbis.generic.client.web.client.dto.Experiment>> asyncCallback);
+
     /**
      * @see ICommonClientService#prepareExportExperiments(TableExportCriteria)
      */
     public void prepareExportExperiments(TableExportCriteria<Experiment> exportCriteria,
             AsyncCallback<String> callback);
 
+    /** @see ICommonClientService#listPropertyTypes(DefaultResultSetConfig) */
+    public void listPropertyTypes(DefaultResultSetConfig<String, PropertyType> criteria,
+            final AsyncCallback<ResultSet<PropertyType>> asyncCallback);
+
+    /**
+     * @see ICommonClientService#prepareExportPropertyTypes(TableExportCriteria)
+     */
+    public void prepareExportPropertyTypes(final TableExportCriteria<PropertyType> criteria,
+            AsyncCallback<String> asyncCallback);
+
+    /** @see ICommonClientService#listPropertyTypes() */
+    public void listPropertyTypes(final AsyncCallback<List<PropertyType>> asyncCallback);
+
+    /**
+     * @see ICommonClientService#listMatchingEntities(SearchableEntity, String, IResultSetConfig)
+     */
+    public void listMatchingEntities(final SearchableEntity searchableEntity,
+            final String queryText, final IResultSetConfig<String, MatchingEntity> resultSetConfig,
+            final AsyncCallback<ResultSet<MatchingEntity>> asyncCallback);
+
     /** @see ICommonClientService#prepareExportMatchingEntities(TableExportCriteria) */
     public void prepareExportMatchingEntities(TableExportCriteria<MatchingEntity> exportCriteria,
             AsyncCallback<String> callback);
 
+    /** @see ICommonClientService#listProjects(DefaultResultSetConfig) */
+    public void listProjects(DefaultResultSetConfig<String, Project> criteria,
+            final AsyncCallback<ResultSet<Project>> asyncCallback);
+
+    /** @see ICommonClientService#prepareExportProjects(TableExportCriteria) */
+    public void prepareExportProjects(TableExportCriteria<Project> exportCriteria,
+            AsyncCallback<String> callback);
+
     /**
      * @see ICommonClientService#getExportTable(String)
      */
     public void getExportTable(String exportDataKey, AsyncCallback<String> asyncCallback);
 
     /**
-     * @see ICommonClientService#listExperiments(ListExperimentsCriteria)
+     * @see ICommonClientService#removeResultSet(String)
      */
-    public void listExperiments(
-            final ListExperimentsCriteria criteria,
-            AsyncCallback<ResultSet<ch.systemsx.cisd.openbis.generic.client.web.client.dto.Experiment>> asyncCallback);
+    public void removeResultSet(final String resultSetKey, final AsyncCallback<Void> asyncCallback);
 
     /**
      * @see ICommonClientService#listExternalData(String)
@@ -141,32 +181,10 @@ public interface ICommonClientServiceAsync extends IClientServiceAsync
      */
     public void listSearchableEntities(final AsyncCallback<List<SearchableEntity>> asyncCallback);
 
-    /**
-     * @see ICommonClientService#listMatchingEntities(SearchableEntity, String, IResultSetConfig)
-     */
-    public void listMatchingEntities(final SearchableEntity searchableEntity,
-            final String queryText, final IResultSetConfig<String, MatchingEntity> resultSetConfig,
-            final AsyncCallback<ResultSet<MatchingEntity>> asyncCallback);
-
-    /**
-     * @see ICommonClientService#removeResultSet(String)
-     */
-    public void removeResultSet(final String resultSetKey, final AsyncCallback<Void> asyncCallback);
-
-    /** @see ICommonClientService#listProjects() */
-    public void listProjects(final AsyncCallback<List<Project>> asyncCallback);
-
     /** @see ICommonClientService#listExperimentTypes() */
     public void listExperimentTypes(
             final AsyncCallback<List<ExperimentType>> listExperimentTypesCallback);
 
-    /** @see ICommonClientService#listPropertyTypes() */
-    public void listPropertyTypes(final AsyncCallback<List<PropertyType>> asyncCallback);
-
-    /** @see ICommonClientService#listPropertyTypes() */
-    public void listPropertyTypes(DefaultResultSetConfig<String, PropertyType> criteria,
-            final AsyncCallback<ResultSet<PropertyType>> asyncCallback);
-
     /** @see ICommonClientService#listDataTypes() */
     public void listDataTypes(final AsyncCallback<List<DataType>> asyncCallback);
 
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 7403d1d3fd2..2de90d59f85 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
@@ -26,8 +26,8 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ITabItemFactory;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.MatchingEntityModel;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.AbstractBrowserGrid;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.ColumnDefsAndConfigs;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IColumnDefinitionUI;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.sample.columns.ColumnDefsAndConfigs;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DefaultResultSetConfig;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.EntityKind;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.MatchingEntity;
@@ -101,9 +101,9 @@ final class MatchingEntitiesPanel extends AbstractBrowserGrid<MatchingEntity, Ma
     }
 
     @Override
-    protected List<MatchingEntityModel> createModels(List<MatchingEntity> entities)
+    protected MatchingEntityModel createModel(MatchingEntity entity)
     {
-        return MatchingEntityModel.convert(entities);
+        return new MatchingEntityModel(entity);
     }
 
     @Override
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/ComponentProvider.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/ComponentProvider.java
index 8dec1915e31..33e9ff03f82 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/ComponentProvider.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/ComponentProvider.java
@@ -26,10 +26,10 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.RolesView;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.experiment.ExperimentBrowserGrid;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.experiment.ExperimentRegistrationPanel;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.DisposableComponent;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.project.ProjectBrowser;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.project.ProjectGrid;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.project.ProjectRegistrationForm;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.property_type.PropertyTypeAssignmentBrowser;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.property_type.PropertyTypeAssignmentForm;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.property_type.PropertyTypeAssignmentGrid;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.property_type.PropertyTypeGrid;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.property_type.PropertyTypeRegistrationForm;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.sample.SampleBatchRegistrationPanel;
@@ -255,13 +255,13 @@ final class ComponentProvider
             {
                 public ITabItem create()
                 {
-                    Component component = new ProjectBrowser(viewContext);
-                    return new DefaultTabItem(getMessage(Dict.PROJECT_BROWSER), component, true);
+                    DisposableComponent component = ProjectGrid.create(viewContext);
+                    return DefaultTabItem.create(getMessage(Dict.PROJECT_BROWSER), component, true);
                 }
 
                 public String getId()
                 {
-                    return ProjectBrowser.ID;
+                    return ProjectGrid.BROWSER_ID;
                 }
             };
     }
@@ -325,14 +325,14 @@ final class ComponentProvider
             {
                 public ITabItem create()
                 {
-                    Component component = new PropertyTypeAssignmentBrowser(viewContext);
-                    return new DefaultTabItem(getMessage(Dict.PROPERTY_TYPE_ASSIGNMENTS),
+                    DisposableComponent component = PropertyTypeAssignmentGrid.create(viewContext);
+                    return DefaultTabItem.create(getMessage(Dict.PROPERTY_TYPE_ASSIGNMENTS),
                             component, false);
                 }
 
                 public String getId()
                 {
-                    return PropertyTypeAssignmentBrowser.ID;
+                    return PropertyTypeAssignmentGrid.BROWSER_ID;
                 }
             };
     }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/model/AbstractEntityModel.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/model/AbstractEntityModel.java
index c68ea8503fe..e0a954fda7f 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/model/AbstractEntityModel.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/model/AbstractEntityModel.java
@@ -40,6 +40,12 @@ public class AbstractEntityModel<T> extends BaseModelData
 {
     private static final long serialVersionUID = 1L;
 
+    protected AbstractEntityModel(final T entity, IColumnDefinitionKind<T>[] colDefKinds,
+            IMessageProvider msgProviderOrNull)
+    {
+        this(entity, createColumnsSchemaFrom(colDefKinds, msgProviderOrNull));
+    }
+
     protected AbstractEntityModel(final T entity, List<? extends IColumnDefinition<T>> columnsSchema)
     {
         set(ModelDataPropertyNames.OBJECT, entity);
@@ -78,7 +84,8 @@ public class AbstractEntityModel<T> extends BaseModelData
         return value;
     }
 
-    protected static <T> List<IColumnDefinitionUI<T>> createColumnsSchemaFrom(
+    /** @param msgProviderOrNull if null, no headers labels will be generated */
+    public static <T> List<IColumnDefinitionUI<T>> createColumnsSchemaFrom(
             IColumnDefinitionKind<T>[] columnKinds, IMessageProvider msgProviderOrNull)
     {
         List<IColumnDefinitionUI<T>> list = new ArrayList<IColumnDefinitionUI<T>>();
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/model/ETPTModel.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/model/ETPTModel.java
index bd76b6ad421..e6b3f9de584 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/model/ETPTModel.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/model/ETPTModel.java
@@ -16,58 +16,21 @@
 
 package ch.systemsx.cisd.openbis.generic.client.web.client.application.model;
 
-import java.util.ArrayList;
-import java.util.List;
-
-import com.extjs.gxt.ui.client.data.BaseModelData;
-
 import ch.systemsx.cisd.openbis.generic.client.shared.EntityTypePropertyType;
-import ch.systemsx.cisd.openbis.generic.client.shared.ExperimentTypePropertyType;
-import ch.systemsx.cisd.openbis.generic.client.shared.MaterialTypePropertyType;
-import ch.systemsx.cisd.openbis.generic.client.shared.PropertyType;
-import ch.systemsx.cisd.openbis.generic.client.shared.SampleTypePropertyType;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IColumnDefinitionKind;
 
 /**
- * {@link BaseModelData} extension for {@link EntityTypePropertyType}s.
+ * Model extension for {@link EntityTypePropertyType}s.
  * 
- * @author Izabela Adamczyk
+ * @author Tomasz Pylak
  */
-public class ETPTModel extends BaseModelData
+public class ETPTModel extends AbstractEntityModel<EntityTypePropertyType<?>>
 {
-
     private static final long serialVersionUID = 1L;
 
-    public ETPTModel()
-    {
-    }
-
-    private ETPTModel(EntityTypePropertyType<?> etpt, String entityKind)
+    public ETPTModel(EntityTypePropertyType<?> entity,
+            IColumnDefinitionKind<EntityTypePropertyType<?>>[] colDefKinds)
     {
-        set(ModelDataPropertyNames.IS_MANDATORY, etpt.isMandatory());
-        set(ModelDataPropertyNames.PROPERTY_TYPE_CODE, etpt.getPropertyType().getCode());
-        set(ModelDataPropertyNames.ENTITY_TYPE_CODE, etpt.getEntityType().getCode());
-        set(ModelDataPropertyNames.ENTITY_KIND, entityKind);
-    }
-
-    public final static List<ETPTModel> asModels(final List<PropertyType> propertyTypes)
-    {
-        final List<ETPTModel> models = new ArrayList<ETPTModel>(propertyTypes.size());
-        for (final PropertyType propertyType : propertyTypes)
-        {
-            for (ExperimentTypePropertyType etpt : propertyType.getExperimentTypePropertyTypes())
-            {
-                models.add(new ETPTModel(etpt, "EXPERIMENT"));
-            }
-            for (SampleTypePropertyType etpt : propertyType.getSampleTypePropertyTypes())
-            {
-                models.add(new ETPTModel(etpt, "SAMPLE"));
-            }
-
-            for (MaterialTypePropertyType etpt : propertyType.getMaterialTypePropertyTypes())
-            {
-                models.add(new ETPTModel(etpt, "MATERIAL"));
-            }
-        }
-        return models;
+        super(entity, colDefKinds, null);
     }
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/model/ExperimentModel.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/model/ExperimentModel.java
index 4d85f93bfcd..c5ba15091c5 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/model/ExperimentModel.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/model/ExperimentModel.java
@@ -27,8 +27,8 @@ import ch.systemsx.cisd.openbis.generic.client.shared.ExperimentTypePropertyType
 import ch.systemsx.cisd.openbis.generic.client.shared.PropertyType;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.experiment.columns.CommonExperimentColDefKind;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.experiment.columns.PropertyExperimentColDef;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.ColumnDefsAndConfigs;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IColumnDefinitionUI;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.sample.columns.ColumnDefsAndConfigs;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IMessageProvider;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.Experiment;
 
@@ -66,17 +66,6 @@ public final class ExperimentModel extends AbstractEntityModel<Experiment>
         return list;
     }
 
-    public final static List<ExperimentModel> asExperimentModels(final List<Experiment> experiments)
-    {
-        final List<ExperimentModel> sampleModels =
-                new ArrayList<ExperimentModel>(experiments.size());
-        for (final Experiment exp : experiments)
-        {
-            sampleModels.add(new ExperimentModel(exp));
-        }
-        return sampleModels;
-    }
-
     public static ColumnDefsAndConfigs<Experiment> createColumnsSchema(
             IMessageProvider messageProvider, ExperimentType selectedTypeOrNull)
     {
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/model/MatchingEntityModel.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/model/MatchingEntityModel.java
index 4d2c62b519c..90b5b49f158 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/model/MatchingEntityModel.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/model/MatchingEntityModel.java
@@ -16,7 +16,6 @@
 
 package ch.systemsx.cisd.openbis.generic.client.web.client.application.model;
 
-import java.util.ArrayList;
 import java.util.List;
 
 import com.extjs.gxt.ui.client.data.ModelData;
@@ -53,17 +52,6 @@ public final class MatchingEntityModel extends AbstractEntityModel<MatchingEntit
         return createColumnsSchemaFrom(MatchingEntityColumnKind.values(), msgProviderOrNull);
     }
 
-    public final static List<MatchingEntityModel> convert(
-            final List<MatchingEntity> matchingEntities)
-    {
-        final List<MatchingEntityModel> list = new ArrayList<MatchingEntityModel>();
-        for (final MatchingEntity matchingEntity : matchingEntities)
-        {
-            list.add(new MatchingEntityModel(matchingEntity));
-        }
-        return list;
-    }
-
     public enum MatchingEntityColumnKind implements IColumnDefinitionKind<MatchingEntity>
     {
         ENTITY_KIND(new AbstractColumnDefinitionKind<MatchingEntity>(Dict.ENTITY_KIND)
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/model/ModelDataPropertyNames.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/model/ModelDataPropertyNames.java
index 9ab326f04a5..6a89734fcb0 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/model/ModelDataPropertyNames.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/model/ModelDataPropertyNames.java
@@ -46,10 +46,6 @@ public final class ModelDataPropertyNames
 
     public static final String EMAIL = "email";
 
-    public static final String ENTITY_KIND = "entityKind";
-
-    public static final String ENTITY_TYPE = "entityType";
-
     public static final String FILE_FORMAT_TYPE = "fileFormatType";
 
     public static final String FIRST_NAME = "firstName";
@@ -82,8 +78,6 @@ public final class ModelDataPropertyNames
 
     public static final String USER_ID = "userId";
 
-    public static final String PROJECT_WITH_GROUP = "projectWithGroup";
-
     public static final String PROJECT = "project";
 
     public static final String VERSIONS = "versions";
@@ -94,26 +88,10 @@ public final class ModelDataPropertyNames
 
     public static final String PROCEDURE_TYPE = "procedureType";
 
-    public static final String MATERIAL_TYPE = "materialType";
-
-    public static final String LABEL = "label";
-
     public static final String DATA_TYPE = "dataType";
 
     public static final String CONTROLLED_VOCABULARY = "controlledVocabulary";
 
-    public static final String EXPERIMENT_TYPES = "experimentTypes";
-
-    public static final String MATERIAL_TYPES = "materialTypes";
-
-    public static final String SAMPLE_TYPES = "sampleTypes";
-
-    public static final String IS_MANDATORY = "isMandatory";
-
-    public static final String PROPERTY_TYPE_CODE = "propertyTypeCode";
-
-    public static final String ENTITY_TYPE_CODE = "entityTypeCode";
-
     public static final String IS_MANAGED_INTERNALLY = "isManagedInternally";
 
     private ModelDataPropertyNames()
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/model/ProjectModel.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/model/ProjectModel.java
index 1b1c1ae63da..52576e92545 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/model/ProjectModel.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/model/ProjectModel.java
@@ -16,51 +16,22 @@
 
 package ch.systemsx.cisd.openbis.generic.client.web.client.application.model;
 
-import java.util.ArrayList;
-import java.util.List;
-
-import com.extjs.gxt.ui.client.data.BaseModelData;
 import com.extjs.gxt.ui.client.data.ModelData;
 
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IColumnDefinitionKind;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.Project;
 
 /**
  * {@link ModelData} for {@link Project}.
  * 
- * @author Izabela Adamczyk
+ * @author Tomasz Pylak
  */
-public class ProjectModel extends BaseModelData
+public class ProjectModel extends AbstractEntityModel<Project>
 {
     private static final long serialVersionUID = 1L;
 
-    public ProjectModel()
-    {
-    }
-
-    public ProjectModel(final Project project)
+    public ProjectModel(Project entity, IColumnDefinitionKind<Project>[] colDefKinds)
     {
-        set(ModelDataPropertyNames.CODE, project.getCode());
-        set(ModelDataPropertyNames.DESCRIPTION, project.getDescription());
-        set(ModelDataPropertyNames.GROUP, project.getGroup());
-        set(ModelDataPropertyNames.PROJECT_WITH_GROUP, renderProjectWithGroup(project));
-        set(ModelDataPropertyNames.REGISTRATOR, project.getRegistrator());
-        set(ModelDataPropertyNames.REGISTRATION_DATE, project.getRegistrationDate());
-        set(ModelDataPropertyNames.OBJECT, project);
+        super(entity, colDefKinds, null);
     }
-
-    private String renderProjectWithGroup(final Project p)
-    {
-        return p.getCode() + " (" + p.getGroup().getCode() + ")";
-    }
-
-    public final static List<ProjectModel> convert(final List<Project> projects)
-    {
-        final List<ProjectModel> result = new ArrayList<ProjectModel>();
-        for (final Project p : projects)
-        {
-            result.add(new ProjectModel(p));
-        }
-        return result;
-    }
-
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/model/PropertyTypeModel.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/model/PropertyTypeModel.java
index cc62998ab6e..359233a72fd 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/model/PropertyTypeModel.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/model/PropertyTypeModel.java
@@ -16,36 +16,34 @@
 
 package ch.systemsx.cisd.openbis.generic.client.web.client.application.model;
 
-import java.util.ArrayList;
-import java.util.List;
-
 import com.extjs.gxt.ui.client.data.ModelData;
 import com.google.gwt.user.client.DOM;
 import com.google.gwt.user.client.Element;
 
 import ch.systemsx.cisd.openbis.generic.client.shared.PropertyType;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IColumnDefinitionUI;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IColumnDefinitionKind;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.property_type.PropertyTypeColDefKind;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IMessageProvider;
 
 /**
  * {@link ModelData} for {@link PropertyType}.
  * 
  * @author Izabela Adamczyk
+ * @author Tomasz Pylak
  */
 public class PropertyTypeModel extends AbstractEntityModel<PropertyType>
 {
     private static final long serialVersionUID = 1L;
 
-    public PropertyTypeModel(PropertyType entity)
+    public PropertyTypeModel(PropertyType entity, IColumnDefinitionKind<PropertyType>[] colDefKinds)
     {
-        super(entity, createColumnsSchema(null));
+        super(entity, colDefKinds, null);
 
         overwriteTypes(PropertyTypeColDefKind.EXPERIMENT_TYPES);
         overwriteTypes(PropertyTypeColDefKind.MATERIAL_TYPES);
         overwriteTypes(PropertyTypeColDefKind.SAMPLE_TYPES);
     }
 
+    // changes the column value from the export format to the display format
     private void overwriteTypes(PropertyTypeColDefKind columnKind)
     {
         String columnId = columnKind.id();
@@ -54,6 +52,8 @@ public class PropertyTypeModel extends AbstractEntityModel<PropertyType>
         set(columnId, newValue);
     }
 
+    // transforms comma separated value list by replacing each comma with a div element. It results
+    // in one item displayed per line.
     private static String rerenderTypes(String commaValues)
     {
         String[] tokens = commaValues.split(",");
@@ -67,21 +67,4 @@ public class PropertyTypeModel extends AbstractEntityModel<PropertyType>
         String newValue = sb.toString();
         return newValue;
     }
-
-    public static List<IColumnDefinitionUI<PropertyType>> createColumnsSchema(
-            IMessageProvider msgProviderOrNull)
-    {
-        return createColumnsSchemaFrom(PropertyTypeColDefKind.values(), msgProviderOrNull);
-    }
-
-    public final static List<PropertyTypeModel> convert(final List<PropertyType> types)
-    {
-        final List<PropertyTypeModel> result = new ArrayList<PropertyTypeModel>();
-        for (final PropertyType st : types)
-        {
-            result.add(new PropertyTypeModel(st));
-        }
-        return result;
-    }
-
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/ExternalDataGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/ExternalDataGrid.java
index 86ca341be4a..a0fe46ddbeb 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/ExternalDataGrid.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/ExternalDataGrid.java
@@ -23,8 +23,8 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAs
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.ExternalDataModel;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.AbstractBrowserGrid;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.ColumnDefsAndConfigs;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IColumnDefinitionUI;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.sample.columns.ColumnDefsAndConfigs;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DefaultResultSetConfig;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExternalData;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ResultSet;
@@ -55,9 +55,9 @@ public class ExternalDataGrid extends AbstractBrowserGrid<ExternalData, External
     }
 
     @Override
-    protected List<ExternalDataModel> createModels(List<ExternalData> entities)
+    protected ExternalDataModel createModel(ExternalData entity)
     {
-        return ExternalDataModel.asExternalDataModels(entities);
+        return new ExternalDataModel(entity);
     }
 
     @Override
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ExperimentBrowserGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ExperimentBrowserGrid.java
index 924d3627b11..9c18f153926 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ExperimentBrowserGrid.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ExperimentBrowserGrid.java
@@ -16,8 +16,6 @@
 
 package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.experiment;
 
-import java.util.List;
-
 import com.extjs.gxt.ui.client.event.SelectionChangedListener;
 import com.extjs.gxt.ui.client.widget.LayoutContainer;
 
@@ -30,8 +28,8 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ITabItemFactory;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.ExperimentModel;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.AbstractBrowserGrid;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.ColumnDefsAndConfigs;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.DisposableComponent;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.sample.columns.ColumnDefsAndConfigs;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DefaultResultSetConfig;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.EntityKind;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.Experiment;
@@ -109,9 +107,9 @@ public final class ExperimentBrowserGrid extends AbstractBrowserGrid<Experiment,
     }
 
     @Override
-    protected List<ExperimentModel> createModels(List<Experiment> entities)
+    protected ExperimentModel createModel(Experiment entity)
     {
-        return ExperimentModel.asExperimentModels(entities);
+        return new ExperimentModel(entity);
     }
 
     @Override
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ProjectSelectionWidget.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ProjectSelectionWidget.java
index eba4cef5d19..97c51db665e 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ProjectSelectionWidget.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ProjectSelectionWidget.java
@@ -16,8 +16,10 @@
 
 package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.experiment;
 
+import java.util.ArrayList;
 import java.util.List;
 
+import com.extjs.gxt.ui.client.data.BaseModelData;
 import com.extjs.gxt.ui.client.store.ListStore;
 import com.extjs.gxt.ui.client.widget.form.ComboBox;
 import com.google.gwt.user.client.Element;
@@ -28,17 +30,38 @@ 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.framework.AppEvents;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.ModelDataPropertyNames;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.ProjectModel;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.GWTUtils;
+import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DefaultResultSetConfig;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.Project;
+import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ResultSet;
 
 /**
  * {@link ComboBox} containing list of projects loaded from the server.
  * 
  * @author Izabela Adamczyk
  */
-public final class ProjectSelectionWidget extends ComboBox<ProjectModel>
+public final class ProjectSelectionWidget extends
+        ComboBox<ProjectSelectionWidget.ProjectComboModel>
 {
+    // @Private
+    static final String DISPLAY_COLUMN_ID = "id";
+
+    private static class ProjectComboModel extends BaseModelData
+    {
+        private static final long serialVersionUID = 1L;
+
+        public ProjectComboModel(Project project)
+        {
+            set(DISPLAY_COLUMN_ID, renderProjectWithGroup(project));
+            set(ModelDataPropertyNames.OBJECT, project);
+        }
+
+        private String renderProjectWithGroup(final Project p)
+        {
+            return p.getCode() + " (" + p.getGroup().getCode() + ")";
+        }
+    }
+
     private static final String PREFIX = "project-select";
 
     public static final String ID = GenericConstants.ID_PREFIX + PREFIX;
@@ -50,11 +73,11 @@ public final class ProjectSelectionWidget extends ComboBox<ProjectModel>
         this.viewContext = viewContext;
         setId(ID + idSuffix);
         setEmptyText(viewContext.getMessage(Dict.COMBO_BOX_EMPTY, "projects"));
-        setDisplayField(ModelDataPropertyNames.PROJECT_WITH_GROUP);
+        setDisplayField(DISPLAY_COLUMN_ID);
         setEditable(false);
         setWidth(200);
         setFieldLabel(viewContext.getMessage(Dict.PROJECT));
-        setStore(new ListStore<ProjectModel>());
+        setStore(new ListStore<ProjectComboModel>());
     }
 
     /**
@@ -76,14 +99,15 @@ public final class ProjectSelectionWidget extends ComboBox<ProjectModel>
 
     void refresh()
     {
-        viewContext.getCommonService().listProjects(new ListProjectsCallback(viewContext));
+        DefaultResultSetConfig<String, Project> config = DefaultResultSetConfig.createFetchAll();
+        viewContext.getCommonService().listProjects(config, new ListProjectsCallback(viewContext));
     }
 
     //
     // Helper classes
     //
 
-    public final class ListProjectsCallback extends AbstractAsyncCallback<List<Project>>
+    public final class ListProjectsCallback extends AbstractAsyncCallback<ResultSet<Project>>
     {
         ListProjectsCallback(final IViewContext<?> viewContext)
         {
@@ -91,11 +115,11 @@ public final class ProjectSelectionWidget extends ComboBox<ProjectModel>
         }
 
         @Override
-        protected void process(final List<Project> result)
+        protected void process(final ResultSet<Project> result)
         {
-            final ListStore<ProjectModel> projectStore = getStore();
+            final ListStore<ProjectComboModel> projectStore = getStore();
             projectStore.removeAll();
-            projectStore.add(ProjectModel.convert(result));
+            projectStore.add(convert(result.getList()));
             if (projectStore.getCount() > 0)
             {
                 setValue(projectStore.getAt(0));
@@ -105,4 +129,13 @@ public final class ProjectSelectionWidget extends ComboBox<ProjectModel>
         }
     }
 
+    private static List<ProjectComboModel> convert(List<Project> projects)
+    {
+        final List<ProjectComboModel> result = new ArrayList<ProjectComboModel>();
+        for (final Project p : projects)
+        {
+            result.add(new ProjectComboModel(p));
+        }
+        return result;
+    }
 }
\ No newline at end of file
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 2d5742362a8..5240d64dff7 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
@@ -57,7 +57,6 @@ 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.VoidAsyncCallback;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.BrowserGridPagingToolBar.IBrowserGridActionInvoker;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.sample.columns.ColumnDefsAndConfigs;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.GWTUtils;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.URLMethodWithParameters;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.WindowUtils;
@@ -81,7 +80,7 @@ public abstract class AbstractBrowserGrid<T/* Entity */, M extends ModelData> ex
             AbstractAsyncCallback<ResultSet<T>> callback);
 
     /** Converts specified list of entities into a list of grid rows models */
-    abstract protected List<M> createModels(List<T> entities);
+    abstract protected M createModel(T entity);
 
     /**
      * Called when user wants to export the data. It can happen only after a previous refresh of the
@@ -346,6 +345,16 @@ public abstract class AbstractBrowserGrid<T/* Entity */, M extends ModelData> ex
         }
     }
 
+    private List<M> createModels(final List<T> projects)
+    {
+        final List<M> result = new ArrayList<M>();
+        for (final T p : projects)
+        {
+            result.add(createModel(p));
+        }
+        return result;
+    }
+
     private Listener<GridEvent> createEntityViewerHandler()
     {
         return new Listener<GridEvent>()
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/AbstractColumnDefinitionKind.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/AbstractColumnDefinitionKind.java
index 153ffaf9f04..200c3564f8d 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/AbstractColumnDefinitionKind.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/AbstractColumnDefinitionKind.java
@@ -34,6 +34,8 @@ public abstract class AbstractColumnDefinitionKind<T>
     /** Renders the cell value of this column for the specified entity. */
     abstract public String tryGetValue(T entity);
 
+    public static final int DATE_COLUMN_WIDTH = 200;
+
     private String headerMsgKey;
 
     private int width;
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/AbstractSimpleBrowserGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/AbstractSimpleBrowserGrid.java
new file mode 100644
index 00000000000..2196159766f
--- /dev/null
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/AbstractSimpleBrowserGrid.java
@@ -0,0 +1,71 @@
+/*
+ * Copyright 2009 ETH Zuerich, CISD
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid;
+
+import java.util.List;
+
+import com.extjs.gxt.ui.client.data.ModelData;
+
+import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientServiceAsync;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.AbstractEntityModel;
+
+/**
+ * Grid displaying all the entities without any criteria (useful when there is no specific toolbar).
+ * 
+ * @author Tomasz Pylak
+ */
+abstract public class AbstractSimpleBrowserGrid<T/* Entity */, M extends ModelData> extends
+        AbstractBrowserGrid<T, M>
+{
+    abstract protected IColumnDefinitionKind<T>[] getStaticColumnsDefinition();
+
+    protected AbstractSimpleBrowserGrid(IViewContext<ICommonClientServiceAsync> viewContext,
+            String browserId, String gridId)
+    {
+        super(viewContext, gridId, false, true);
+        setId(browserId);
+        updateDefaultRefreshButton();
+    }
+
+    @Override
+    protected ColumnDefsAndConfigs<T> createColumnsDefinition()
+    {
+        IColumnDefinitionKind<T>[] colDefKinds = getStaticColumnsDefinition();
+        List<IColumnDefinitionUI<T>> colDefs =
+                AbstractEntityModel.createColumnsSchemaFrom(colDefKinds, viewContext);
+        return ColumnDefsAndConfigs.create(colDefs);
+    }
+
+    @Override
+    protected boolean isRefreshEnabled()
+    {
+        return true;
+    }
+
+    @Override
+    protected void refresh()
+    {
+        super.refresh(null, false);
+    }
+
+    @Override
+    protected void showEntityViewer(M modelData)
+    {
+        // do nothing
+    }
+}
\ No newline at end of file
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/columns/ColumnDefsAndConfigs.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/ColumnDefsAndConfigs.java
similarity index 95%
rename from openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/columns/ColumnDefsAndConfigs.java
rename to openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/ColumnDefsAndConfigs.java
index 98a32bf8711..47fbcdb4c9c 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/columns/ColumnDefsAndConfigs.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/ColumnDefsAndConfigs.java
@@ -14,14 +14,13 @@
  * limitations under the License.
  */
 
-package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.sample.columns;
+package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid;
 
 import java.util.ArrayList;
 import java.util.List;
 
 import com.extjs.gxt.ui.client.widget.grid.ColumnConfig;
 
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IColumnDefinitionUI;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.IColumnDefinition;
 
 /**
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/project/ProjectBrowser.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/project/ProjectBrowser.java
deleted file mode 100644
index 68ab0cc9308..00000000000
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/project/ProjectBrowser.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright 2008 ETH Zuerich, CISD
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.project;
-
-import com.extjs.gxt.ui.client.store.Store;
-import com.extjs.gxt.ui.client.widget.ContentPanel;
-import com.extjs.gxt.ui.client.widget.layout.FitLayout;
-import com.extjs.gxt.ui.client.widget.toolbar.AdapterToolItem;
-import com.extjs.gxt.ui.client.widget.toolbar.LabelToolItem;
-import com.extjs.gxt.ui.client.widget.toolbar.ToolBar;
-import com.google.gwt.user.client.Element;
-
-import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientServiceAsync;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.CommonViewContext;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.Dict;
-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.model.ModelDataPropertyNames;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.ProjectModel;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.ColumnFilter;
-
-/**
- * A {@link ContentPanel} extension for browsing the projects.
- * 
- * @author Izabela Adamczyk
- */
-public final class ProjectBrowser extends ContentPanel
-{
-    private static final String PREFIX = "project-browser";
-
-    public static final String ID = GenericConstants.ID_PREFIX + PREFIX;
-
-    private final IViewContext<ICommonClientServiceAsync> viewContext;
-
-    private ProjectGrid grid;
-
-    private ToolBar toolbar;
-
-    public ProjectBrowser(final CommonViewContext viewContext)
-    {
-        this.viewContext = viewContext;
-        setLayout(new FitLayout());
-        setHeading(viewContext.getMessage(Dict.PROJECT_BROWSER));
-        setId(ID);
-        grid = new ProjectGrid(viewContext, ID);
-        add(grid);
-        setBottomComponent(getToolbar());
-    }
-
-    private ToolBar getToolbar()
-    {
-        if (toolbar == null)
-        {
-            toolbar = new ToolBar();
-            toolbar.add(new LabelToolItem("Filter:"));
-            Store<ProjectModel> store = grid.getStore();
-            toolbar.add(new AdapterToolItem(new ColumnFilter<ProjectModel>(store,
-                    ModelDataPropertyNames.CODE, viewContext.getMessage(Dict.CODE))));
-        }
-        return toolbar;
-    }
-
-    @Override
-    protected void onRender(final Element parent, final int pos)
-    {
-        super.onRender(parent, pos);
-        layout();
-        grid.load();
-    }
-
-}
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/project/ProjectColDefKind.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/project/ProjectColDefKind.java
new file mode 100644
index 00000000000..d6b9590789e
--- /dev/null
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/project/ProjectColDefKind.java
@@ -0,0 +1,106 @@
+/*
+ * Copyright 2009 ETH Zuerich, CISD
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.project;
+
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.Dict;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.AbstractColumnDefinitionKind;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IColumnDefinitionKind;
+import ch.systemsx.cisd.openbis.generic.client.web.client.dto.Project;
+
+/**
+ * @author Tomasz Pylak
+ */
+public enum ProjectColDefKind implements IColumnDefinitionKind<Project>
+{
+    CODE(new AbstractColumnDefinitionKind<Project>(Dict.CODE)
+        {
+            @Override
+            public String tryGetValue(Project entity)
+            {
+                return entity.getCode();
+            }
+        }),
+
+    GROUP(new AbstractColumnDefinitionKind<Project>(Dict.GROUP)
+        {
+            @Override
+            public String tryGetValue(Project entity)
+            {
+                return entity.getGroup().getCode();
+            }
+        }),
+
+    DESCRIPTION(new AbstractColumnDefinitionKind<Project>(Dict.DESCRIPTION)
+        {
+            @Override
+            public String tryGetValue(Project entity)
+            {
+                return entity.getDescription();
+            }
+        }),
+
+    REGISTRATOR(new AbstractColumnDefinitionKind<Project>(Dict.REGISTRATOR)
+        {
+            @Override
+            public String tryGetValue(Project entity)
+            {
+                return renderRegistrator(entity);
+            }
+        }),
+
+    REGISTRATION_DATE(new AbstractColumnDefinitionKind<Project>(Dict.REGISTRATION_DATE,
+            AbstractColumnDefinitionKind.DATE_COLUMN_WIDTH, false)
+        {
+            @Override
+            public String tryGetValue(Project entity)
+            {
+                return renderRegistrationDate(entity);
+            }
+        });
+
+    private final AbstractColumnDefinitionKind<Project> columnDefinitionKind;
+
+    private ProjectColDefKind(AbstractColumnDefinitionKind<Project> columnDefinitionKind)
+    {
+        this.columnDefinitionKind = columnDefinitionKind;
+    }
+
+    public String getHeaderMsgKey()
+    {
+        return columnDefinitionKind.getHeaderMsgKey();
+    }
+
+    public int getWidth()
+    {
+        return columnDefinitionKind.getWidth();
+    }
+
+    public String id()
+    {
+        return name();
+    }
+
+    public boolean isHidden()
+    {
+        return columnDefinitionKind.isHidden();
+    }
+
+    public String tryGetValue(Project entity)
+    {
+        return columnDefinitionKind.tryGetValue(entity);
+    }
+}
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/project/ProjectGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/project/ProjectGrid.java
index bb13d97b1a0..01b84885b65 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/project/ProjectGrid.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/project/ProjectGrid.java
@@ -16,80 +16,65 @@
 
 package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.project;
 
-import java.util.ArrayList;
-import java.util.List;
-
-import com.extjs.gxt.ui.client.data.BaseListLoadResult;
-import com.extjs.gxt.ui.client.widget.grid.ColumnConfig;
-import com.extjs.gxt.ui.client.widget.grid.ColumnModel;
-import com.google.gwt.user.client.rpc.AsyncCallback;
-
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.CommonViewContext;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.Dict;
+import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientServiceAsync;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAsyncCallback;
+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.model.ModelDataPropertyNames;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.ProjectModel;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.renderer.DateRenderer;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.ColumnConfigFactory;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.GridWithRPCProxy;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.AbstractSimpleBrowserGrid;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.DisposableComponent;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IColumnDefinitionKind;
+import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DefaultResultSetConfig;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.Project;
+import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ResultSet;
+import ch.systemsx.cisd.openbis.generic.client.web.client.dto.TableExportCriteria;
 
 /**
- * {@link GridWithRPCProxy} displaying projects.
+ * Grid displaying projects.
  * 
- * @author Izabela Adamczyk
+ * @author Tomasz Pylak
  */
-public class ProjectGrid extends GridWithRPCProxy<Project, ProjectModel>
+public class ProjectGrid extends AbstractSimpleBrowserGrid<Project, ProjectModel>
 {
-    private final CommonViewContext viewContext;
+    // browser consists of the grid and the paging toolbar
+    public static final String BROWSER_ID = GenericConstants.ID_PREFIX + "project-browser";
 
-    public ProjectGrid(final CommonViewContext viewContext, String idPrefix)
+    public static final String GRID_ID = BROWSER_ID + "_grid";
+
+    public static DisposableComponent create(
+            final IViewContext<ICommonClientServiceAsync> viewContext)
     {
-        super(createColumnModel(viewContext), idPrefix);
-        this.viewContext = viewContext;
+        return new ProjectGrid(viewContext).asDisposableWithoutToolbar();
     }
 
-    private static ColumnModel createColumnModel(IViewContext<?> context)
+    private ProjectGrid(IViewContext<ICommonClientServiceAsync> viewContext)
     {
-        final ArrayList<ColumnConfig> configs = new ArrayList<ColumnConfig>();
-        configs.add(ColumnConfigFactory.createCodeColumnConfig(context));
-
-        configs.add(ColumnConfigFactory.createDefaultColumnConfig(context
-                .getMessage(Dict.DESCRIPTION), ModelDataPropertyNames.DESCRIPTION));
-
-        final ColumnConfig registratorColumnConfig =
-                ColumnConfigFactory.createDefaultColumnConfig(context.getMessage(Dict.REGISTRATOR),
-                        ModelDataPropertyNames.REGISTRATOR);
-        configs.add(registratorColumnConfig);
-
-        final ColumnConfig registrationDateColumnConfig =
-                ColumnConfigFactory.createDefaultColumnConfig(context
-                        .getMessage(Dict.REGISTRATION_DATE),
-                        ModelDataPropertyNames.REGISTRATION_DATE);
-        registrationDateColumnConfig.setDateTimeFormat(DateRenderer.DEFAULT_DATE_TIME_FORMAT);
-        configs.add(registrationDateColumnConfig);
+        super(viewContext, BROWSER_ID, GRID_ID);
+    }
 
-        return new ColumnModel(configs);
+    @Override
+    protected IColumnDefinitionKind<Project>[] getStaticColumnsDefinition()
+    {
+        return ProjectColDefKind.values();
     }
 
     @Override
-    protected void loadDataFromService(AsyncCallback<BaseListLoadResult<ProjectModel>> callback)
+    protected ProjectModel createModel(Project entity)
     {
-        viewContext.getService().listProjects(new ListProjectsCallback(viewContext, callback));
+        return new ProjectModel(entity, getStaticColumnsDefinition());
     }
 
-    class ListProjectsCallback extends DelegatingAsyncCallback
+    @Override
+    protected void listEntities(DefaultResultSetConfig<String, Project> resultSetConfig,
+            AbstractAsyncCallback<ResultSet<Project>> callback)
     {
-        public ListProjectsCallback(IViewContext<?> context,
-                AsyncCallback<BaseListLoadResult<ProjectModel>> callback)
-        {
-            super(context, callback);
-        }
+        viewContext.getService().listProjects(resultSetConfig, callback);
+    }
 
-        @Override
-        protected List<ProjectModel> convert(List<Project> result)
-        {
-            return ProjectModel.convert(result);
-        }
+    @Override
+    protected void prepareExportEntities(TableExportCriteria<Project> exportCriteria,
+            AbstractAsyncCallback<String> callback)
+    {
+        viewContext.getService().prepareExportProjects(exportCriteria, callback);
     }
 }
\ No newline at end of file
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/PropertyTypeAssignmentBrowser.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/PropertyTypeAssignmentBrowser.java
deleted file mode 100644
index 4a6d3dff50e..00000000000
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/PropertyTypeAssignmentBrowser.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Copyright 2008 ETH Zuerich, CISD
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.property_type;
-
-import com.extjs.gxt.ui.client.store.Store;
-import com.extjs.gxt.ui.client.widget.ContentPanel;
-import com.extjs.gxt.ui.client.widget.layout.FitLayout;
-import com.extjs.gxt.ui.client.widget.toolbar.AdapterToolItem;
-import com.extjs.gxt.ui.client.widget.toolbar.LabelToolItem;
-import com.extjs.gxt.ui.client.widget.toolbar.ToolBar;
-import com.google.gwt.user.client.Element;
-
-import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientServiceAsync;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.CommonViewContext;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.Dict;
-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.model.ETPTModel;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.ModelDataPropertyNames;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.ColumnFilter;
-
-/**
- * Encapsulates property type assignments listing functionality.
- * 
- * @author Izabela Adamczyk
- */
-public class PropertyTypeAssignmentBrowser extends ContentPanel
-{
-    public static final String ID =
-            GenericConstants.ID_PREFIX + "property-type-assignments-browser";
-
-    private ToolBar toolbar;
-
-    private PropertyTypeAssignmentGrid grid;
-
-    private final IViewContext<ICommonClientServiceAsync> viewContext;
-
-    public PropertyTypeAssignmentBrowser(final CommonViewContext viewContext)
-    {
-        this.viewContext = viewContext;
-        setLayout(new FitLayout());
-        setHeading("Property Type Assignments");
-        setId(ID);
-        grid = new PropertyTypeAssignmentGrid(viewContext, ID);
-        add(grid);
-        setBottomComponent(getToolbar());
-
-    }
-
-    @Override
-    protected void onRender(final Element parent, final int pos)
-    {
-        super.onRender(parent, pos);
-        layout();
-        grid.load();
-    }
-
-    private ToolBar getToolbar()
-    {
-        if (toolbar == null)
-        {
-            toolbar = new ToolBar();
-            toolbar.add(new LabelToolItem("Filter:"));
-            Store<ETPTModel> store = grid.getStore();
-            toolbar.add(new AdapterToolItem(new ColumnFilter<ETPTModel>(store,
-                    ModelDataPropertyNames.PROPERTY_TYPE_CODE, viewContext
-                            .getMessage(Dict.PROPERTY_TYPE_CODE))));
-            toolbar.add(new AdapterToolItem(new ColumnFilter<ETPTModel>(store,
-                    ModelDataPropertyNames.ENTITY_TYPE_CODE, viewContext
-                            .getMessage(Dict.ASSIGNED_TO))));
-            toolbar.add(new AdapterToolItem(new ColumnFilter<ETPTModel>(store,
-                    ModelDataPropertyNames.ENTITY_KIND, viewContext.getMessage(Dict.TYPE_OF))));
-        }
-        return toolbar;
-    }
-
-}
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/PropertyTypeAssignmentColDefKind.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/PropertyTypeAssignmentColDefKind.java
new file mode 100644
index 00000000000..9be1bc403a4
--- /dev/null
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/PropertyTypeAssignmentColDefKind.java
@@ -0,0 +1,100 @@
+/*
+ * Copyright 2009 ETH Zuerich, CISD
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.property_type;
+
+import ch.systemsx.cisd.openbis.generic.client.shared.EntityTypePropertyType;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.Dict;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.AbstractColumnDefinitionKind;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IColumnDefinitionKind;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.sample.renderer.SimpleYesNoRenderer;
+
+/**
+ * @author Tomasz Pylak
+ */
+public enum PropertyTypeAssignmentColDefKind implements
+        IColumnDefinitionKind<EntityTypePropertyType<?>>
+{
+    PROPERTY_TYPE_CODE(new AbstractColumnDefinitionKind<EntityTypePropertyType<?>>(
+            Dict.PROPERTY_TYPE_CODE)
+        {
+            @Override
+            public String tryGetValue(EntityTypePropertyType<?> entity)
+            {
+                return entity.getPropertyType().getCode();
+            }
+        }),
+
+    ENTITY_TYPE_CODE(new AbstractColumnDefinitionKind<EntityTypePropertyType<?>>(Dict.ASSIGNED_TO)
+        {
+            @Override
+            public String tryGetValue(EntityTypePropertyType<?> entity)
+            {
+                return entity.getEntityType().getCode();
+            }
+        }),
+
+    ENTITY_KIND(new AbstractColumnDefinitionKind<EntityTypePropertyType<?>>(Dict.TYPE_OF)
+        {
+            @Override
+            public String tryGetValue(EntityTypePropertyType<?> entity)
+            {
+                return entity.getEntityKind().getDescription();
+            }
+        }),
+
+    IS_MANDATORY(new AbstractColumnDefinitionKind<EntityTypePropertyType<?>>(Dict.IS_MANDATORY)
+        {
+            @Override
+            public String tryGetValue(EntityTypePropertyType<?> entity)
+            {
+                return SimpleYesNoRenderer.render(entity.isMandatory());
+            }
+        });
+
+    private final AbstractColumnDefinitionKind<EntityTypePropertyType<?>> columnDefinitionKind;
+
+    private PropertyTypeAssignmentColDefKind(
+            AbstractColumnDefinitionKind<EntityTypePropertyType<?>> columnDefinitionKind)
+    {
+        this.columnDefinitionKind = columnDefinitionKind;
+    }
+
+    public String getHeaderMsgKey()
+    {
+        return columnDefinitionKind.getHeaderMsgKey();
+    }
+
+    public int getWidth()
+    {
+        return columnDefinitionKind.getWidth();
+    }
+
+    public String id()
+    {
+        return name();
+    }
+
+    public boolean isHidden()
+    {
+        return columnDefinitionKind.isHidden();
+    }
+
+    public String tryGetValue(EntityTypePropertyType<?> entity)
+    {
+        return columnDefinitionKind.tryGetValue(entity);
+    }
+}
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/PropertyTypeAssignmentGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/PropertyTypeAssignmentGrid.java
index 709946d0954..728d5d6bf28 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/PropertyTypeAssignmentGrid.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/PropertyTypeAssignmentGrid.java
@@ -16,75 +16,69 @@
 
 package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.property_type;
 
-import java.util.ArrayList;
-import java.util.List;
-
-import com.extjs.gxt.ui.client.data.BaseListLoadResult;
-import com.extjs.gxt.ui.client.widget.grid.ColumnConfig;
-import com.extjs.gxt.ui.client.widget.grid.ColumnModel;
-import com.google.gwt.user.client.rpc.AsyncCallback;
-
-import ch.systemsx.cisd.openbis.generic.client.shared.PropertyType;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.CommonViewContext;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.Dict;
+import ch.systemsx.cisd.openbis.generic.client.shared.EntityTypePropertyType;
+import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientServiceAsync;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAsyncCallback;
+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.model.ETPTModel;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.ModelDataPropertyNames;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.renderer.YesNoRenderer;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.ColumnConfigFactory;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.GridWithRPCProxy;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.AbstractSimpleBrowserGrid;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.DisposableComponent;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IColumnDefinitionKind;
+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.client.web.client.dto.TableExportCriteria;
 
 /**
- * {@link GridWithRPCProxy} displaying 'entity type' - 'property type' assignments.
+ * Grid with 'entity type' - 'property type' assignments.
  * 
  * @author Izabela Adamczyk
  */
-public class PropertyTypeAssignmentGrid extends GridWithRPCProxy<PropertyType, ETPTModel>
+public class PropertyTypeAssignmentGrid extends
+        AbstractSimpleBrowserGrid<EntityTypePropertyType<?>, ETPTModel>
 {
-    private final CommonViewContext viewContext;
+    // browser consists of the grid and the paging toolbar
+    public static final String BROWSER_ID =
+            GenericConstants.ID_PREFIX + "property-type-assignment-browser";
+
+    public static final String GRID_ID = BROWSER_ID + "_grid";
 
-    public PropertyTypeAssignmentGrid(final CommonViewContext viewContext, String id)
+    public static DisposableComponent create(
+            final IViewContext<ICommonClientServiceAsync> viewContext)
     {
-        super(createColumnModel(viewContext), id);
-        this.viewContext = viewContext;
+        return new PropertyTypeAssignmentGrid(viewContext).asDisposableWithoutToolbar();
     }
 
-    private static ColumnModel createColumnModel(IViewContext<?> context)
+    private PropertyTypeAssignmentGrid(IViewContext<ICommonClientServiceAsync> viewContext)
     {
-        final ArrayList<ColumnConfig> configs = new ArrayList<ColumnConfig>();
-        configs.add(ColumnConfigFactory.createDefaultColumnConfig(context
-                .getMessage(Dict.PROPERTY_TYPE_CODE), ModelDataPropertyNames.PROPERTY_TYPE_CODE));
-        configs.add(ColumnConfigFactory.createDefaultColumnConfig(context
-                .getMessage(Dict.ASSIGNED_TO), ModelDataPropertyNames.ENTITY_TYPE_CODE));
-        configs.add(ColumnConfigFactory.createDefaultColumnConfig(context.getMessage(Dict.TYPE_OF),
-                ModelDataPropertyNames.ENTITY_KIND));
-        final ColumnConfig mandatory =
-                ColumnConfigFactory.createDefaultColumnConfig(
-                        context.getMessage(Dict.IS_MANDATORY), ModelDataPropertyNames.IS_MANDATORY);
-        mandatory.setRenderer(new YesNoRenderer());
-        configs.add(mandatory);
-        return new ColumnModel(configs);
+        super(viewContext, BROWSER_ID, GRID_ID);
     }
 
     @Override
-    protected void loadDataFromService(AsyncCallback<BaseListLoadResult<ETPTModel>> callback)
+    protected IColumnDefinitionKind<EntityTypePropertyType<?>>[] getStaticColumnsDefinition()
     {
-        viewContext.getService().listPropertyTypes(
-                new ListPropertyTypesCallback(viewContext, callback));
+        return PropertyTypeAssignmentColDefKind.values();
     }
 
-    class ListPropertyTypesCallback extends DelegatingAsyncCallback
+    @Override
+    protected ETPTModel createModel(EntityTypePropertyType<?> entity)
     {
-        public ListPropertyTypesCallback(IViewContext<?> context,
-                AsyncCallback<BaseListLoadResult<ETPTModel>> callback)
-        {
-            super(context, callback);
-        }
+        return new ETPTModel(entity, getStaticColumnsDefinition());
+    }
 
-        @Override
-        protected List<ETPTModel> convert(List<PropertyType> result)
-        {
-            return ETPTModel.asModels(result);
-        }
+    @Override
+    protected void listEntities(
+            DefaultResultSetConfig<String, EntityTypePropertyType<?>> resultSetConfig,
+            AbstractAsyncCallback<ResultSet<EntityTypePropertyType<?>>> callback)
+    {
+        viewContext.getService().listPropertyTypeAssignments(resultSetConfig, callback);
+    }
+
+    @Override
+    protected void prepareExportEntities(
+            TableExportCriteria<EntityTypePropertyType<?>> exportCriteria,
+            AbstractAsyncCallback<String> callback)
+    {
+        viewContext.getService().prepareExportPropertyTypeAssignments(exportCriteria, callback);
     }
 }
\ No newline at end of file
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/PropertyTypeGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/PropertyTypeGrid.java
index 81065415fa7..228b6663ed3 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/PropertyTypeGrid.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/PropertyTypeGrid.java
@@ -16,28 +16,25 @@
 
 package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.property_type;
 
-import java.util.List;
-
 import ch.systemsx.cisd.openbis.generic.client.shared.PropertyType;
 import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientServiceAsync;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAsyncCallback;
 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.model.PropertyTypeModel;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.GridWithRPCProxy;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.AbstractBrowserGrid;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.AbstractSimpleBrowserGrid;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.DisposableComponent;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.sample.columns.ColumnDefsAndConfigs;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IColumnDefinitionKind;
 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.client.web.client.dto.TableExportCriteria;
 
 /**
- * {@link GridWithRPCProxy} displaying property types.
+ * Grid displaying property types.
  * 
- * @author Izabela Adamczyk
+ * @author Tomasz Pylak
  */
-public class PropertyTypeGrid extends AbstractBrowserGrid<PropertyType, PropertyTypeModel>
+public class PropertyTypeGrid extends AbstractSimpleBrowserGrid<PropertyType, PropertyTypeModel>
 {
     // browser consists of the grid and the paging toolbar
     public static final String BROWSER_ID = GenericConstants.ID_PREFIX + "property-type-browser";
@@ -52,27 +49,19 @@ public class PropertyTypeGrid extends AbstractBrowserGrid<PropertyType, Property
 
     private PropertyTypeGrid(IViewContext<ICommonClientServiceAsync> viewContext)
     {
-        super(viewContext, GRID_ID, false, true);
-        setId(BROWSER_ID);
-        updateDefaultRefreshButton();
+        super(viewContext, BROWSER_ID, GRID_ID);
     }
 
     @Override
-    protected ColumnDefsAndConfigs<PropertyType> createColumnsDefinition()
+    protected IColumnDefinitionKind<PropertyType>[] getStaticColumnsDefinition()
     {
-        return ColumnDefsAndConfigs.create(PropertyTypeModel.createColumnsSchema(viewContext));
+        return PropertyTypeColDefKind.values();
     }
 
     @Override
-    protected List<PropertyTypeModel> createModels(List<PropertyType> entities)
+    protected PropertyTypeModel createModel(PropertyType entity)
     {
-        return PropertyTypeModel.convert(entities);
-    }
-
-    @Override
-    protected boolean isRefreshEnabled()
-    {
-        return true;
+        return new PropertyTypeModel(entity, getStaticColumnsDefinition());
     }
 
     @Override
@@ -88,16 +77,4 @@ public class PropertyTypeGrid extends AbstractBrowserGrid<PropertyType, Property
     {
         viewContext.getService().prepareExportPropertyTypes(exportCriteria, callback);
     }
-
-    @Override
-    protected void refresh()
-    {
-        super.refresh(null, false);
-    }
-
-    @Override
-    protected void showEntityViewer(PropertyTypeModel modelData)
-    {
-        // do nothing
-    }
 }
\ No newline at end of file
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/PropertyTypeSelectionWidget.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/PropertyTypeSelectionWidget.java
index b8e531928a4..40e727ced22 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/PropertyTypeSelectionWidget.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/PropertyTypeSelectionWidget.java
@@ -16,8 +16,10 @@
 
 package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.property_type;
 
+import java.util.ArrayList;
 import java.util.List;
 
+import com.extjs.gxt.ui.client.data.BaseModelData;
 import com.extjs.gxt.ui.client.store.ListStore;
 import com.extjs.gxt.ui.client.widget.form.ComboBox;
 import com.google.gwt.user.client.Element;
@@ -28,7 +30,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAs
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.Dict;
 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.model.PropertyTypeModel;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.ModelDataPropertyNames;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.GWTUtils;
 
 /**
@@ -36,8 +38,20 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.GWTUt
  * 
  * @author Izabela Adamczyk
  */
-public final class PropertyTypeSelectionWidget extends ComboBox<PropertyTypeModel>
+public final class PropertyTypeSelectionWidget extends
+        ComboBox<PropertyTypeSelectionWidget.PropertyTypeComboModel>
 {
+    private static class PropertyTypeComboModel extends BaseModelData
+    {
+        private static final long serialVersionUID = 1L;
+
+        public PropertyTypeComboModel(PropertyType entity)
+        {
+            set(ModelDataPropertyNames.CODE, entity.getCode());
+            set(ModelDataPropertyNames.OBJECT, entity);
+        }
+    }
+
     private static final String PREFIX = "property-type-select-";
 
     public static final String ID = GenericConstants.ID_PREFIX + PREFIX;
@@ -49,11 +63,11 @@ public final class PropertyTypeSelectionWidget extends ComboBox<PropertyTypeMode
     {
         this.viewContext = viewContext;
         setId(ID + idSuffix);
-        setDisplayField(PropertyTypeColDefKind.CODE.id());
+        setDisplayField(ModelDataPropertyNames.CODE);
         setEditable(false);
         setWidth(180);
         setFieldLabel(viewContext.getMessage(Dict.PROPERTY_TYPE));
-        setStore(new ListStore<PropertyTypeModel>());
+        setStore(new ListStore<PropertyTypeComboModel>());
     }
 
     public final String tryGetSelectedPropertyTypeCode()
@@ -98,9 +112,9 @@ public final class PropertyTypeSelectionWidget extends ComboBox<PropertyTypeMode
         @Override
         protected void process(final List<PropertyType> result)
         {
-            final ListStore<PropertyTypeModel> propertyTypeStore = getStore();
+            final ListStore<PropertyTypeComboModel> propertyTypeStore = getStore();
             propertyTypeStore.removeAll();
-            propertyTypeStore.add(PropertyTypeModel.convert(result));
+            propertyTypeStore.add(convert(result));
             if (propertyTypeStore.getCount() > 0)
             {
                 setEnabled(true);
@@ -112,4 +126,14 @@ public final class PropertyTypeSelectionWidget extends ComboBox<PropertyTypeMode
             applyEmptyText();
         }
     }
+
+    public final static List<PropertyTypeComboModel> convert(final List<PropertyType> types)
+    {
+        final List<PropertyTypeComboModel> result = new ArrayList<PropertyTypeComboModel>();
+        for (final PropertyType st : types)
+        {
+            result.add(new PropertyTypeComboModel(st));
+        }
+        return result;
+    }
 }
\ No newline at end of file
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleBrowserGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleBrowserGrid.java
index 18b581aee82..b29fb4c6d31 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleBrowserGrid.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleBrowserGrid.java
@@ -16,8 +16,6 @@
 
 package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.sample;
 
-import java.util.List;
-
 import com.extjs.gxt.ui.client.event.SelectionChangedListener;
 import com.extjs.gxt.ui.client.widget.LayoutContainer;
 
@@ -29,8 +27,8 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewConte
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DispatcherHelper;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ITabItemFactory;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.AbstractBrowserGrid;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.ColumnDefsAndConfigs;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.DisposableComponent;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.sample.columns.ColumnDefsAndConfigs;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.sample.columns.SampleModel;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DefaultResultSetConfig;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.EntityKind;
@@ -100,9 +98,9 @@ public final class SampleBrowserGrid extends AbstractBrowserGrid<Sample, SampleM
     }
 
     @Override
-    protected List<SampleModel> createModels(List<Sample> entities)
+    protected SampleModel createModel(Sample entity)
     {
-        return SampleModel.asSampleModels(entities);
+        return new SampleModel(entity);
     }
 
     @Override
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/columns/CommonSampleColDefKind.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/columns/CommonSampleColDefKind.java
index 7b24f2cfd21..a98c8dc505f 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/columns/CommonSampleColDefKind.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/columns/CommonSampleColDefKind.java
@@ -88,7 +88,8 @@ public enum CommonSampleColDefKind implements IColumnDefinitionKind<Sample>
             }
         }),
 
-    REGISTRATION_DATE(new AbstractColumnDefinitionKind<Sample>(Dict.REGISTRATION_DATE, 200, true)
+    REGISTRATION_DATE(new AbstractColumnDefinitionKind<Sample>(Dict.REGISTRATION_DATE,
+            AbstractColumnDefinitionKind.DATE_COLUMN_WIDTH, true)
         {
             @Override
             public String tryGetValue(Sample entity)
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/columns/SampleModel.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/columns/SampleModel.java
index d2ef4ad0c1d..9810caed7a1 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/columns/SampleModel.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/columns/SampleModel.java
@@ -27,6 +27,7 @@ import ch.systemsx.cisd.openbis.generic.client.shared.SampleTypePropertyType;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.Dict;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.AbstractEntityModel;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.ModelDataPropertyNames;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.ColumnDefsAndConfigs;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IColumnDefinitionUI;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IMessageProvider;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.Sample;
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/DefaultResultSetConfig.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/DefaultResultSetConfig.java
index a7749c9cbc9..1e9d1a06e41 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/DefaultResultSetConfig.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/DefaultResultSetConfig.java
@@ -39,6 +39,11 @@ public class DefaultResultSetConfig<K, T> implements IResultSetConfig<K, T>, IsS
      */
     private K resultSetKeyOrNull;
 
+    public static <K, T> DefaultResultSetConfig<K, T> createFetchAll()
+    {
+        return new DefaultResultSetConfig<K, T>();
+    }
+
     public final void setLimit(final int limit)
     {
         this.limit = limit;
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/CommonClientService.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/CommonClientService.java
index 01035270766..007342046c1 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/CommonClientService.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/CommonClientService.java
@@ -25,10 +25,14 @@ import ch.systemsx.cisd.common.exceptions.UserFailureException;
 import ch.systemsx.cisd.common.servlet.IRequestContextProvider;
 import ch.systemsx.cisd.common.utilities.BeanUtils;
 import ch.systemsx.cisd.openbis.generic.client.shared.DataType;
+import ch.systemsx.cisd.openbis.generic.client.shared.EntityTypePropertyType;
 import ch.systemsx.cisd.openbis.generic.client.shared.ExperimentType;
+import ch.systemsx.cisd.openbis.generic.client.shared.ExperimentTypePropertyType;
+import ch.systemsx.cisd.openbis.generic.client.shared.MaterialTypePropertyType;
 import ch.systemsx.cisd.openbis.generic.client.shared.Person;
 import ch.systemsx.cisd.openbis.generic.client.shared.PropertyType;
 import ch.systemsx.cisd.openbis.generic.client.shared.SampleType;
+import ch.systemsx.cisd.openbis.generic.client.shared.SampleTypePropertyType;
 import ch.systemsx.cisd.openbis.generic.client.shared.Vocabulary;
 import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientService;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DefaultResultSetConfig;
@@ -104,6 +108,14 @@ public final class CommonClientService extends AbstractClientService implements
         this.commonServer = commonServer;
     }
 
+    @Override
+    protected final IServer getServer()
+    {
+        return commonServer;
+    }
+
+    // ----------- export and listing with cache generic functionality
+
     @SuppressWarnings("unchecked")
     private final <K> IResultSetManager<K> getResultSetManager()
     {
@@ -157,12 +169,77 @@ public final class CommonClientService extends AbstractClientService implements
         return criteria;
     }
 
-    @Override
-    protected final IServer getServer()
+    private <T> ResultSet<T> listEntities(final IResultSetConfig<String, T> criteria,
+            IOriginalDataProvider<T> dataProvider)
+            throws ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException
     {
-        return commonServer;
+        try
+        {
+            final IResultSetManager<String> resultSetManager = getResultSetManager();
+            final IResultSet<String, T> result =
+                    resultSetManager.getResultSet(criteria, dataProvider);
+            return ResultSetTranslator.translate(result);
+        } catch (final UserFailureException e)
+        {
+            throw UserFailureExceptionTranslator.translate(e);
+        }
+    }
+
+    /**
+     * Assumes that preparation of the export ({@link #prepareExportSamples(TableExportCriteria)}
+     * has been invoked before and returned with an exportDataKey passed here as a parameter.
+     */
+    public final String getExportTable(final String exportDataKey)
+    {
+        return getGenericExportTable(exportDataKey);
+    }
+
+    private final <T> String getGenericExportTable(final String exportDataKey)
+    {
+        try
+        {
+            // Not directly needed but this refreshes the session.
+            getSessionToken();
+            final TableExportCriteria<T> exportCriteria = getAndRemoveExportCriteria(exportDataKey);
+            final List<T> entities = fetchCachedEntities(exportCriteria);
+            return TSVRenderer.createTable(entities, exportCriteria.getColumnDefs());
+        } catch (final UserFailureException e)
+        {
+            throw UserFailureExceptionTranslator.translate(e);
+        }
+    }
+
+    private <T> String prepareExportEntities(TableExportCriteria<T> criteria)
+            throws ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException
+    {
+        try
+        {
+            // Not directly needed but this refreshes the session.
+            getSessionToken();
+            final CacheManager<String, TableExportCriteria<T>> exportManager = getExportManager();
+            return exportManager.saveData(criteria);
+        } catch (final UserFailureException e)
+        {
+            throw UserFailureExceptionTranslator.translate(e);
+        }
     }
 
+    public final void removeResultSet(final String resultSetKey)
+            throws ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException
+    {
+        try
+        {
+            // Not directly needed but this refreshes the session.
+            getSessionToken();
+            getResultSetManager().removeResultSet(resultSetKey);
+        } catch (final ch.systemsx.cisd.common.exceptions.UserFailureException e)
+        {
+            throw UserFailureExceptionTranslator.translate(e);
+        }
+    }
+
+    // --------------- end export & listing
+
     //
     // IGenericClientService
     //
@@ -335,6 +412,8 @@ public final class CommonClientService extends AbstractClientService implements
         }
     }
 
+    // --------- methods preparing exported content. Note: GWT does not support generic methods :(
+
     public final String prepareExportSamples(final TableExportCriteria<Sample> criteria)
             throws ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException
     {
@@ -360,105 +439,131 @@ public final class CommonClientService extends AbstractClientService implements
         return prepareExportEntities(criteria);
     }
 
-    private <T> String prepareExportEntities(TableExportCriteria<T> criteria)
+    public String prepareExportPropertyTypeAssignments(
+            TableExportCriteria<EntityTypePropertyType<?>> criteria)
             throws ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException
     {
-        try
-        {
-            // Not directly needed but this refreshes the session.
-            getSessionToken();
-            final CacheManager<String, TableExportCriteria<T>> exportManager = getExportManager();
-            return exportManager.saveData(criteria);
-        } catch (final UserFailureException e)
-        {
-            throw UserFailureExceptionTranslator.translate(e);
-        }
+        return prepareExportEntities(criteria);
     }
 
-    /**
-     * Assumes that preparation of the export ({@link #prepareExportSamples(TableExportCriteria)}
-     * has been invoked before and returned with an exportDataKey passed here as a parameter.
-     */
-    public final String getExportTable(final String exportDataKey)
+    public String prepareExportProjects(TableExportCriteria<Project> criteria)
+            throws ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException
     {
-        return getGenericExportTable(exportDataKey);
+        return prepareExportEntities(criteria);
     }
 
-    private final <T> String getGenericExportTable(final String exportDataKey)
+    // ---------------- methods which list entities using cache
+
+    public final ResultSet<Sample> listSamples(final ListSampleCriteria listCriteria)
+            throws ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException
     {
-        try
-        {
-            // Not directly needed but this refreshes the session.
-            getSessionToken();
-            final TableExportCriteria<T> exportCriteria = getAndRemoveExportCriteria(exportDataKey);
-            final List<T> entities = fetchCachedEntities(exportCriteria);
-            return TSVRenderer.createTable(entities, exportCriteria.getColumnDefs());
-        } catch (final UserFailureException e)
-        {
-            throw UserFailureExceptionTranslator.translate(e);
-        }
+        final String sessionToken = getSessionToken();
+        return listEntities(listCriteria, new ListSamplesOriginalDataProvider(commonServer,
+                sessionToken, listCriteria));
+    }
+
+    public final ResultSet<Experiment> listExperiments(final ListExperimentsCriteria listCriteria)
+            throws ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException
+    {
+        final String sessionToken = getSessionToken();
+        return listEntities(listCriteria, new ListExperimentsOriginalDataProvider(commonServer,
+                listCriteria, sessionToken));
     }
 
     public ResultSet<PropertyType> listPropertyTypes(
             DefaultResultSetConfig<String, PropertyType> criteria)
             throws ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException
     {
-        try
-        {
-            final IResultSetManager<String> resultSetManager = getResultSetManager();
-            IOriginalDataProvider<PropertyType> dataProvider =
-                    new IOriginalDataProvider<PropertyType>()
-                        {
-                            public List<PropertyType> getOriginalData() throws UserFailureException
-                            {
-                                return listPropertyTypes();
-                            }
-                        };
-            final IResultSet<String, PropertyType> result =
-                    resultSetManager.getResultSet(criteria, dataProvider);
-            return ResultSetTranslator.translate(result);
-        } catch (final UserFailureException e)
+        return listEntities(criteria, new IOriginalDataProvider<PropertyType>()
+            {
+                public List<PropertyType> getOriginalData() throws UserFailureException
+                {
+                    return listPropertyTypes();
+                }
+            });
+    }
+
+    public final ResultSet<MatchingEntity> listMatchingEntities(
+            final SearchableEntity searchableEntityOrNull, final String queryText,
+            final IResultSetConfig<String, MatchingEntity> resultSetConfig)
+            throws ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException
+    {
+        final String sessionToken = getSessionToken();
+        final ch.systemsx.cisd.openbis.generic.shared.dto.SearchableEntity[] matchingEntities =
+                SearchableEntityTranslator.translate(searchableEntityOrNull);
+        return listEntities(resultSetConfig, new ListMatchingEntitiesOriginalDataProvider(
+                commonServer, sessionToken, matchingEntities, queryText));
+    }
+
+    public ResultSet<EntityTypePropertyType<?>> listPropertyTypeAssignments(
+            DefaultResultSetConfig<String, EntityTypePropertyType<?>> criteria)
+    {
+        return listEntities(criteria, new IOriginalDataProvider<EntityTypePropertyType<?>>()
+            {
+                public List<EntityTypePropertyType<?>> getOriginalData()
+                        throws UserFailureException
+                {
+                    return extractAssignments(listPropertyTypes());
+                }
+            });
+    }
+
+    private static List<EntityTypePropertyType<?>> extractAssignments(
+            List<PropertyType> listPropertyTypes)
+    {
+        List<EntityTypePropertyType<?>> result = new ArrayList<EntityTypePropertyType<?>>();
+        for (PropertyType propertyType : listPropertyTypes)
         {
-            throw UserFailureExceptionTranslator.translate(e);
+            extractAssignments(result, propertyType);
         }
+        return result;
     }
 
-    public final ResultSet<Sample> listSamples(final ListSampleCriteria listCriteria)
-            throws ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException
+    private static void extractAssignments(List<EntityTypePropertyType<?>> result,
+            final PropertyType propertyType)
     {
-        try
+        for (ExperimentTypePropertyType etpt : propertyType.getExperimentTypePropertyTypes())
         {
-            final String sessionToken = getSessionToken();
-            final IResultSetManager<String> resultSetManager = getResultSetManager();
-            final IResultSet<String, Sample> result =
-                    resultSetManager.getResultSet(listCriteria,
-                            new ListSamplesOriginalDataProvider(commonServer, sessionToken,
-                                    listCriteria));
-            return ResultSetTranslator.translate(result);
-        } catch (final UserFailureException e)
+            result.add(etpt);
+        }
+        for (SampleTypePropertyType etpt : propertyType.getSampleTypePropertyTypes())
         {
-            throw UserFailureExceptionTranslator.translate(e);
+            result.add(etpt);
+        }
+        for (MaterialTypePropertyType etpt : propertyType.getMaterialTypePropertyTypes())
+        {
+            result.add(etpt);
         }
     }
 
-    public final ResultSet<Experiment> listExperiments(final ListExperimentsCriteria listCriteria)
+    public ResultSet<Project> listProjects(DefaultResultSetConfig<String, Project> criteria)
+            throws ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException
+    {
+        return listEntities(criteria, new IOriginalDataProvider<Project>()
+            {
+                public List<Project> getOriginalData() throws UserFailureException
+                {
+                    return listProjects();
+                }
+            });
+    }
+
+    private List<Project> listProjects()
             throws ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException
     {
         try
         {
             final String sessionToken = getSessionToken();
-            final IResultSetManager<String> resultSetManager = getResultSetManager();
-            final IResultSet<String, Experiment> result =
-                    resultSetManager.getResultSet(listCriteria,
-                            new ListExperimentsOriginalDataProvider(commonServer, listCriteria,
-                                    sessionToken));
-            return ResultSetTranslator.translate(result);
+            final List<ProjectPE> projects = commonServer.listProjects(sessionToken);
+            return ProjectTranslator.translate(projects);
         } catch (final UserFailureException e)
         {
             throw UserFailureExceptionTranslator.translate(e);
         }
     }
 
+    // ---------------- end list using cache ----------
+
     public final List<ExternalData> listExternalData(final String sampleIdentifier)
             throws ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException
     {
@@ -511,61 +616,6 @@ public final class CommonClientService extends AbstractClientService implements
         }
     }
 
-    public final ResultSet<MatchingEntity> listMatchingEntities(
-            final SearchableEntity searchableEntityOrNull, final String queryText,
-            final IResultSetConfig<String, MatchingEntity> resultSetConfig)
-            throws ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException
-    {
-        try
-        {
-            final String sessionToken = getSessionToken();
-            final ch.systemsx.cisd.openbis.generic.shared.dto.SearchableEntity[] matchingEntities =
-                    SearchableEntityTranslator.translate(searchableEntityOrNull);
-            final IResultSetManager<String> resultSetManager = getResultSetManager();
-            final IResultSet<String, MatchingEntity> result =
-                    resultSetManager.getResultSet(resultSetConfig,
-                            new ListMatchingEntitiesOriginalDataProvider(commonServer,
-                                    sessionToken, matchingEntities, queryText));
-            return ResultSetTranslator.translate(result);
-        } catch (final ch.systemsx.cisd.common.exceptions.UserFailureException e)
-        {
-            throw UserFailureExceptionTranslator.translate(e);
-        }
-    }
-
-    public final void removeResultSet(final String resultSetKey)
-            throws ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException
-    {
-        try
-        {
-            // Not directly needed but this refreshes the session.
-            getSessionToken();
-            getResultSetManager().removeResultSet(resultSetKey);
-        } catch (final ch.systemsx.cisd.common.exceptions.UserFailureException e)
-        {
-            throw UserFailureExceptionTranslator.translate(e);
-        }
-    }
-
-    public List<Project> listProjects()
-            throws ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException
-    {
-        try
-        {
-            final String sessionToken = getSessionToken();
-            final List<Project> result = new ArrayList<Project>();
-            final List<ProjectPE> projects = commonServer.listProjects(sessionToken);
-            for (final ProjectPE project : projects)
-            {
-                result.add(ProjectTranslator.translate(project));
-            }
-            return result;
-        } catch (final UserFailureException e)
-        {
-            throw UserFailureExceptionTranslator.translate(e);
-        }
-    }
-
     public List<ExperimentType> listExperimentTypes()
             throws ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException
     {
@@ -592,23 +642,13 @@ public final class CommonClientService extends AbstractClientService implements
         {
             final String sessionToken = getSessionToken();
             final List<PropertyTypePE> propertyTypes = commonServer.listPropertyTypes(sessionToken);
-            return translate(propertyTypes);
+            return PropertyTypeTranslator.translate(propertyTypes);
         } catch (final UserFailureException e)
         {
             throw UserFailureExceptionTranslator.translate(e);
         }
     }
 
-    private static List<PropertyType> translate(final List<PropertyTypePE> propertyTypes)
-    {
-        final List<PropertyType> result = new ArrayList<PropertyType>();
-        for (final PropertyTypePE propType : propertyTypes)
-        {
-            result.add(PropertyTypeTranslator.translate(propType));
-        }
-        return result;
-    }
-
     public final List<DataType> listDataTypes()
             throws ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException
     {
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/translator/ProjectTranslator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/translator/ProjectTranslator.java
index 5a72376238d..4dc8db9302e 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/translator/ProjectTranslator.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/translator/ProjectTranslator.java
@@ -16,6 +16,9 @@
 
 package ch.systemsx.cisd.openbis.generic.client.web.server.translator;
 
+import java.util.ArrayList;
+import java.util.List;
+
 import ch.systemsx.cisd.openbis.generic.client.shared.Person;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.Project;
 import ch.systemsx.cisd.openbis.generic.shared.dto.PersonPE;
@@ -35,6 +38,16 @@ public final class ProjectTranslator
         // Can not be instantiated.
     }
 
+    public final static List<Project> translate(final List<ProjectPE> projects)
+    {
+        final List<Project> result = new ArrayList<Project>();
+        for (final ProjectPE project : projects)
+        {
+            result.add(ProjectTranslator.translate(project));
+        }
+        return result;
+    }
+
     public final static Project translate(final ProjectPE project)
     {
         if (project == null)
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/translator/PropertyTypeTranslator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/translator/PropertyTypeTranslator.java
index 93e297f5add..1ec69ccf8f7 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/translator/PropertyTypeTranslator.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/translator/PropertyTypeTranslator.java
@@ -16,6 +16,9 @@
 
 package ch.systemsx.cisd.openbis.generic.client.web.server.translator;
 
+import java.util.ArrayList;
+import java.util.List;
+
 import ch.systemsx.cisd.openbis.generic.client.shared.PropertyType;
 import ch.systemsx.cisd.openbis.generic.shared.dto.PropertyTypePE;
 
@@ -32,6 +35,16 @@ public final class PropertyTypeTranslator
         // Can not be instantiated.
     }
 
+    public final static List<PropertyType> translate(final List<PropertyTypePE> propertyTypes)
+    {
+        final List<PropertyType> result = new ArrayList<PropertyType>();
+        for (final PropertyTypePE propType : propertyTypes)
+        {
+            result.add(PropertyTypeTranslator.translate(propType));
+        }
+        return result;
+    }
+    
     public final static PropertyType translate(final PropertyTypePE propertyType)
     {
         final PropertyType result = new PropertyType();
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/EntityTypePropertyTypeAssignmentTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/EntityTypePropertyTypeAssignmentTest.java
index 9240b2a0fe3..8757906db11 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/EntityTypePropertyTypeAssignmentTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/EntityTypePropertyTypeAssignmentTest.java
@@ -17,15 +17,17 @@
 package ch.systemsx.cisd.openbis.generic.client.web.client.application;
 
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.CategoriesBuilder;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.ModelDataPropertyNames;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.Login;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.OpenTab;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.property_type.CheckPropertyTypeAssignmentTable;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.property_type.FillPropertyTypeAssignmentForm;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.property_type.PropertyTypeAssignmentColDefKind;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.property_type.PropertyTypeAssignmentForm;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.sample.CheckSampleTable;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.sample.ListSamples;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.sample.columns.SampleRow;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.sample.renderer.SimpleYesNoRenderer;
+import ch.systemsx.cisd.openbis.generic.client.web.client.dto.EntityKind;
 import ch.systemsx.cisd.openbis.generic.client.web.client.testframework.AbstractGWTTestCase;
 import ch.systemsx.cisd.openbis.generic.client.web.client.testframework.Row;
 
@@ -43,31 +45,34 @@ public class EntityTypePropertyTypeAssignmentTest extends AbstractGWTTestCase
 
     private static final String NO_COMMENT = "No comment.";
 
-    private static final String EXPERIMENT = "EXPERIMENT";
-
     private static final String COMPOUND_HCS = "COMPOUND_HCS";
 
     private static final String USER_COMMENT = "USER.COMMENT";
 
-    private static final String SAMPLE = "SAMPLE";
-
     private static final String CONTROL_LAYOUT = "CONTROL_LAYOUT";
 
+    private static final EntityKind EXPERIMENT = EntityKind.EXPERIMENT;
+
+    private static final EntityKind SAMPLE = EntityKind.SAMPLE;
+
     private final void prepareListingAfterAssignment(String propertyTypeCode,
-            String entityTypeCode, String entityKindName, int expectedEntries, boolean isMandatory)
+            String entityTypeCode, EntityKind entityKind, int expectedEntries, boolean isMandatory)
     {
         remoteConsole.prepare(new OpenTab(CategoriesBuilder.CATEGORIES.PROPERTY_TYPES,
                 CategoriesBuilder.MENU_ELEMENTS.LIST_ASSIGNMENTS,
                 PropertyTypeAssignmentForm.AssignPropertyTypeCallback.class));
         CheckPropertyTypeAssignmentTable table = new CheckPropertyTypeAssignmentTable();
-        table.expectedRow(new Row().withCell(ModelDataPropertyNames.PROPERTY_TYPE_CODE,
-                propertyTypeCode).withCell(ModelDataPropertyNames.ENTITY_TYPE_CODE, entityTypeCode)
-                .withCell(ModelDataPropertyNames.ENTITY_KIND, entityKindName).withCell(
-                        ModelDataPropertyNames.IS_MANDATORY, isMandatory));
+        table.expectedRow(new Row().withCell(
+                PropertyTypeAssignmentColDefKind.PROPERTY_TYPE_CODE.id(), propertyTypeCode)
+                .withCell(PropertyTypeAssignmentColDefKind.ENTITY_TYPE_CODE.id(), entityTypeCode)
+                .withCell(PropertyTypeAssignmentColDefKind.ENTITY_KIND.id(),
+                        entityKind.getDescription()).withCell(
+                        PropertyTypeAssignmentColDefKind.IS_MANDATORY.id(),
+                        SimpleYesNoRenderer.render(isMandatory)));
         remoteConsole.prepare(table.expectedSize(expectedEntries));
     }
 
-    public final void testAssignmenExperimentPropertyType()
+    public final void testAssignExperimentPropertyType()
     {
         remoteConsole.prepare(new Login("test", "a"));
         remoteConsole.prepare(new OpenTab(CategoriesBuilder.CATEGORIES.PROPERTY_TYPES,
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ExperimentBrowserTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ExperimentBrowserTest.java
index 96f469b45f1..51ad0a43852 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ExperimentBrowserTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ExperimentBrowserTest.java
@@ -35,7 +35,7 @@ public class ExperimentBrowserTest extends AbstractGWTTestCase
     public final void testListExperiments()
     {
         loginAndGotoListExperimentsTab();
-        remoteConsole.prepare(new ListExperiments("DEFAULT", "SIRNA_HCS"));
+        remoteConsole.prepare(new ListExperiments("DEFAULT (CISD)", "SIRNA_HCS"));
         CheckExperimentTable table = new CheckExperimentTable();
         table.expectedRow(new ExperimentRow("EXP-REUSE").valid());
         table.expectedRow(new ExperimentRow("EXP-X").invalid());
@@ -49,5 +49,5 @@ public class ExperimentBrowserTest extends AbstractGWTTestCase
         remoteConsole.prepare(new Login("test", "a"));
         remoteConsole.prepare(new OpenTab(CategoriesBuilder.CATEGORIES.EXPERIMENTS,
                 CategoriesBuilder.MENU_ELEMENTS.LIST));
-    }
+    }   
 }
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ProjectRegistrationTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ProjectRegistrationTest.java
index 55b2cc6b10d..60c3ae1fc6c 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ProjectRegistrationTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ProjectRegistrationTest.java
@@ -17,11 +17,11 @@
 package ch.systemsx.cisd.openbis.generic.client.web.client.application;
 
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.CategoriesBuilder;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.ModelDataPropertyNames;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.Login;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.OpenTab;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.project.CheckProjectTable;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.project.FillProjectRegistrationForm;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.project.ProjectColDefKind;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.project.ProjectRegistrationForm;
 import ch.systemsx.cisd.openbis.generic.client.web.client.testframework.AbstractGWTTestCase;
 import ch.systemsx.cisd.openbis.generic.client.web.client.testframework.Row;
@@ -49,8 +49,8 @@ public class ProjectRegistrationTest extends AbstractGWTTestCase
                 CategoriesBuilder.MENU_ELEMENTS.LIST,
                 ProjectRegistrationForm.ProjectRegistrationCallback.class));
         final CheckProjectTable table = new CheckProjectTable();
-        table.expectedRow(new Row().withCell(ModelDataPropertyNames.CODE, PROJECT_CODE_HER_MAJESTY)
-                .withCell(ModelDataPropertyNames.DESCRIPTION, DESCRIPTION_PROJECT_007));
+        table.expectedRow(new Row().withCell(ProjectColDefKind.CODE.id(), PROJECT_CODE_HER_MAJESTY)
+                .withCell(ProjectColDefKind.DESCRIPTION.id(), DESCRIPTION_PROJECT_007));
         remoteConsole.prepare(table.expectedSize(5));
 
         launchTest(20000);
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/PropertyTypeAssignmentBrowserTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/PropertyTypeAssignmentBrowserTest.java
index 9380b78e59d..26bd4093938 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/PropertyTypeAssignmentBrowserTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/PropertyTypeAssignmentBrowserTest.java
@@ -17,10 +17,10 @@
 package ch.systemsx.cisd.openbis.generic.client.web.client.application;
 
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.CategoriesBuilder;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.ModelDataPropertyNames;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.Login;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.OpenTab;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.property_type.CheckPropertyTypeAssignmentTable;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.property_type.PropertyTypeAssignmentColDefKind;
 import ch.systemsx.cisd.openbis.generic.client.web.client.testframework.AbstractGWTTestCase;
 import ch.systemsx.cisd.openbis.generic.client.web.client.testframework.Row;
 
@@ -38,9 +38,10 @@ public class PropertyTypeAssignmentBrowserTest extends AbstractGWTTestCase
         remoteConsole.prepare(new OpenTab(CategoriesBuilder.CATEGORIES.PROPERTY_TYPES,
                 CategoriesBuilder.MENU_ELEMENTS.LIST_ASSIGNMENTS));
         CheckPropertyTypeAssignmentTable table = new CheckPropertyTypeAssignmentTable();
-        table.expectedRow(new Row().withCell(ModelDataPropertyNames.PROPERTY_TYPE_CODE,
-                "USER.DESCRIPTION").withCell(ModelDataPropertyNames.ENTITY_TYPE_CODE,
-                "CONTROL_LAYOUT").withCell(ModelDataPropertyNames.ENTITY_KIND, "SAMPLE"));
+        table.expectedRow(new Row().withCell(
+                PropertyTypeAssignmentColDefKind.PROPERTY_TYPE_CODE.id(), "USER.DESCRIPTION")
+                .withCell(PropertyTypeAssignmentColDefKind.ENTITY_TYPE_CODE.id(), "CONTROL_LAYOUT")
+                .withCell(PropertyTypeAssignmentColDefKind.ENTITY_KIND.id(), "Sample"));
         remoteConsole.prepare(table.expectedSize(24));
 
         launchTest(20000);
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ListExperiments.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ListExperiments.java
index f49d5bf48cd..ec7f3946583 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ListExperiments.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ListExperiments.java
@@ -62,7 +62,8 @@ public class ListExperiments extends AbstractDefaultTestCommand
 
         GWTUtils.setSelectedItem(experimentTypeSelector, ModelDataPropertyNames.CODE,
                 experimentTypeName);
-        GWTUtils.setSelectedItem(project, ModelDataPropertyNames.CODE, projectCodeOrNull);
+        GWTUtils.setSelectedItem(project, ProjectSelectionWidget.DISPLAY_COLUMN_ID,
+                projectCodeOrNull);
 
         final Button refresh =
                 (Button) GWTTestUtil.getWidgetWithID(BrowserGridPagingToolBar.REFRESH_BUTTON_ID);
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/project/CheckProjectTable.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/project/CheckProjectTable.java
index eec94f120ec..d77e1660937 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/project/CheckProjectTable.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/project/CheckProjectTable.java
@@ -29,7 +29,7 @@ public class CheckProjectTable extends CheckTableCommand
 {
     public CheckProjectTable()
     {
-        super(ProjectGrid.createId(ProjectBrowser.ID), ProjectGrid.ListProjectsCallback.class);
+        super(ProjectGrid.GRID_ID, ProjectGrid.ListEntitiesCallback.class);
     }
 
 }
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/CheckPropertyTypeAssignmentTable.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/CheckPropertyTypeAssignmentTable.java
index 71578874002..5cff45051b7 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/CheckPropertyTypeAssignmentTable.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/CheckPropertyTypeAssignmentTable.java
@@ -29,7 +29,7 @@ public class CheckPropertyTypeAssignmentTable extends CheckTableCommand
 {
     public CheckPropertyTypeAssignmentTable()
     {
-        super(PropertyTypeAssignmentGrid.createId(PropertyTypeAssignmentBrowser.ID),
-                PropertyTypeAssignmentGrid.ListPropertyTypesCallback.class);
+        super(PropertyTypeAssignmentGrid.GRID_ID,
+                PropertyTypeAssignmentGrid.ListEntitiesCallback.class);
     }
 }
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/FillPropertyTypeAssignmentForm.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/FillPropertyTypeAssignmentForm.java
index a1f27b4add9..0fa0257f12b 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/FillPropertyTypeAssignmentForm.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/FillPropertyTypeAssignmentForm.java
@@ -27,6 +27,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.Samp
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.experiment.ExperimentTypeSelectionWidget;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.sample.SampleTypeSelectionWidget;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.GWTUtils;
+import ch.systemsx.cisd.openbis.generic.client.web.client.dto.EntityKind;
 import ch.systemsx.cisd.openbis.generic.client.web.client.testframework.AbstractDefaultTestCommand;
 import ch.systemsx.cisd.openbis.generic.client.web.client.testframework.GWTTestUtil;
 
@@ -47,29 +48,29 @@ public final class FillPropertyTypeAssignmentForm extends AbstractDefaultTestCom
 
     private String defaultValue;
 
-    private String entityKindName;
+    private EntityKind entityKind;
 
     private String widgetId;
 
     public FillPropertyTypeAssignmentForm(final boolean isMandatory, final String propertyTypeCode,
-            final String entityTypeCode, String defaultValue, String entityKindName)
+            final String entityTypeCode, String defaultValue, EntityKind entityKind)
     {
         this.isMandatory = isMandatory;
         this.propertyTypeCode = propertyTypeCode;
         this.entityTypeCode = entityTypeCode;
         this.defaultValue = defaultValue;
-        this.entityKindName = entityKindName;
-        widgetId = PropertyTypeAssignmentForm.ID_PREFIX + entityKindName;
+        this.entityKind = entityKind;
+        widgetId = PropertyTypeAssignmentForm.ID_PREFIX + entityKind;
         addCallbackClass(PropertyTypeSelectionWidget.ListPropertyTypesCallback.class);
         addEntityTypeCallback();
     }
 
     private void addEntityTypeCallback()
     {
-        if (entityKindName.equals("EXPERIMENT"))
+        if (entityKind.equals(EntityKind.EXPERIMENT))
         {
             addCallbackClass(ExperimentTypeSelectionWidget.ListExperimentTypesCallback.class);
-        } else if (entityKindName.equals("SAMPLE"))
+        } else if (entityKind.equals(EntityKind.SAMPLE))
         {
             addCallbackClass(SampleTypeSelectionWidget.ListSampleTypesCallback.class);
         } else
@@ -95,7 +96,7 @@ public final class FillPropertyTypeAssignmentForm extends AbstractDefaultTestCom
                 (PropertyTypeSelectionWidget) GWTTestUtil
                         .getWidgetWithID(PropertyTypeSelectionWidget.ID + widgetId
                                 + PropertyTypeAssignmentForm.PROPERTY_TYPE_ID_SUFFIX);
-        GWTUtils.setSelectedItem(propertyTypeSelector, PropertyTypeColDefKind.CODE.id(),
+        GWTUtils.setSelectedItem(propertyTypeSelector, ModelDataPropertyNames.CODE,
                 propertyTypeCode);
         return propertyTypeSelector;
     }
@@ -124,7 +125,7 @@ public final class FillPropertyTypeAssignmentForm extends AbstractDefaultTestCom
 
     private void chooseEntityType()
     {
-        if (entityKindName.equals("EXPERIMENT"))
+        if (entityKind.equals(EntityKind.EXPERIMENT))
         {
             final ComboBox<ExperimentTypeModel> experimentTypeSelector =
                     (ExperimentTypeSelectionWidget) GWTTestUtil
@@ -134,7 +135,7 @@ public final class FillPropertyTypeAssignmentForm extends AbstractDefaultTestCom
                     entityTypeCode);
             assertEquals(((ExperimentTypeSelectionWidget) experimentTypeSelector)
                     .tryGetSelectedExperimentType().getCode(), entityTypeCode);
-        } else if (entityKindName.equals("SAMPLE"))
+        } else if (entityKind.equals(EntityKind.SAMPLE))
         {
             final ComboBox<SampleTypeModel> sampleTypeSelector =
                     (SampleTypeSelectionWidget) GWTTestUtil
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentAttachmentDownloadTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentAttachmentDownloadTest.java
index 6ad6146d69d..5ab8925468c 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentAttachmentDownloadTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentAttachmentDownloadTest.java
@@ -40,7 +40,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.testframework.Abstract
  */
 public class GenericExperimentAttachmentDownloadTest extends AbstractGWTTestCase
 {
-    private static final String DEFAULT = "DEFAULT";
+    private static final String DEFAULT = "DEFAULT (CISD)";
 
     private static final String EXP_REUSE = "EXP-REUSE";
 
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentViewerTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentViewerTest.java
index 6bcdb3644ec..1a7c31976bb 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentViewerTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentViewerTest.java
@@ -62,7 +62,7 @@ public class GenericExperimentViewerTest extends AbstractGWTTestCase
         }
     }
 
-    private static final String DEFAULT = "DEFAULT";
+    private static final String DEFAULT = "DEFAULT (CISD)";
 
     private static final String EXP_REUSE = "EXP-REUSE";
 
@@ -78,7 +78,7 @@ public class GenericExperimentViewerTest extends AbstractGWTTestCase
 
     private static final String SIRNA_HCS = "SIRNA_HCS";
 
-    private static final String NEMO = "NEMO";
+    private static final String NEMO = "NEMO (CISD)";
 
     private static final String EXP1 = "EXP1";
 
-- 
GitLab