diff --git a/core/includes/pager.inc b/core/includes/pager.inc
index 4c497ba..6b4dff5 100644
--- a/core/includes/pager.inc
+++ b/core/includes/pager.inc
@@ -355,7 +355,12 @@ function theme_pager_link($variables) {
     $query = drupal_get_query_parameters($parameters, array());
   }
   if ($query_pager = pager_get_query_parameters()) {
-    $query = array_merge($query, $query_pager);
+    // $query_pager holds the query parameters of the current request; in
+    // case there are colliding parameter values coming from the $variables
+    // array, the latter should prevail. array_merge() overwrites $query_pager
+    // keys with $query keys, and returns the final merged $query array to be
+    // used for building the link.
+    $query = array_merge($query_pager, $query);
   }
 
   // Set each pager link title
diff --git a/core/modules/system/lib/Drupal/system/Tests/Pager/PagerQueryParametersTest.php b/core/modules/system/lib/Drupal/system/Tests/Pager/PagerQueryParametersTest.php
new file mode 100644
index 0000000..31f2be1
--- /dev/null
+++ b/core/modules/system/lib/Drupal/system/Tests/Pager/PagerQueryParametersTest.php
@@ -0,0 +1,71 @@
+<?php
+
+/**
+ * @file
+ * Contains Drupal\system\Tests\Pager\PagerQueryParametersTest.
+ */
+
+namespace Drupal\system\Tests\Pager;
+
+use Drupal\simpletest\WebTestBase;
+
+/**
+ * Tests pager query parameters.
+ */
+class PagerQueryParametersTest extends WebTestBase {
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = array(
+    'dblog',
+    'pager_test',
+  );
+
+  protected $profile = 'testing';
+
+  public static function getInfo() {
+    return array(
+      'name' => 'Pager query parameters functionality',
+      'description' => 'Tests pager query parameters.',
+      'group' => 'Pager',
+    );
+  }
+
+  function setUp() {
+    parent::setUp();
+
+    // Insert 300 log messages.
+    for ($i = 0; $i < 300; $i++) {
+      watchdog('pager_test', $this->randomString(), NULL, WATCHDOG_DEBUG);
+    }
+
+    $this->admin_user = $this->drupalCreateUser(array(
+      'access site reports',
+    ));
+    $this->drupalLogin($this->admin_user);
+  }
+
+  /**
+   * Test proper functioning of the query parameters.
+   */
+  function testPagerQueryParameters() {
+    // First page.
+    $this->drupalGet('pager-test/query-parameters');
+    $current_page = 0;
+    $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.');
+  }
+
+}
diff --git a/core/modules/system/tests/modules/pager_test/pager_test.info.yml b/core/modules/system/tests/modules/pager_test/pager_test.info.yml
new file mode 100644
index 0000000..7e721f4
--- /dev/null
+++ b/core/modules/system/tests/modules/pager_test/pager_test.info.yml
@@ -0,0 +1,6 @@
+name: 'Pager Test'
+description: 'Support module for Pager tests.'
+package: Testing
+version: VERSION
+core: 8.x
+hidden: true
diff --git a/core/modules/system/tests/modules/pager_test/pager_test.module b/core/modules/system/tests/modules/pager_test/pager_test.module
new file mode 100644
index 0000000..8774a8f
--- /dev/null
+++ b/core/modules/system/tests/modules/pager_test/pager_test.module
@@ -0,0 +1,67 @@
+<?php
+
+/**
+ * @file
+ * Helper module for Pager tests.
+ */
+
+/**
+ * Implements hook_menu().
+ */
+function pager_test_menu() {
+  $items['pager-test/query-parameters'] = array(
+    'title' => 'pager_test_query_parameters',
+    'page callback' => 'pager_test_query_parameters',
+    'access callback' => TRUE,
+    'type' => MENU_CALLBACK,
+  );
+  return $items;
+}
+
+/**
+ * Menu callback: Returns a pager with 'parameters' variable.
+ *
+ * The 'pager_calls' parameter counts the calls to the pager, subsequent
+ * to the initial call.
+ */
+function pager_test_query_parameters() {
+
+  // Example query.
+  $header_0 = array(
+    array('data' => 'wid'),
+    array('data' => 'type'),
+    array('data' => 'timestamp'),
+  );
+  $query_0 = db_select('watchdog', 'd')->extend('Drupal\Core\Database\Query\PagerSelectExtender')->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;
+}
