diff --git a/controllers/toolbox.py b/controllers/toolbox.py
new file mode 100644
index 0000000000000000000000000000000000000000..90d6d410d5823409e3258bbfddcaa4326e808c72
--- /dev/null
+++ b/controllers/toolbox.py
@@ -0,0 +1,17 @@
+""" Collection of tools to help debugging, .... 
+
+"""
+
+def fill_categories():
+    """Fill the categories table with a large number of data.
+    Usefull to test the buffered render.
+    
+    """
+    data = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', \
+            'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y']
+    
+    for i in range(1, (1000/len(data))+1):
+        for el in data:
+            s = el*i
+            print s
+            db.categories[0] = dict(code=s, definition=s.lower())
diff --git a/models/widgets_grids.py b/models/widgets_grids.py
index 9f65e4bbd8054f7247aedd8c47bef7b9da61ae16..048c63edaa6023d1af7b58c9e0fab5a468f6f22c 100644
--- a/models/widgets_grids.py
+++ b/models/widgets_grids.py
@@ -17,7 +17,7 @@ dbui.configure_grids(db, plugins=['pGridRowEditorConfirmDelete',
 #
 gridModifier = dbui.GridModifier('categories')
 gridModifier.configure_column('code', width=10)
-gridModifier.set_rownumbering(False)
+gridModifier.set_rownumbering(True)
 
 gridModifier.append_filter(('code', 'contains', T('bla bla...')))
 gridModifier.set_filters(plugins=['pFormToolTip'],
diff --git a/models/widgets_stores.py b/models/widgets_stores.py
index 45b9989ae8a0ac008307cf9f2fdaebb38e1b0ec7..65e22065cab1116d2c4ce035c63773ed420b3114 100644
--- a/models/widgets_stores.py
+++ b/models/widgets_stores.py
@@ -5,7 +5,14 @@
 
 #-------------------------------------------------------------------------------
 #
-# teams
+# categories (buffered)
+#
+storeModifier = dbui.StoreModifier('categories')
+storeModifier.set_buffered()
+
+#-------------------------------------------------------------------------------
+#
+# teams (order by)
 #
 storeModifier = dbui.StoreModifier('teams')
 storeModifier.orderby(~db.teams.team)
diff --git a/models/widgets_viewport.py b/models/widgets_viewport.py
index 4fbcdd49fa2af386a5a4b3359b16e2b8a32e7ca5..29524f812a89e2748f90b963b3331819fefa270b 100644
--- a/models/widgets_viewport.py
+++ b/models/widgets_viewport.py
@@ -62,5 +62,6 @@ viewportModifier.append_plugins('pViewportLogin')
 viewportModifier.configure(logged=True);
 viewportModifier.add_node(helpNode, casNode, formNode, gridNode, reportNode)
 
+viewportModifier.default_node(T('Tables'), T('categories'))
+# viewportModifier.default_node(T('Tables'), T('new_fields'))
 # viewportModifier.default_node(T('Tables'), T('publications'))
-viewportModifier.default_node(T('Tables'), 'new_fields')
diff --git a/modules/plugin_dbui/gridmodifier.py b/modules/plugin_dbui/gridmodifier.py
index cf8839b3ca69f3852f7b98819f4a03291785d612..560f69b233e23896d6d8019296a328dab0c89d2c 100644
--- a/modules/plugin_dbui/gridmodifier.py
+++ b/modules/plugin_dbui/gridmodifier.py
@@ -80,7 +80,9 @@ class GridModifier(Modifier):
         
         """
         Modifier.__init__(self, MODIFIER_GRIDS, tablename)
-        
+
+        self._tablename = tablename
+                
         if 'configure_columns' not in self.data:
             self.data.configure_columns = {}
             self.data.delete_columns = []
diff --git a/modules/plugin_dbui/storemodifier.py b/modules/plugin_dbui/storemodifier.py
index 3dca49f6d15ff24c827d2a2623bff8153083b3a2..b3d897ec69493d99c8771059e1badf9cfe3210cf 100644
--- a/modules/plugin_dbui/storemodifier.py
+++ b/modules/plugin_dbui/storemodifier.py
@@ -95,3 +95,37 @@ class StoreModifier(Modifier):
         
         """
         self.data.orderby.extend(fields)
+        
+    
+    def set_buffered(self, **kwargs):
+        """ The store is buffered. 
+        The method set the following configuration options:
+        
+            - autoLoad = False
+            - buffered = True
+            - pageSize = 25
+            - leadingBufferZone = 0
+            - trailingBufferZone = 0
+        
+        They can be overwritten using the keyword arguments.
+        
+        The grid buffering is activate when the store is buffered.
+        That means that only 5 pages are kept in the cache. Therefore
+        this is a good option to manipulate almost infinite set of data.
+        
+        @param kwargs: Any configuration parameter of the C{Ext.data.Store}.
+        Those related to the buffering are C{buffered}, C{clearOnPaqgeLoad},
+        C{leadingBufferZone}, C{pageSize}, C{purgePageCount} 
+        and C{trailingBufferZone}. 
+        
+        """
+        di = dict(autoLoad=False,
+                  buffered=True,
+                  pageSize=25,
+                  leadingBufferZone=0,
+                  trailingBufferZone=0)
+        
+        di.update(kwargs)
+        
+        self.configure(**di)
+        
\ No newline at end of file
diff --git a/static/plugin_dbui/src/grid.js b/static/plugin_dbui/src/grid.js
index 7d87f94157c0384c763327074fe4319b47dff466..5c00950514f12f1c1d9e1dd857604ec29283114f 100644
--- a/static/plugin_dbui/src/grid.js
+++ b/static/plugin_dbui/src/grid.js
@@ -44,14 +44,18 @@ Ext.define('App.grid.Grid', {
         // initialise the base class
         this.callParent(arguments);
 
-        // load the store if not yet done
-        // if the grid paging is used load only the first 10 rows
-        if (!this.store.getTotalCount()) {
-            if (App.isPlugin(this, 'pGridPaging')) {
-                this.store.load({params: {start: 0, limit: this.nRows}});
-            } else {
-                this.store.load();
-            }
+        // consistency check
+        if (this.store.buffered) {
+            this.store.getProxy().pageParam = 'page';
+        }
+
+        // load the first page when the buffering is on
+        if (this.findPlugin('bufferedrenderer')) {
+            this.store.loadPage(1);
+
+        // load the full data set
+        } else if (!this.store.getTotalCount()) {
+            this.store.load();
         }
     },