diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/IPhosphoNetXClientService.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/IPhosphoNetXClientService.java
index 253cf47e82d13e0138a2f328b8b93e4cfceee143..4e55fc527f67ee85a900bb8044edfe8d693cfd40 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/IPhosphoNetXClientService.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/IPhosphoNetXClientService.java
@@ -19,13 +19,13 @@ package ch.systemsx.cisd.openbis.plugin.phosphonetx.client.web.client;
 import java.util.List;
 
 import ch.systemsx.cisd.openbis.generic.client.web.client.IClientService;
+import ch.systemsx.cisd.openbis.generic.client.web.client.dto.GenericTableResultSet;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.IResultSetConfig;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ResultSet;
-import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ResultSetWithEntityTypes;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.TableExportCriteria;
 import ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException;
 import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.GenericTableRow;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Vocabulary;
 import ch.systemsx.cisd.openbis.plugin.phosphonetx.client.web.client.dto.ListProteinByExperimentAndReferenceCriteria;
 import ch.systemsx.cisd.openbis.plugin.phosphonetx.client.web.client.dto.ListProteinByExperimentCriteria;
@@ -86,10 +86,10 @@ public interface IPhosphoNetXClientService extends IClientService
             TableExportCriteria<SampleWithPropertiesAndAbundance> exportCriteria)
             throws UserFailureException;
 
-    public ResultSetWithEntityTypes<Sample> listRawDataSamples(IResultSetConfig<String, Sample> criteria)
+    public GenericTableResultSet listRawDataSamples(IResultSetConfig<String, GenericTableRow> criteria)
             throws UserFailureException;
-
-    public String prepareExportRawDataSamples(TableExportCriteria<Sample> exportCriteria)
+    
+    public String prepareExportRawDataSamples(TableExportCriteria<GenericTableRow> exportCriteria)
             throws UserFailureException;
     
     public void copyRawData(long[] rawDataSampleIDs) throws UserFailureException;
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/IPhosphoNetXClientServiceAsync.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/IPhosphoNetXClientServiceAsync.java
index d2ed071900908be4b02b0ca866fc04b0e23f12ee..6d522eb5d2d2fd679a04bcd9553b3af32f4fe404 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/IPhosphoNetXClientServiceAsync.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/IPhosphoNetXClientServiceAsync.java
@@ -21,12 +21,12 @@ import java.util.List;
 import com.google.gwt.user.client.rpc.AsyncCallback;
 
 import ch.systemsx.cisd.openbis.generic.client.web.client.IClientServiceAsync;
+import ch.systemsx.cisd.openbis.generic.client.web.client.dto.GenericTableResultSet;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.IResultSetConfig;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ResultSet;
-import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ResultSetWithEntityTypes;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.TableExportCriteria;
 import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.GenericTableRow;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Vocabulary;
 import ch.systemsx.cisd.openbis.plugin.phosphonetx.client.web.client.dto.ListProteinByExperimentAndReferenceCriteria;
 import ch.systemsx.cisd.openbis.plugin.phosphonetx.client.web.client.dto.ListProteinByExperimentCriteria;
@@ -104,11 +104,11 @@ public interface IPhosphoNetXClientServiceAsync extends IClientServiceAsync
             AsyncCallback<String> callback);
 
     /** @see IPhosphoNetXClientService#listRawDataSamples(IResultSetConfig) */
-    public void listRawDataSamples(IResultSetConfig<String, Sample> criteria,
-            AsyncCallback<ResultSetWithEntityTypes<Sample>> callback);
+    public void listRawDataSamples(IResultSetConfig<String, GenericTableRow> criteria,
+            AsyncCallback<GenericTableResultSet> callback);
     
     /** @see IPhosphoNetXClientService#prepareExportRawDataSamples(TableExportCriteria) */
-    public void prepareExportRawDataSamples(TableExportCriteria<Sample> exportCriteria,
+    public void prepareExportRawDataSamples(TableExportCriteria<GenericTableRow> exportCriteria,
             AsyncCallback<String> callback);
     
     /** @see IPhosphoNetXClientService#copyRawData(long[]) */
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/RawDataSampleGrid.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/RawDataSampleGrid.java
index 23292509eda0192e4a124febb89ab37313ae65f0..491b89c32a72cc7fb24815fe0e6bb0268f9bba51 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/RawDataSampleGrid.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/RawDataSampleGrid.java
@@ -16,101 +16,26 @@
 
 package ch.systemsx.cisd.openbis.plugin.phosphonetx.client.web.client.application;
 
-import static ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind.createOrDelete;
-import static ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind.edit;
-import static ch.systemsx.cisd.openbis.plugin.phosphonetx.client.web.client.application.Dict.COPY_DATA_SETS_BUTTON_LABEL;
-import static ch.systemsx.cisd.openbis.plugin.phosphonetx.client.web.client.application.Dict.COPY_DATA_SETS_MESSAGE;
-import static ch.systemsx.cisd.openbis.plugin.phosphonetx.client.web.client.application.Dict.COPY_DATA_SETS_TITLE;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Set;
-
-import com.extjs.gxt.ui.client.widget.Dialog;
-import com.extjs.gxt.ui.client.widget.button.Button;
-import com.extjs.gxt.ui.client.widget.grid.GridCellRenderer;
+import com.google.gwt.user.client.rpc.AsyncCallback;
 
 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.VoidAsyncCallback;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.BaseEntityModel;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.EntityGridModelFactory;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.columns.framework.IColumnDefinitionKind;
-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.ColumnDefsAndConfigs;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IBrowserGridActionInvoker;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.ICellListener;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.GenericTableBrowserGrid;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IDisposableComponent;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.AbstractDataConfirmationDialog;
-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.ResultSetWithEntityTypes;
+import ch.systemsx.cisd.openbis.generic.client.web.client.dto.GenericTableResultSet;
+import ch.systemsx.cisd.openbis.generic.client.web.client.dto.IResultSetConfig;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.TableExportCriteria;
-import ch.systemsx.cisd.openbis.generic.shared.basic.IColumnDefinition;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.BasicEntityType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityType;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityTypePropertyType;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.PropertyType;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind.ObjectKind;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.GenericTableRow;
 import ch.systemsx.cisd.openbis.plugin.phosphonetx.client.web.client.IPhosphoNetXClientServiceAsync;
-import ch.systemsx.cisd.openbis.plugin.phosphonetx.client.web.client.application.columns.RawDataSampleColDefKind;
 
 /**
  * @author Franz-Josef Elmer
  */
-class RawDataSampleGrid extends AbstractSimpleBrowserGrid<Sample>
+class RawDataSampleGrid extends GenericTableBrowserGrid
 {
-    private static final class CopyConfirmationDialog extends
-            AbstractDataConfirmationDialog<List<Sample>>
-    {
-        private final IViewContext<IPhosphoNetXClientServiceAsync> specificViewContext;
-        private final List<Sample> samples;
-
-        private CopyConfirmationDialog(IViewContext<IPhosphoNetXClientServiceAsync> specificViewContext,
-                List<Sample> samples, String title)
-        {
-            super(specificViewContext, samples, title);
-            this.specificViewContext = specificViewContext;
-            this.samples = samples;
-        }
-
-        @Override
-        protected String createMessage()
-        {
-            String list = "[";
-            String delim = "";
-            for (Sample sample : samples)
-            {
-                list += delim + sample.getCode();
-                delim = ", ";
-            }
-            list += "]";
-            return specificViewContext.getMessage(COPY_DATA_SETS_MESSAGE, list);
-        }
-
-        @Override
-        protected void executeConfirmedAction()
-        {
-            long[] rawDataSampleIDs = new long[samples.size()];
-            for (int i = 0; i < samples.size(); i++)
-            {
-                rawDataSampleIDs[i] = samples.get(i).getId();
-            }
-            specificViewContext.getService().copyRawData(rawDataSampleIDs,
-                    new VoidAsyncCallback<Void>(specificViewContext));
-        }
-
-        @Override
-        protected void extendForm()
-        {
-        }
-    }
-
-    public static final String BROWSER_ID =
-            GenericConstants.ID_PREFIX + "raw-data-sample-browser";
+    public static final String BROWSER_ID = GenericConstants.ID_PREFIX + "raw_data_sample_browser";
 
     public static final String GRID_ID = BROWSER_ID + "-grid";
 
@@ -123,103 +48,24 @@ class RawDataSampleGrid extends AbstractSimpleBrowserGrid<Sample>
 
     private final IViewContext<IPhosphoNetXClientServiceAsync> specificViewContext;
     
-    private Set<BasicEntityType> shownEntityTypesOrNull;
-   
     RawDataSampleGrid(IViewContext<IPhosphoNetXClientServiceAsync> viewContext)
     {
-        super(viewContext.getCommonViewContext(), BROWSER_ID, GRID_ID, true,
+        super(viewContext.getCommonViewContext(), BROWSER_ID, GRID_ID, true, true,
                 PhosphoNetXDisplayTypeIDGenerator.RAW_DATA_SAMPLE_BROWSER_GRID);
         specificViewContext = viewContext;
         allowMultipleSelection();
-        registerLinkClickListenerFor(RawDataSampleColDefKind.CODE.id(), new ICellListener<Sample>()
-            {
-                public void handle(Sample rowItem)
-                {
-                    showEntityViewer(rowItem, false);
-                }
-            });
-        addEntityOperationsLabel();
-        Button uploadButton =
-                new Button(viewContext.getMessage(COPY_DATA_SETS_BUTTON_LABEL),
-                        new AbstractCreateDialogListener()
-                            {
-                                @Override
-                                protected Dialog createDialog(List<Sample> samples,
-                                        IBrowserGridActionInvoker invoker)
-                                {
-                                    return new CopyConfirmationDialog(specificViewContext, samples,
-                                            specificViewContext.getMessage(COPY_DATA_SETS_TITLE));
-                                }
-                            });
-        addButton(uploadButton);
-    }
 
-    @Override
-    protected IColumnDefinitionKind<Sample>[] getStaticColumnsDefinition()
-    {
-        return RawDataSampleColDefKind.values();
-    }
-    
-    @Override
-    protected ColumnDefsAndConfigs<Sample> createColumnsDefinition()
-    {
-        IColumnDefinitionKind<Sample>[] columnsDefinition = getStaticColumnsDefinition();
-        EntityGridModelFactory<Sample> factory = new EntityGridModelFactory<Sample>(columnsDefinition);
-        ArrayList<PropertyType> propertyTypes = new ArrayList<PropertyType>();
-        if (shownEntityTypesOrNull != null)
-        {
-            for (BasicEntityType type : shownEntityTypesOrNull)
-            {
-                if (type instanceof EntityType)
-                {
-                    EntityType entityType = (EntityType) type;
-                    List<? extends EntityTypePropertyType<?>> etpts = entityType.getAssignedPropertyTypes();
-                    for (EntityTypePropertyType<?> entityTypePropertyType : etpts)
-                    {
-                        propertyTypes.add(entityTypePropertyType.getPropertyType());
-                    }
-                }
-            }
-        }
-        System.out.println(shownEntityTypesOrNull + " " + propertyTypes);
-        ColumnDefsAndConfigs<Sample> schema = factory.createColumnsSchema(viewContext, propertyTypes);
-        GridCellRenderer<BaseEntityModel<?>> linkCellRenderer = createInternalLinkCellRenderer();
-        schema.setGridCellRendererFor(RawDataSampleColDefKind.CODE.id(), linkCellRenderer);
-        return schema;
     }
-    
-    @Override
-    protected List<IColumnDefinition<Sample>> getInitialFilters()
-    {
-        return asColumnFilters(new RawDataSampleColDefKind[] {RawDataSampleColDefKind.CODE});
-    }
-    
+
     @Override
-    protected void listEntities(DefaultResultSetConfig<String, Sample> resultSetConfig,
-            final AbstractAsyncCallback<ResultSet<Sample>> callback)
+    protected void listTableRows(IResultSetConfig<String, GenericTableRow> resultSetConfig,
+            AsyncCallback<GenericTableResultSet> callback)
     {
-        AbstractAsyncCallback<ResultSetWithEntityTypes<Sample>> extendedCallback =
-            new AbstractAsyncCallback<ResultSetWithEntityTypes<Sample>>(viewContext)
-                {
-                    @Override
-                    protected void process(ResultSetWithEntityTypes<Sample> result)
-                    {
-                        shownEntityTypesOrNull = result.getAvailableEntityTypes();
-                        callback.onSuccess(result.getResultSet());
-//                        refreshColumnsSettingsIfNecessary();
-                    }
-
-                    @Override
-                    public void finishOnFailure(Throwable caught)
-                    {
-                        callback.finishOnFailure(caught);
-                    }
-                };
-        specificViewContext.getService().listRawDataSamples(resultSetConfig, extendedCallback);
+        specificViewContext.getService().listRawDataSamples(resultSetConfig, callback);
     }
 
     @Override
-    protected void prepareExportEntities(TableExportCriteria<Sample> exportCriteria,
+    protected void prepareExportEntities(TableExportCriteria<GenericTableRow> exportCriteria,
             AbstractAsyncCallback<String> callback)
     {
         specificViewContext.getService().prepareExportRawDataSamples(exportCriteria, callback);
@@ -227,16 +73,7 @@ class RawDataSampleGrid extends AbstractSimpleBrowserGrid<Sample>
 
     public DatabaseModificationKind[] getRelevantModifications()
     {
-        return new DatabaseModificationKind[]
-            { createOrDelete(ObjectKind.SAMPLE_TYPE), edit(ObjectKind.SAMPLE_TYPE),
-                    createOrDelete(ObjectKind.GROUP),
-                    createOrDelete(ObjectKind.PROPERTY_TYPE_ASSIGNMENT),
-                    edit(ObjectKind.PROPERTY_TYPE_ASSIGNMENT) };
-    }
-
-    @Override
-    protected void showEntityViewer(Sample entity, boolean editMode)
-    {
-        showEntityInformationHolderViewer(entity, editMode);
+        return new DatabaseModificationKind[] {};
     }
+    
 }
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/public/phosphonetx-dictionary.js b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/public/phosphonetx-dictionary.js
index 9c8e3e50ea26a954327903346bcbbdd1ecda1554..ac8ee59a99fc58910da39925f3ebdc1dd2f9ad97 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/public/phosphonetx-dictionary.js
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/public/phosphonetx-dictionary.js
@@ -40,8 +40,9 @@ var phosphonetx = {
   
   ALL_RAW_DATA_SAMPLES_menu_item: "All MS INJECTION Samples",  
   ALL_RAW_DATA_SAMPLES_tab_label: "MS INJECTION Samples and Related Biological Samples",  
-  ms_injection_sample_code: "MS INJECTION Sample",
-  biological_sample_identifier: "Biological Sample",
+  openbis_raw_data_sample_browser_CODE: "MS INJECTION Sample",
+  openbis_raw_data_sample_browser_REGISTRATION_DATE: "Regustration Date",
+  openbis_raw_data_sample_browser_PARENT: "Biological Sample",
   copy_data_sets_button_label: "Copy Data Sets",
   copy_data_sets_title: "Copy Data Sets Confirmation",
   copy_data_sets_message: "Do you want to make the data sets of the samples {0} available for processing?", 
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/server/PhosphoNetXClientService.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/server/PhosphoNetXClientService.java
index 75e3d1843aede398fd7601580ff79f7efae3d73d..a78874bc47f07f5d537ab00f9df64a79ba66ad7c 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/server/PhosphoNetXClientService.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/server/PhosphoNetXClientService.java
@@ -24,15 +24,15 @@ import org.springframework.stereotype.Component;
 
 import ch.systemsx.cisd.common.exceptions.UserFailureException;
 import ch.systemsx.cisd.common.servlet.IRequestContextProvider;
+import ch.systemsx.cisd.openbis.generic.client.web.client.dto.GenericTableResultSet;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.IResultSetConfig;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ResultSet;
-import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ResultSetWithEntityTypes;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.TableExportCriteria;
 import ch.systemsx.cisd.openbis.generic.client.web.server.AbstractClientService;
 import ch.systemsx.cisd.openbis.generic.client.web.server.translator.UserFailureExceptionTranslator;
 import ch.systemsx.cisd.openbis.generic.shared.IServer;
 import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.GenericTableRow;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Vocabulary;
 import ch.systemsx.cisd.openbis.plugin.phosphonetx.client.web.client.IPhosphoNetXClientService;
 import ch.systemsx.cisd.openbis.plugin.phosphonetx.client.web.client.dto.ListProteinByExperimentAndReferenceCriteria;
@@ -186,19 +186,21 @@ public class PhosphoNetXClientService extends AbstractClientService implements
         return prepareExportEntities(exportCriteria);
     }
 
-    public ResultSetWithEntityTypes<Sample> listRawDataSamples(IResultSetConfig<String, Sample> criteria)
+    public GenericTableResultSet listRawDataSamples(IResultSetConfig<String, GenericTableRow> criteria)
             throws ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException
     {
         final String sessionToken = getSessionToken();
-        return listEntitiesWithTypes(criteria, new RawDataSampleProvider(rawDataService, sessionToken));
+        RawDataSampleProvider rawDataSampleProvider = new RawDataSampleProvider(rawDataService, sessionToken);
+        ResultSet<GenericTableRow> resultSet = listEntities(criteria, rawDataSampleProvider);
+        return new GenericTableResultSet(resultSet, rawDataSampleProvider.getHeaders());
     }
 
-    public String prepareExportRawDataSamples(TableExportCriteria<Sample> exportCriteria)
+    public String prepareExportRawDataSamples(TableExportCriteria<GenericTableRow> exportCriteria)
             throws ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException
     {
         return prepareExportEntities(exportCriteria);
     }
-
+    
     public void copyRawData(long[] rawDataSampleIDs)
             throws ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException
     {
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/server/RawDataSampleProvider.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/server/RawDataSampleProvider.java
index 11cabcd2c10cdccc99c31ae91efebd9775549a64..bafc24a09dd65b77e0ba5048b73961a8a629ae6c 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/server/RawDataSampleProvider.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/server/RawDataSampleProvider.java
@@ -16,11 +16,28 @@
 
 package ch.systemsx.cisd.openbis.plugin.phosphonetx.client.web.server;
 
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Date;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeMap;
 
 import ch.systemsx.cisd.common.exceptions.UserFailureException;
 import ch.systemsx.cisd.openbis.generic.client.web.server.resultset.IOriginalDataProvider;
+import ch.systemsx.cisd.openbis.generic.client.web.server.util.DataTypeUtils;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataTypeCode;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DateTableCell;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.GenericTableColumnHeader;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.GenericTableRow;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityProperty;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ISerializableComparable;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IntegerTableCell;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.PropertyType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.StringTableCell;
 import ch.systemsx.cisd.openbis.plugin.phosphonetx.shared.IRawDataServiceInternal;
 
 /**
@@ -28,8 +45,138 @@ import ch.systemsx.cisd.openbis.plugin.phosphonetx.shared.IRawDataServiceInterna
  *
  * @author Franz-Josef Elmer
  */
-class RawDataSampleProvider implements IOriginalDataProvider<Sample>
+class RawDataSampleProvider implements IOriginalDataProvider<GenericTableRow>
 {
+    private static final class Column
+    {
+        private final List<ISerializableComparable> values = new ArrayList<ISerializableComparable>();
+        private final GenericTableColumnHeader header;
+
+        Column(GenericTableColumnHeader header)
+        {
+            this.header = header;
+        }
+        
+        GenericTableColumnHeader getHeader()
+        {
+            return header;
+        }
+        
+        List<ISerializableComparable> getValues()
+        {
+            return values;
+        }
+        
+        void add(int index, ISerializableComparable value)
+        {
+            while (values.size() < index)
+            {
+                values.add(null);
+            }
+            values.add(value);
+        }
+        
+        void addNumber(int index, Long number)
+        {
+            add(index, new IntegerTableCell(number));
+        }
+        
+        void addString(int index, String string)
+        {
+            add(index, new StringTableCell(string));
+        }
+        
+        void addDate(int index, Date date)
+        {
+            add(index, new DateTableCell(date));
+        }
+
+        void addPrefixToColumnHeaderCodes(String prefix)
+        {
+            header.setCode(prefix + header.getCode());
+        }
+
+        void setIndex(int index)
+        {
+            header.setIndex(index);
+        }
+    }
+    
+    private static final class PropertyColumns
+    {
+        private final Map<String, Column> columns = new TreeMap<String, Column>();
+        
+        void add(int index, IEntityProperty property)
+        {
+            PropertyType propertyType = property.getPropertyType();
+            DataTypeCode dataType = propertyType.getDataType().getCode();
+            String key = propertyType.getCode();
+            Column column = columns.get(key);
+            if (column == null)
+            {
+                GenericTableColumnHeader header = new GenericTableColumnHeader();
+                header.setCode(key);
+                header.setIndex(columns.size());
+                header.setTitle(propertyType.getLabel());
+                header.setType(dataType);
+                column = new Column(header);
+                columns.put(key, column);
+            }
+            column.add(index, DataTypeUtils.convertTo(dataType, property.getValue()));
+        }
+        
+        Set<String> getColumnCodes()
+        {
+            return columns.keySet();
+        }
+
+        void addPrefixToColumnHeaderCodes(String prefix)
+        {
+            for (Map.Entry<String, Column> entry : columns.entrySet())
+            {
+                entry.getValue().addPrefixToColumnHeaderCodes(prefix);
+            }
+        }
+
+        int reindexColumns(int startIndex)
+        {
+            int index = startIndex;
+            for (Map.Entry<String, Column> entry : columns.entrySet())
+            {
+                entry.getValue().setIndex(index++);
+            }
+            return index;
+        }
+
+        Collection<? extends Column> getColumns()
+        {
+            return columns.values();
+        }
+    }
+    
+    private static final class ColumnsWithIDColumn
+    {
+        private final List<Column> columns;
+        private final Column idColumn;
+
+        public ColumnsWithIDColumn(List<Column> columns, Column idColumn)
+        {
+            this.columns = columns;
+            this.idColumn = idColumn;
+        }
+
+        public List<Column> getColumns()
+        {
+            return columns;
+        }
+
+        public Column getIdColumn()
+        {
+            return idColumn;
+        }
+        
+    }
+    
     private final IRawDataServiceInternal service;
     private final String sessionToken;
 
@@ -39,10 +186,80 @@ class RawDataSampleProvider implements IOriginalDataProvider<Sample>
         this.sessionToken = sessionToken;
     }
     
-    public List<Sample> getOriginalData() throws UserFailureException
+    public List<GenericTableRow> getOriginalData() throws UserFailureException
+    {
+        ColumnsWithIDColumn columnsWithIDColumn = getColumns();
+        List<Column> columns = columnsWithIDColumn.getColumns();
+        int numberOfRows = columns.get(0).getValues().size();
+        List<GenericTableRow> result = new ArrayList<GenericTableRow>(numberOfRows);
+        for(int i = 0; i < numberOfRows; i++)
+        {
+            ISerializableComparable[] row = new ISerializableComparable[columns.size()];
+            for (int j = 0; j < row.length; j++)
+            {
+                Column column = columns.get(j);
+                List<ISerializableComparable> values = column.getValues();
+                row[j] = i < values.size() ? values.get(i) : null;
+            }
+            result.add(new GenericTableRow(row));
+        }
+        return result;
+    }
+    
+    public List<GenericTableColumnHeader> getHeaders()
+    {
+        List<Column> columns = getColumns().getColumns();
+        List<GenericTableColumnHeader> headers = new ArrayList<GenericTableColumnHeader>(columns.size());
+        for (Column column : columns)
+        {
+            headers.add(column.getHeader());
+        }
+        return headers;
+    }
+
+    private ColumnsWithIDColumn getColumns()
     {
         List<Sample> samples = service.listRawDataSamples(sessionToken);
-        return samples;
+        Column idColumn = new Column(GenericTableColumnHeader.untitledStringHeader(0, "ID"));
+        Column codeColumn = new Column(GenericTableColumnHeader.untitledStringHeader(0, "CODE"));
+        Column dateColumn = new Column(GenericTableColumnHeader.untitledStringHeader(1, "REGISTRATION_DATE"));
+        Column parentColumn = new Column(GenericTableColumnHeader.untitledStringHeader(2, "PARENT"));
+        List<Column> columns = new ArrayList<Column>();
+        columns.add(codeColumn);
+        columns.add(dateColumn);
+        columns.add(parentColumn);
+        int fixedColumns = columns.size();
+        PropertyColumns samplePropertyColumns = new PropertyColumns();
+        PropertyColumns parentPropertyColumns = new PropertyColumns();
+        for (int i = 0; i < samples.size(); i++)
+        {
+            Sample sample = samples.get(i);
+            idColumn.addNumber(i, sample.getId());
+            codeColumn.addString(i, sample.getCode());
+            dateColumn.addDate(i, sample.getRegistrationDate());
+            parentColumn.addString(i, sample.getGeneratedFrom().getIdentifier());
+            addPropertyTypes(samplePropertyColumns, i, sample);
+            addPropertyTypes(parentPropertyColumns, i, sample.getGeneratedFrom());
+        }
+        int nextIndex = samplePropertyColumns.reindexColumns(fixedColumns);
+        parentPropertyColumns.reindexColumns(nextIndex);
+        HashSet<String> commonColumns = new HashSet<String>(samplePropertyColumns.getColumnCodes());
+        commonColumns.retainAll(parentPropertyColumns.getColumnCodes());
+        if (commonColumns.isEmpty() == false)
+        {
+            parentPropertyColumns.addPrefixToColumnHeaderCodes("BIO_");
+        }
+        columns.addAll(samplePropertyColumns.getColumns());
+        columns.addAll(parentPropertyColumns.getColumns());
+        return new ColumnsWithIDColumn(columns, idColumn);
+    }
+
+    private void addPropertyTypes(PropertyColumns columns, int index, Sample sample)
+    {
+        for (IEntityProperty property : sample.getProperties())
+        {
+            columns.add(index, property);
+        }
     }
 
 }
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/RawDataServiceInternal.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/RawDataServiceInternal.java
index 9480b1c67f0b53b01e35bd609665383efd16a5ed..3f9cca5ce6ae1bb18be42b280430b49b842edf49 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/RawDataServiceInternal.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/RawDataServiceInternal.java
@@ -135,7 +135,9 @@ public class RawDataServiceInternal extends AbstractServer<IRawDataServiceIntern
         criteria.setSampleType(SampleTypeTranslator.translate(sampleTypePE, null));
         criteria.setIncludeGroup(true);
         criteria.setGroupCode(GROUP_CODE);
-        return sampleLister.list(new ListOrSearchSampleCriteria(criteria));
+        ListOrSearchSampleCriteria criteria2 = new ListOrSearchSampleCriteria(criteria);
+        criteria2.setEnrichDependentSamplesWithProperties(true);
+        return sampleLister.list(criteria2);
     }
     
     private String findDataStoreServer()