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 76bffdd96e15bcd2c02cee54f3709897d49376f7..69b782205be6f280b7b6b6432499b2db9f9d8d14 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
@@ -173,6 +173,9 @@ public abstract class AbstractBrowserGrid<T/* Entity */, M extends BaseEntityMod
 
     private static final int PAGE_SIZE = 50;
 
+    // set to true to see some useful debugging messages
+    private static final boolean DEBUG = false;
+
     private final PagingLoader<PagingLoadConfig> pagingLoader;
 
     private final ContentPanel contentPanel;
@@ -446,6 +449,7 @@ public abstract class AbstractBrowserGrid<T/* Entity */, M extends BaseEntityMod
 
                 public void dispose()
                 {
+                    debug("dispose a tab");
                     self.disposeCache();
                 }
 
@@ -499,6 +503,7 @@ public abstract class AbstractBrowserGrid<T/* Entity */, M extends BaseEntityMod
                     DefaultResultSetConfig<String, T> resultSetConfig =
                             createPagingConfig(loadConfig, columnDefinitions, appliedFilters,
                                     resultSetKey, tryGetCustomFilter(), getGridDisplayTypeID());
+                    debug("create a refresh callback");
                     ListEntitiesCallback listCallback =
                             new ListEntitiesCallback(viewContext, callback, resultSetConfig);
                     listEntities(resultSetConfig, listCallback);
@@ -506,6 +511,15 @@ public abstract class AbstractBrowserGrid<T/* Entity */, M extends BaseEntityMod
             };
     }
 
+    private void debug(String msg)
+    {
+        if (DEBUG)
+        {
+	        String text = "[grid: " + getGridDisplayTypeID() + ", cache: " + resultSetKey + "] " + msg;
+            System.out.println(text);
+        }
+    }
+
     private CustomFilterInfo<T> tryGetCustomFilter()
     {
         return filterToolbar.tryGetCustomFilter();
@@ -934,6 +948,7 @@ public abstract class AbstractBrowserGrid<T/* Entity */, M extends BaseEntityMod
             String headerOrNull, boolean refreshColumnsDefinition)
     {
         pagingToolbar.updateDefaultRefreshButton(false);
+        debug("clean cache for refresh");
         disposeCache();
         this.refreshCallback = createRefreshCallback(externalRefreshCallbackOrNull);
         setHeader(headerOrNull);
@@ -1190,8 +1205,10 @@ public abstract class AbstractBrowserGrid<T/* Entity */, M extends BaseEntityMod
     {
         String oldResultSetKey = resultSetKey;
         resultSetKey = newResultSetKey;
+        debug("saving new cache key");
         if (oldResultSetKey != null && oldResultSetKey.equals(newResultSetKey) == false)
         {
+            debug("cleaning old cache " + oldResultSetKey);
             removeResultSet(oldResultSetKey);
         }
     }
@@ -1253,20 +1270,22 @@ public abstract class AbstractBrowserGrid<T/* Entity */, M extends BaseEntityMod
                             {
                                 recreateColumnModelAndRefreshColumnsWithFilters();
                             }
-
                             boolean filtersChanged =
                                     rebuildFiltersFromIds(getFilteredColumnIds(newColumnDataModels));
-                            // refresh the data - some filters may have been removed
-                            if (filtersChanged)
-                            {
-                                createApplyFiltersDelagator().execute();
-                            }
-
+                            
                             if (customColumnsChanged)
                             {
+                                debug("refreshing custom columns");
+                                // if filters refresh filters, so we can ignore filtersChanged state
                                 refresh();
                             } else
                             {
+                                if (filtersChanged)
+                                {
+		                            // refresh the data - some filters may have been removed
+                                    createApplyFiltersDelagator().execute();
+                                }
+                                debug("refreshing filters and columns settings");
 
                                 // settings will be automatically stored because of event handling
                                 refreshColumnsSettings();
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/CachedResultSetManager.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/CachedResultSetManager.java
index 45db83a1e6a2344fa70f017d838d1e177ec0e89c..ee718543efea2b12982c973e34cae8e89fae9ae6 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/CachedResultSetManager.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/CachedResultSetManager.java
@@ -287,18 +287,20 @@ public final class CachedResultSetManager<K> implements IResultSetManager<K>, Se
         K dataKey = resultConfig.getResultSetKey();
         if (dataKey == null)
         {
-            debug("Unknown result set key: retrieving the data.");
             dataKey = resultSetKeyProvider.createKey();
+            debug("Unknown result set key: retrieving the data with a new key " + dataKey);
             List<T> rows = dataProvider.getOriginalData();
             data = calculateCustomColumns(sessionToken, rows, resultConfig);
             results.put(dataKey, data);
         } else
         {
-            debug(String.format("Data for result set key '%s' already cached.", dataKey));
+            debug(String.format("Fetching the result from the specifed result set key '%s'.",
+                    dataKey));
             data = cast(results.get(dataKey));
             if (data == null)
             {
-                debug(String.format("Invalid result set key '%s'.", dataKey));
+                debug(String
+                        .format("Invalid result set key '%s'. This should not happen.", dataKey));
             }
         }
         assert data != null : "Unspecified data";