diff --git a/core/modules/filter/filter.admin.inc b/core/modules/filter/filter.admin.inc
index 806c1d7..8924b9e 100644
--- a/core/modules/filter/filter.admin.inc
+++ b/core/modules/filter/filter.admin.inc
@@ -5,6 +5,8 @@
  * Administrative page callbacks for the Filter module.
  */
 
+use Drupal\Core\Template\Attribute;
+
 /**
  * Page callback: Form constructor for a form to list and reorder text formats.
  *
@@ -299,7 +301,7 @@ function filter_admin_format_form($form, &$form_state, $format) {
  *
  * @ingroup themeable
  */
-function theme_filter_admin_format_filter_order($variables) {
+function template_preprocess_filter_admin_format_filter_order($variables) {
   $element = $variables['element'];
 
   // Filter order (tabledrag).
@@ -317,8 +319,47 @@ function theme_filter_admin_format_filter_order($variables) {
   $output = drupal_render_children($element);
   $output .= theme('table', array('rows' => $rows, 'attributes' => array('id' => 'filter-order')));
   drupal_add_tabledrag('filter-order', 'order', 'sibling', 'filter-order-weight', NULL, NULL, TRUE);
+  $variables['content'] = $output;
+
+}
+
+/**
+ * Preprocess HTML for text format administration overview form templates.
+ *
+ * @param $variables
+ *   An associative array containing:
+ *   - form: A render element representing the form.
+ *
+ * @see filter-admin-overview.html.twig
+ */
+function template_preprocess_filter_admin_overview(&$variables) {
+  $form = $variables['form'];
+
+  // Format the form as a table.
+  // @todo Maybe let templates decide format?
+  // @see http://drupal.org/node/1777532
+  $rows = array();
+  foreach (element_children($form['formats']) as $id) {
+    $form['formats'][$id]['weight']['#attributes']['class'] = array('text-format-order-weight');
+
+    $rows[] = array(
+      'data' => array(
+        drupal_render($form['formats'][$id]['name']),
+        drupal_render($form['formats'][$id]['roles']),
+        drupal_render($form['formats'][$id]['weight']),
+        drupal_render($form['formats'][$id]['operations']),
+      ),
+      'class' => array('draggable'),
+    );
+  }
+
+  drupal_add_tabledrag('text-format-order', 'order', 'sibling', 'text-format-order-weight');
+  $header = array(t('Name'), t('Roles'), t('Weight'), t('Operations'));
+  $attributes = new Attribute(array('id' => 'text-format-order'));
+  $variables['table'] = theme('table', array('header' => $header, 'rows' => $rows, 'attributes' => $attributes));
 
-  return $output;
+  // We call the rest of the form 'children'.
+  $variables['children'] = drupal_render_children($form);
 }
 
 /**
diff --git a/core/modules/filter/filter.module b/core/modules/filter/filter.module
index 725d931..28608fa 100644
--- a/core/modules/filter/filter.module
+++ b/core/modules/filter/filter.module
@@ -74,22 +74,32 @@ function filter_help($path, $arg) {
  */
 function filter_theme() {
   return array(
+    'filter_admin_overview' => array(
+      'render element' => 'form',
+      'file' => 'filter.admin.inc',
+      'template' => 'filter-admin-overview',
+    ),
     'filter_admin_format_filter_order' => array(
       'render element' => 'element',
       'file' => 'filter.admin.inc',
+      'template' => 'filter-admin-format-filter-order'
     ),
     'filter_tips' => array(
       'variables' => array('tips' => NULL, 'long' => FALSE),
       'file' => 'filter.pages.inc',
+      'template' => 'filter-tips',
     ),
     'text_format_wrapper' => array(
       'render element' => 'element',
+      'template' => 'text-format-wrapper',
     ),
     'filter_tips_more_info' => array(
       'variables' => array(),
+      'template' => 'filter-tips-more-info',
     ),
     'filter_guidelines' => array(
       'variables' => array('format' => NULL),
+      'template' => 'filter-guidelines',
     ),
     'filter_html_image_secure_image' => array(
       'variables' => array('image' => NULL),
@@ -989,24 +999,20 @@ function filter_form_access_denied($element) {
 }
 
 /**
- * Returns HTML for a text format-enabled form element.
+ * Preprocess variables for the text-format-wrapper template.
  *
- * @param array $variables
+ * @param $variables
  *   An associative array containing:
  *   - element: A render element containing #children and #description.
  *
  * @ingroup themeable
  */
-function theme_text_format_wrapper($variables) {
+function template_preprocess_text_format_wrapper(&$variables) {
   $element = $variables['element'];
-  $output = '<div class="text-format-wrapper form-item">';
-  $output .= $element['#children'];
-  if (!empty($element['#description'])) {
-    $output .= '<div class="description">' . $element['#description'] . '</div>';
+  $variables['children'] = $element['#children'];
+  if ($element['#description'] != '') {
+    $variables['description'] = $element['#description'];
   }
-  $output .= "</div>\n";
-
-  return $output;
 }
 
 /**
@@ -1180,34 +1186,19 @@ function filter_dom_serialize_escape_cdata_element($dom_document, $dom_element,
 }
 
 /**
- * Returns HTML for a link to the more extensive filter tips.
- *
- * @ingroup themeable
+ * Preprocess filter_guidelines template.
  */
-function theme_filter_tips_more_info() {
-  return '<p>' . l(t('More information about text formats'), 'filter/tips', array('attributes' => array('target' => '_blank'))) . '</p>';
+function template_preprocess_filter_guidelines(&$variables) {
+  $variables['tips']['#tips'] = _filter_tips($variables['format']->format, FALSE);
+  $variables['tips']['#theme'] = 'filter_tips';
 }
 
 /**
- * Returns HTML for guidelines for a text format.
- *
- * @param array $variables
- *   An associative array containing:
- *   - format: An object representing a text format.
- *
- * @ingroup themeable
+ * Preprocess filter_guidelines template.
  */
-function theme_filter_guidelines($variables) {
-  $format = $variables['format'];
-  $attributes['class'][] = 'filter-guidelines-item';
-  $attributes['class'][] = 'filter-guidelines-' . $format->format;
-  $output = '<div' . new Attribute($attributes) . '>';
-  $output .= '<h4 class="label">' . check_plain($format->name) . '</h4>';
-  $output .= theme('filter_tips', array('tips' => _filter_tips($format->format, FALSE)));
-  $output .= '</div>';
-  return $output;
+function template_preprocess_filter_tips(&$variables) {
+  $variables['multiple'] = count($variables['tips']) > 1;
 }
-
 /**
  * @defgroup standard_filters Standard filters
  * @{
@@ -1829,7 +1820,7 @@ function _filter_html_image_secure_process($text) {
  * @see _filter_html_image_secure_process()
  * @ingroup themeable
  */
-function theme_filter_html_image_secure_image(&$variables) {
+function template_preprocess_filter_html_image_secure_image(&$variables) {
   $image = $variables['image'];
 
   // Turn an invalid image into an error indicator.
diff --git a/core/modules/filter/filter.pages.inc b/core/modules/filter/filter.pages.inc
index 5b20d4f..134c1be 100644
--- a/core/modules/filter/filter.pages.inc
+++ b/core/modules/filter/filter.pages.inc
@@ -26,69 +26,3 @@ function filter_tips_long($format = NULL) {
   }
   return $output;
 }
-
-/**
- * Returns HTML for a set of filter tips.
- *
- * @param array $variables
- *   An associative array containing:
- *   - tips: An array containing descriptions and a CSS ID in the form of
- *     'module-name/filter-id' (only used when $long is TRUE) for each
- *     filter in one or more text formats. Example:
- *     @code
- *       array(
- *         'Full HTML' => array(
- *           0 => array(
- *             'tip' => 'Web page addresses and e-mail addresses turn into links automatically.',
- *             'id' => 'filter/2',
- *           ),
- *         ),
- *       );
- *     @endcode
- *   - long: (optional) Whether the passed-in filter tips contain extended
- *     explanations, i.e. intended to be output on the path 'filter/tips'
- *     (TRUE), or are in a short format, i.e. suitable to be displayed below a
- *     form element. Defaults to FALSE.
- *
- * @see _filter_tips()
- * @ingroup themeable
- */
-function theme_filter_tips($variables) {
-  $tips = $variables['tips'];
-  $long = $variables['long'];
-  $output = '';
-
-  $multiple = count($tips) > 1;
-  if ($multiple) {
-    $output = '<h2>' . t('Text Formats') . '</h2>';
-  }
-
-  if (count($tips)) {
-    if ($multiple) {
-      $output .= '<div class="compose-tips">';
-    }
-    foreach ($tips as $name => $tiplist) {
-      if ($multiple) {
-        $output .= '<div class="filter-type filter-' . drupal_html_class($name) . '">';
-        $output .= '<h3>' . $name . '</h3>';
-      }
-
-      if (count($tiplist) > 0) {
-        $output .= '<ul class="tips">';
-        foreach ($tiplist as $tip) {
-          $output .= '<li' . ($long ? ' class="filter-' . str_replace("/", "-", $tip['id']) . '">' : '>') . $tip['tip'] . '</li>';
-        }
-        $output .= '</ul>';
-      }
-
-      if ($multiple) {
-        $output .= '</div>';
-      }
-    }
-    if ($multiple) {
-      $output .= '</div>';
-    }
-  }
-
-  return $output;
-}
diff --git a/core/modules/filter/templates/filter-admin-format-filter-order.html.twig b/core/modules/filter/templates/filter-admin-format-filter-order.html.twig
new file mode 100644
index 0000000..8781a42
--- /dev/null
+++ b/core/modules/filter/templates/filter-admin-format-filter-order.html.twig
@@ -0,0 +1,16 @@
+{#
+/**
+ * @file
+ * Default theme implementation for admin format filter order in the admin interface.
+ *
+ * Available variables:
+ * - content: An HTML .
+ *
+ *
+ * @see template_preprocess()
+ * @see template_preprocess_filter_admin_format_filter_order()
+ *
+ * @ingroup themeable
+ */
+#}
+{{ content }}
diff --git a/core/modules/filter/templates/filter-admin-overview.html.twig b/core/modules/filter/templates/filter-admin-overview.html.twig
new file mode 100644
index 0000000..bcbdc4c
--- /dev/null
+++ b/core/modules/filter/templates/filter-admin-overview.html.twig
@@ -0,0 +1,18 @@
+{#
+/**
+ * @file
+ * Default theme implementation for an 'Text formats' (filters) administrative
+ * overview page.
+ *
+ * Available variables:
+ * - table: HTML for a table of text formats and their available operations.
+ * - children: The rendered form element children for this page.
+ *
+ * @see template_preprocess()
+ * @see template_preprocess_filter_admin_overview()
+ *
+ * @ingroup themeable
+ */
+#}
+{{ table }}
+{{ children }}
diff --git a/core/modules/filter/templates/filter-guidelines.html.twig b/core/modules/filter/templates/filter-guidelines.html.twig
new file mode 100644
index 0000000..ca12dab
--- /dev/null
+++ b/core/modules/filter/templates/filter-guidelines.html.twig
@@ -0,0 +1,23 @@
+{#
+/**
+ * @file
+ * Default theme implementation for guidelines for a text format.
+ *
+ * Available variables:
+ * - format: An object representing a text format.
+ * - attributes: Remaining html attributes for the containing element.
+ * - tips: Descriptions and a CSS id in the form of 'module-name/filter-id'
+ *   (only used when $long is TRUE) for each filter in one or more text
+ *   formats.
+ *
+ * @TODO update include path once http://drupal.org/node/1777532 is resolved.
+ *
+ * @see template_preprocess()
+ *
+ * @ingroup themeable
+ */
+ #}
+<div class="{{ attributes.class }}"{{ attributes }}>
+  <h3>{{ format.name }}</h3>
+  {{ tips }}
+</div>
diff --git a/core/modules/filter/templates/filter-tips-more-info.html.twig b/core/modules/filter/templates/filter-tips-more-info.html.twig
new file mode 100644
index 0000000..59b3290
--- /dev/null
+++ b/core/modules/filter/templates/filter-tips-more-info.html.twig
@@ -0,0 +1,16 @@
+{#
+/**
+ * @file
+ * Default theme implementation for a link to the more extensive filter tips.
+ *
+ * Available variables:
+ *
+ * @see template_preprocess()
+ * @see template_preprocess_filter_tips_more_info()
+ *
+ * @ingroup themeable
+ */
+ @todo: clean up once http://drupal.org/node/1812562 is resolved
+ @todo: remove this file once http://drupal.org/node/1595614 is resolved?
+#}
+<p><a href="filter/tips" target="_blank">{{ 'More information about text formats' | t }}</a></p>
diff --git a/core/modules/filter/templates/filter-tips.html.twig b/core/modules/filter/templates/filter-tips.html.twig
new file mode 100644
index 0000000..a5252da
--- /dev/null
+++ b/core/modules/filter/templates/filter-tips.html.twig
@@ -0,0 +1,55 @@
+{#
+/**
+ * @file
+ * Default theme implementation for a set of filter tips.
+ *
+ * Available variables:
+ * - tips: Descriptions and a CSS id in the form of 'module-name/filter-id'
+ *   (only used when $long is TRUE) for each filter in one or more text
+ *   formats.
+ * - long: (optional) Whether the passed-in filter tips contain extended
+ *   explanations, i.e. intended to be output on the path 'filter/tips'
+ *   (TRUE), or are in a short format, i.e. suitable to be displayed below a
+ *   form element. Defaults to FALSE.
+ *
+ * @TODO reimplement once http://drupal.org/node/1778624 gets resolved.
+ *
+ * @see template_preprocess()
+ * @see _filter_tips()
+ *
+ * @ingroup themeable
+ */
+#}
+{% if multiple %}
+  <h2>{{ 'Text Formats' | t }}</h2>
+{% endif %}
+
+{% if tips|length %}
+  {% if multiple %}
+    <div class="compose-tips">
+  {% endif %}
+
+  {% for name, tiplist in tips %}
+    {% if multiple %}
+     <div class="filter-type filter-{{ name }}">
+      <h3>{{ name }}</h3>
+    {% endif %}
+
+    {% if tiplist|length > 0 %}
+      <ul class="tips">
+      {% for tip in tiplist %}
+        {# Only set the class if the type is long #}
+        <li class="{{ long ? "filter-#" + tip.id : "" }}">{{ tip.tip }}</li>
+      {% endfor %}
+      </ul>
+    {% endif %}
+
+    {% if multiple %}
+      </div>
+    {% endif %}
+  {% endfor %}
+
+  {% if multiple %}
+    </div>
+  {% endif %}
+{% endif %}
diff --git a/core/modules/filter/templates/text-format-wrapper.html.twig b/core/modules/filter/templates/text-format-wrapper.html.twig
new file mode 100644
index 0000000..2ac9de5
--- /dev/null
+++ b/core/modules/filter/templates/text-format-wrapper.html.twig
@@ -0,0 +1,22 @@
+{#
+/**
+ * @file
+ * Default theme implementation for a text format-enabled form element.
+ *
+ * Available variables:
+ * - children: Text format element children.
+ * - description: Text format element description.
+ *
+ * @see template_preprocess()
+ * @see theme_text_format_wrapper()
+ *
+ * @ingroup themeable
+ */
+#}
+<div class="text-format-wrapper">
+  {{ children }}
+  {% if description is defined %}
+  <div class="description">{{ description }}</div>
+  {% endif %}
+</div>
+
