diff --git a/core/includes/theme.inc b/core/includes/theme.inc
index bab2af5..f28fd77 100644
--- a/core/includes/theme.inc
+++ b/core/includes/theme.inc
@@ -1697,6 +1697,28 @@ function theme_link($variables) {
 }
 
 /**
+ * Converts rendered sub-elements of #type 'links' into #items.
+ */
+function drupal_pre_render_links_real($elements) {
+  // Children need to be sorted, since this #pre_render runs before
+  // drupal_render() sorts the children.
+  foreach (element_children($elements, TRUE) as $key) {
+    // Pre-emptively check whether children will be rendered.
+    // Note that later adjustments to #printed or #access via #pre_render
+    // callbacks of children or other means are not taken into account and such
+    // elements will appear.
+    if (empty($elements[$key]['#printed']) && (!isset($elements[$key]['#access']) || $elements[$key]['#access'])) {
+      // Initialize rendered result property on each child.
+      $elements[$key]['#children'] = '';
+      // Store a pointer to rendered result in #items.
+      $elements['#items'][$key] = &$elements[$key]['#children'];
+    }
+  }
+
+  return $elements;
+}
+
+/**
  * Returns HTML for a set of links.
  *
  * @param $variables
@@ -2349,13 +2371,12 @@ function template_preprocess_item_list(&$variables) {
 function theme_item_list($variables) {
   $items = $variables['items'];
   $title = (string) $variables['title'];
-  // @todo 'type' clashes with '#type'. Rename to 'tag'.
-  $type = $variables['type'];
+  $tag = $variables['tag'];
   $list_attributes = $variables['attributes'];
 
   $output = '';
   if ($items) {
-    $output .= '<' . $type . new Attribute($list_attributes) . '>';
+    $output .= '<' . $tag . new Attribute($list_attributes) . '>';
 
     $num_items = count($items);
     $i = 0;
@@ -2377,7 +2398,7 @@ function theme_item_list($variables) {
       }
       $output .= '<li' . new Attribute($attributes) . '>' . $item . '</li>';
     }
-    $output .= "</$type>";
+    $output .= "</$tag>";
   }
 
   // Only output the list container and title, if there are any list items.
@@ -3189,7 +3210,7 @@ function drupal_common_theme() {
       'variables' => array('type' => MARK_NEW),
     ),
     'item_list' => array(
-      'variables' => array('items' => array(), 'title' => '', 'type' => 'ul', 'attributes' => array()),
+      'variables' => array('items' => array(), 'title' => '', 'tag' => 'ul', 'attributes' => array()),
     ),
     'more_help_link' => array(
       'variables' => array('url' => NULL),
diff --git a/core/modules/field/lib/Drupal/field/Plugin/views/field/Field.php b/core/modules/field/lib/Drupal/field/Plugin/views/field/Field.php
index 0477096..ce30e61 100644
--- a/core/modules/field/lib/Drupal/field/Plugin/views/field/Field.php
+++ b/core/modules/field/lib/Drupal/field/Plugin/views/field/Field.php
@@ -642,7 +642,7 @@ function render_items($items) {
           array(
             'items' => $items,
             'title' => NULL,
-            'type' => $this->options['multi_type']
+            'tag' => $this->options['multi_type']
           ));
       }
     }
diff --git a/core/modules/node/node.module b/core/modules/node/node.module
index 9e8fbd3..149fbf9 100644
--- a/core/modules/node/node.module
+++ b/core/modules/node/node.module
@@ -2248,6 +2248,26 @@ function node_page_default() {
       '#prefix' => '<div id="first-time">',
       '#suffix' => '</div>',
     );
+    $build['links'] = array(
+      '#type' => 'links',
+    );
+    $build['links']['foo'] = array(
+      '#type' => 'link',
+      '#title' => t('Foo (last)'),
+      '#href' => 'foo',
+      '#weight' => 10,
+    );
+    $build['links']['denied'] = array(
+      '#type' => 'link',
+      '#title' => t('Access Denied'),
+      '#href' => 'user',
+      '#access' => FALSE,
+    );
+    $build['links']['bar'] = array(
+      '#type' => 'link',
+      '#title' => t('Bar'),
+      '#href' => 'bar',
+    );
   }
   return $build;
 }
diff --git a/core/modules/system/lib/Drupal/system/Tests/Theme/FunctionsTest.php b/core/modules/system/lib/Drupal/system/Tests/Theme/FunctionsTest.php
index d3a090f..1dbcb2a 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Theme/FunctionsTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Theme/FunctionsTest.php
@@ -54,7 +54,7 @@ function testItemList() {
         'childlist' => array(
           '#theme' => 'item_list',
           '#attributes' => array('id' => 'blist'),
-          '#type' => 'ol',
+          '#tag' => 'ol',
           '#items' => array(
             'ba',
             array(
diff --git a/core/modules/system/system.module b/core/modules/system/system.module
index cdf7b90..dbdce4b 100644
--- a/core/modules/system/system.module
+++ b/core/modules/system/system.module
@@ -538,6 +538,13 @@ function system_element_info() {
   $types['markup'] = array(
     '#markup' => '',
   );
+  $types['links'] = array(
+    '#pre_render' => array('drupal_pre_render_links_real'),
+    // Using a key to allow for easy access to add a theme sub-pattern.
+    '#theme_wrappers' => array('links' => 'item_list'),
+    '#tag' => 'ul',
+    '#attributes' => array('class' => array('links', 'inline')),
+  );
   $types['link'] = array(
     '#pre_render' => array('drupal_pre_render_link'),
   );
diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/display/DisplayPluginBase.php b/core/modules/views/lib/Drupal/views/Plugin/views/display/DisplayPluginBase.php
index a9d79ba..51ee3f5 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/views/display/DisplayPluginBase.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/display/DisplayPluginBase.php
@@ -1681,7 +1681,7 @@ public function buildOptionsForm(&$form, &$form_state) {
         $output = '';
         if (!empty($options)) {
           $output = t('<p>The following tokens are available for this link.</p>');
-          foreach (array_keys($options) as $type) {
+          foreach (array_keys($options) as $tag) {
             if (!empty($options[$type])) {
               $items = array();
               foreach ($options[$type] as $key => $value) {
@@ -1690,7 +1690,7 @@ public function buildOptionsForm(&$form, &$form_state) {
               $output .= theme('item_list',
                 array(
                   'items' => $items,
-                  'type' => $type
+                  'tag' => $tag
                 ));
             }
           }
diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/field/FieldPluginBase.php b/core/modules/views/lib/Drupal/views/Plugin/views/field/FieldPluginBase.php
index 2c866d3..4f17c81 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/views/field/FieldPluginBase.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/field/FieldPluginBase.php
@@ -865,16 +865,16 @@ public function buildOptionsForm(&$form, &$form_state) {
       if (!empty($options)) {
         $output = t('<p>The following tokens are available for this field. Note that due to rendering order, you cannot use fields that come after this field; if you need a field not listed here, rearrange your fields.
 If you would like to have the characters \'[\' and \']\' please use the html entity codes \'%5B\' or  \'%5D\' or they will get replaced with empty space.</p>');
-        foreach (array_keys($options) as $type) {
-          if (!empty($options[$type])) {
+        foreach (array_keys($options) as $tag) {
+          if (!empty($options[$tag])) {
             $items = array();
-            foreach ($options[$type] as $key => $value) {
+            foreach ($options[$tag] as $key => $value) {
               $items[] = $key . ' == ' . $value;
             }
             $output .= theme('item_list',
               array(
                 'items' => $items,
-                'type' => $type
+                'tag' => $tag,
               ));
           }
         }
diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/field/PrerenderList.php b/core/modules/views/lib/Drupal/views/Plugin/views/field/PrerenderList.php
index 90b91e8..b16bc94 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/views/field/PrerenderList.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/field/PrerenderList.php
@@ -85,7 +85,7 @@ function render_items($items) {
           array(
             'items' => $items,
             'title' => NULL,
-            'type' => $this->options['type']
+            'tag' => $this->options['type'],
           ));
       }
     }
diff --git a/core/modules/views/views.theme.inc b/core/modules/views/views.theme.inc
index d7091c7..82b9a28 100644
--- a/core/modules/views/views.theme.inc
+++ b/core/modules/views/views.theme.inc
@@ -1098,7 +1098,7 @@ function theme_views_mini_pager($vars) {
       array(
         'items' => $items,
         'title' => NULL,
-        'type' => 'ul',
+        'tag' => 'ul',
         'attributes' => array('class' => array('pager')),
       )
     );
