diff --git a/includes/pager.inc b/includes/pager.inc
index c060d0e..f589e2e 100644
--- a/includes/pager.inc
+++ b/includes/pager.inc
@@ -607,8 +607,11 @@ function theme_pager_link($variables) {
   if (count($parameters)) {
     $query = drupal_get_query_parameters($parameters, array());
   }
-  if ($query_pager = pager_get_query_parameters()) {
-    $query = array_merge($query, $query_pager);
+  // Merge the query parameters passed to this function with the parameters
+  // from the current request. In case of collision, the parameters passed
+  // into this function take precedence.
+  if ($current_request_query = pager_get_query_parameters()) {
+    $query = array_merge($current_request_query, $query);
   }
 
   // Set each pager link title
diff --git a/modules/simpletest/tests/pager.test b/modules/simpletest/tests/pager.test
index 6e8ce8e..eb118c2 100644
--- a/modules/simpletest/tests/pager.test
+++ b/modules/simpletest/tests/pager.test
@@ -20,7 +20,7 @@ class PagerFunctionalWebTestCase extends DrupalWebTestCase {
   }
 
   function setUp() {
-    parent::setUp(array('dblog'));
+    parent::setUp(array('dblog', 'pager_test'));
 
     // Insert 300 log messages.
     for ($i = 0; $i < 300; $i++) {
@@ -55,6 +55,25 @@ class PagerFunctionalWebTestCase extends DrupalWebTestCase {
     $this->assertPagerItems($current_page);
   }
 
+   /**
+   * Test proper functioning of the query parameters.
+   */
+  function testPagerQueryParameters() {
+    // First page.
+    $this->drupalGet('pager-test/query-parameters');
+    $this->assertText(t('Pager calls: 0'), 'Initial call to pager shows 0 calls.');
+
+    // Go to last page, the count of pager calls need to go to 1.
+    $elements = $this->xpath('//li[contains(@class, :class)]/a', array(':class' => 'pager-last'));
+    $this->drupalGet($GLOBALS['base_root'] . $elements[0]['href'], array('external' => TRUE));
+    $this->assertText(t('Pager calls: 1'), 'First link call to pager shows 1 calls.');
+
+    // Go back to first page, the count of pager calls need to go to 2.
+    $elements = $this->xpath('//li[contains(@class, :class)]/a', array(':class' => 'pager-first'));
+    $this->drupalGet($GLOBALS['base_root'] . $elements[0]['href'], array('external' => TRUE));
+    $this->assertText(t('Pager calls: 2'), 'Second link call to pager shows 2 calls.');
+  }
+
   /**
    * Asserts pager items and links.
    *
diff --git a/modules/simpletest/tests/pager_test.info b/modules/simpletest/tests/pager_test.info
new file mode 100644
index 0000000..c77bff8
--- /dev/null
+++ b/modules/simpletest/tests/pager_test.info
@@ -0,0 +1,6 @@
+name = "Pager Test"
+description = "Support module for pager tests."
+package = Testing
+version = VERSION
+core = 7.x
+hidden = TRUE
diff --git a/modules/simpletest/tests/pager_test.module b/modules/simpletest/tests/pager_test.module
new file mode 100644
index 0000000..d5b879f
--- /dev/null
+++ b/modules/simpletest/tests/pager_test.module
@@ -0,0 +1,59 @@
+<?php
+
+/**
+ * Implements hook_menu().
+ */
+function pager_test_menu() {
+  $items['pager-test/query-parameters'] = array(
+    'title' => 'Pager using query parameters for testing',
+    'page callback' => 'error_test_query_parameters',
+    'access callback' => TRUE,
+    'type' => MENU_CALLBACK,
+  );
+
+  return $items;
+}
+
+/**
+ * Menu callback; returns a pager with 'parameters' variable.
+ */
+function error_test_query_parameters() {
+  // Example query.
+  $header_0 = array(
+    array('data' => 'wid'),
+    array('data' => 'type'),
+    array('data' => 'timestamp'),
+  );
+  $query_0 = db_select('watchdog', 'd')->extend('PagerDefault')->element(0);
+  $query_0->fields('d', array('wid', 'type', 'timestamp'));
+  $result_0 = $query_0
+    ->limit(5)
+    ->orderBy('d.wid')
+    ->execute();
+  $rows_0 = array();
+  foreach ($result_0 as $row) {
+   $rows_0[] = array('data' => (array) $row);
+  }
+  $build['pager_table_0'] = array(
+    '#theme' => 'table',
+    '#header' => $header_0,
+    '#rows' => $rows_0,
+    '#empty' => t("There are no watchdog records found in the db"),
+  );
+
+  // Counter of calls to the current pager.
+  $query_params = pager_get_query_parameters();
+  $pager_calls = isset($query_params['pager_calls']) ? ($query_params['pager_calls'] ? $query_params['pager_calls'] : 0) : 0;
+  $build['l_pager_pager_0'] = array('#markup' => t('Pager calls: @pager_calls', array('@pager_calls' => $pager_calls)));
+
+  // Pager.
+  $build['pager_pager_0'] = array(
+    '#theme' => 'pager',
+    '#element' => 0,
+    '#parameters' => array(
+      'pager_calls' => ++$pager_calls,
+    ),
+  );
+
+  return $build;
+}
