diff --git a/plugins/views_plugin_pager_full.inc b/plugins/views_plugin_pager_full.inc
index fe552c1..54fefe4 100644
--- a/plugins/views_plugin_pager_full.inc
+++ b/plugins/views_plugin_pager_full.inc
@@ -31,6 +31,8 @@ class views_plugin_pager_full extends views_plugin_pager {
         'items_per_page_options' => array('default' => '5, 10, 20, 40, 60'),
         'items_per_page_options_all' => array('default' => FALSE, 'bool' => TRUE),
         'items_per_page_options_all_label' => array('default' => '- All -', 'translatable' => TRUE),
+        'items_per_page_remember' => array('default' => FALSE, 'bool' => TRUE),
+        'offset_remember' => array('default' => FALSE, 'bool' => TRUE),
 
         'offset' => array('default' => FALSE, 'bool' => TRUE),
         'offset_label' => array('default' => 'Offset', 'translatable' => TRUE),
@@ -112,6 +114,15 @@ class views_plugin_pager_full extends views_plugin_pager {
       ),
     );
 
+    $form['expose']['items_per_page_remember'] = array(
+      '#type' => 'checkbox',
+      '#title' => t('Remember selected items per page'),
+      '#description' => t('Enable to remember the last selection made by the user.'),
+      '#default_value' => $this->options['expose']['items_per_page_remember'],
+      '#dependency' => array(
+        'edit-pager-options-expose-items-per-page' => array(1),
+      ),
+    );
 
     $form['expose']['items_per_page_options_all'] = array(
       '#type' => 'checkbox',
@@ -147,6 +158,16 @@ class views_plugin_pager_full extends views_plugin_pager {
         'edit-pager-options-expose-offset' => array(1)
       ),
     );
+
+    $form['expose']['offset_remember'] = array(
+      '#type' => 'checkbox',
+      '#title' => t('Remember selected offset'),
+      '#description' => t('Enable to remember the last selection made by the user.'),
+      '#default_value' => $this->options['expose']['offset_remember'],
+      '#dependency' => array(
+        'edit-pager-options-expose-offset' => array(1),
+      ),
+    );
   }
 
   function options_validate(&$form, &$form_state) {
@@ -197,8 +218,10 @@ class views_plugin_pager_full extends views_plugin_pager {
       }
     }
 
+    $this->get_exposed_input();
     $limit = $this->options['items_per_page'];
     $offset = $this->current_page * $this->options['items_per_page'] + $this->options['offset'];
+
     if (!empty($this->options['total_pages'])) {
       if ($this->current_page >= $this->options['total_pages']) {
         $limit = $this->options['items_per_page'];
@@ -317,6 +340,7 @@ class views_plugin_pager_full extends views_plugin_pager {
 
   function exposed_form_alter(&$form, &$form_state) {
     if ($this->items_per_page_exposed()) {
+      $this->get_exposed_input();
       $options = explode(',', $this->options['expose']['items_per_page_options']);
       $sanitized_options = array();
       if (is_array($options)) {
@@ -336,6 +360,7 @@ class views_plugin_pager_full extends views_plugin_pager {
     }
 
     if ($this->offset_exposed()) {
+      $this->get_exposed_input();
       $form['offset'] = array(
         '#type' => 'textfield',
         '#size' => 10,
@@ -349,8 +374,57 @@ class views_plugin_pager_full extends views_plugin_pager {
   function exposed_form_validate(&$form, &$form_state) {
     if (!empty($form_state['values']['offset']) && trim($form_state['values']['offset'])) {
       if (!is_numeric($form_state['values']['offset']) || $form_state['values']['offset'] < 0) {
-        form_set_error('offset', t('Offset must be an number greather or equal than 0.'));
+        form_set_error('offset', t('Offset must be an number greater or equal than 0.'));
       }
     }
   }
+
+  /**
+   * Saves the stored input to the form state.
+   */
+  function exposed_form_submit(&$form, &$form_state, &$exclude) {
+    if (empty($this->options['expose']['offset_remember']) && empty($this->options['expose']['items_per_page_remember'])) {
+      return;
+    }
+
+    $display_id = $this->view->current_display;
+
+    if (!isset($_SESSION['views'][$this->view->name][$display_id])) {
+      $_SESSION['views'][$this->view->name][$display_id] = array();
+    }
+
+    $session = &$_SESSION['views'][$this->view->name][$display_id];
+
+    if ($this->items_per_page_exposed()) {
+      $session['expose']['items_per_page'] = $form_state['values']['items_per_page'];
+    }
+    if ($this->offset_exposed()) {
+      $session['expose']['offset'] = $form_state['values']['offset'];
+    }
+  }
+
+  /**
+   * Allows input from the exposed pager to change the behavior of the pager.
+   */
+  function get_exposed_input() {
+    if (empty($this->options['expose']['offset_remember']) && empty($this->options['expose']['items_per_page_remember'])) {
+      return FALSE;
+    }
+
+    $display_id = $this->view->current_display;
+
+    if (!isset($_SESSION['views'][$this->view->name][$display_id])) {
+      $_SESSION['views'][$this->view->name][$display_id] = array();
+    }
+
+    $session = &$_SESSION['views'][$this->view->name][$display_id];
+
+    if (!empty($session['expose']['items_per_page'])) {
+      $this->options['items_per_page'] = ($session['expose']['items_per_page'] != 'All') ? $session['expose']['items_per_page'] : 0;
+    }
+    if (!empty($session['expose']['offset'])) {
+      $this->options['offset'] = $session['expose']['offset'];
+    }
+    return TRUE;
+  }
 }
