diff --git a/plugins/views_plugin_pager_full.inc b/plugins/views_plugin_pager_full.inc
index 6c7b096..53b865e 100644
--- a/plugins/views_plugin_pager_full.inc
+++ b/plugins/views_plugin_pager_full.inc
@@ -168,17 +168,18 @@ class views_plugin_pager_full extends views_plugin_pager {
   }
 
   function query() {
+    $exposed_input =& $this->view->exposed_input;
     if ($this->items_per_page_exposed()) {
-      if (!empty($_GET['items_per_page']) && $_GET['items_per_page'] > 0) {
-        $this->options['items_per_page'] = $_GET['items_per_page'];
+      if (!empty($exposed_input['items_per_page']) && $exposed_input['items_per_page'] > 0) {
+        $this->options['items_per_page'] = $exposed_input['items_per_page'];
       }
-      elseif (!empty($_GET['items_per_page']) && $_GET['items_per_page'] == 'All' && $this->options['expose']['items_per_page_options_all']) {
+      elseif (!empty($exposed_input['items_per_page']) && $exposed_input['items_per_page'] == 'All' && $this->options['expose']['items_per_page_options_all']) {
         $this->options['items_per_page'] = 0;
       }
     }
     if ($this->offset_exposed()) {
-      if (isset($_GET['offset']) && $_GET['offset'] >= 0) {
-        $this->options['offset'] = $_GET['offset'];
+      if (isset($exposed_input['offset']) && $exposed_input['offset'] >= 0) {
+        $this->options['offset'] = $exposed_input['offset'];
       }
     }
 
diff --git a/tests/views_pager.test b/tests/views_pager.test
index 9c3cf3e..a456e37 100644
--- a/tests/views_pager.test
+++ b/tests/views_pager.test
@@ -19,6 +19,8 @@ class ViewsPagerTest extends DrupalWebTestCase {
   }
 
   /**
+   * Test the storage of pager settings.
+   *
    * Pagers was sometimes not stored.
    *
    * @see http://drupal.org/node/652712
@@ -91,30 +93,10 @@ class ViewsPagerTest extends DrupalWebTestCase {
 
   }
 
-  public function viewsStorePagerSettings() {
-    $view = new view;
-    $view->name = 'test_store_pager_settings';
-    $view->description = '';
-    $view->tag = '';
-    $view->view_php = '';
-    $view->base_table = 'node';
-    $view->is_cacheable = FALSE;
-    $view->api_version = 3;
-    $view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */
-
-    /* Display: Master */
-    $handler = $view->new_display('default', 'Master', 'default');
-    $handler->display->display_options['access']['type'] = 'none';
-    $handler->display->display_options['cache']['type'] = 'none';
-    $handler->display->display_options['exposed_form']['type'] = 'basic';
-    $handler->display->display_options['pager']['type'] = 'none';
-    $handler->display->display_options['style_plugin'] = 'default';
-    $handler->display->display_options['row_plugin'] = 'node';
-    return $view;
-  }
-
   /**
-   * Test the none-pager-query.
+   * Test the none-pager-query plugin.
+   *
+   * @see views_plugin_pager_none
    */
   public function testNoLimit() {
     // Create 11 nodes and make sure that everyone is returned.
@@ -152,30 +134,10 @@ class ViewsPagerTest extends DrupalWebTestCase {
     $this->assertEqual($view->query->pager->get_items_per_page(), 0);
   }
 
-  public function viewsPagerNoLimit() {
-    $view = new view;
-    $view->name = 'test_pager_none';
-    $view->description = '';
-    $view->tag = '';
-    $view->view_php = '';
-    $view->base_table = 'node';
-    $view->is_cacheable = FALSE;
-    $view->api_version =3;
-    $view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */
-
-    /* Display: Master */
-    $handler = $view->new_display('default', 'Master', 'default');
-    $handler->display->display_options['access']['type'] = 'none';
-    $handler->display->display_options['cache']['type'] = 'none';
-    $handler->display->display_options['exposed_form']['type'] = 'basic';
-    $handler->display->display_options['pager']['type'] = 'none';
-    $handler->display->display_options['style_plugin'] = 'default';
-    $handler->display->display_options['row_plugin'] = 'node';
-    return $view;
-  }
-
   /**
    * Test the some pager plugin.
+   *
+   * @see views_plugin_pager_some
    */
   public function testLimit() {
     // Create 11 nodes and make sure that everyone is returned.
@@ -210,32 +172,10 @@ class ViewsPagerTest extends DrupalWebTestCase {
     $this->assertFalse($view->query->pager->use_count_query());
   }
 
-  public function viewsPagerLimit() {
-    $view = new view;
-    $view->name = 'test_pager_some';
-    $view->description = '';
-    $view->tag = '';
-    $view->view_php = '';
-    $view->base_table = 'node';
-    $view->is_cacheable = FALSE;
-    $view->api_version = 3;
-    $view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */
-
-    /* Display: Master */
-    $handler = $view->new_display('default', 'Master', 'default');
-    $handler->display->display_options['access']['type'] = 'none';
-    $handler->display->display_options['cache']['type'] = 'none';
-    $handler->display->display_options['exposed_form']['type'] = 'basic';
-    $handler->display->display_options['pager']['type'] = 'some';
-    $handler->display->display_options['pager']['options']['offset'] = 0;
-    $handler->display->display_options['pager']['options']['items_per_page'] = 5;
-    $handler->display->display_options['style_plugin'] = 'default';
-    $handler->display->display_options['row_plugin'] = 'node';
-    return $view;
-  }
-
   /**
    * Test the normal pager.
+   *
+   * @see views_plugin_pager_full
    */
   public function testNormalPager() {
     // Create 11 nodes and make sure that everyone is returned.
@@ -297,6 +237,162 @@ class ViewsPagerTest extends DrupalWebTestCase {
     $this->assertEqual(count($view->result), 11);
   }
 
+  /**
+   * Test the minipager.
+   *
+   * @see views_plugin_pager_mini
+   */
+  public function testMiniPager() {
+    // the functionality is the same as the normal pager, so i don't know what to test here.
+  }
+
+  /**
+   * Test rendering with NULL pager.
+   *
+   * @see views_plugin_pager_none
+   */
+  public function testRenderNullPager() {
+    // Create 11 nodes and make sure that everyone is returned.
+    // We create 11 nodes, because the default pager plugin had 10 items per page.
+    for ($i = 0; $i < 11; $i++) {
+      $this->drupalCreateNode();
+    }
+    $view = $this->viewsPagerFullFields();
+    $view->set_display('default');
+    $view->execute();
+    $view->use_ajax = TRUE; // force the value again here
+    $view->query->pager = NULL;
+    $output = $view->render();
+    $this->assertEqual(preg_match('/<ul class="pager">/', $output), 0, t('The pager is not rendered.'));
+  }
+
+  /**
+   * Test the exposed pager plugin feature.
+   *
+   * @see views_plugin_pager_full::exposed_form_submit
+   */
+  public function testExposedPager() {
+    // Create 11 nodes and make sure that everyone is returned.
+    // We create 11 nodes, because the default pager plugin had 10 items per page.
+    for ($i = 0; $i < 11; $i++) {
+      $this->drupalCreateNode();
+    }
+    $view = $this->viewExposedPager();
+    $view->save();
+    drupal_static_reset();
+
+
+    $admin_user = $this->drupalCreateUser(array('administer views', 'administer site configuration'));
+    $this->drupalLogin($admin_user);
+
+    $this->drupalGet('test-exposed-pager');
+    // Just check that the options are exposed.
+    $this->assertFieldById('edit-items-per-page', t('Take sure that the items per page option is exposed'));
+    $this->assertFieldById('edit-offset', t('Take sure that the offset option is exposed.'));
+
+    // Test the items per page input.
+    $view = views_get_view('test_exposed_pager');
+    foreach (array(1, 2, 3, 5, 8, 13, 21, 'All') as $option) {
+      $input = array();
+      $input['items_per_page'] = $option;
+      $view->set_exposed_input($input);
+      $view->pre_execute();
+      $view->execute('default');
+
+      if ($option != 'All') {
+        $this->assertEqual($option, $view->get_items_per_page());
+      }
+      $this->assertEqual(count($view->result), $option > 11 ? 11 : $option);
+
+      $view->destroy();
+    }
+
+    // Test the offset input
+    $input = array();
+    $input['items_per_page'] = 8;
+    $input['offset'] = 2;
+    $view->set_exposed_input($input);
+    $view->pre_execute();
+    $view->execute();
+    $this->assertEqual(count($view->result), 8);
+    $this->assertEqual($view->get_offset(), 2);
+    $this->assertEqual($view->get_items_per_page(), 8);
+  }
+
+  /**
+   * The views which are used in the code.
+   */
+
+  public function viewsStorePagerSettings() {
+    $view = new view;
+    $view->name = 'test_store_pager_settings';
+    $view->description = '';
+    $view->tag = '';
+    $view->view_php = '';
+    $view->base_table = 'node';
+    $view->is_cacheable = FALSE;
+    $view->api_version = 3;
+    $view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */
+
+    /* Display: Master */
+    $handler = $view->new_display('default', 'Master', 'default');
+    $handler->display->display_options['access']['type'] = 'none';
+    $handler->display->display_options['cache']['type'] = 'none';
+    $handler->display->display_options['exposed_form']['type'] = 'basic';
+    $handler->display->display_options['pager']['type'] = 'none';
+    $handler->display->display_options['style_plugin'] = 'default';
+    $handler->display->display_options['row_plugin'] = 'node';
+    return $view;
+  }
+
+
+  public function viewsPagerNoLimit() {
+    $view = new view;
+    $view->name = 'test_pager_none';
+    $view->description = '';
+    $view->tag = '';
+    $view->view_php = '';
+    $view->base_table = 'node';
+    $view->is_cacheable = FALSE;
+    $view->api_version = 3;
+    $view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */
+
+    /* Display: Master */
+    $handler = $view->new_display('default', 'Master', 'default');
+    $handler->display->display_options['access']['type'] = 'none';
+    $handler->display->display_options['cache']['type'] = 'none';
+    $handler->display->display_options['exposed_form']['type'] = 'basic';
+    $handler->display->display_options['pager']['type'] = 'none';
+    $handler->display->display_options['style_plugin'] = 'default';
+    $handler->display->display_options['row_plugin'] = 'node';
+    return $view;
+  }
+
+
+  public function viewsPagerLimit() {
+    $view = new view;
+    $view->name = 'test_pager_some';
+    $view->description = '';
+    $view->tag = '';
+    $view->view_php = '';
+    $view->base_table = 'node';
+    $view->is_cacheable = FALSE;
+    $view->api_version = 3;
+    $view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */
+
+    /* Display: Master */
+    $handler = $view->new_display('default', 'Master', 'default');
+    $handler->display->display_options['access']['type'] = 'none';
+    $handler->display->display_options['cache']['type'] = 'none';
+    $handler->display->display_options['exposed_form']['type'] = 'basic';
+    $handler->display->display_options['pager']['type'] = 'some';
+    $handler->display->display_options['pager']['options']['offset'] = 0;
+    $handler->display->display_options['pager']['options']['items_per_page'] = 5;
+    $handler->display->display_options['style_plugin'] = 'default';
+    $handler->display->display_options['row_plugin'] = 'node';
+    return $view;
+  }
+
   function viewPagerFullZeroItemsPerPage() {
     $view = new view;
     $view->name = 'view_pager_full_zero_items_per_page';
@@ -401,28 +497,56 @@ class ViewsPagerTest extends DrupalWebTestCase {
     return $view;
   }
 
-  /**
-   * Test the minipager.
-   */
-  public function testMiniPager() {
-    // the functionality is the same as the normal pager, so i don't know what to test here.
-  }
 
-  /**
-   * Test rendering with NULL pager.
-   */
-  public function testRenderNullPager() {
-    // Create 11 nodes and make sure that everyone is returned.
-    // We create 11 nodes, because the default pager plugin had 10 items per page.
-    for ($i = 0; $i < 11; $i++) {
-      $this->drupalCreateNode();
-    }
-    $view = $this->viewsPagerFullFields();
-    $view->set_display('default');
-    $view->execute();
-    $view->use_ajax = TRUE; // force the value again here
-    $view->query->pager = NULL;
-    $output = $view->render();
-    $this->assertEqual(preg_match('/<ul class="pager">/', $output), 0, t('The pager is not rendered.'));
+  public function viewExposedPager() {
+    $view = new view;
+    $view->name = 'test_exposed_pager';
+    $view->description = '';
+    $view->tag = 'default';
+    $view->base_table = 'node';
+    $view->human_name = 'test_exposed_pager';
+    $view->core = 7;
+    $view->api_version = '3.0';
+    $view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */
+
+    /* Display: Master */
+    $handler = $view->new_display('default', 'Master', 'default');
+    $handler->display->display_options['title'] = 'test_exposed_pager';
+    $handler->display->display_options['access']['type'] = 'perm';
+    $handler->display->display_options['cache']['type'] = 'none';
+    $handler->display->display_options['query']['type'] = 'views_query';
+    $handler->display->display_options['query']['options']['query_comment'] = FALSE;
+    $handler->display->display_options['exposed_form']['type'] = 'basic';
+    $handler->display->display_options['pager']['type'] = 'full';
+    $handler->display->display_options['pager']['options']['items_per_page'] = '10';
+    $handler->display->display_options['pager']['options']['offset'] = '0';
+    $handler->display->display_options['pager']['options']['id'] = '0';
+    $handler->display->display_options['pager']['options']['expose']['items_per_page'] = TRUE;
+    $handler->display->display_options['pager']['options']['expose']['items_per_page_options'] = '1, 1, 2, 3, 5, 8, 13, 21';
+    $handler->display->display_options['pager']['options']['expose']['items_per_page_options_all'] = 1;
+    $handler->display->display_options['pager']['options']['expose']['offset'] = TRUE;
+    $handler->display->display_options['style_plugin'] = 'default';
+    $handler->display->display_options['row_plugin'] = 'node';
+    /* Field: Content: Title */
+    $handler->display->display_options['fields']['title']['id'] = 'title';
+    $handler->display->display_options['fields']['title']['table'] = 'node';
+    $handler->display->display_options['fields']['title']['field'] = 'title';
+    $handler->display->display_options['fields']['title']['label'] = '';
+    $handler->display->display_options['fields']['title']['alter']['alter_text'] = 0;
+    $handler->display->display_options['fields']['title']['alter']['make_link'] = 0;
+    $handler->display->display_options['fields']['title']['alter']['absolute'] = 0;
+    $handler->display->display_options['fields']['title']['alter']['word_boundary'] = 0;
+    $handler->display->display_options['fields']['title']['alter']['ellipsis'] = 0;
+    $handler->display->display_options['fields']['title']['alter']['strip_tags'] = 0;
+    $handler->display->display_options['fields']['title']['alter']['trim'] = 0;
+    $handler->display->display_options['fields']['title']['alter']['html'] = 0;
+    $handler->display->display_options['fields']['title']['hide_empty'] = 0;
+    $handler->display->display_options['fields']['title']['empty_zero'] = 0;
+    $handler->display->display_options['fields']['title']['link_to_node'] = 1;
+
+    /* Display: Page */
+    $handler = $view->new_display('page', 'Page', 'page');
+    $handler->display->display_options['path'] = 'test-exposed-pager';
+    return $view;
   }
 }
