diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/model/BaseEntityModel.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/model/BaseEntityModel.java
index a8dab5b4c07ddadf1c403f2cf9ddeafc17b7ceeb..2305cf9c5379e2a3115c2022ca5761f67a725a69 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/model/BaseEntityModel.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/model/BaseEntityModel.java
@@ -28,6 +28,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.columns
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.columns.framework.CommonColumnDefinition;
 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.columns.framework.IColumnDefinitionUI;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.columns.specific.GridCustomColumnDefinition;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.ColumnDefsAndConfigs;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.MultilineHTML;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IMessageProvider;
@@ -58,11 +59,21 @@ public class BaseEntityModel<T> extends SimplifiedBaseModelData
     /** NOTE: it's assumed that columnDefinitions do not contain custom columns */
     public BaseEntityModel(final GridRowModel<T> entity,
             List<? extends IColumnDefinition<T>> columnDefinitions)
+    {
+        this(entity, columnDefinitions, false);
+    }
+    
+    public BaseEntityModel(final GridRowModel<T> entity,
+            List<? extends IColumnDefinition<T>> columnDefinitions, boolean ignoreCustomColumns)
     {
         set(ModelDataPropertyNames.OBJECT, entity.getOriginalObject());
 
         for (IColumnDefinition<T> column : columnDefinitions)
         {
+            if (ignoreCustomColumns && column instanceof GridCustomColumnDefinition)
+            {
+                continue;
+            }
             String value = renderColumnValue(entity, column);
             set(column.getIdentifier(), value);
             if (column instanceof IColumnDefinitionUI<?>)
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/ProteinByExperimentBrowserGrid.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/ProteinByExperimentBrowserGrid.java
index e9696fd11fe2acc4d7a247e4dfb5d415f3ad4dde..c03f9389143718ff190c66ff3a965e049154528b 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/ProteinByExperimentBrowserGrid.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/ProteinByExperimentBrowserGrid.java
@@ -87,6 +87,10 @@ class ProteinByExperimentBrowserGrid extends AbstractSimpleBrowserGrid<ProteinIn
 
     private List<AbundanceColumnDefinition> abundanceColumnDefinitions;
 
+    private boolean abundanceColumnDefinitionsChanged = true;
+
+    private ColumnDefsAndConfigs<ProteinInfo> columnDefinitionsAndConfigs;
+
     private IDataRefreshCallback postRefreshCallback = new IDataRefreshCallback()
         {
             public void postRefresh(boolean wasSuccessful)
@@ -182,6 +186,7 @@ class ProteinByExperimentBrowserGrid extends AbstractSimpleBrowserGrid<ProteinIn
         criteria.setTreatmentTypeCode(treatmentTypeCode);
         criteria.setAggregateOriginal(aggregateOriginal);
         abundanceColumnDefinitions = definitions;
+        abundanceColumnDefinitionsChanged  = true;
         refresh(postRefreshCallback, true);
     }
 
@@ -195,49 +200,53 @@ class ProteinByExperimentBrowserGrid extends AbstractSimpleBrowserGrid<ProteinIn
     {
         return ProteinColDefKind.values();
     }
-
+    
     @Override
     protected ColumnDefsAndConfigs<ProteinInfo> createColumnsDefinition()
     {
-        ColumnDefsAndConfigs<ProteinInfo> definitions = super.createColumnsDefinition();
-        List<IColumnDefinitionUI<ProteinInfo>> columns =
-                new ArrayList<IColumnDefinitionUI<ProteinInfo>>();
-        List<String> abundanceColumnIDs = new ArrayList<String>();
-        for (AbundanceColumnDefinition definition : abundanceColumnDefinitions)
+        if (columnDefinitionsAndConfigs == null || abundanceColumnDefinitionsChanged)
         {
-            String header = definition.getSampleCode();
-            Map<String, String> properties = new HashMap<String, String>();
-            properties.put(ABUNDANCE_PROPERTY_KEY, header);
-            List<Treatment> treatments = definition.getTreatments();
-            if (treatments.isEmpty() == false)
+            columnDefinitionsAndConfigs = super.createColumnsDefinition();
+            List<IColumnDefinitionUI<ProteinInfo>> columns =
+                new ArrayList<IColumnDefinitionUI<ProteinInfo>>();
+            List<String> abundanceColumnIDs = new ArrayList<String>();
+            for (AbundanceColumnDefinition definition : abundanceColumnDefinitions)
             {
-                header = "";
-                String delim = "";
-                for (Treatment treatment : treatments)
+                String header = definition.getSampleCode();
+                Map<String, String> properties = new HashMap<String, String>();
+                properties.put(ABUNDANCE_PROPERTY_KEY, header);
+                List<Treatment> treatments = definition.getTreatments();
+                if (treatments.isEmpty() == false)
                 {
-                    header += delim + treatment;
-                    delim = ", ";
-                    properties.put(treatment.getTypeCode(), treatment.getValue());
+                    header = "";
+                    String delim = "";
+                    for (Treatment treatment : treatments)
+                    {
+                        header += delim + treatment;
+                        delim = ", ";
+                        properties.put(treatment.getTypeCode(), treatment.getValue());
+                    }
                 }
-            }
-            final long sampleID = definition.getID();
-            IColumnDefinitionUI<ProteinInfo> columnDefinition =
+                final long sampleID = definition.getID();
+                IColumnDefinitionUI<ProteinInfo> columnDefinition =
                     new InternalAbundanceColumnDefinition(header, properties, 100, false, sampleID);
-            abundanceColumnIDs.add(columnDefinition.getIdentifier());
-            columns.add(columnDefinition);
-        }
-        definitions.addColumns(columns);
-        definitions.setGridCellRendererFor(ProteinColDefKind.ACCESSION_NUMBER.id(),
-                createInternalLinkCellRenderer());
-        RealNumberRenderer renderer =
+                abundanceColumnIDs.add(columnDefinition.getIdentifier());
+                columns.add(columnDefinition);
+            }
+            columnDefinitionsAndConfigs.addColumns(columns);
+            columnDefinitionsAndConfigs.setGridCellRendererFor(ProteinColDefKind.ACCESSION_NUMBER.id(),
+                    createInternalLinkCellRenderer());
+            RealNumberRenderer renderer =
                 new RealNumberRenderer(viewContext.getDisplaySettingsManager()
                         .getRealNumberFormatingParameters());
-        for (String abundanceColumneID : abundanceColumnIDs)
-        {
-            definitions.setGridCellRendererFor(abundanceColumneID, renderer);
+            for (String abundanceColumneID : abundanceColumnIDs)
+            {
+                columnDefinitionsAndConfigs.setGridCellRendererFor(abundanceColumneID, renderer);
+            }
+            columnDefinitionsAndConfigs.setGridCellRendererFor(ProteinColDefKind.COVERAGE.id(), renderer);
+            abundanceColumnDefinitionsChanged = false;
         }
-        definitions.setGridCellRendererFor(ProteinColDefKind.COVERAGE.id(), renderer);
-        return definitions;
+        return columnDefinitionsAndConfigs;
     }
 
     @Override
@@ -245,7 +254,7 @@ class ProteinByExperimentBrowserGrid extends AbstractSimpleBrowserGrid<ProteinIn
     {
         Set<IColumnDefinition<ProteinInfo>> columnDefs = createColumnsDefinition().getColumnDefs();
         return new BaseEntityModel<ProteinInfo>(entity,
-                new ArrayList<IColumnDefinition<ProteinInfo>>(columnDefs));
+                new ArrayList<IColumnDefinition<ProteinInfo>>(columnDefs), true);
     }
 
     @Override