diff --git includes/view.inc includes/view.inc
index 96e2e8b..a8fe5a0 100644
--- includes/view.inc
+++ includes/view.inc
@@ -32,8 +32,10 @@ class view extends views_db_object {
   // Where the results of a query will go.
   var $result = array();
 
-  // May be used to override the current page number.
+  // May be used to override the current pager info.
   var $current_page = NULL;
+  var $items_per_page = NULL;
+  var $offset = NULL;
 
   // Places to put attached renderings:
   var $attachment_before = '';
@@ -115,10 +117,12 @@ class view extends views_db_object {
    * Set the items per page on the pager.
    */
   function set_items_per_page($items_per_page) {
-    if (empty($this->query->pager)) {
-      $this->query->init_pager($this);
+    $this->items_per_page = $items_per_page;
+
+    // If the pager is already initialized, pass it through to the pager.
+    if (!empty($this->query->pager)) {
+      $this->query->pager->set_items_per_page($items_per_page);
     }
-    $this->query->pager->set_items_per_page($items_per_page);
   }
 
   /**
@@ -131,6 +135,18 @@ class view extends views_db_object {
   }
 
   /**
+   * Set the offset on the pager.
+   */
+  function set_offset($offset) {
+    $this->offset = $offset;
+
+    // If the pager is already initialized, pass it through to the pager.
+    if (!empty($this->query->pager)) {
+      $this->query->pager->set_offset($offset);
+    }
+  }
+
+  /**
    * Whether or not AJAX should be used. If AJAX is used, paging,
    * tablesorting and exposed filters will be fetched via an AJAX call
    * rather than a page refresh.
@@ -329,6 +345,32 @@ class view extends views_db_object {
   }
 
   /**
+   * Initialize the pager
+   *
+   * Like style initialization, pager initialization is held until late
+   * to allow for overrides.
+   */
+  function init_pager() {
+    if (empty($this->query->pager)) {
+      $this->query->pager = $this->display_handler->get_plugin('pager');
+
+      if ($this->query->pager->use_pager()) {
+        $this->query->pager->set_current_page($this->current_page);
+      }
+
+      // These overrides may have been set earlier via $view->set_*
+      // functions.
+      if (isset($this->items_per_page)) {
+        $this->query->pager->set_items_per_page($this->items_per_page);
+      }
+
+      if (isset($this->offset)) {
+        $this->query->pager->set_offset($this->offset);
+      }
+    }
+  }
+
+  /**
    * Create a list of base tables eligible for this view. Used primarily
    * for the UI. Display must be already initialized.
    */
diff --git plugins/views_plugin_pager.inc plugins/views_plugin_pager.inc
index aec5582..12f43e1 100644
--- plugins/views_plugin_pager.inc
+++ plugins/views_plugin_pager.inc
@@ -55,6 +55,13 @@ class views_plugin_pager extends views_plugin {
   }
 
   /**
+   * Set the page offset, or how many items to skip.
+   */
+  function set_offset($offset) {
+    $this->options['offset'] = $offset;
+  }
+
+  /**
    * Get the current page.
    *
    * If NULL, we do not know what the current page is.
diff --git plugins/views_plugin_query.inc plugins/views_plugin_query.inc
index baa1402..c9c93dd 100644
--- plugins/views_plugin_query.inc
+++ plugins/views_plugin_query.inc
@@ -76,14 +76,6 @@ class views_plugin_query extends views_plugin {
     $this->offset = $offset;
   }
 
-  function init_pager(&$view) {
-    // @todo -- probably this should be a method on the display rather than directly calling
-    // get plugin?
-    if (empty($this->pager)) {
-      $this->pager = $view->display_handler->get_plugin('pager');
-    }
-  }
-
   /**
    * Render the pager, if necessary.
    */
diff --git plugins/views_plugin_query_default.inc plugins/views_plugin_query_default.inc
index 082b928..ee90dc3 100644
--- plugins/views_plugin_query_default.inc
+++ plugins/views_plugin_query_default.inc
@@ -1031,10 +1031,7 @@ class views_plugin_query_default extends views_plugin_query{
    * Builds the necessary info to execute the query.
    */
   function build(&$view) {
-    $this->init_pager($view);
-    if ($this->pager->use_pager()) {
-      $this->pager->set_current_page($view->current_page);
-    }
+    $view->init_pager($view);
 
     // Let the pager modify the query to add limits.
     $this->pager->query();
