diff --git a/core/modules/system/system.admin.inc b/core/modules/system/system.admin.inc
index a2b7926..d0fa5bf 100644
--- a/core/modules/system/system.admin.inc
+++ b/core/modules/system/system.admin.inc
@@ -11,6 +11,7 @@
 use Symfony\Component\HttpFoundation\Response;
 use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
 use Drupal\Core\Datetime\DrupalDateTime;
+use Drupal\Core\Template\Attribute;
 use Drupal\system\Form\ModulesInstallConfirmForm;
 use Drupal\system\Form\ModulesUninstallConfirmForm;
 
@@ -46,10 +47,11 @@ function system_admin_config_page() {
           unset($item['localized_options']['attributes']['title']);
         }
         $block = $item;
-        $block['content'] = '';
-        $block['content'] .= theme('admin_block_content', array('content' => system_admin_menu_block($item)));
-        if (!empty($block['content'])) {
-          $block['show'] = TRUE;
+        if ($content = system_admin_menu_block($item)) {
+          $block['content'] = array(
+            '#theme' => 'admin_block_content',
+            '#content' => $content
+          );
         }
 
         // Prepare for sorting as in function _menu_tree_check_access().
@@ -60,7 +62,10 @@ function system_admin_config_page() {
   }
   if ($blocks) {
     ksort($blocks);
-    return theme('admin_page', array('blocks' => $blocks));
+    return array(
+      '#theme' => 'admin_page',
+      '#blocks' => $blocks
+    );
   }
   else {
     return t('You do not have any administrative items.');
@@ -81,12 +86,17 @@ function system_admin_config_page() {
 function system_admin_menu_block_page() {
   $item = menu_get_item();
   if ($content = system_admin_menu_block($item)) {
-    $output = theme('admin_block_content', array('content' => $content));
+    $build = array(
+      '#theme' => 'admin_block_content',
+      '#content' => $content
+    );
   }
   else {
-    $output = t('You do not have any administrative items.');
+    $build = array(
+      '#markup' => t('You do not have any administrative items.'),
+    );
   }
-  return $output;
+  return $build;
 }
 
 /**
@@ -117,7 +127,10 @@ function system_admin_index() {
       $menu_items[$info->info['name']] = array($info->info['description'], $admin_tasks);
     }
   }
-  return theme('system_admin_index', array('menu_items' => $menu_items));
+  return array(
+    '#theme' => 'system_admin_index',
+    '#menu_items' => $menu_items
+  );
 }
 
 /**
@@ -246,8 +259,12 @@ function system_themes_page() {
   uasort($theme_groups['enabled'], 'system_sort_themes');
   drupal_alter('system_themes_page', $theme_groups);
 
-  $admin_form = drupal_get_form('system_themes_admin_form', $admin_theme_options);
-  return theme('system_themes_page', array('theme_groups' => $theme_groups, 'theme_group_titles' => $theme_group_titles)) . drupal_render($admin_form);
+  return array(
+    '#theme' => 'system_themes_page',
+    '#theme_groups' => $theme_groups,
+    '#theme_group_titles' => $theme_group_titles,
+    '#admin_theme_options' => $admin_theme_options,
+  );
 }
 
 /**
@@ -1022,9 +1039,12 @@ function _system_modules_build_row($info, $extra) {
   }
   else {
     $form['enable'] = array(
-      '#markup' =>  theme('image', array('uri' => 'core/misc/watchdog-error.png', 'alt' => $status_short, 'title' => $status_short)),
+      '#theme' => 'image',
+      '#uri' => 'core/misc/watchdog-error.png',
+      '#alt' => $status_short,
+      '#title' => $status_short
     );
-    $form['description']['#markup'] .= theme('system_modules_incompatible', array('message' => $status_long));
+    $form['description']['#markup'] .= '<div class="incompatible">' . $status_long . '</div>';
   }
 
   // Build operation links.
@@ -1304,7 +1324,11 @@ function system_status($check = FALSE) {
     ->condition('pass', '')
     ->condition('status', 0)
     ->execute();
-  return theme('status_report', array('requirements' => $requirements));
+
+  return array(
+    '#theme' => 'status_report',
+    '#requirements' => $requirements
+  );
 }
 
 /**
@@ -1339,7 +1363,12 @@ function system_batch_page() {
 }
 
 /**
- * Returns HTML for an administrative block for display.
+ * Prepares variables for administrative block template.
+ *
+ * Default template: admin-block.html.twig.
+ *
+ * This doesn't do anything extra to prepare the template, but is given simply
+ * for example purposes.
  *
  * @param $variables
  *   An associative array containing:
@@ -1352,32 +1381,13 @@ function system_batch_page() {
  *
  * @ingroup themeable
  */
-function theme_admin_block($variables) {
-  $block = $variables['block'];
-  $output = '';
-
-  // Don't display the block if it has no content to display.
-  if (empty($block['show'])) {
-    return $output;
-  }
-
-  $output .= '<div class="admin-panel">';
-  if (!empty($block['title'])) {
-    $output .= '<h3>' . $block['title'] . '</h3>';
-  }
-  if (!empty($block['content'])) {
-    $output .= '<div class="body">' . $block['content'] . '</div>';
-  }
-  else {
-    $output .= '<div class="description">' . $block['description'] . '</div>';
-  }
-  $output .= '</div>';
-
-  return $output;
+function template_preprocess_admin_block(&$variables) {
 }
 
 /**
- * Returns HTML for the content of an administrative block.
+ * Prepares variables for administrative content block template.
+ *
+ * Default template: admin-block-content.html.twig.
  *
  * @param $variables
  *   An associative array containing:
@@ -1388,29 +1398,29 @@ function theme_admin_block($variables) {
  *
  * @ingroup themeable
  */
-function theme_admin_block_content($variables) {
-  $content = $variables['content'];
-  $output = '';
-
-  if (!empty($content)) {
-    $class = 'admin-list';
-    if ($compact = system_admin_compact_mode()) {
-      $class .= ' compact';
+function template_preprocess_admin_block_content(&$variables) {
+  if (!empty($variables['content'])) {
+    $compact = system_admin_compact_mode();
+    $variables['attributes'] = new Attribute(array('class' => array('admin-list')));
+    if ($compact) {
+      $variables['attributes']['class'][] = 'compact';
     }
-    $output .= '<dl class="' . $class . '">';
-    foreach ($content as $item) {
-      $output .= '<dt>' . l($item['title'], $item['href'], $item['localized_options']) . '</dt>';
+    foreach ($variables['content'] as $key => $item) {
+      $variables['content'][$key]['link'] = l($item['title'], $item['href'], $item['localized_options']);
       if (!$compact && isset($item['description'])) {
-        $output .= '<dd>' . filter_xss_admin($item['description']) . '</dd>';
+        $variables['content'][$key]['description'] = filter_xss_admin($item['description']);
+      }
+      else {
+        $variables['content'][$key]['description'] = FALSE;
       }
     }
-    $output .= '</dl>';
   }
-  return $output;
 }
 
 /**
- * Returns HTML for an administrative page.
+ * Prepares variables for administrative index page templates.
+ *
+ * Default template: admin-page.html.twig.
  *
  * @param $variables
  *   An associative array containing:
@@ -1421,100 +1431,86 @@ function theme_admin_block_content($variables) {
  *
  * @ingroup themeable
  */
-function theme_admin_page($variables) {
-  $blocks = $variables['blocks'];
-
+function template_preprocess_admin_page(&$variables) {
+  $variables['system_compact_link'] = array(
+    '#theme' => 'system_compact_link',
+  );
+  $variables['containers'] = array();
   $stripe = 0;
-  $container = array();
-
-  foreach ($blocks as $block) {
-    if ($block_output = theme('admin_block', array('block' => $block))) {
+  foreach ($variables['blocks'] as $Block) {
+    $block = (array) $Block;
+    if ($block['show'] = !empty($block['content'])) {
       if (empty($block['position'])) {
         // perform automatic striping.
         $block['position'] = ++$stripe % 2 ? 'left' : 'right';
       }
-      if (!isset($container[$block['position']])) {
-        $container[$block['position']] = '';
+      if (!isset($variables['containers'][$block['position']])) {
+        $variables['containers'][$block['position']] = array('blocks' => array());
       }
-      $container[$block['position']] .= $block_output;
+      $variables['containers'][$block['position']]['blocks'][] = array(
+        '#theme' => 'admin_block',
+        '#block' => $block,
+      );
     }
   }
-
-  $output = '<div class="admin clearfix">';
-  $output .= theme('system_compact_link');
-
-  foreach ($container as $id => $data) {
-    $output .= '<div class="' . $id . ' clearfix">';
-    $output .= $data;
-    $output .= '</div>';
-  }
-  $output .= '</div>';
-  return $output;
 }
 
 /**
- * Returns HTML for the output of the admin index page.
+ * Prepares variables for admin index template.
+ *
+ * Default template: system-admin-index.html.twig.
  *
  * @param $variables
  *   An associative array containing:
  *   - menu_items: An array of modules to be displayed.
  *
+ * @todo Remove this once http://drupal.org/node/1842232 is resolved.
+ *
  * @ingroup themeable
  */
-function theme_system_admin_index($variables) {
-  $menu_items = $variables['menu_items'];
-
+function template_preprocess_system_admin_index(&$variables) {
+  $variables['system_compact_link'] = array(
+    '#theme' => 'system_compact_link'
+  );
+  $variables['containers'] = array();
   $stripe = 0;
-  $container = array('left' => '', 'right' => '');
-  $flip = array('left' => 'right', 'right' => 'left');
-  $position = 'left';
-
   // Iterate over all modules.
-  foreach ($menu_items as $module => $block) {
+  foreach ($variables['menu_items'] as $module => $block) {
     list($description, $items) = $block;
-
+    $position = ++$stripe % 2 ? 'left' : 'right';
     // Output links.
     if (count($items)) {
-      $block = array();
-      $block['title'] = $module;
-      $block['content'] = theme('admin_block_content', array('content' => $items));
-      $block['description'] = t($description);
-      $block['show'] = TRUE;
-
-      if ($block_output = theme('admin_block', array('block' => $block))) {
-        if (!isset($block['position'])) {
-          // Perform automatic striping.
-          $block['position'] = $position;
-          $position = $flip[$position];
-        }
-        $container[$block['position']] .= $block_output;
-      }
+      $variables['containers'][$position]['blocks'][] = array(
+        '#theme' => 'admin_block',
+        '#block' => array(
+          'position' => $position,
+          'title' => $module,
+          'show' => TRUE,
+          'content' => array(
+            '#theme' => 'admin_block_content',
+            '#content' => $items,
+          ),
+          'description' => t($description),
+        ),
+      );
     }
   }
-
-  $output = '<div class="admin clearfix">';
-  $output .= theme('system_compact_link');
-  foreach ($container as $id => $data) {
-    $output .= '<div class="' . $id . ' clearfix">';
-    $output .= $data;
-    $output .= '</div>';
-  }
-  $output .= '</div>';
-
-  return $output;
 }
 
 /**
- * Returns HTML for the status report.
+ * Prepares variables for status report template.
+ *
+ * Default template: status-report.html.twig.
  *
  * @param $variables
  *   An associative array containing:
  *   - requirements: An array of requirements.
+ *     Properties used: severity.title, severity.class,
+ *     requirement.title, requirement.value, requirement.description
  *
  * @ingroup themeable
  */
-function theme_status_report($variables) {
-  $requirements = $variables['requirements'];
+function template_preprocess_status_report(&$variables) {
   $severities = array(
     REQUIREMENT_INFO => array(
       'title' => t('Info'),
@@ -1533,11 +1529,8 @@ function theme_status_report($variables) {
       'class' => 'error',
     ),
   );
-  $output = '<table class="system-status-report"><thead><tr class="element-invisible">';
-  $output .= '<th>' . t('Status') . '</th><th>' . t('Component') . '</th><th>' . t('Details') . '</th>';
-  $output .= '</tr></thead><tbody>';
 
-  foreach ($requirements as $requirement) {
+  foreach ($variables['requirements'] as $i => $requirement) {
     if (empty($requirement['#type'])) {
       // Always use the explicit requirement severity, if defined. Otherwise,
       // default to REQUIREMENT_OK in the installer to visually confirm that
@@ -1553,22 +1546,10 @@ function theme_status_report($variables) {
         $severity = $severities[REQUIREMENT_INFO];
       }
 
-      $severity['icon'] = '<div title="' . $severity['title'] . '"><span class="element-invisible">' . $severity['title'] . '</span></div>';
-
-      // Output table rows.
-      $output .= '<tr class="' . $severity['class'] . '">';
-      $output .= '<td class="status-icon">' . $severity['icon'] . '</td>';
-      $output .= '<td class="status-title">' . $requirement['title'] . '</td>';
-      $output .= '<td class="status-value">' . $requirement['value'];
-      if (!empty($requirement['description'])) {
-        $output .= '<div class="description">' . $requirement['description'] . '</div>';
-      }
-      $output .= '</td></tr>';
+      $variables['requirements'][$i]['severity_class'] = $severity['class'];
+      $variables['requirements'][$i]['severity_title'] = $severity['title'];
     }
   }
-
-  $output .= '</tbody></table>';
-  return $output;
 }
 
 /**
@@ -1640,19 +1621,6 @@ function theme_system_modules_details($variables) {
 }
 
 /**
- * Returns HTML for a message about incompatible modules.
- *
- * @param $variables
- *   An associative array containing:
- *   - message: The form array representing the currently disabled modules.
- *
- * @ingroup themeable
- */
-function theme_system_modules_incompatible($variables) {
-  return '<div class="incompatible">' . $variables['message'] . '</div>';
-}
-
-/**
  * Returns HTML for a table of currently disabled modules.
  *
  * @param $variables
@@ -1702,7 +1670,9 @@ function theme_system_modules_uninstall($variables) {
 }
 
 /**
- * Returns HTML for the Appearance page.
+ * Prepares variables for the appearance page template.
+ *
+ * Default template: system-themes-page.html.twig.
  *
  * @param $variables
  *   An associative array containing:
@@ -1710,10 +1680,16 @@ function theme_system_modules_uninstall($variables) {
  *
  * @ingroup themeable
  */
-function theme_system_themes_page($variables) {
+function template_preprocess_system_themes_page(&$variables) {
+  $groups = array();
   $theme_groups = $variables['theme_groups'];
 
-  $output = '<div id="system-themes-page">';
+  // Top level attributes.
+  $variables['attributes'] = !empty($variables['attributes']) ? new Attribute($variables['attributes']) : new Attribute();
+  // We have a default class variable that we don't want here.
+  // @see http://drupal.org/node/1938430
+  unset($variables['attributes']['class']);
+  $variables['attributes']['id'] = 'system-themes-page';
 
   foreach ($variables['theme_group_titles'] as $state => $title) {
     if (!count($theme_groups[$state])) {
@@ -1721,48 +1697,67 @@ function theme_system_themes_page($variables) {
       continue;
     }
     // Start new theme group.
-    $output .= '<div class="system-themes-list system-themes-list-'. $state .' clearfix"><h2>'. $title .'</h2>';
+    $theme_group = array();
+    $theme_group['state'] = $state;
+    $theme_group['title'] = $title;
+    $theme_group['themes'] = array();
+    $theme_group['attributes'] = new Attribute(array('class' => array('system-themes-list', 'system-themes-list-' . $state, 'clearfix')));
 
     foreach ($theme_groups[$state] as $theme) {
-
-      // Theme the screenshot.
-      $screenshot = $theme->screenshot ? theme('image', $theme->screenshot) : '<div class="no-screenshot">' . t('no screenshot') . '</div>';
+      $current_theme = array();
+
+      // Screenshot depicting the theme.
+      if ($theme->screenshot) {
+        $current_theme['screenshot'] = array(
+          '#theme' => 'image',
+          '#uri' => $theme->screenshot['uri'],
+          '#alt' => $theme->screenshot['alt'],
+          '#title' => $theme->screenshot['title'],
+          '#attributes' => $theme->screenshot['attributes'],
+        );
+      }
 
       // Localize the theme description.
-      $description = t($theme->info['description']);
+      $current_theme['description'] = t($theme->info['description']);
 
       // Style theme info
-      $notes = count($theme->notes) ? ' (' . join(', ', $theme->notes) . ')' : '';
       $theme->classes[] = 'theme-selector';
       $theme->classes[] = 'clearfix';
-      $output .= '<div class="'. join(' ', $theme->classes) .'">' . $screenshot . '<div class="theme-info"><h3>' . $theme->info['name'] . ' ' . (isset($theme->info['version']) ? $theme->info['version'] : '') . $notes . '</h3><div class="theme-description">' . $description . '</div>';
+      $current_theme['attributes'] = new Attribute(array('class' => $theme->classes));
+      $current_theme['name'] = $theme->info['name'];
+      $current_theme['version'] = isset($theme->info['version']) ? $theme->info['version'] : '';
+      $current_theme['notes'] = count($theme->notes) ? '(' . join(', ', $theme->notes) . ')' : '';
 
       // Make sure to provide feedback on compatibility.
       if (!empty($theme->incompatible_core)) {
-        $output .= '<div class="incompatible">' . t('This version is not compatible with Drupal !core_version and should be replaced.', array('!core_version' => DRUPAL_CORE_COMPATIBILITY)) . '</div>';
+        $current_theme['compatibility'] = t('This version is not compatible with Drupal !core_version and should be replaced.', array('!core_version' => DRUPAL_CORE_COMPATIBILITY));
       }
       elseif (!empty($theme->incompatible_php)) {
         if (substr_count($theme->info['php'], '.') < 2) {
           $theme->info['php'] .= '.*';
         }
-        $output .= '<div class="incompatible">' . t('This theme requires PHP version @php_required and is incompatible with PHP version !php_version.', array('@php_required' => $theme->info['php'], '!php_version' => phpversion())) . '</div>';
+        $current_theme['compatibility'] = t('This theme requires PHP version @php_required and is incompatible with PHP version !php_version.', array('@php_required' => $theme->info['php'], '!php_version' => phpversion()));
       }
       elseif (!empty($theme->incompatible_base)) {
-        $output .= '<div class="incompatible">' . t('This theme requires the base theme @base_theme to operate correctly.', array('@base_theme' => $theme->info['base theme'])) . '</div>';
+        $current_theme['compatibility'] = t('This theme requires the base theme @base_theme to operate correctly.', array('@base_theme' => $theme->info['base theme']));
       }
       elseif (!empty($theme->incompatible_engine)) {
-        $output .= '<div class="incompatible">' . t('This theme requires the theme engine @theme_engine to operate correctly.', array('@theme_engine' => $theme->info['engine'])) . '</div>';
+        $current_theme['compatibility'] = t('This theme requires the theme engine @theme_engine to operate correctly.', array('@theme_engine' => $theme->info['engine']));
       }
       else {
-        $output .= theme('links', array('links' => $theme->operations, 'attributes' => array('class' => array('operations', 'clearfix'))));
+        $current_theme['compatibility'] = array(
+          '#theme' => 'links',
+          '#links' => $theme->operations,
+          '#attributes' => new Attribute(array('class' => array('operations', 'clearfix'))),
+        );
       }
-      $output .= '</div></div>';
+      $theme_group['themes'][] = $current_theme;
     }
-    $output .= '</div>';
+    $groups[] = $theme_group;
   }
-  $output .= '</div>';
+  $variables['theme_groups'] = $groups;
+  $variables['admin_form'] = drupal_get_form('system_themes_admin_form', $variables['admin_theme_options']);
 
-  return $output;
 }
 
 /**
@@ -1858,7 +1853,11 @@ function system_date_format_language_overview_page() {
     $rows[] = $row;
   }
 
-  return theme('table', array('header' => $header, 'rows' => $rows));
+  return array(
+    '#theme' => 'table',
+    '#header' => $header,
+    '#rows' => $rows
+  );
 }
 
 /**
diff --git a/core/modules/system/system.module b/core/modules/system/system.module
index 54ae84b..276bfb8 100644
--- a/core/modules/system/system.module
+++ b/core/modules/system/system.module
@@ -9,8 +9,8 @@
 use Drupal\Core\Cache\Cache;
 use Drupal\Core\Language\Language;
 use Drupal\Core\Database\Database;
-use Drupal\Core\Utility\ModuleInfo;
 use Drupal\Core\TypedData\Primitive;
+use Drupal\Core\Utility\ModuleInfo;
 use Drupal\system\Plugin\Block\SystemMenuBlock;
 use Symfony\Component\HttpFoundation\JsonResponse;
 use Symfony\Component\HttpFoundation\Response;
@@ -140,8 +140,13 @@ function system_help($path, $arg) {
 function system_theme() {
   return array_merge(drupal_common_theme(), array(
     'system_themes_page' => array(
-      'variables' => array('theme_groups' => NULL),
+      'variables' => array(
+        'theme_groups' => array(),
+        'theme_group_titles' => array(),
+        'admin_theme_options' => array(),
+      ),
       'file' => 'system.admin.inc',
+      'template' => 'system-themes-page',
     ),
     'system_config_form' => array(
       'render element' => 'form',
@@ -153,46 +158,49 @@ function system_theme() {
       'render element' => 'form',
       'file' => 'system.admin.inc',
     ),
-    'system_modules_incompatible' => array(
-      'variables' => array('message' => NULL),
-      'file' => 'system.admin.inc',
-    ),
     'system_modules_uninstall' => array(
       'render element' => 'form',
       'file' => 'system.admin.inc',
     ),
     'status_report' => array(
-      'render element' => 'requirements',
+      'variables' => array('requirements' => array()),
       'file' => 'system.admin.inc',
+      'template' => 'status-report'
     ),
     'admin_page' => array(
-      'variables' => array('blocks' => NULL),
+      'variables' => array('blocks' => array()),
       'file' => 'system.admin.inc',
+      'template' => 'admin-page',
     ),
     'admin_block' => array(
-      'variables' => array('block' => NULL),
+      'variables' => array('block' => array()),
       'file' => 'system.admin.inc',
+      'template' => 'admin-block',
     ),
     'admin_block_content' => array(
-      'variables' => array('content' => NULL),
+      'variables' => array('content' => array()),
       'file' => 'system.admin.inc',
+      'template' => 'admin-block-content',
     ),
     'system_admin_index' => array(
-      'variables' => array('menu_items' => NULL),
+      'variables' => array('menu_items' => array()),
       'file' => 'system.admin.inc',
+      'template' => 'system-admin-index',
     ),
     'system_powered_by' => array(
       'variables' => array(),
+      'template' => 'system-powered-by',
     ),
     'system_compact_link' => array(
       'variables' => array(),
+      'template' => 'system-compact-link',
     ),
     'system_date_format_localize_form' => array(
       'render element' => 'form',
     ),
     'system_plugin_ui_form' => array(
-      'template' => 'system-plugin-ui-form',
       'render element' => 'form',
+      'template' => 'system-plugin-ui-form',
     ),
   ));
 }
@@ -2670,7 +2678,7 @@ function system_preprocess_block(&$variables) {
  * @param array $variables
  *   An associative array containing:
  *   - form: The plugin form elements.
-*/
+ */
 function template_preprocess_system_plugin_ui_form(&$variables) {
   drupal_add_css(drupal_get_path('module', 'system') . '/system.plugin.ui.css');
 }
@@ -3563,30 +3571,38 @@ function system_timezone($abbreviation = '', $offset = -1, $is_daylight_saving_t
 }
 
 /**
- * Returns HTML for the Powered by Drupal text.
+ * Prepares variables for the Powered by Drupal template.
+ *
+ * Default template: system-powered-by.html.twig.
+ *
+ * This doesn't do anything extra to prepare the template, but is given simply
+ * for example purposes.
  *
  * @ingroup themeable
  */
-function theme_system_powered_by() {
-  return '<span>' . t('Powered by <a href="@poweredby">Drupal</a>', array('@poweredby' => 'http://drupal.org')) . '</span>';
+function template_preprocess_system_powered_by(&$variables) {
 }
 
 /**
- * Returns HTML for a link to show or hide inline help descriptions.
+ * Prepare variables for system compact link templates.
+ *
+ * Default template: system-compact-link.html.twig.
  *
  * @ingroup themeable
  */
-function theme_system_compact_link() {
-  $output = '<div class="compact-link">';
+function template_preprocess_system_compact_link(&$variables) {
   if (system_admin_compact_mode()) {
-    $output .= l(t('Show descriptions'), 'admin/compact/off', array('attributes' => array('title' => t('Expand layout to include descriptions.')), 'query' => drupal_get_destination()));
+    $variables['link'] = l(t('Show descriptions'), 'admin/compact/off', array(
+      'query' => array(drupal_get_destination()),
+      'attributes' => array('title' => t('Expand layout to include descriptions.')),
+    ));
   }
   else {
-    $output .= l(t('Hide descriptions'), 'admin/compact/on', array('attributes' => array('title' => t('Compress layout by hiding descriptions.')), 'query' => drupal_get_destination()));
+    $variables['link'] = l(t('Hide descriptions'), 'admin/compact/on', array(
+      'query' => array(drupal_get_destination()),
+      'attributes' => array('title' => t('Compress layout by hiding descriptions.')),
+    ));
   }
-  $output .= '</div>';
-
-  return $output;
 }
 
 /**
@@ -3835,6 +3851,7 @@ function theme_system_config_form($variables) {
  *   A string containing an HTML-formatted form.
  *
  * @ingroup themeable
+ * @todo Move this out of system.module and back into theme.inc.
  */
 function theme_exposed_filters($variables) {
   $form = $variables['form'];
diff --git a/core/modules/system/templates/admin-block-content.html.twig b/core/modules/system/templates/admin-block-content.html.twig
new file mode 100644
index 0000000..80c0526
--- /dev/null
+++ b/core/modules/system/templates/admin-block-content.html.twig
@@ -0,0 +1,29 @@
+{#
+/**
+ * @file
+ * Default theme implementation for the content of an administrative block.
+ *
+ * Available variables:
+ * - content: An array containing information about the block. Each element
+ *   of the array represents an administrative menu item, and must at least
+ *   contain the keys 'title', 'href', and 'localized_options', which are
+ *   passed to l(). A 'description' key may also be provided.
+ * - attributes: Remaining HTML attributes to be aded to the element.
+ * - is_compact_mode: It defines if compact mode is used.
+ *
+ * @see template_preprocess()
+ * @see template_preprocess_admin_block_content()
+ *
+ * @ingroup themeable
+ */
+#}
+{% if content %}
+<dl{{ attributes }}>
+  {% for item in content %}
+    <dt>{{ item.link }}</dt>
+    {% if item.description %}
+      <dd>{{ item.description }}</dd>
+    {% endif %}
+  {% endfor %}
+</dl>
+{% endif %}
diff --git a/core/modules/system/templates/admin-block.html.twig b/core/modules/system/templates/admin-block.html.twig
new file mode 100644
index 0000000..986b959
--- /dev/null
+++ b/core/modules/system/templates/admin-block.html.twig
@@ -0,0 +1,26 @@
+{#
+/**
+ * @file
+ * Default theme implementation for an administrative block.
+ *
+ * Available variables:
+ * - block: An array of information about the block, including:
+ *   - show: A boolean flag indicating if the block should be displayed.
+ *   - title: The block title.
+ *   - content: (optional) The content of the block.
+ *   - description: (optional) A description of the block.
+ *     (description should only be output if content is not available).
+ *
+ * @see template_preprocess()
+ * @see template_preprocess_admin_block()
+ *
+ * @ingroup themeable
+ */
+#}
+{% if block.show %}
+<div class="admin-panel">
+  {% if block.title %}<h3>{{ block.title }}</h3>{% endif %}
+  {% if block.content %}<div class="body">{{ block.content }}</div>
+  {% elseif block.description %}<div class="description">{{ block.description }}</div>{% endif %}
+</div>
+{% endif %}
diff --git a/core/modules/system/templates/admin-page.html.twig b/core/modules/system/templates/admin-page.html.twig
new file mode 100644
index 0000000..ab16d6e
--- /dev/null
+++ b/core/modules/system/templates/admin-page.html.twig
@@ -0,0 +1,25 @@
+{#
+/**
+ * @file
+ * Default theme implementation for an administrative page.
+ *
+ * Available variables:
+ * - system_compact_link: Themed link to toggle compact view.
+ * - containers: An array of administrative blocks keyed by position: left or right.
+ *
+ * @see template_preprocess()
+ * @see template_preprocess_admin_page()
+ *
+ * @ingroup themeable
+ */
+#}
+<div class="admin clearfix">
+  {{ system_compact_link }}
+  {% for position, container in containers %}
+    <div class="{{ position }} clearfix">
+      {% for i in container.blocks|keys %}
+        {{ container.blocks[i] }}
+      {% endfor %}
+    </div>
+  {% endfor %}
+</div>
diff --git a/core/modules/system/templates/status-report.html.twig b/core/modules/system/templates/status-report.html.twig
new file mode 100644
index 0000000..f8b74d6
--- /dev/null
+++ b/core/modules/system/templates/status-report.html.twig
@@ -0,0 +1,40 @@
+{#
+/**
+ * Default theme implementation for the status report.
+ *
+ * Available variables:
+ * - requirements: contains multiple requirement instances. Each requirement
+ *     has .title, .value and .description.
+ * - severity: The severity of error. Contains .title and .class.
+ *
+ * @see template_preprocess()
+ * @see template_preprocess_status_report()
+ *
+ * @ingroup themeable
+ */
+#}
+<table class="system-status-report">
+  <thead>
+    <tr class="element-invisible">
+      <th>{{ 'Status'|t }}</th><th>{{ 'Component'|t }}</th><th>{{ 'Details'|t }}</th>
+    </tr>
+  </thead>
+  <tbody>
+  {% for i in requirements|keys %}
+    <tr class="{{ requirements[i].severity_class }}">
+      <td class="status-icon">
+        <div title="{{ requirements[i].severity_title }}">
+          <span class="element-invisible">{{ requirements[i].severity_title }}</span>
+        </div>
+      </td>
+      <td class="status-title">{{ requirements[i].title }}</td>
+      <td class="status-value">
+        {{ requirements[i].value }}
+        {% if requirements[i].description %}
+        <div class="description">{{ requirements[i].description }}</div>
+        {% endif %}
+      </td>
+    </tr>
+  {% endfor %}
+  </tbody>
+</table>
diff --git a/core/modules/system/templates/system-admin-index.html.twig b/core/modules/system/templates/system-admin-index.html.twig
new file mode 100644
index 0000000..54cf0e2
--- /dev/null
+++ b/core/modules/system/templates/system-admin-index.html.twig
@@ -0,0 +1,26 @@
+{#
+/**
+ * @file
+ * Default theme implementation for the admin index page.
+ *
+ * Available variables:
+ * - system_compact_link: Themed link to toggle compact view.
+ * - container: Container for admin blocks.
+ *
+ * @see template_preprocess()
+ * @see template_preprocess_system_admin_index()
+ *
+ * @ingroup themeable
+ */
+ @todo: remove this file once http://drupal.org/node/1842232 is resolved.
+#}
+<div class="admin clearfix">
+  {{ system_compact_link }}
+  {% for position, container in containers %}
+    <div class="{{ position }} clearfix">
+      {% for i in container.blocks|keys %}
+        {{ container.blocks[i] }}
+      {% endfor %}
+    </div>
+  {% endfor %}
+</div>
diff --git a/core/modules/system/templates/system-compact-link.html.twig b/core/modules/system/templates/system-compact-link.html.twig
new file mode 100644
index 0000000..a18efda
--- /dev/null
+++ b/core/modules/system/templates/system-compact-link.html.twig
@@ -0,0 +1,13 @@
+{#
+/**
+ * @file
+ * Default theme implementation for a link to show or hide inline help
+ *   descriptions.
+ *
+ * @see template_preprocess()
+ * @see template_preprocess_system_compact_link()
+ *
+ * @ingroup themeable
+ */
+#}
+<div class="compact-link">{{ link }}</div>
diff --git a/core/modules/system/templates/system-modules-details.html.twig b/core/modules/system/templates/system-modules-details.html.twig
new file mode 100644
index 0000000..6321b28
--- /dev/null
+++ b/core/modules/system/templates/system-modules-details.html.twig
@@ -0,0 +1,15 @@
+{#
+/**
+ * @file
+ * Default theme implementation to display the modules form.
+ *
+ * Available variables:
+ * - content: file form element html.
+ *
+ * @see template_preprocess()
+ * @see template_preprocess_system_modules_details()
+ *
+ * @ingroup themeable
+ */
+#}
+{{ content }}
diff --git a/core/modules/system/templates/system-powered-by.html.twig b/core/modules/system/templates/system-powered-by.html.twig
new file mode 100644
index 0000000..fa7dd32
--- /dev/null
+++ b/core/modules/system/templates/system-powered-by.html.twig
@@ -0,0 +1,12 @@
+{#
+/**
+ * @file
+ * Default theme implementation for the Powered by Drupal text.
+ *
+ * @see template_preprocess()
+ * @see template_preprocess_system_powered_by()
+ *
+ * @ingroup themeable
+ */
+#}
+<span>{{ 'Powered by <a href="http://drupal.org">Drupal</a>'|t }}</span>
diff --git a/core/modules/system/templates/system-themes-page.html.twig b/core/modules/system/templates/system-themes-page.html.twig
new file mode 100644
index 0000000..c20544a
--- /dev/null
+++ b/core/modules/system/templates/system-themes-page.html.twig
@@ -0,0 +1,58 @@
+{#
+/**
+ * @file
+ * Default theme implementation for the Appearance page.
+ *
+ * Available variables:
+ * - attributes: HTML element attributes.
+ * - theme_groups: An array of theme groups.
+ *
+ * Each theme_groups[group] contains an array of theme groups.
+ *
+ * Each group in theme_groups[group] contains:
+ * - group.attributes: Element attributes specific to this group.
+ * - group.title: Title for the theme group.
+ * - group.state: State of the theme group.
+ * - group.themes: An array of themes within that group.
+ *
+ * Each group.themes[theme] contains an array of themes.
+ *
+ * Each theme in group.themes[theme] contains:
+ * - theme.attributes: Element attributes specific to this theme.
+ * - theme.screenshot: Render of theme screenshot.
+ * - theme.description: Description of the theme.
+ * - theme.name: Name of theme.
+ * - theme.version: Verions number of theme.
+ * - theme.notes: Identifies what context this theme is being used.
+ *   eg. (default theme, admin theme)
+ * - theme.compatibility: Description of any incompatibility issues,
+ *   if the theme is compatible, provides a list of links.
+ *
+ * @see template_preprocess()
+ * @see template_preprocess_system_themes_page()
+ *
+ * @ingroup themeable
+ */
+#}
+<div{{ attributes }}>
+  {% for group_key in theme_groups|keys %}
+    <div class="{{ theme_groups[group_key].attributes.class }}"{{ theme_groups[group_key].attributes }}>
+      <h2>{{ theme_groups[group_key].title }}</h2>
+      {% for theme_key in theme_groups[group_key].themes|keys %}
+        <div class="{{ theme_groups[group_key].themes[theme_key].attributes.class }}"{{ theme_groups[group_key].themes[theme_key].attributes }}>
+          {% if theme_groups[group_key].themes[theme_key].screenshot %}
+            {{ theme_groups[group_key].themes[theme_key].screenshot }}
+          {% else %}
+            <div class="no-screenshot">{{ "no screenshot"|t }}</div>
+          {% endif %}
+          <div class="theme-info">
+            <h3>{{ theme_groups[group_key].themes[theme_key].name }} {{ theme_groups[group_key].themes[theme_key].version }} {{ theme_groups[group_key].themes[theme_key].notes }}</h3>
+            <div class="theme-description">{{ theme_groups[group_key].themes[theme_key].description }}</div>
+            {{ theme_groups[group_key].themes[theme_key].compatibility }}
+          </div>
+        </div>
+      {% endfor %}
+    </div>
+  {% endfor %}
+</div>
+{{ admin_form }}
