diff --git a/core/modules/aggregator/aggregator.module b/core/modules/aggregator/aggregator.module
index 525cdc1..2aa7a87 100644
--- a/core/modules/aggregator/aggregator.module
+++ b/core/modules/aggregator/aggregator.module
@@ -53,7 +53,11 @@ function aggregator_help($path, $arg) {
 function aggregator_theme() {
   return array(
     'aggregator_feed_source' => array(
-      'variables' => array('aggregator_feed' => NULL, 'view_mode' => NULL),
+      'variables' => array(
+        'feed' => NULL,
+        'aggregator_feed' => NULL,
+        'view_mode' => NULL
+      ),
       'file' => 'aggregator.pages.inc',
       'template' => 'aggregator-feed-source',
     ),
diff --git a/core/modules/aggregator/aggregator.pages.inc b/core/modules/aggregator/aggregator.pages.inc
index 6248012..c9fc490 100644
--- a/core/modules/aggregator/aggregator.pages.inc
+++ b/core/modules/aggregator/aggregator.pages.inc
@@ -282,24 +282,14 @@ function aggregator_categorize_items_submit($form, &$form_state) {
 }
 
 /**
- * Default theme implementation to present a linked feed item for summaries.
+ * Processes variables for aggregator item templates.
+ *
+ * Default template: aggregator-item.tpl.php
  *
  * @param $variables
  *   An associative array containing:
- *   - item_link: Link to item.
- *   - item_age: Age of the item.
- *
- * @see template_preprocess()
- * @see template_preprocess_aggregator_summary_item()
- */
-function theme_aggregator_summary_item($variables) {
-  return $variables['item_url'] . ' ' . $variables['item_age'];
-}
-
-/**
- * Processes variables for aggregator-item.tpl.php.
- *
- * @see aggregator-item.tpl.php
+ *   - aggregator_item: An individual feed item for display on the aggregator
+ *   page.
  */
 function template_preprocess_aggregator_item(&$variables) {
   $item = $variables['aggregator_item'];
@@ -509,31 +499,30 @@ function aggregator_page_opml($cid = NULL) {
  *
  * @ingroup themeable
  */
-function theme_aggregator_page_opml($variables) {
+function template_preprocess_aggregator_page_opml(&$variables) {
   $feeds = $variables['feeds'];
 
   drupal_add_http_header('Content-Type', 'text/xml; charset=utf-8');
 
-  $output  = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
-  $output .= "<opml version=\"1.1\">\n";
-  $output .= "<head>\n";
-  $output .= '<title>' . check_plain(config('system.site')->get('name')) . "</title>\n";
-  $output .= '<dateModified>' . gmdate(DATE_RFC2822, REQUEST_TIME) . "</dateModified>\n";
-  $output .= "</head>\n";
-  $output .= "<body>\n";
-  foreach ($feeds as $feed) {
-    $output .= '<outline text="' . check_plain($feed->title) . '" xmlUrl="' . check_url($feed->url) . "\" />\n";
-  }
-  $output .= "</body>\n";
-  $output .= "</opml>\n";
+  $variables['title'] = check_plain(config('system.site')->get('name'));
+  $variables['date'] = gmdate(DATE_RFC2822, REQUEST_TIME);
+  $variables['feeds'] = array();
 
-  print $output;
+  foreach ($feeds as $key => $feed) {
+    $variables['feeds'][$key]['title'] = check_plain($feed->title);
+    $variables['feeds'][$key]['url'] = check_url($feed->url);
+  }
 }
 
 /**
- * Processes variables for aggregator-summary-items.tpl.php.
+ * Processes variables for aggregator summary templates.
+ *
+ * Default template: aggregator-summary-items.tpl.php
  *
- * @see aggregator-summary-items.tpl.php
+ * @param array $variables
+ *   An associative array containing:
+ *   - source: Information about the feed source.
+ *   - summary_items: An array of feed items.
  */
 function template_preprocess_aggregator_summary_items(&$variables) {
   $variables['title'] = check_plain($variables['source'] instanceof EntityInterface ? $variables['source']->label() : $variables['source']->title);
@@ -549,19 +538,23 @@ function template_preprocess_aggregator_summary_items(&$variables) {
 }
 
 /**
- * Processes variables for aggregator-summary-item.tpl.php.
+ * Prepares variables for aggregator summary item templates.
+ *
+ * Default template: aggregator-summary-item.html.twig.
  *
- * @see aggregator-summary-item.tpl.php
+ * @param array $variables
+ *   An associative array containing:
+ *   - aggregator_item: A feed item.
  */
 function template_preprocess_aggregator_summary_item(&$variables) {
   $item = $variables['aggregator_item'];
 
-  $variables['item_url'] = l(check_plain($item->label()), check_url(url($item->link->value, array('absolute' => TRUE))), array(
+  $variables['url'] = l(check_plain($item->label()), check_url(url($item->link->value, array('absolute' => TRUE))), array(
     'attributes' => array(
       'class' => array('feed-item-url',),
     ),
   ));
-  $variables['item_age'] = theme('datetime', array(
+  $variables['age'] = theme('datetime', array(
     'attributes' => array(
       'datetime' => format_date($item->timestamp->value, 'html_datetime', '', 'UTC'),
       'class' => array('feed-item-age',),
@@ -572,9 +565,13 @@ function template_preprocess_aggregator_summary_item(&$variables) {
 }
 
 /**
- * Processes variables for aggregator-feed-source.tpl.php.
+ * Processes variables for aggregator feed source templates.
+ *
+ * Default template: aggregator-feed-source.tpl.php
  *
- * @see aggregator-feed-source.tpl.php
+ * @param array $variables
+ *   An associative array containing:
+ *   - aggregator_feed: Information about the feed source.
  */
 function template_preprocess_aggregator_feed_source(&$variables) {
   $feed = $variables['aggregator_feed'];
diff --git a/core/modules/aggregator/templates/aggregator-feed-source.html.twig b/core/modules/aggregator/templates/aggregator-feed-source.html.twig
new file mode 100644
index 0000000..653cd4d
--- /dev/null
+++ b/core/modules/aggregator/templates/aggregator-feed-source.html.twig
@@ -0,0 +1,35 @@
+{#
+/**
+ * @file
+ * Default theme implementation to present the source of the feed.
+ *
+ * The contents are rendered above feed listings when browsing source feeds.
+ * For example, "example.com/aggregator/sources/1".
+ *
+ * Available variables:
+ * - source_icon: Feed icon linked to the source. Rendered through
+ *   feed-icon.html.twig.
+ * - source_image: Image set by the feed source.
+ * - source_description: Description set by the feed source.
+ * - source_url: URL to the feed source.
+ * - last_checked: How long ago the feed was checked locally.
+ *
+ * @see template_preprocess()
+ * @see template_preprocess_aggregator_feed_source()
+ *
+ * @ingroup themeable
+ */
+#}
+<div class="feed-source">
+  {{ source_icon }}
+  {{ source_image }}
+  <div class="feed-description">
+    {{ source_description }}
+  </div>
+  <div class="feed-url">
+    <em>{{ 'URL'|t }}:</em> <a href="{{ source_url }}">{{ source_url }}</a>
+  </div>
+  <div class="feed-updated">
+    <em>{{ 'Updated'|t }}:</em>
+  </div>
+</div>
diff --git a/core/modules/aggregator/templates/aggregator-feed-source.tpl.php b/core/modules/aggregator/templates/aggregator-feed-source.tpl.php
deleted file mode 100644
index f9cfa55..0000000
--- a/core/modules/aggregator/templates/aggregator-feed-source.tpl.php
+++ /dev/null
@@ -1,36 +0,0 @@
-<?php
-
-/**
- * @file
- * Default theme implementation to present the source of the feed.
- *
- * The contents are rendered above feed listings when browsing source feeds.
- * For example, "example.com/aggregator/sources/1".
- *
- * Available variables:
- * - $source_icon: Feed icon linked to the source. Rendered through
- *   theme_feed_icon().
- * - $source_image: Image set by the feed source.
- * - $source_description: Description set by the feed source.
- * - $source_url: URL to the feed source.
- * - $last_checked: How long ago the feed was checked locally.
- *
- * @see template_preprocess()
- * @see template_preprocess_aggregator_feed_source()
- *
- * @ingroup themeable
- */
-?>
-<div class="feed-source">
-  <?php print $source_icon; ?>
-  <?php print $source_image; ?>
-  <div class="feed-description">
-    <?php print $source_description; ?>
-  </div>
-  <div class="feed-url">
-    <em><?php print t('URL:'); ?></em> <a href="<?php print $source_url; ?>"><?php print $source_url; ?></a>
-  </div>
-  <div class="feed-updated">
-    <em><?php print t('Updated:'); ?></em> <?php print $last_checked; ?>
-  </div>
-</div>
diff --git a/core/modules/aggregator/templates/aggregator-item.html.twig b/core/modules/aggregator/templates/aggregator-item.html.twig
new file mode 100644
index 0000000..49ba80f
--- /dev/null
+++ b/core/modules/aggregator/templates/aggregator-item.html.twig
@@ -0,0 +1,44 @@
+{#
+/**
+ * @file
+ * Default theme implementation to present a feed in an aggregator page.
+ *
+ * Available variables:
+ * - feed_url: URL to the originating feed item.
+ * - feed_title: Title of the feed item.
+ * - source_url: Link to the local source section.
+ * - source_title: Title of the remote source.
+ * - source_date: Date the feed was posted on the remote source.
+ * - content: Feed item content.
+ * - categories: Linked categories assigned to the feed.
+ *
+ * @see template_preprocess()
+ * @see template_preprocess_aggregator_item()
+ *
+ * @ingroup themeable
+ */
+#}
+<div class="feed-item">
+  <h3 class="feed-item-title">
+    <a href="{{ feed_url }}">{{ feed_title }}</a>
+  </h3>
+
+  <div class="feed-item-meta">
+    {% if source_url %}
+      <a href="{{ source_url }}" class="feed-item-source">{{ source_title }}</a> -
+    {% endif %}
+    <span class="feed-item-date">{{ source_date }}</span>
+  </div>
+
+  {% if content %}
+    <div class="feed-item-body">
+      {{ content }}
+    </div>
+  {% endif %}
+
+  {% if categories %}
+    <div class="feed-item-categories">
+      {{ 'Categories'|t }}: {{ categories|join(', ') }}
+    </div>
+  {% endif %}
+</div>
diff --git a/core/modules/aggregator/templates/aggregator-item.tpl.php b/core/modules/aggregator/templates/aggregator-item.tpl.php
deleted file mode 100644
index 74b2284..0000000
--- a/core/modules/aggregator/templates/aggregator-item.tpl.php
+++ /dev/null
@@ -1,47 +0,0 @@
-<?php
-
-/**
- * @file
- * Default theme implementation to format an individual feed item for display
- * on the aggregator page.
- *
- * Available variables:
- * - $feed_url: URL to the originating feed item.
- * - $feed_title: Title of the feed item.
- * - $source_url: Link to the local source section.
- * - $source_title: Title of the remote source.
- * - $source_date: Date the feed was posted on the remote source.
- * - $content: Feed item content.
- * - $categories: Linked categories assigned to the feed.
- *
- * @see template_preprocess()
- * @see template_preprocess_aggregator_item()
- *
- * @ingroup themeable
- */
-?>
-<div class="feed-item">
-  <h3 class="feed-item-title">
-    <a href="<?php print $feed_url; ?>"><?php print $feed_title; ?></a>
-  </h3>
-
-  <div class="feed-item-meta">
-  <?php if ($source_url): ?>
-    <a href="<?php print $source_url; ?>" class="feed-item-source"><?php print $source_title; ?></a> -
-  <?php endif; ?>
-    <span class="feed-item-date"><?php print $source_date; ?></span>
-  </div>
-
-<?php if ($content): ?>
-  <div class="feed-item-body">
-    <?php print $content; ?>
-  </div>
-<?php endif; ?>
-
-<?php if ($categories): ?>
-  <div class="feed-item-categories">
-    <?php print t('Categories'); ?>: <?php print implode(', ', $categories); ?>
-  </div>
-<?php endif ;?>
-
-</div>
diff --git a/core/modules/aggregator/templates/aggregator-page-opml.html.twig b/core/modules/aggregator/templates/aggregator-page-opml.html.twig
new file mode 100644
index 0000000..b72d0d7
--- /dev/null
+++ b/core/modules/aggregator/templates/aggregator-page-opml.html.twig
@@ -0,0 +1,30 @@
+{#
+/**
+ * @file
+ * Default theme implementation to present @todo.
+ *
+ * Available variables:
+ * - title: @todo
+ * - date: @todo
+ * - feeds: @todo
+ *   - feed.title: @todo
+ *   - feed.url: @todo
+ *
+ * @see template_preprocess()
+ * @see template_preprocess_aggregator_page_opml()
+ *
+ * @ingroup themeable
+ */
+#}
+<?xml version=\"1.0\" encoding=\"utf-8\"?>
+<opml version=\"1.1\">
+  <head>
+    <title>{{ title }}</title>
+    <dateModified>{{ date }}</dateModified>
+  </head>
+<body>
+  {% for feed in feeds %}
+  <outline text="{{ feed.title }}" xmlUrl="{{ feed.url }}" />
+  {% endfor %}
+</body>
+</opml>
diff --git a/core/modules/aggregator/templates/aggregator-summary-item.html.twig b/core/modules/aggregator/templates/aggregator-summary-item.html.twig
new file mode 100644
index 0000000..340a1d9
--- /dev/null
+++ b/core/modules/aggregator/templates/aggregator-summary-item.html.twig
@@ -0,0 +1,16 @@
+{#
+/**
+ * @file
+ * Default theme implementation for a single feed in a list of feed items.
+ *
+ * Available variables:
+ * - link: Link to item.
+ * - age: Age of the item.
+ *
+ * @see template_preprocess()
+ * @see template_preprocess_aggregator_summary_item()
+ *
+ * @ingroup themeable
+ */
+#}
+{{ url }} {{ age }}
\ No newline at end of file
diff --git a/core/modules/aggregator/templates/aggregator-summary-items.html.twig b/core/modules/aggregator/templates/aggregator-summary-items.html.twig
new file mode 100644
index 0000000..68c2326
--- /dev/null
+++ b/core/modules/aggregator/templates/aggregator-summary-items.html.twig
@@ -0,0 +1,24 @@
+{#
+/**
+ * @file
+ * Default theme implementation to present feeds as list items.
+ *
+ * Each iteration generates a single feed source or category.
+ *
+ * Available variables:
+ * - title: Title of the feed or category.
+ * - summary_list: Unordered list of linked feed items generated through
+ *   theme_item_list().
+ * - source_url: URL to the local source or category.
+ *
+ * @see template_preprocess()
+ * @see template_preprocess_aggregator_summary_items()
+ *
+ * @ingroup themeable
+ */
+#}
+<h3>{{ title }}</h3>
+{{ summary_list }}
+<div class="links">
+  <a href="{{ source_url }}">{{ 'More<span class="element-invisible"> posts about %title</span>' | t({'%title': title}) }}</a>
+</div>
diff --git a/core/modules/aggregator/templates/aggregator-summary-items.tpl.php b/core/modules/aggregator/templates/aggregator-summary-items.tpl.php
deleted file mode 100644
index 8f19fe1..0000000
--- a/core/modules/aggregator/templates/aggregator-summary-items.tpl.php
+++ /dev/null
@@ -1,24 +0,0 @@
-<?php
-
-/**
- * @file
- * Default theme implementation to present feeds as list items.
- *
- * Each iteration generates a single feed source or category.
- *
- * Available variables:
- * - $title: Title of the feed or category.
- * - $summary_list: Render array of unordered feed items list.
- * - $source_url: URL to the local source or category.
- *
- * @see template_preprocess()
- * @see template_preprocess_aggregator_summary_items()
- *
- * @ingroup themeable
- */
-?>
-<h3><?php print $title; ?></h3>
-<?php print render($summary_list); ?>
-<div class="links">
-  <a href="<?php print $source_url; ?>"><?php print t("More<span class=\"element-invisible\"> posts about %title</span>", array('%title' => $title)); ?></a>
-</div>
diff --git a/core/modules/aggregator/templates/aggregator-wrapper.tpl.php b/core/modules/aggregator/templates/aggregator-wrapper.tpl.php
deleted file mode 100644
index 0e97ba4..0000000
--- a/core/modules/aggregator/templates/aggregator-wrapper.tpl.php
+++ /dev/null
@@ -1,20 +0,0 @@
-<?php
-
-/**
- * @file
- * Default theme implementation to wrap aggregator content.
- *
- * Available variables:
- * - $content: All aggregator content.
- * - $page: Pager links rendered through theme_pager().
- *
- * @see template_preprocess()
- * @see template_preprocess_aggregator_wrapper()
- *
- * @ingroup themeable
- */
-?>
-<div class="<?php print $attributes['class']; ?>">
-  <?php print $content; ?>
-  <?php print $pager; ?>
-</div>
