diff --git a/core/includes/pager.inc b/core/includes/pager.inc
index 780ff6f..c3ce667 100644
--- a/core/includes/pager.inc
+++ b/core/includes/pager.inc
@@ -182,16 +182,6 @@ function template_preprocess_pager(&$variables) {
     return;
   }
 
-  // Fill in default link labels.
-  $tags = &$variables['tags'];
-  $tags += array(
-    t('« first'),
-    t('‹ previous'),
-    '',
-    t('next ›'),
-    t('last »'),
-  );
-
   // Calculate various markers within this pager piece:
   // Middle is used to "center" pages around the current page.
   $pager_middle = ceil($quantity / 2);
@@ -224,192 +214,63 @@ function template_preprocess_pager(&$variables) {
   $li_next = '';
   $li_last = '';
   $current_path = current_path();
-
-  // Create the "first" and "previous" links if we are not on the first page.
-  if ($pager_page_array[$element] > 0) {
-    $li_first = array(
-      '#type' => 'link',
-      '#title' => $tags[0],
-      '#href' => $current_path,
-      '#options' => array(
-        'query' => pager_query_add_page($parameters, $element, 0),
-        'attributes' => array(
-          'title' => t('Go to first page'),
-          'rel' => 'first',
-        ),
-        // Below is ignored by default, supplied to support hook_link_alter
-        // implementations.
-        'pager_context' => array(
-          'link_type' => 'first',
-          'element' => $element,
-        ),
-      ),
-    );
-    $li_previous = array(
-      '#type' => 'link',
-      '#title' => $tags[1],
-      '#href' => $current_path,
-      '#options' => array(
-        'query' => pager_query_add_page($parameters, $element, $pager_page_array[$element] - 1),
-        'attributes' => array(
-          'title' => t('Go to previous page'),
-          'rel' => 'prev',
-        ),
-        // Below is ignored by default, supplied to support hook_link_alter
-        // implementations.
-        'pager_context' => array(
-          'link_type' => 'previous',
-          'element' => $element,
-        ),
-      ),
-    );
-  }
-
-  // Create the "last" and "next" links if we are not on the last page.
-  if ($pager_page_array[$element] < ($pager_total[$element] - 1)) {
-    $li_next = array(
-      '#type' => 'link',
-      '#title' => $tags[3],
-      '#href' => $current_path,
-      '#options' => array(
-        'query' => pager_query_add_page($parameters, $element, $pager_page_array[$element] + 1),
-        'attributes' => array(
-          'title' => t('Go to next page'),
-          'rel' => 'next',
-        ),
-        // Below is ignored by default, supplied to support hook_link_alter
-        // implementations.
-        'pager_context' => array(
-          'link_type' => 'next',
-          'element' => $element,
-        ),
-      ),
-    );
-    $li_last = array(
-      '#type' => 'link',
-      '#title' => $tags[4],
-      '#href' => $current_path,
-      '#options' => array(
-        'query' => pager_query_add_page($parameters, $element, $pager_total[$element] - 1),
-        'attributes' => array(
-          'title' => t('Go to last page'),
-          'rel' => 'last',
-        ),
-        // Below is ignored by default, supplied to support hook_link_alter
-        // implementations.
-        'pager_context' => array(
-          'link_type' => 'last',
-          'element' => $element,
-        ),
-      ),
-    );
-  }
+  $ellipsis = array();
 
   if ($pager_total[$element] > 1) {
-    if ($li_first) {
-      $items[] = array(
-        '#wrapper_attributes' => array('class' => array('pager-first')),
-        'link' => $li_first,
-      );
-    }
-    if ($li_previous) {
-      $items[] = array(
-        '#wrapper_attributes' => array('class' => array('pager-previous')),
-        'link' => $li_previous,
-      );
+    // Create the "first" and "previous" links if we are not on the first page.
+    if ($pager_page_array[$element] > 0) {
+      $li_first = pager_query_add_page($parameters, $element, 0);
+      $li_previous = pager_query_add_page($parameters, $element, $pager_page_array[$element] - 1);
+      
+      if ($li_first) {
+        $items['first'] = true;
+      }
+      
+      if ($li_previous && isset($li_previous['page'])) {
+        $items['previous'] = $li_previous['page']; 
+      }
     }
 
     // When there is more than one page, create the pager list.
     if ($i != $pager_max) {
       // Check whether there are further previous pages.
       if ($i > 1) {
-        $items[] = array(
-          '#wrapper_attributes' => array('class' => array('pager-ellipsis')),
-          '#markup' => '…',
-        );
+        $ellipsis['prev'] = true;
       }
+      
       // Now generate the actual pager piece.
       for (; $i <= $pager_last && $i <= $pager_max; $i++) {
-        if ($i < $pager_current) {
-          $items[] = array(
-            '#wrapper_attributes' => array('class' => array('pager-item')),
-            'link' => array(
-              '#type' => 'link',
-              '#title' => $i,
-              '#href' => $current_path,
-              '#options' => array(
-                'query' => pager_query_add_page($parameters, $element, $i - 1),
-                'attributes' => array(
-                  'title' => t('Go to page @number', array('@number' => $i)),
-                ),
-                // Below is ignored by default, supplied to support hook_link_alter
-                // implementations.
-                'pager_context' => array(
-                  'link_type' => 'item',
-                  'element' => $element,
-                  'interval' => ($pager_current - $i),
-                ),
-              ),
-            ),
-          );
-        }
-        if ($i == $pager_current) {
-          $items[] = array(
-            '#wrapper_attributes' => array('class' => array('pager-current')),
-            '#markup' => $i,
-          );
-        }
-        if ($i > $pager_current) {
-          $items[] = array(
-            '#wrapper_attributes' => array('class' => array('pager-item')),
-            'link' => array(
-              '#type' => 'link',
-              '#title' => $i,
-              '#href' => $current_path,
-              '#options' => array(
-                'query' => pager_query_add_page($parameters, $element, $i - 1),
-                'attributes' => array(
-                  'title' => t('Go to page @number', array('@number' => $i)),
-                ),
-                // Below is ignored by default, supplied to support hook_link_alter
-                // implementations.
-                'pager_context' => array(
-                  'link_type' => 'item',
-                  'element' => $element,
-                  'interval' => ($i - $pager_current),
-                ),
-              ),
-            ),
-          );
+        $query = pager_query_add_page($parameters, $element, $i);
+        if (isset($query['page'])) {
+          $items['pages'][$i-1] = $query['page'];
         }
       }
+      
       // Check whether there are further next pages.
       if ($i < $pager_max) {
-        $items[] = array(
-          '#wrapper_attributes' => array('class' => array('pager-ellipsis')),
-          '#markup' => '…',
-        );
+        $ellipsis['next'] = true;
       }
     }
-    // End generation.
-    if ($li_next) {
-      $items[] = array(
-        '#wrapper_attributes' => array('class' => array('pager-next')),
-        'link' => $li_next,
-      );
-    }
-    if ($li_last) {
-      $items[] = array(
-        '#wrapper_attributes' => array('class' => array('pager-last')),
-        'link' => $li_last,
-      );
+        
+    // Create the "last" and "next" links if we are not on the last page.
+    if ($pager_page_array[$element] < ($pager_total[$element] - 1)) {
+      $li_next = pager_query_add_page($parameters, $element, $pager_page_array[$element] + 1);
+      $li_last = pager_query_add_page($parameters, $element, $pager_total[$element] - 1);
+      
+      // End generation.
+      if ($li_next) {
+        $items['next'] = $li_next['page'];
+      }
+      if ($li_last) {
+        $items['last'] = $li_last['page'];
+      }
     }
-
-    $variables['items'] = array(
-      '#theme' => 'item_list__pager',
-      '#items' => $items,
-      '#attributes' => array('class' => array('pager')),
-    );
+    
+    // If there is a better way to generate the URL, by all means go for it!
+    $variables['current_path'] = \Drupal::request()->getRequestUri();
+    $variables['pager_current'] = $pager_current; 
+    $variables['items'] = $items;
+    $variables['ellipsis'] = $ellipsis;
   }
 }
 
diff --git a/core/modules/system/templates/pager.html.twig b/core/modules/system/templates/pager.html.twig
index 47b20a7..127e21c 100644
--- a/core/modules/system/templates/pager.html.twig
+++ b/core/modules/system/templates/pager.html.twig
@@ -12,6 +12,37 @@
  */
 #}
 {% if items %}
-  <h2 class="visually-hidden">{{ 'Pages'|t }}</h2>
-  {{ items }}
+  <nav class="pager" role="navigation" aria-label="Pagination">
+    <h4 class="visually-hidden">{{ 'Pagination'|t }}</h4>
+    <ul class="pager__items">
+      {% if items.first %}
+        <li><a href="{{ current_path }}"><i class="icon icon--go-first" aria-hidden="true"></i><span class="visually-hidden">First page</span></a></li>
+      {% endif %}
+      {% if (items.previous or pager_current > 1) %}
+        <li><a href="{{ current_path }}?page={{ items.previous }}" rel="prev"><i class="icon icon--go-previous" aria-hidden="true"></i><span class="visually-hidden">Previous page</span></a></li>
+      {% endif %}
+      {% if ellipsis.prev %}
+        <li role="presentation"><i class="icon icon--ellipsis" aria-hidden="true"></i></li>
+      {% endif %}
+      
+      {% for key,item in items.pages %}
+        {% if item == pager_current %}
+          <li class="is-active"><a href="{{ current_path }}?page={{ key }}"></a><span class="visually-hidden">Current page </span>{{ item }}</span></li>
+        {% else %}
+          <li><a href="{{ current_path }}?page={{ key }}"><span class="visually-hidden">Page </span>{{ item }}</a></li>
+        {% endif %}
+      {% endfor %}
+      
+      {% if ellipsis.next %}
+        <li role="presentation"><i class="icon icon--ellipsis" aria-hidden="true"></i></li>
+      {% endif %}
+      {% if items.next %}
+        <li><a href="{{ current_path }}?page={{ items.next }}" rel="next"><i class="icon icon--go-next" aria-hidden="true"></i><span class="visually-hidden">Next page</span></a></li>
+      {% endif %}
+      {% if items.last %}
+        <li><a href="{{ current_path }}?page={{ items.last }}"><i class="icon icon--go-last" aria-hidden="true"></i><span class="visually-hidden">Last page</span></a></li>
+      {% endif %}
+    </ul>
+    
+  </nav>
 {% endif %}
diff --git a/core/themes/bartik/css/style.css b/core/themes/bartik/css/style.css
index 999c3ce..f984d39 100644
--- a/core/themes/bartik/css/style.css
+++ b/core/themes/bartik/css/style.css
@@ -129,7 +129,7 @@ body,
 ul.contextual-links,
 ul.links,
 ul.primary,
-.item-list .pager,
+.pager__items,
 div.field-type-taxonomy-term-reference,
 div.messages,
 div.meta,
@@ -276,25 +276,47 @@ table ul.links li {
   font-size: 0.923em;
   text-shadow: 0 0 0 !important;
 }
-.item-list .pager {
+nav.pager {
+  text-align: center;
+}
+.pager__items {
+  display: inline-block;
   font-size: 0.929em;
+  list-style: none;
 }
-.item-list .pager li {
+.pager__items li {
   padding: 10px 15px;
 }
-.item-list .pager a {
+.pager__items a {
   display: inline-block;
 }
-.item-list .pager li.pager-first,
-.item-list .pager li.pager-previous {
-  padding: 10px 10px 10px 0;
+.pager__items .is-active {
+  font-weight: 700;
+  padding: 10px 15px;
+}
+.pager__items .is-active a {
+  padding: 0;
+}
+.pager__items .icon {
+  border-bottom-width: 0;
+  color: #2a678c;
+  font-weight: 600;
+  font-style: normal;
+}
+.pager__items .icon--go-first:before {
+  content: "\00AB\00A0 first";
+}
+.pager__items .icon--go-previous:before {
+  content: "\003C\00A0 previous";
+}
+.pager__items .icon--ellipsis:before {
+  content: "...";
 }
-.item-list .pager li.pager-ellipsis {
-  padding: 10px 0;
+.pager__items .icon--go-next:after {
+  content: "next \00A0\003E";
 }
-.item-list .pager li.pager-last,
-.item-list .pager li.pager-next {
-  padding: 10px 0 10px 10px;
+.pager__items .icon--go-last:after {
+  content: "last \00A0\00BB";
 }
 ul.menu li {
   margin: 0;
@@ -1401,12 +1423,6 @@ input.form-submit:focus {
   margin-bottom: 2em;
 }
 
-/* Vertical Tabs Reset */
-ul.vertical-tabs-list {
-  margin: -1px 0 -1px -15em;
-  padding: 0;
-}
-
 /* Contact Form */
 .contact-form #edit-name {
   width: 75%;
diff --git a/core/themes/seven/style.css b/core/themes/seven/style.css
index 33b3eee..bf84af5 100644
--- a/core/themes/seven/style.css
+++ b/core/themes/seven/style.css
@@ -521,18 +521,21 @@ div.submitted {
 
 /**
  * Pagination.
- * The item-list CSS uses quite strong selectors, we have to match them here to
- * override.
  */
-.item-list .pager li {
+nav.pager {
+  text-align: center;
+}
+.pager__items {
+  display: inline-block;
+}
+.pager__items li {
   display: inline-block;
   color: #8c8c8c;
   font-size: 1.08em;
   padding: 0 0.6em;
   margin: 0;
 }
-.item-list .pager a,
-.item-list .pager .pager-current {
+.pager__items a {
   border-bottom: 2px solid transparent;
   line-height: 1.55em;
   padding: 0 5px;
@@ -543,28 +546,41 @@ div.submitted {
   font-weight: 600;
   -webkit-font-smoothing: antialiased;
 }
-.item-list .pager a {
+.pager__items a {
   padding-bottom: 3px;
 }
-.item-list .pager .pager-current {
+.pager__items .is-active {
   border-bottom-width: 3px;
   border-bottom-color: #2a678c;
   color: #2a678c;
   margin: 0 5px;
   font-weight: 700;
 }
-.item-list .pager a:focus,
-.item-list .pager a:hover {
+.pager__items a:focus,
+.pager__items a:hover {
   border-bottom-color: #3395d2;
   color: #3395d2;
 }
-.item-list .pager-next a,
-.item-list .pager-last a,
-.item-list .pager-first a,
-.item-list .pager-previous a {
+.pager__items .icon {
   border-bottom-width: 0;
   color: #2a678c;
   font-weight: 600;
+  font-style: normal;
+}
+.pager__items .icon--go-first:before {
+  content: "\00AB\00A0 first";
+}
+.pager__items .icon--go-previous:before {
+  content: "\003C\00A0 previous";
+}
+.pager__items .icon--ellipsis:before {
+  content: "...";
+}
+.pager__items .icon--go-next:after {
+  content: "next \00A0\003E";
+}
+.pager__items .icon--go-last:after {
+  content: "last \00A0\00BB";
 }
 
 /**
