diff --git a/user/src/com/google/gwt/user/cellview/client/CellBrowser.java b/user/src/com/google/gwt/user/cellview/client/CellBrowser.java
index b5bbfe8..b6dd0292 100644
--- a/user/src/com/google/gwt/user/cellview/client/CellBrowser.java
+++ b/user/src/com/google/gwt/user/cellview/client/CellBrowser.java
@@ -57,6 +57,7 @@
 import com.google.gwt.user.client.ui.SplitLayoutPanel;
 import com.google.gwt.user.client.ui.Widget;
 import com.google.gwt.view.client.HasData;
+import com.google.gwt.view.client.HasRows;
 import com.google.gwt.view.client.ProvidesKey;
 import com.google.gwt.view.client.SelectionModel;
 import com.google.gwt.view.client.TreeViewModel;
@@ -780,6 +781,24 @@
   }
 
   /**
+   * Pager factory used to create pagers for each {@link CellList} of the
+   * {@link CellBrowser}.
+   */
+  public static interface PagerFactory {
+    AbstractPager create(HasRows display);
+  }
+
+  /**
+   * Default pager.
+   */
+  private static class PageSizePagerFactory implements PagerFactory {
+    @Override
+    public AbstractPager create(HasRows display) {
+      return new PageSizePager(display.getVisibleRange().getLength());
+    }
+  }
+
+  /**
    * Builder object to create CellBrowser.
    *
    * @param <T> the type of data in the root node
@@ -788,6 +807,8 @@
     private final TreeViewModel viewModel;
     private final T rootValue;
     private Widget loadingIndicator;
+    private PagerFactory pagerFactory = new PageSizePagerFactory();
+    private Integer pageSize;
     private Resources resources;
 
     /**
@@ -822,6 +843,32 @@
     }
 
     /**
+     * Set the pager factory used to create pagers for each {@link CellList}.
+     * Defaults to {@link PageSizePagerFactory} if not set.
+     *
+     * Can be set to null if no pager should be used. You should also set pageSize
+     * big enough to hold all your data then.
+     *
+     * @param factory the pager factory
+     * @return this
+     */
+    public Builder<T> pagerFactory(PagerFactory factory) {
+      this.pagerFactory = factory;
+      return this;
+    }
+
+    /**
+     * Set the pager size for each {@link CellList}.
+     *
+     * @param pageSize the page size
+     * @return this
+     */
+    public Builder<T> pageSize(int pageSize) {
+      this.pageSize = pageSize;
+      return this;
+    }
+
+    /**
      * Set resources used for images.
      *
      * @param resources the {@link Resources} used for images
@@ -908,6 +955,16 @@
   private final SafeHtml openImageHtml;
 
   /**
+   * Factory used to create pagers for CellLists.
+   */
+  private final PagerFactory pagerFactory;
+
+  /**
+   * Page size for CellLists.
+   */
+  private final Integer pageSize;
+
+  /**
    * The element used to maintain the scrollbar when columns are removed.
    */
   private Element scrollLock;
@@ -954,6 +1011,8 @@
     this.style.ensureInjected();
     this.cellListResources = new CellListResourcesImpl(resources);
     this.loadingIndicator = builder.loadingIndicator;
+    this.pagerFactory = builder.pagerFactory;
+    this.pageSize = builder.pageSize;
     initWidget(new SplitLayoutPanel());
     getElement().getStyle().setOverflow(Overflow.AUTO);
     setStyleName(this.style.cellBrowserWidget());
@@ -1067,7 +1126,10 @@
    * @return the pager
    */
   protected <C> Widget createPager(HasData<C> display) {
-    PageSizePager pager = new PageSizePager(display.getVisibleRange().getLength());
+    if (pagerFactory == null) {
+      return null;
+    }
+    AbstractPager pager = pagerFactory.create(display);
     pager.setDisplay(display);
     return pager;
   }
@@ -1155,6 +1217,9 @@
     if (loadingIndicator != null) {
       display.setLoadingIndicator(loadingIndicator);
     }
+    if (pageSize != null) {
+      display.setPageSize(pageSize);
+    }
     display.setValueUpdater(nodeInfo.getValueUpdater());
 
     /*
