diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/TypedTableGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/TypedTableGrid.java
index ddb920006e0c72ca6c961fd90206e0b2a5d961aa..ba7f1a5320f916e93aea7afeefc10b1a9ea7cb6e 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/TypedTableGrid.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/TypedTableGrid.java
@@ -39,6 +39,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IC
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.listener.OpenEntityDetailsTabHelper;
 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.ResultSetFetchConfig.ResultSetFetchMode;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.TypedTableResultSet;
 import ch.systemsx.cisd.openbis.generic.shared.basic.GridRowModel;
 import ch.systemsx.cisd.openbis.generic.shared.basic.IColumnDefinition;
@@ -116,7 +117,7 @@ public abstract class TypedTableGrid<T extends ISerializable>
             new HashMap<String, ICellListenerAndLinkGenerator<T>>();
 
     private List<TableModelColumnHeader> headers;
-    
+
     private List<IColumnDefinitionUI<TableModelRowWithObject<T>>> columnUIDefinitions;
 
     private String downloadURL;
@@ -205,7 +206,7 @@ public abstract class TypedTableGrid<T extends ISerializable>
         if (columnUIDefinitions == null)
         {
             List<IColumnDefinitionUI<TableModelRowWithObject<T>>> list =
-                new ArrayList<IColumnDefinitionUI<TableModelRowWithObject<T>>>();
+                    new ArrayList<IColumnDefinitionUI<TableModelRowWithObject<T>>>();
             if (headers != null)
             {
                 String sessionID = viewContext.getModel().getSessionContext().getSessionID();
@@ -215,12 +216,12 @@ public abstract class TypedTableGrid<T extends ISerializable>
                     if (title == null)
                     {
                         title =
-                            viewContext
-                            .getMessage(translateColumnIdToDictionaryKey(header.getId()));
+                                viewContext.getMessage(translateColumnIdToDictionaryKey(header
+                                        .getId()));
                     }
                     // support for links in queries
                     ICellListenerAndLinkGenerator<T> linkGeneratorOrNull =
-                        listenerLinkGenerators.get(header.getId());
+                            listenerLinkGenerators.get(header.getId());
                     final EntityKind entityKind = header.tryGetEntityKind();
                     if (linkGeneratorOrNull == null && entityKind != null)
                     {
@@ -229,8 +230,8 @@ public abstract class TypedTableGrid<T extends ISerializable>
                     }
                     //
                     TypedTableGridColumnDefinitionUI<T> definition =
-                        new TypedTableGridColumnDefinitionUI<T>(header, title, downloadURL,
-                                sessionID, linkGeneratorOrNull);
+                            new TypedTableGridColumnDefinitionUI<T>(header, title, downloadURL,
+                                    sessionID, linkGeneratorOrNull);
                     definition.setHidden(list.size() > MAX_SHOWN_COLUMNS);
                     list.add(definition);
                 }
@@ -262,9 +263,13 @@ public abstract class TypedTableGrid<T extends ISerializable>
                         @Override
                         protected void process(TypedTableResultSet<T> result)
                         {
-                            headers = result.getResultSet().getList().getColumnHeaders();
-                            columnUIDefinitions = null;
-                            recreateColumnModelAndRefreshColumnsWithFilters();
+                            // don't need to recreate columns when paging or filtering
+                            if (resultSetConfig.getCacheConfig().getMode() != ResultSetFetchMode.FETCH_FROM_CACHE)
+                            {
+                                headers = result.getResultSet().getList().getColumnHeaders();
+                                columnUIDefinitions = null;
+                                recreateColumnModelAndRefreshColumnsWithFilters();
+                            }
                             callback.onSuccess(result.getResultSet());
                         }