diff --git a/core/includes/theme.inc b/core/includes/theme.inc
index 4635bb7..9da901f 100644
--- a/core/includes/theme.inc
+++ b/core/includes/theme.inc
@@ -2361,18 +2361,6 @@ function theme_feed_icon($variables) {
 }
 
 /**
- * Returns HTML for a "more" link, like those used in blocks.
- *
- * @param $variables
- *   An associative array containing:
- *   - url: The URL of the main page.
- *   - title: A descriptive verb for the link, like 'Read more'.
- */
-function theme_more_link($variables) {
-  return '<div class="more-link">' . l(t('More'), $variables['url'], array('attributes' => array('title' => $variables['title']))) . '</div>';
-}
-
-/**
  * Returns HTML for a progress bar.
  *
  * Note that the core Batch API uses this only for non-JavaScript batch jobs.
@@ -3144,9 +3132,6 @@ function drupal_common_theme() {
     'feed_icon' => array(
       'variables' => array('url' => NULL, 'title' => NULL),
     ),
-    'more_link' => array(
-      'variables' => array('url' => NULL, 'title' => NULL)
-    ),
     'progress_bar' => array(
       'variables' => array('percent' => NULL, 'message' => NULL),
     ),
diff --git a/core/modules/aggregator/lib/Drupal/aggregator/Plugin/Block/AggregatorCategoryBlock.php b/core/modules/aggregator/lib/Drupal/aggregator/Plugin/Block/AggregatorCategoryBlock.php
index c9fe040..06c345c 100644
--- a/core/modules/aggregator/lib/Drupal/aggregator/Plugin/Block/AggregatorCategoryBlock.php
+++ b/core/modules/aggregator/lib/Drupal/aggregator/Plugin/Block/AggregatorCategoryBlock.php
@@ -69,11 +69,21 @@ public function build() {
     if ($category = db_query('SELECT cid, title, block FROM {aggregator_category} WHERE cid = :cid', array(':cid' => $id))->fetchObject()) {
       $result = db_query_range('SELECT i.* FROM {aggregator_category_item} ci LEFT JOIN {aggregator_item} i ON ci.iid = i.iid WHERE ci.cid = :cid ORDER BY i.timestamp DESC, i.iid DESC', 0, $this->configuration['block_count'], array(':cid' => $category->cid));
       $more_link = array(
-        '#theme' => 'more_link',
-        '#url' => 'aggregator/categories/' . $category->cid,
-        '#title' => t("View this category's recent news."),
+        '#type' => 'link',
+        '#href' => 'aggregator/categories/' . $category->cid,
+        '#title' => t('More'),
+        '#attributes' => array(
+          '#title' => t("View this category's recent news."),
+        ),
       );
-      $read_more = drupal_render($more_link);
+      $container = array(
+        '#theme' => 'container',
+        'more_link' => $more_link,
+        '#attributes' => array(
+          'class' => array('more-link'),
+        ),
+      );
+      $read_more = drupal_render($container);
 
       $items = array();
       foreach ($result as $item) {
diff --git a/core/modules/aggregator/lib/Drupal/aggregator/Plugin/Block/AggregatorFeedBlock.php b/core/modules/aggregator/lib/Drupal/aggregator/Plugin/Block/AggregatorFeedBlock.php
index 4b002a2..ce5cf84 100644
--- a/core/modules/aggregator/lib/Drupal/aggregator/Plugin/Block/AggregatorFeedBlock.php
+++ b/core/modules/aggregator/lib/Drupal/aggregator/Plugin/Block/AggregatorFeedBlock.php
@@ -70,11 +70,21 @@ public function build() {
     if ($feed = db_query('SELECT fid, title, block FROM {aggregator_feed} WHERE block <> 0 AND fid = :fid', array(':fid' => $id))->fetchObject()) {
       $result = db_query_range("SELECT * FROM {aggregator_item} WHERE fid = :fid ORDER BY timestamp DESC, iid DESC", 0, $this->configuration['block_count'], array(':fid' => $id));
       $more_link = array(
-        '#theme' => 'more_link',
-        '#url' => 'aggregator/sources/' . $feed->fid,
-        '#title' => t("View this feed's recent news."),
+        '#type' => 'link',
+        '#href' => 'aggregator/sources/' . $feed->fid,
+        '#title' => t('More'),
+        '#attributes' => array(
+          '#title' => t("View this feed's recent news."),
+        ),
       );
-      $read_more = drupal_render($more_link);
+      $container = array(
+        '#theme' => 'container',
+        'more_link' => $more_link,
+        '#attributes' => array(
+          'class' => array('more-link'),
+        ),
+      );
+      $read_more = drupal_render($container);
       $items = array();
       foreach ($result as $item) {
         $aggregator_block_item = array(
diff --git a/core/modules/forum/forum.module b/core/modules/forum/forum.module
index 73806a8..8fcdfaf 100644
--- a/core/modules/forum/forum.module
+++ b/core/modules/forum/forum.module
@@ -51,7 +51,7 @@ function forum_help($path, $arg) {
       );
       $container = array(
         '#theme' => 'container',
-        '#children' => drupal_render($more_help_link),
+        'more_help_link' => $more_help_link,
         '#attributes' => array(
           'class' => array('more-help-link'),
         ),
@@ -648,7 +648,21 @@ function forum_block_view_pre_render($elements) {
   $result = $elements['#query']->execute();
   if ($node_title_list = node_title_list($result)) {
     $elements['forum_list'] = $node_title_list;
-    $elements['forum_more'] = array('#theme' => 'more_link', '#url' => 'forum', '#title' => t('Read the latest forum topics.'));
+    $more_link = array(
+      '#type' => 'link',
+      '#href' => 'forum',
+      '#title' => t('More'),
+      '#attributes' => array(
+        '#title' => t('Read the latest forum topics.'),
+      ),
+    );
+    $elements['forum_more'] = array(
+      '#theme' => 'container',
+      'more_link' => $more_link,
+      '#attributes' => array(
+        'class' => array('more-link'),
+      ),
+    );
   }
   return $elements;
 }
diff --git a/core/modules/node/node.module b/core/modules/node/node.module
index b9c5bd3..56858a5 100644
--- a/core/modules/node/node.module
+++ b/core/modules/node/node.module
@@ -1544,11 +1544,21 @@ function theme_node_recent_block($variables) {
     $output = drupal_render($table);
     if (user_access('access content overview')) {
       $more_link = array(
-        '#theme' => 'more_link',
-        '#url' => 'admin/content',
-        '#title' => t('Show more content'),
+        '#type' => 'link',
+        '#href' => 'admin/content',
+        '#title' => t('More'),
+        '#attributes' => array(
+          '#title' => t('Show more content'),
+        ),
+      );
+      $container = array(
+        '#theme' => 'container',
+        'more_link' => $more_link,
+        '#attributes' => array(
+          'class' => array('more-link'),
+        ),
       );
-      $output .= drupal_render($more_link);
+      $output .= drupal_render($container);
     }
   }
 
diff --git a/core/modules/system/tests/modules/theme_test/lib/Drupal/theme_test/EventSubscriber/ThemeTestSubscriber.php b/core/modules/system/tests/modules/theme_test/lib/Drupal/theme_test/EventSubscriber/ThemeTestSubscriber.php
index bea8b13..db4a6da 100644
--- a/core/modules/system/tests/modules/theme_test/lib/Drupal/theme_test/EventSubscriber/ThemeTestSubscriber.php
+++ b/core/modules/system/tests/modules/theme_test/lib/Drupal/theme_test/EventSubscriber/ThemeTestSubscriber.php
@@ -34,7 +34,22 @@ public function onRequest(GetResponseEvent $event) {
       // theme_test_request_listener_page_callback() to test that even when the
       // theme system is initialized this early, it is still capable of
       // returning output and theming the page as a whole.
-      $GLOBALS['theme_test_output'] = theme('more_link', array('url' => 'user', 'title' => 'Themed output generated in a KernelEvents::REQUEST listener'));
+      $more_link = array(
+        '#type' => 'link',
+        '#href' => 'user',
+        '#title' => t('More'),
+        '#attributes' => array(
+          '#title' => t('Themed output generated in a KernelEvents::REQUEST listener'),
+        ),
+      );
+      $container = array(
+        '#theme' => 'container',
+        'more_link' => $more_link,
+        '#attributes' => array(
+          'class' => array('more-link'),
+        ),
+      );
+      $GLOBALS['theme_test_output'] = drupal_render($container);
     }
     if (strpos($current_path, 'user/autocomplete') === 0) {
       // Register a fake registry loading callback. If it gets called by
