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 7968626fd687b033652e03060d628373190e540f..63bdcca460f1e11451c5c79b5887dcccdc04e3f5 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
@@ -255,7 +255,7 @@ public abstract class AbstractBrowserGrid<T/* Entity */, M extends BaseEntityMod
         contentPanel.add(grid);
         contentPanel.setBottomComponent(bottomToolbars);
         contentPanel.setHeaderVisible(false);
-        filterToolbar.addListener(Events.AfterLayout, new Listener<BaseEvent>()
+        pagingToolbar.addListener(Events.AfterLayout, new Listener<BaseEvent>()
             {
                 public void handleEvent(BaseEvent be)
                 {
@@ -279,10 +279,9 @@ public abstract class AbstractBrowserGrid<T/* Entity */, M extends BaseEntityMod
         add(contentPanel);
 
         addRefreshDisplaySettingsListener();
-        pagingLoader.addLoadListener(new LoadListener());
+        pagingLoader.addLoadListener(new LoadListener()); // TODO why do we need this?
         if (viewContext.isLoggingEnabled())
         {
-            prepareLoggingBetweenEvents(contentPanel, EventPair.RENDER);
             prepareLoggingBetweenEvents(this, EventPair.LAYOUT);
             prepareLoggingBetweenEvents(grid, EventPair.LAYOUT);
             prepareLoggingBetweenEvents(contentPanel, EventPair.LAYOUT);
@@ -614,10 +613,11 @@ public abstract class AbstractBrowserGrid<T/* Entity */, M extends BaseEntityMod
                 new ListEntitiesCallback(viewContext, callback, resultSetConfig);
 
         listEntities(resultSetConfig, listCallback);
+
+        // TODO it is a bit faster for small tables to add this after data are loaded
         if (bottomToolbars.getItemCount() == 0)
         {
-            int addLogID = log("add bottom tool bars");
-            bottomToolbars.add(filterToolbar, new RowData(1, -1));
+            int addLogID = log("add bottom toolbars");
             bottomToolbars.add(pagingToolbar, new RowData(1, -1));
             bottomToolbars.layout(true);
             viewContext.logStop(addLogID);
@@ -856,6 +856,15 @@ public abstract class AbstractBrowserGrid<T/* Entity */, M extends BaseEntityMod
                 {
                     delegate.configureColumnSettings();
                 }
+
+                public void showFilters()
+                {
+                    int logId = log("adding filters");
+                    bottomToolbars.insert(filterToolbar, 0);
+                    bottomToolbars.layout();
+                    // TODO filterToolbar.setApplyFiltersAction(createApplyFiltersDelagator());
+                    viewContext.logStop(logId);
+                }
             };
     }
 
@@ -1109,6 +1118,8 @@ public abstract class AbstractBrowserGrid<T/* Entity */, M extends BaseEntityMod
 
     protected final void recreateColumnModelAndRefreshColumnsWithFilters()
     {
+        int logId = log("recreateColumnModelAndRefreshColumnsWithFilters");
+
         ColumnDefsAndConfigs<T> defsAndConfigs = createColumnsDefinition();
         // add custom columns
         List<GridCustomColumnInfo> customColumnsMetadata =
@@ -1133,8 +1144,10 @@ public abstract class AbstractBrowserGrid<T/* Entity */, M extends BaseEntityMod
 
         this.columnDefinitions = defsAndConfigs.getColumnDefs();
         ColumnModel columnModel = createColumnModel(defsAndConfigs.getColumnConfigs());
-
+      
         refreshColumnsAndFilters(columnModel);
+
+        viewContext.logStop(logId);
     }
 
     private static <T> List<IColumnDefinitionUI<T>> createCustomColumnDefinitions(
@@ -1188,7 +1201,9 @@ public abstract class AbstractBrowserGrid<T/* Entity */, M extends BaseEntityMod
 
     private void changeColumnModel(ColumnModel columnModel)
     {
+        int logId = log("grid reconfigure");
         grid.reconfigure(grid.getStore(), columnModel);
+        viewContext.logStop(logId);
         registerGridSettingsChangesListener();
     }
 
@@ -1293,6 +1308,7 @@ public abstract class AbstractBrowserGrid<T/* Entity */, M extends BaseEntityMod
                     }
 
                     updateDefaultRefreshButton();
+
                     if (wasSuccessful)
                     {
                         pagingToolbar.updateDefaultConfigButton(true);
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/IBrowserGridActionInvoker.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/IBrowserGridActionInvoker.java
index ed068d5005c8babf0d2870b5a78018386e5fe940..4a84f35a2a84dec94bd12e43c5236507461a0c3b 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/IBrowserGridActionInvoker.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/IBrowserGridActionInvoker.java
@@ -8,6 +8,8 @@ public interface IBrowserGridActionInvoker
     void export();
 
     void refresh();
-    
+
     void configure();
+
+    void showFilters();
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/expressions/filter/FilterToolbar.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/expressions/filter/FilterToolbar.java
index 38c93728bf4b71f99d356e425819b003b198c9eb..694eb5b19390ae060bcb6a19b5a93c8700547a63 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/expressions/filter/FilterToolbar.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/expressions/filter/FilterToolbar.java
@@ -311,7 +311,7 @@ public class FilterToolbar<T> extends ToolBar implements IDatabaseModificationOb
 
     private void apply()
     {
-        if (disableApply == false)
+        if (disableApply == false) // FIXME don't do this after first render
         {
             applyFiltersAction.execute();
         }