diff --git a/core/modules/ckeditor/lib/Drupal/ckeditor/Tests/CKEditorAdminTest.php b/core/modules/ckeditor/lib/Drupal/ckeditor/Tests/CKEditorAdminTest.php
index bb17201..0ca0425 100644
--- a/core/modules/ckeditor/lib/Drupal/ckeditor/Tests/CKEditorAdminTest.php
+++ b/core/modules/ckeditor/lib/Drupal/ckeditor/Tests/CKEditorAdminTest.php
@@ -51,7 +51,7 @@ function testAdmin() {
     $ckeditor = $manager->createInstance('ckeditor');
 
     $this->drupalLogin($this->admin_user);
-    $this->drupalGet('admin/config/content/formats/filtered_html');
+    $this->drupalGet('admin/config/content/formats/manage/filtered_html');
 
     // Ensure no Editor config entity exists yet.
     $editor = entity_load('editor', 'filtered_html');
@@ -114,7 +114,7 @@ function testAdmin() {
     $this->assertIdentical($expected_settings, $editor->settings, 'The Editor config entity has the correct settings.');
 
     // Configure the Styles plugin, and ensure the updated settings are saved.
-    $this->drupalGet('admin/config/content/formats/filtered_html');
+    $this->drupalGet('admin/config/content/formats/manage/filtered_html');
     $edit = array(
       'editor[settings][plugins][stylescombo][styles]' => "h1.title|Title\np.callout|Callout\n\n",
     );
@@ -127,7 +127,7 @@ function testAdmin() {
     // Change the buttons that appear on the toolbar (in JavaScript, this is
     // done via drag and drop, but here we can only emulate the end result of
     // that interaction). Test multiple toolbar rows and a divider within a row.
-    $this->drupalGet('admin/config/content/formats/filtered_html');
+    $this->drupalGet('admin/config/content/formats/manage/filtered_html');
     $expected_settings['toolbar']['buttons'] = array(
       array('Undo', '|', 'Redo'),
       array('JustifyCenter'),
@@ -144,7 +144,7 @@ function testAdmin() {
     // CKEditor plugin — this should not affect the Editor config entity.
     module_enable(array('ckeditor_test'));
     drupal_container()->get('plugin.manager.ckeditor.plugin')->clearCachedDefinitions();
-    $this->drupalGet('admin/config/content/formats/filtered_html');
+    $this->drupalGet('admin/config/content/formats/manage/filtered_html');
     $ultra_llama_mode_checkbox = $this->xpath('//input[@type="checkbox" and @name="editor[settings][plugins][llama_contextual_and_button][ultra_llama_mode]" and not(@checked)]');
     $this->assertTrue(count($ultra_llama_mode_checkbox) === 1, 'The "Ultra llama mode" checkbox exists and is not checked.');
     $editor = entity_load('editor', 'filtered_html');
@@ -152,12 +152,12 @@ function testAdmin() {
     $this->assertIdentical($expected_settings, $editor->settings, 'The Editor config entity has the correct settings.');
 
     // Finally, check the "Ultra llama mode" checkbox.
-    $this->drupalGet('admin/config/content/formats/filtered_html');
+    $this->drupalGet('admin/config/content/formats/manage/filtered_html');
     $edit = array(
       'editor[settings][plugins][llama_contextual_and_button][ultra_llama_mode]' => '1',
     );
     $this->drupalPost(NULL, $edit, t('Save configuration'));
-    $this->drupalGet('admin/config/content/formats/filtered_html');
+    $this->drupalGet('admin/config/content/formats/manage/filtered_html');
     $ultra_llama_mode_checkbox = $this->xpath('//input[@type="checkbox" and @name="editor[settings][plugins][llama_contextual_and_button][ultra_llama_mode]" and @checked="checked"]');
     $this->assertTrue(count($ultra_llama_mode_checkbox) === 1, 'The "Ultra llama mode" checkbox exists and is checked.');
     $expected_settings['plugins']['llama_contextual_and_button']['ultra_llama_mode'] = '1';
diff --git a/core/modules/editor/editor.module b/core/modules/editor/editor.module
index 0f317b9..ede4337 100644
--- a/core/modules/editor/editor.module
+++ b/core/modules/editor/editor.module
@@ -142,11 +142,11 @@ function editor_form_filter_admin_overview_alter(&$form, $form_state) {
 }
 
 /**
- * Implements hook_form_FORM_ID_alter().
+ * Implements hook_form_BASE_FORM_ID_alter() for 'filter_format_form'.
  */
-function editor_form_filter_admin_format_form_alter(&$form, &$form_state) {
+function editor_form_filter_format_form_alter(&$form, &$form_state) {
   if (!isset($form_state['editor'])) {
-    $format_id = $form['#format']->format;
+    $format_id = $form_state['controller']->getEntity()->id();
     $form_state['editor'] = editor_load($format_id);
     $form_state['editor_manager'] = drupal_container()->get('plugin.manager.editor');
   }
@@ -207,14 +207,14 @@ function editor_form_filter_admin_format_form_alter(&$form, &$form_state) {
     $settings_form['#element_validate'][] = array($plugin, 'settingsFormValidate');
     $form['editor']['settings']['subform'] = $plugin->settingsForm($settings_form, $form_state, $editor);
     $form['editor']['settings']['subform']['#parents'] = array('editor', 'settings');
-    $form['#submit'][] = array($plugin, 'settingsFormSubmit');
+    $form['actions']['submit']['#submit'][] = array($plugin, 'settingsFormSubmit');
   }
 
-  $form['#submit'][] = 'editor_form_filter_admin_format_submit';
+  $form['actions']['submit']['#submit'][] = 'editor_form_filter_admin_format_submit';
 }
 
 /**
- * Button submit handler for filter_admin_format_form()'s 'editor_configure' button.
+ * Button submit handler for filter_format_form()'s 'editor_configure' button.
  */
 function editor_form_filter_admin_format_editor_configure($form, &$form_state) {
   $editor = $form_state['editor'];
@@ -224,7 +224,7 @@ function editor_form_filter_admin_format_editor_configure($form, &$form_state) {
     }
     elseif (empty($editor) || $form_state['values']['editor']['editor'] !== $editor->editor) {
       $editor = entity_create('editor', array(
-        'format' => $form['#format']->format,
+        'format' => $form_state['controller']->getEntity()->id(),
         'editor' => $form_state['values']['editor']['editor'],
       ));
       $form_state['editor'] = $editor;
@@ -234,18 +234,18 @@ function editor_form_filter_admin_format_editor_configure($form, &$form_state) {
 }
 
 /**
- * AJAX callback handler for filter_admin_format_form().
+ * AJAX callback handler for filter_format_form().
  */
 function editor_form_filter_admin_form_ajax($form, &$form_state) {
   return $form['editor']['settings'];
 }
 
 /**
- * Additional submit handler for filter_admin_format_form().
+ * Additional submit handler for filter_format_form().
  */
 function editor_form_filter_admin_format_submit($form, &$form_state) {
   // Delete the existing editor if disabling or switching between editors.
-  $format_id = $form['#format']->format;
+  $format_id = $form_state['controller']->getEntity()->id();
   $original_editor = editor_load($format_id);
   if ($original_editor && $original_editor->editor != $form_state['values']['editor']) {
     $original_editor->delete();
@@ -255,7 +255,7 @@ function editor_form_filter_admin_format_submit($form, &$form_state) {
   if ($form_state['values']['editor']['editor'] !== '') {
     // Ensure the text format is set: when creating a new text format, this
     // would equal the empty string.
-    $form_state['editor']->format = $form['#format']->format;
+    $form_state['editor']->format = $format_id;
     $form_state['editor']->settings = $form_state['values']['editor']['settings'];
     $form_state['editor']->save();
   }
diff --git a/core/modules/editor/lib/Drupal/editor/Tests/EditorAdminTest.php b/core/modules/editor/lib/Drupal/editor/Tests/EditorAdminTest.php
index 27cc458..0bc89e1 100644
--- a/core/modules/editor/lib/Drupal/editor/Tests/EditorAdminTest.php
+++ b/core/modules/editor/lib/Drupal/editor/Tests/EditorAdminTest.php
@@ -50,7 +50,7 @@ function setUp() {
    */
   function testNoEditorAvailable() {
     $this->drupalLogin($this->admin_user);
-    $this->drupalGet('admin/config/content/formats/filtered_html');
+    $this->drupalGet('admin/config/content/formats/manage/filtered_html');
 
     // Ensure the form field order is correct.
     $roles_pos = strpos($this->drupalGetContent(), 'Roles');
@@ -75,7 +75,7 @@ function testNoEditorAvailable() {
   function testAddEditorToExistingFormat() {
     $this->enableUnicornEditor();
     $this->drupalLogin($this->admin_user);
-    $this->drupalGet('admin/config/content/formats/filtered_html');
+    $this->drupalGet('admin/config/content/formats/manage/filtered_html');
     $edit = $this->selectUnicornEditor();
     // Configure Unicorn Editor's setting to another value.
     $edit['editor[settings][foo]'] = 'baz';
@@ -155,7 +155,7 @@ protected function verifyUnicornEditorConfiguration($format_id, $foo = 'bar') {
     $this->assertIdentical($editor->settings['ponies too'], true, 'The text editor defaults are retrieved correctly.');
     $this->assertIdentical($editor->settings['rainbows'], true, 'The text editor defaults added by hook_editor_settings_defaults() are retrieved correctly.');
     $this->assertIdentical($editor->settings['sparkles'], false, 'The text editor defaults modified by hook_editor_settings_defaults_alter() are retrieved correctly.');
-    $this->drupalGet('admin/config/content/formats/'. $format_id);
+    $this->drupalGet('admin/config/content/formats/manage/'. $format_id);
     $select = $this->xpath('//select[@name="editor[editor]"]');
     $select_is_disabled = $this->xpath('//select[@name="editor[editor]" and @disabled="disabled"]');
     $options = $this->xpath('//select[@name="editor[editor]"]/option');
diff --git a/core/modules/filter/filter.admin.inc b/core/modules/filter/filter.admin.inc
deleted file mode 100644
index a4493a9..0000000
--- a/core/modules/filter/filter.admin.inc
+++ /dev/null
@@ -1,348 +0,0 @@
-<?php
-
-/**
- * @file
- * Administrative page callbacks for the Filter module.
- */
-
-/**
- * Page callback: Form constructor for a form to list and reorder text formats.
- *
- * @see filter_menu()
- * @see filter_admin_overview_submit()
- * @ingroup forms
- */
-function filter_admin_overview($form) {
-  // Overview of all formats.
-  $formats = filter_formats();
-  $fallback_format = filter_fallback_format();
-
-  $form['#tree'] = TRUE;
-  $form['formats'] = array(
-    '#type' => 'table',
-    '#header' => array(t('Name'), t('Roles'), t('Weight'), t('Operations')),
-    '#tabledrag' => array(
-      array('order', 'sibling', 'text-format-order-weight'),
-    ),
-  );
-  foreach ($formats as $id => $format) {
-    $form['formats'][$id]['#attributes']['class'][] = 'draggable';
-    $form['formats'][$id]['#weight'] = $format->weight;
-
-    $links = array();
-    $links['configure'] = array(
-      'title' => t('configure'),
-      'href' => "admin/config/content/formats/$id",
-    );
-    // Check whether this is the fallback text format. This format is available
-    // to all roles and cannot be disabled via the admin interface.
-    $form['formats'][$id]['#is_fallback'] = ($id == $fallback_format);
-    if ($form['formats'][$id]['#is_fallback']) {
-      $form['formats'][$id]['name'] = array('#markup' => drupal_placeholder($format->name));
-      if (config('filter.settings')->get('always_show_fallback_choice')) {
-        $roles_markup = drupal_placeholder(t('All roles may use this format'));
-      }
-      else {
-        $roles_markup = drupal_placeholder(t('This format is shown when no other formats are available'));
-      }
-    }
-    else {
-      $form['formats'][$id]['name'] = array('#markup' => check_plain($format->name));
-      $roles = array_map('check_plain', filter_get_roles_by_format($format));
-      $roles_markup = $roles ? implode(', ', $roles) : t('No roles may use this format');
-      $links['disable'] = array(
-        'title' => t('disable'),
-        'href' => "admin/config/content/formats/$id/disable",
-      );
-    }
-
-    $form['formats'][$id]['roles'] = array('#markup' => $roles_markup);
-
-    $form['formats'][$id]['weight'] = array(
-      '#type' => 'weight',
-      '#title' => t('Weight for @title', array('@title' => $format->name)),
-      '#title_display' => 'invisible',
-      '#default_value' => $format->weight,
-      '#attributes' => array('class' => array('text-format-order-weight')),
-    );
-
-    $form['formats'][$id]['operations'] = array(
-      '#type' => 'operations',
-      '#links' => $links,
-    );
-  }
-  $form['actions'] = array('#type' => 'actions');
-  $form['actions']['submit'] = array('#type' => 'submit', '#value' => t('Save changes'));
-  return $form;
-}
-
-/**
- * Form submission handler for filter_admin_overview().
- */
-function filter_admin_overview_submit($form, &$form_state) {
-  $filter_formats = filter_formats();
-  foreach ($form_state['values']['formats'] as $id => $data) {
-    // Only update if this is a form element with weight.
-    if (is_array($data) && isset($data['weight'])) {
-      $filter_formats[$id]->set('weight', $data['weight']);
-      $filter_formats[$id]->save();
-    }
-  }
-  filter_formats_reset();
-  drupal_set_message(t('The text format ordering has been saved.'));
-}
-
-/**
- * Page callback: Displays the text format add/edit form.
- *
- * @param object|null $format
- *   (optional) An object representing a format, with the following properties:
- *   - format: A machine-readable name representing the ID of the text format
- *     to save. If this corresponds to an existing text format, that format
- *     will be updated; otherwise, a new format will be created.
- *   - name: The title of the text format.
- *   - cache: An integer indicating whether the text format is cacheable (1) or
- *     not (0). Defaults to 1.
- *   - status: (optional) An integer indicating whether the text format is
- *     enabled (1) or not (0). Defaults to 1.
- *   - weight: (optional) The weight of the text format, which controls its
- *     placement in text format lists. If omitted, the weight is set to 0.
- *     Defaults to NULL.
- *
- * @return
- *   A form array.
- *
- * @see filter_menu()
- */
-function filter_admin_format_page($format = NULL) {
-  if (!isset($format->name)) {
-    drupal_set_title(t('Add text format'));
-
-    $format = entity_create('filter_format', array());
-  }
-  return drupal_get_form('filter_admin_format_form', $format);
-}
-
-/**
- * Form constructor for the text format add/edit form.
- *
- * @param $format
- *   A format object having the properties:
- *   - format: A machine-readable name representing the ID of the text format to
- *     save. If this corresponds to an existing text format, that format will be
- *     updated; otherwise, a new format will be created.
- *   - name: The title of the text format.
- *   - cache: (optional) An integer indicating whether the text format is
- *     cacheable (1) or not (0). Defaults to 1.
- *   - status: (optional) An integer indicating whether the text format is
- *     enabled (1) or not (0). Defaults to 1.
- *   - weight: (optional) The weight of the text format, which controls its
- *     placement in text format lists. If omitted, the weight is set to 0.
- *
- * @see filter_admin_format_form_validate()
- * @see filter_admin_format_form_submit()
- * @ingroup forms
- */
-function filter_admin_format_form($form, &$form_state, $format) {
-  $is_fallback = ($format->format == filter_fallback_format());
-
-  $form['#format'] = $format;
-  $form['#tree'] = TRUE;
-  $form['#attached']['library'][] = array('filter', 'drupal.filter.admin');
-
-  $form['name'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Name'),
-    '#default_value' => $format->name,
-    '#required' => TRUE,
-    '#weight' => -30,
-  );
-  $form['format'] = array(
-    '#type' => 'machine_name',
-    '#required' => TRUE,
-    '#default_value' => $format->format,
-    '#maxlength' => 255,
-    '#machine_name' => array(
-      'exists' => 'filter_format_exists',
-      'source' => array('name'),
-    ),
-    '#disabled' => !empty($format->format),
-    '#weight' => -20,
-  );
-  // @todo Remove once moved to FilterFormatFormController.
-  $form['langcode'] = array(
-    '#type' => 'value',
-    '#value' => !$format->isNew() ? $format->langcode : language_default()->langcode,
-  );
-
-  // Add user role access selection.
-  $form['roles'] = array(
-    '#type' => 'checkboxes',
-    '#title' => t('Roles'),
-    '#options' => array_map('check_plain', user_role_names()),
-    '#disabled' => $is_fallback,
-    '#weight' => -10,
-  );
-  if ($is_fallback) {
-    $form['roles']['#description'] = t('All roles for this text format must be enabled and cannot be changed.');
-  }
-  if (!empty($format->format)) {
-    // If editing an existing text format, pre-select its current permissions.
-    $form['roles']['#default_value'] = array_keys(filter_get_roles_by_format($format));
-  }
-  elseif ($admin_role = config('user.settings')->get('admin_role')) {
-    // If adding a new text format and the site has an administrative role,
-    // pre-select that role so as to grant administrators access to the new
-    // text format permission by default.
-    $form['roles']['#default_value'] = array($admin_role);
-  }
-
-  // Create filter plugin instances for all available filters, including both
-  // enabled/configured ones as well as new and not yet unconfigured ones.
-  $filters = $format->filters()->sort();
-
-  // Filter status.
-  $form['filters']['status'] = array(
-    '#type' => 'item',
-    '#title' => t('Enabled filters'),
-    '#prefix' => '<div id="filters-status-wrapper">',
-    '#suffix' => '</div>',
-    // This item is used as a pure wrapping container with heading. Ignore its
-    // value, since 'filters' should only contain filter definitions.
-    // @see http://drupal.org/node/1829202
-    '#input' => FALSE,
-  );
-  // Filter order (tabledrag).
-  $form['filters']['order'] = array(
-    '#type' => 'table',
-    // For filter.admin.js
-    '#attributes' => array('id' => 'filter-order'),
-    '#title' => t('Filter processing order'),
-    '#tabledrag' => array(
-      array('order', 'sibling', 'filter-order-weight'),
-    ),
-    '#tree' => FALSE,
-    '#input' => FALSE,
-    '#theme_wrappers' => array('form_element'),
-  );
-  // Filter settings.
-  $form['filter_settings'] = array(
-    '#type' => 'vertical_tabs',
-    '#title' => t('Filter settings'),
-  );
-
-  foreach ($filters as $name => $filter) {
-    $form['filters']['status'][$name] = array(
-      '#type' => 'checkbox',
-      '#title' => $filter->getLabel(),
-      '#default_value' => $filter->status,
-      '#parents' => array('filters', $name, 'status'),
-      '#description' => $filter->getDescription(),
-      '#weight' => $filter->weight,
-    );
-
-    $form['filters']['order'][$name]['#attributes']['class'][] = 'draggable';
-    $form['filters']['order'][$name]['#weight'] = $filter->weight;
-    $form['filters']['order'][$name]['filter'] = array(
-      '#markup' => $filter->getLabel(),
-    );
-    $form['filters']['order'][$name]['weight'] = array(
-      '#type' => 'weight',
-      '#title' => t('Weight for @title', array('@title' => $filter->getLabel())),
-      '#title_display' => 'invisible',
-      '#delta' => 50,
-      '#default_value' => $filter->weight,
-      '#parents' => array('filters', $name, 'weight'),
-      '#attributes' => array('class' => array('filter-order-weight')),
-    );
-
-    // Retrieve the settings form of the filter plugin. The plugin should not be
-    // aware of the text format. Therefore, it only receives a set of minimal
-    // base properties to allow advanced implementations to work.
-    $settings_form = array(
-      '#parents' => array('filters', $name, 'settings'),
-      '#tree' => TRUE,
-    );
-    $settings_form = $filter->settingsForm($settings_form, $form_state);
-    if (!empty($settings_form)) {
-      $form['filters']['settings'][$name] = array(
-        '#type' => 'details',
-        '#title' => $filter->getLabel(),
-        '#weight' => $filter->weight,
-        '#parents' => array('filters', $name, 'settings'),
-        '#group' => 'filter_settings',
-      );
-      $form['filters']['settings'][$name] += $settings_form;
-    }
-  }
-
-  $form['actions'] = array('#type' => 'actions');
-  $form['actions']['submit'] = array('#type' => 'submit', '#value' => t('Save configuration'));
-
-  return $form;
-}
-
-/**
- * Form validation handler for filter_admin_format_form().
- *
- * @see filter_admin_format_form_submit()
- */
-function filter_admin_format_form_validate($form, &$form_state) {
-  $format_format = trim($form_state['values']['format']);
-  $format_name = trim($form_state['values']['name']);
-
-  // Ensure that the values to be saved later are exactly the ones validated.
-  form_set_value($form['format'], $format_format, $form_state);
-  form_set_value($form['name'], $format_name, $form_state);
-
-  $filter_formats = entity_load_multiple('filter_format');
-  foreach ($filter_formats as $format) {
-    if ($format->name == $format_name && $format->format != $format_format) {
-      form_set_error('name', t('Text format names must be unique. A format named %name already exists.', array('%name' => $format_name)));
-      break;
-    }
-  }
-}
-
-/**
- * Form submission handler for filter_admin_format_form().
- *
- * @see filter_admin_format_form_validate()
- */
-function filter_admin_format_form_submit($form, &$form_state) {
-  // Remove unnecessary values.
-  form_state_values_clean($form_state);
-
-  // Add the submitted form values to the text format, and save it.
-  $format = $form['#format'];
-  foreach ($form_state['values'] as $key => $value) {
-    if ($key != 'filters') {
-      $format->set($key, $value);
-    }
-    else {
-      foreach ($value as $instance_id => $config) {
-        $format->setFilterConfig($instance_id, $config);
-      }
-    }
-  }
-  $status = $format->save();
-
-  // Save user permissions.
-  if ($permission = filter_permission_name($format)) {
-    foreach ($form_state['values']['roles'] as $rid => $enabled) {
-      user_role_change_permissions($rid, array($permission => $enabled));
-    }
-  }
-
-  switch ($status) {
-    case SAVED_NEW:
-      drupal_set_message(t('Added text format %format.', array('%format' => $format->name)));
-      break;
-
-    case SAVED_UPDATED:
-      drupal_set_message(t('The text format %format has been updated.', array('%format' => $format->name)));
-      break;
-  }
-
-  $form_state['redirect'] = 'admin/config/content/formats';
-}
diff --git a/core/modules/filter/filter.module b/core/modules/filter/filter.module
index 857a33b..3c1b1fd 100644
--- a/core/modules/filter/filter.module
+++ b/core/modules/filter/filter.module
@@ -65,7 +65,7 @@ function filter_help($path, $arg) {
       $output .= '<p>' . t('Text formats are presented on content editing pages in the order defined on this page. The first format available to a user will be selected by default.') . '</p>';
       return $output;
 
-    case 'admin/config/content/formats/%':
+    case 'admin/config/content/formats/manage/%':
       $output = '<p>' . t('A text format contains filters that change the user input, for example stripping out malicious HTML or making URLs clickable. Filters are executed from top to bottom and the order is important, since one filter may prevent another filter from doing its job. For example, when URLs are converted into links before disallowed HTML tags are removed, all links may be removed. When this happens, the order of filters may need to be re-arranged.') . '</p>';
       return $output;
   }
@@ -123,10 +123,7 @@ function filter_menu() {
   $items['admin/config/content/formats'] = array(
     'title' => 'Text formats',
     'description' => 'Configure how content input by users is filtered, including allowed HTML tags. Also allows enabling of module-provided filters.',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('filter_admin_overview'),
-    'access arguments' => array('administer filters'),
-    'file' => 'filter.admin.inc',
+    'route_name' => 'filter_admin_overview',
   );
   $items['admin/config/content/formats/list'] = array(
     'title' => 'List',
@@ -134,20 +131,13 @@ function filter_menu() {
   );
   $items['admin/config/content/formats/add'] = array(
     'title' => 'Add text format',
-    'page callback' => 'filter_admin_format_page',
-    'access arguments' => array('administer filters'),
+    'route_name' => 'filter_format_add',
     'type' => MENU_LOCAL_ACTION,
-    'file' => 'filter.admin.inc',
   );
-  $items['admin/config/content/formats/%filter_format'] = array(
-    'title callback' => 'filter_admin_format_title',
-    'title arguments' => array(4),
-    'page callback' => 'filter_admin_format_page',
-    'page arguments' => array(4),
-    'access arguments' => array('administer filters'),
-    'file' => 'filter.admin.inc',
+  $items['admin/config/content/formats/manage/%'] = array(
+    'route_name' => 'filter_format_edit',
   );
-  $items['admin/config/content/formats/%filter_format/disable'] = array(
+  $items['admin/config/content/formats/manage/%filter_format/disable'] = array(
     'title' => 'Disable text format',
     'route_name' => 'filter_admin_disable',
   );
@@ -225,7 +215,7 @@ function filter_permission() {
     if (!empty($permission)) {
       // Only link to the text format configuration page if the user who is
       // viewing this will have access to that page.
-      $format_name_replacement = user_access('administer filters') ? l($format->name, 'admin/config/content/formats/' . $format->format) : drupal_placeholder($format->name);
+      $format_name_replacement = user_access('administer filters') ? l($format->name, 'admin/config/content/formats/manage/' . $format->format) : drupal_placeholder($format->name);
       $perms[$permission] = array(
         'title' => t("Use the !text_format text format", array('!text_format' => $format_name_replacement,)),
         'description' => drupal_placeholder(t('Warning: This permission may have security implications depending on how the text format is configured.')),
diff --git a/core/modules/filter/filter.routing.yml b/core/modules/filter/filter.routing.yml
index a8f4186..019c477 100644
--- a/core/modules/filter/filter.routing.yml
+++ b/core/modules/filter/filter.routing.yml
@@ -1,10 +1,3 @@
-filter_admin_disable:
-  pattern: '/admin/config/content/formats/{filter_format}/disable'
-  defaults:
-    _form: '\Drupal\filter\Form\DisableForm'
-  requirements:
-    _filter_disable_format_access: 'TRUE'
-
 filter_tips_all:
   pattern: '/filter/tips'
   defaults:
@@ -18,3 +11,32 @@ filter_tips:
     _content: '\Drupal\filter\Controller\FilterController::filterTips'
   requirements:
     _filter_access: 'TRUE'
+
+filter_admin_overview:
+  pattern: '/admin/config/content/formats'
+  defaults:
+    _content: '\Drupal\Core\Entity\Controller\EntityListController::listing'
+    entity_type: 'filter_format'
+  requirements:
+    _permission: 'administer filters'
+
+filter_format_add:
+  pattern: '/admin/config/content/formats/add'
+  defaults:
+    _entity_form: filter_format.add
+  requirements:
+    _permission: 'administer filters'
+
+filter_format_edit:
+  pattern: '/admin/config/content/formats/manage/{filter_format}'
+  defaults:
+    _entity_form: filter_format.edit
+  requirements:
+    _permission: 'administer filters'
+
+filter_admin_disable:
+  pattern: '/admin/config/content/formats/manage/{filter_format}/disable'
+  defaults:
+    _form: '\Drupal\filter\Form\DisableForm'
+  requirements:
+    _filter_disable_format_access: 'TRUE'
diff --git a/core/modules/filter/lib/Drupal/filter/FilterFormatAddFormController.php b/core/modules/filter/lib/Drupal/filter/FilterFormatAddFormController.php
new file mode 100644
index 0000000..6180ef7
--- /dev/null
+++ b/core/modules/filter/lib/Drupal/filter/FilterFormatAddFormController.php
@@ -0,0 +1,32 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\filter\FilterFormatAddFormController.
+ */
+
+namespace Drupal\filter;
+
+/**
+ * Provides a form controller for adding a filter format.
+ */
+class FilterFormatAddFormController extends FilterFormatFormControllerBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function form(array $form, array &$form_state) {
+    drupal_set_title('Add text format');
+    return parent::form($form, $form_state);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function submit(array $form, array &$form_state) {
+    parent::submit($form, $form_state);
+    drupal_set_message(t('Added text format %format.', array('%format' => $this->entity->label())));
+    return $this->entity;
+  }
+
+}
diff --git a/core/modules/filter/lib/Drupal/filter/FilterFormatEditFormController.php b/core/modules/filter/lib/Drupal/filter/FilterFormatEditFormController.php
new file mode 100644
index 0000000..695239d
--- /dev/null
+++ b/core/modules/filter/lib/Drupal/filter/FilterFormatEditFormController.php
@@ -0,0 +1,34 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\filter\FilterFormatEditFormController.
+ */
+
+namespace Drupal\filter;
+
+/**
+ * Provides a form controller for adding a filter format.
+ */
+class FilterFormatEditFormController extends FilterFormatFormControllerBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function form(array $form, array &$form_state) {
+    drupal_set_title($this->entity->label());
+    $form = parent::form($form, $form_state);
+    $form['roles']['#default_value'] = array_keys(filter_get_roles_by_format($this->entity));
+    return $form;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function submit(array $form, array &$form_state) {
+    parent::submit($form, $form_state);
+    drupal_set_message(t('The text format %format has been updated.', array('%format' => $this->entity->label())));
+    return $this->entity;
+  }
+
+}
diff --git a/core/modules/filter/lib/Drupal/filter/FilterFormatFormControllerBase.php b/core/modules/filter/lib/Drupal/filter/FilterFormatFormControllerBase.php
new file mode 100644
index 0000000..cfb0aee
--- /dev/null
+++ b/core/modules/filter/lib/Drupal/filter/FilterFormatFormControllerBase.php
@@ -0,0 +1,207 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\filter\FilterFormatFormControllerBase.
+ */
+
+namespace Drupal\filter;
+
+use Drupal\Core\Entity\EntityFormController;
+
+/**
+ * Provides a base form controller for a filter format.
+ */
+abstract class FilterFormatFormControllerBase extends EntityFormController {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function form(array $form, array &$form_state) {
+    $format = $this->entity;
+    $is_fallback = ($format->id() == filter_fallback_format());
+
+    $form['#tree'] = TRUE;
+    $form['#attached']['library'][] = array('filter', 'drupal.filter.admin');
+
+    $form['name'] = array(
+      '#type' => 'textfield',
+      '#title' => t('Name'),
+      '#default_value' => $format->label(),
+      '#required' => TRUE,
+      '#weight' => -30,
+    );
+    $form['format'] = array(
+      '#type' => 'machine_name',
+      '#required' => TRUE,
+      '#default_value' => $format->id(),
+      '#maxlength' => 255,
+      '#machine_name' => array(
+        'exists' => 'filter_format_exists',
+        'source' => array('name'),
+      ),
+      '#disabled' => !$format->isNew(),
+      '#weight' => -20,
+    );
+
+    // Add user role access selection.
+    $form['roles'] = array(
+      '#type' => 'checkboxes',
+      '#title' => t('Roles'),
+      '#options' => array_map('check_plain', user_role_names()),
+      '#disabled' => $is_fallback,
+      '#weight' => -10,
+    );
+    if ($is_fallback) {
+      $form['roles']['#description'] = t('All roles for this text format must be enabled and cannot be changed.');
+    }
+    if (!$format->isNew()) {
+      // If editing an existing text format, pre-select its current permissions.
+      $form['roles']['#default_value'] = array_keys(filter_get_roles_by_format($format));
+    }
+    elseif ($admin_role = config('user.settings')->get('admin_role')) {
+      // If adding a new text format and the site has an administrative role,
+      // pre-select that role so as to grant administrators access to the new
+      // text format permission by default.
+      $form['roles']['#default_value'] = array($admin_role);
+    }
+
+    // Create filter plugin instances for all available filters, including both
+    // enabled/configured ones as well as new and not yet unconfigured ones.
+    $filters = $format->filters()->sort();
+
+    // Filter status.
+    $form['filters']['status'] = array(
+      '#type' => 'item',
+      '#title' => t('Enabled filters'),
+      '#prefix' => '<div id="filters-status-wrapper">',
+      '#suffix' => '</div>',
+      // This item is used as a pure wrapping container with heading. Ignore its
+      // value, since 'filters' should only contain filter definitions.
+      // @see http://drupal.org/node/1829202
+      '#input' => FALSE,
+    );
+    // Filter order (tabledrag).
+    $form['filters']['order'] = array(
+      '#type' => 'table',
+      // For filter.admin.js
+      '#attributes' => array('id' => 'filter-order'),
+      '#title' => t('Filter processing order'),
+      '#tabledrag' => array(
+        array('order', 'sibling', 'filter-order-weight'),
+      ),
+      '#tree' => FALSE,
+      '#input' => FALSE,
+      '#theme_wrappers' => array('form_element'),
+    );
+    // Filter settings.
+    $form['filter_settings'] = array(
+      '#type' => 'vertical_tabs',
+      '#title' => t('Filter settings'),
+    );
+
+    foreach ($filters as $name => $filter) {
+      $form['filters']['status'][$name] = array(
+        '#type' => 'checkbox',
+        '#title' => $filter->getLabel(),
+        '#default_value' => $filter->status,
+        '#parents' => array('filters', $name, 'status'),
+        '#description' => $filter->getDescription(),
+        '#weight' => $filter->weight,
+      );
+
+      $form['filters']['order'][$name]['#attributes']['class'][] = 'draggable';
+      $form['filters']['order'][$name]['#weight'] = $filter->weight;
+      $form['filters']['order'][$name]['filter'] = array(
+        '#markup' => $filter->getLabel(),
+      );
+      $form['filters']['order'][$name]['weight'] = array(
+        '#type' => 'weight',
+        '#title' => t('Weight for @title', array('@title' => $filter->getLabel())),
+        '#title_display' => 'invisible',
+        '#delta' => 50,
+        '#default_value' => $filter->weight,
+        '#parents' => array('filters', $name, 'weight'),
+        '#attributes' => array('class' => array('filter-order-weight')),
+      );
+
+      // Retrieve the settings form of the filter plugin. The plugin should not be
+      // aware of the text format. Therefore, it only receives a set of minimal
+      // base properties to allow advanced implementations to work.
+      $settings_form = array(
+        '#parents' => array('filters', $name, 'settings'),
+        '#tree' => TRUE,
+      );
+      $settings_form = $filter->settingsForm($settings_form, $form_state);
+      if (!empty($settings_form)) {
+        $form['filters']['settings'][$name] = array(
+          '#type' => 'details',
+          '#title' => $filter->getLabel(),
+          '#weight' => $filter->weight,
+          '#parents' => array('filters', $name, 'settings'),
+          '#group' => 'filter_settings',
+        );
+        $form['filters']['settings'][$name] += $settings_form;
+      }
+    }
+    return parent::form($form, $form_state);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function validate(array $form, array &$form_state) {
+    parent::validate($form, $form_state);
+
+    // @todo Move trimming upstream.
+    $format_format = trim($form_state['values']['format']);
+    $format_name = trim($form_state['values']['name']);
+
+    // Ensure that the values to be saved later are exactly the ones validated.
+    form_set_value($form['format'], $format_format, $form_state);
+    form_set_value($form['name'], $format_name, $form_state);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function submit(array $form, array &$form_state) {
+    parent::submit($form, $form_state);
+
+    // Add the submitted form values to the text format, and save it.
+    $format = $this->entity;
+    foreach ($form_state['values'] as $key => $value) {
+      if ($key != 'filters') {
+        $format->set($key, $value);
+      }
+      else {
+        foreach ($value as $instance_id => $config) {
+          $format->setFilterConfig($instance_id, $config);
+        }
+      }
+    }
+    $format->save();
+
+    // Save user permissions.
+    if ($permission = filter_permission_name($format)) {
+      foreach ($form_state['values']['roles'] as $rid => $enabled) {
+        user_role_change_permissions($rid, array($permission => $enabled));
+      }
+    }
+
+    $form_state['redirect'] = 'admin/config/content/formats';
+
+    return $this->entity;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function actions(array $form, array &$form_state) {
+    $actions = parent::actions($form, $form_state);
+    $actions['submit']['#value'] = t('Save configuration');
+    unset($actions['delete']);
+    return $actions;
+  }
+
+}
diff --git a/core/modules/filter/lib/Drupal/filter/FilterFormatListController.php b/core/modules/filter/lib/Drupal/filter/FilterFormatListController.php
new file mode 100644
index 0000000..75da0d5
--- /dev/null
+++ b/core/modules/filter/lib/Drupal/filter/FilterFormatListController.php
@@ -0,0 +1,137 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\filter\FilterFormatListController.
+ */
+
+namespace Drupal\filter;
+
+use Drupal\Core\Config\Entity\ConfigEntityListController;
+use Drupal\Core\Form\FormInterface;
+
+/**
+ * Defines the filter format list controller.
+ */
+class FilterFormatListController extends ConfigEntityListController implements FormInterface {
+
+  /**
+   * The entities being listed.
+   *
+   * @var array
+   */
+  protected $entities;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getFormID() {
+    return 'filter_admin_overview';
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function render() {
+    return drupal_get_form($this);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function load() {
+    // Only list enabled filters.
+    return array_filter(parent::load(), function ($entity) {
+      return $entity->status();
+    });
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function buildForm(array $form, array &$form_state) {
+    // Overview of all formats.
+    $this->entities = $this->load();
+    $fallback_format = filter_fallback_format();
+
+    $form['#tree'] = TRUE;
+    $form['formats'] = array(
+      '#type' => 'table',
+      '#header' => array(t('Name'), t('Roles'), t('Weight'), t('Operations')),
+      '#tabledrag' => array(
+        array('order', 'sibling', 'text-format-order-weight'),
+      ),
+    );
+    foreach ($this->entities as $id => $format) {
+      $form['formats'][$id]['#attributes']['class'][] = 'draggable';
+      $form['formats'][$id]['#weight'] = $format->weight;
+
+      $links = array();
+      $links['configure'] = array(
+        'title' => t('configure'),
+        'href' => "admin/config/content/formats/manage/$id",
+      );
+      // Check whether this is the fallback text format. This format is available
+      // to all roles and cannot be disabled via the admin interface.
+      $form['formats'][$id]['#is_fallback'] = ($id == $fallback_format);
+      if ($form['formats'][$id]['#is_fallback']) {
+        $form['formats'][$id]['name'] = array('#markup' => drupal_placeholder($format->name));
+        if (config('filter.settings')->get('always_show_fallback_choice')) {
+          $roles_markup = drupal_placeholder(t('All roles may use this format'));
+        }
+        else {
+          $roles_markup = drupal_placeholder(t('This format is shown when no other formats are available'));
+        }
+      }
+      else {
+        $form['formats'][$id]['name'] = array('#markup' => check_plain($format->name));
+        $roles = array_map('check_plain', filter_get_roles_by_format($format));
+        $roles_markup = $roles ? implode(', ', $roles) : t('No roles may use this format');
+        $links['disable'] = array(
+          'title' => t('disable'),
+          'href' => "admin/config/content/formats/manage/$id/disable",
+        );
+      }
+
+      $form['formats'][$id]['roles'] = array('#markup' => $roles_markup);
+
+      $form['formats'][$id]['weight'] = array(
+        '#type' => 'weight',
+        '#title' => t('Weight for @title', array('@title' => $format->name)),
+        '#title_display' => 'invisible',
+        '#default_value' => $format->weight,
+        '#attributes' => array('class' => array('text-format-order-weight')),
+      );
+
+      $form['formats'][$id]['operations'] = array(
+        '#type' => 'operations',
+        '#links' => $links,
+      );
+    }
+    $form['actions'] = array('#type' => 'actions');
+    $form['actions']['submit'] = array('#type' => 'submit', '#value' => t('Save changes'));
+    return $form;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function validateForm(array &$form, array &$form_state) {
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function submitForm(array &$form, array &$form_state) {
+    foreach ($form_state['values']['formats'] as $id => $data) {
+      // Only update if this is a form element with weight.
+      if (is_array($data) && isset($data['weight'])) {
+        $this->entities[$id]->set('weight', $data['weight']);
+        $this->entities[$id]->save();
+      }
+    }
+    filter_formats_reset();
+    drupal_set_message(t('The text format ordering has been saved.'));
+  }
+
+}
diff --git a/core/modules/filter/lib/Drupal/filter/Plugin/Core/Entity/FilterFormat.php b/core/modules/filter/lib/Drupal/filter/Plugin/Core/Entity/FilterFormat.php
index d6b1fe6..16de175 100644
--- a/core/modules/filter/lib/Drupal/filter/Plugin/Core/Entity/FilterFormat.php
+++ b/core/modules/filter/lib/Drupal/filter/Plugin/Core/Entity/FilterFormat.php
@@ -21,6 +21,11 @@
  *   label = @Translation("Text format"),
  *   module = "filter",
  *   controllers = {
+ *     "form" = {
+ *       "add" = "Drupal\filter\FilterFormatAddFormController",
+ *       "edit" = "Drupal\filter\FilterFormatEditFormController"
+ *     },
+ *     "list" = "Drupal\filter\FilterFormatListController",
  *     "storage" = "Drupal\filter\FilterFormatStorageController"
  *   },
  *   config_prefix = "filter.format",
diff --git a/core/modules/filter/lib/Drupal/filter/Tests/FilterAdminTest.php b/core/modules/filter/lib/Drupal/filter/Tests/FilterAdminTest.php
index 6dc2f4c..abce5dd 100644
--- a/core/modules/filter/lib/Drupal/filter/Tests/FilterAdminTest.php
+++ b/core/modules/filter/lib/Drupal/filter/Tests/FilterAdminTest.php
@@ -76,8 +76,8 @@ function testFormatAdmin() {
 
     // Edit text format.
     $this->drupalGet('admin/config/content/formats');
-    $this->assertLinkByHref('admin/config/content/formats/' . $format_id);
-    $this->drupalGet('admin/config/content/formats/' . $format_id);
+    $this->assertLinkByHref('admin/config/content/formats/manage/' . $format_id);
+    $this->drupalGet('admin/config/content/formats/manage/' . $format_id);
     $this->drupalPost(NULL, array(), t('Save configuration'));
 
     // Verify that the custom weight of the text format has been retained.
@@ -85,12 +85,12 @@ function testFormatAdmin() {
     $this->assertFieldByName("formats[$format_id][weight]", 5, 'Text format weight was retained.');
 
     // Disable text format.
-    $this->assertLinkByHref('admin/config/content/formats/' . $format_id . '/disable');
-    $this->drupalGet('admin/config/content/formats/' . $format_id . '/disable');
+    $this->assertLinkByHref('admin/config/content/formats/manage/' . $format_id . '/disable');
+    $this->drupalGet('admin/config/content/formats/manage/' . $format_id . '/disable');
     $this->drupalPost(NULL, array(), t('Disable'));
 
     // Verify that disabled text format no longer exists.
-    $this->drupalGet('admin/config/content/formats/' . $format_id);
+    $this->drupalGet('admin/config/content/formats/manage/' . $format_id);
     $this->assertResponse(404, 'Disabled text format no longer exists.');
 
     // Attempt to create a format of the same machine name as the disabled
@@ -129,8 +129,8 @@ function testFilterAdmin() {
     // Check that the fallback format exists and cannot be disabled.
     $this->assertTrue($plain == filter_fallback_format(), 'The fallback format is set to plain text.');
     $this->drupalGet('admin/config/content/formats');
-    $this->assertNoRaw('admin/config/content/formats/' . $plain . '/disable', 'Disable link for the fallback format not found.');
-    $this->drupalGet('admin/config/content/formats/' . $plain . '/disable');
+    $this->assertNoRaw('admin/config/content/formats/manage/' . $plain . '/disable', 'Disable link for the fallback format not found.');
+    $this->drupalGet('admin/config/content/formats/manage/' . $plain . '/disable');
     $this->assertResponse(403, 'The fallback format cannot be disabled.');
 
     // Verify access permissions to Full HTML format.
@@ -140,9 +140,9 @@ function testFilterAdmin() {
     // Add an additional tag.
     $edit = array();
     $edit['filters[filter_html][settings][allowed_html]'] = '<a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <quote>';
-    $this->drupalPost('admin/config/content/formats/' . $restricted, $edit, t('Save configuration'));
+    $this->drupalPost('admin/config/content/formats/manage/' . $restricted, $edit, t('Save configuration'));
     $this->assertUrl('admin/config/content/formats');
-    $this->drupalGet('admin/config/content/formats/' . $restricted);
+    $this->drupalGet('admin/config/content/formats/manage/' . $restricted);
     $this->assertFieldByName('filters[filter_html][settings][allowed_html]', $edit['filters[filter_html][settings][allowed_html]'], 'Allowed HTML tag added.');
 
     $this->assertTrue(cache('filter')->isEmpty(), 'Cache cleared.');
@@ -159,7 +159,7 @@ function testFilterAdmin() {
     $edit['filters[' . $first_filter . '][weight]'] = 2;
     $this->drupalPost(NULL, $edit, t('Save configuration'));
     $this->assertUrl('admin/config/content/formats');
-    $this->drupalGet('admin/config/content/formats/' . $restricted);
+    $this->drupalGet('admin/config/content/formats/manage/' . $restricted);
     $this->assertFieldByName('filters[' . $second_filter . '][weight]', 1, 'Order saved successfully.');
     $this->assertFieldByName('filters[' . $first_filter . '][weight]', 2, 'Order saved successfully.');
 
@@ -192,13 +192,13 @@ function testFilterAdmin() {
     drupal_static_reset('filter_formats');
     $format = filter_format_load($edit['format']);
     $this->assertNotNull($format, 'Format found in database.');
-    $this->drupalGet('admin/config/content/formats/' . $format->format);
+    $this->drupalGet('admin/config/content/formats/manage/' . $format->format);
     $this->assertFieldByName('roles[' . DRUPAL_AUTHENTICATED_RID . ']', '', 'Role found.');
     $this->assertFieldByName('filters[' . $second_filter . '][status]', '', 'Line break filter found.');
     $this->assertFieldByName('filters[' . $first_filter . '][status]', '', 'Url filter found.');
 
     // Disable new filter.
-    $this->drupalPost('admin/config/content/formats/' . $format->format . '/disable', array(), t('Disable'));
+    $this->drupalPost('admin/config/content/formats/manage/' . $format->format . '/disable', array(), t('Disable'));
     $this->assertUrl('admin/config/content/formats');
     $this->assertRaw(t('Disabled text format %format.', array('%format' => $edit['name'])), 'Format successfully disabled.');
 
@@ -207,7 +207,7 @@ function testFilterAdmin() {
     $edit = array();
     $edit['roles[' . DRUPAL_ANONYMOUS_RID . ']'] = 0;
     $edit['roles[' . DRUPAL_AUTHENTICATED_RID . ']'] = 1;
-    $this->drupalPost('admin/config/content/formats/' . $full, $edit, t('Save configuration'));
+    $this->drupalPost('admin/config/content/formats/manage/' . $full, $edit, t('Save configuration'));
     $this->assertUrl('admin/config/content/formats');
     $this->assertRaw(t('The text format %format has been updated.', array('%format' => $format->name)), 'Full HTML format successfully updated.');
 
@@ -258,27 +258,27 @@ function testFilterAdmin() {
     // Allowed tags.
     $edit = array();
     $edit['filters[filter_html][settings][allowed_html]'] = '<a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>';
-    $this->drupalPost('admin/config/content/formats/' . $basic, $edit, t('Save configuration'));
+    $this->drupalPost('admin/config/content/formats/manage/' . $basic, $edit, t('Save configuration'));
     $this->assertUrl('admin/config/content/formats');
-    $this->drupalGet('admin/config/content/formats/' . $basic);
+    $this->drupalGet('admin/config/content/formats/manage/' . $basic);
     $this->assertFieldByName('filters[filter_html][settings][allowed_html]', $edit['filters[filter_html][settings][allowed_html]'], 'Changes reverted.');
 
     // Full HTML.
     $edit = array();
     $edit['roles[' . DRUPAL_AUTHENTICATED_RID . ']'] = FALSE;
-    $this->drupalPost('admin/config/content/formats/' . $full, $edit, t('Save configuration'));
+    $this->drupalPost('admin/config/content/formats/manage/' . $full, $edit, t('Save configuration'));
     $this->assertUrl('admin/config/content/formats');
     $this->assertRaw(t('The text format %format has been updated.', array('%format' => $format->name)), 'Full HTML format successfully reverted.');
-    $this->drupalGet('admin/config/content/formats/' . $full);
+    $this->drupalGet('admin/config/content/formats/manage/' . $full);
     $this->assertFieldByName('roles[' . DRUPAL_AUTHENTICATED_RID . ']', $edit['roles[' . DRUPAL_AUTHENTICATED_RID . ']'], 'Changes reverted.');
 
     // Filter order.
     $edit = array();
     $edit['filters[' . $second_filter . '][weight]'] = 2;
     $edit['filters[' . $first_filter . '][weight]'] = 1;
-    $this->drupalPost('admin/config/content/formats/' . $basic, $edit, t('Save configuration'));
+    $this->drupalPost('admin/config/content/formats/manage/' . $basic, $edit, t('Save configuration'));
     $this->assertUrl('admin/config/content/formats');
-    $this->drupalGet('admin/config/content/formats/' . $basic);
+    $this->drupalGet('admin/config/content/formats/manage/' . $basic);
     $this->assertFieldByName('filters[' . $second_filter . '][weight]', $edit['filters[' . $second_filter . '][weight]'], 'Changes reverted.');
     $this->assertFieldByName('filters[' . $first_filter . '][weight]', $edit['filters[' . $first_filter . '][weight]'], 'Changes reverted.');
   }
@@ -291,7 +291,7 @@ function testUrlFilterAdmin() {
     $edit = array(
       'filters[filter_url][settings][filter_url_length]' => $this->randomName(4),
     );
-    $this->drupalPost('admin/config/content/formats/basic_html', $edit, t('Save configuration'));
+    $this->drupalPost('admin/config/content/formats/manage/basic_html', $edit, t('Save configuration'));
     $this->assertNoRaw(t('The text format %format has been updated.', array('%format' => 'Basic HTML')));
   }
 }
diff --git a/core/modules/filter/lib/Drupal/filter/Tests/FilterHooksTest.php b/core/modules/filter/lib/Drupal/filter/Tests/FilterHooksTest.php
index fb5b11b..3d86beb 100644
--- a/core/modules/filter/lib/Drupal/filter/Tests/FilterHooksTest.php
+++ b/core/modules/filter/lib/Drupal/filter/Tests/FilterHooksTest.php
@@ -60,7 +60,7 @@ function testFilterHooks() {
     // Update text format.
     $edit = array();
     $edit['roles[' . DRUPAL_AUTHENTICATED_RID . ']'] = 1;
-    $this->drupalPost('admin/config/content/formats/' . $format_id, $edit, t('Save configuration'));
+    $this->drupalPost('admin/config/content/formats/manage/' . $format_id, $edit, t('Save configuration'));
     $this->assertRaw(t('The text format %format has been updated.', array('%format' => $name)));
     $this->assertText('hook_filter_format_update invoked.');
 
@@ -76,7 +76,7 @@ function testFilterHooks() {
     $this->assertText(t('@type @title has been created.', array('@type' => $type_name, '@title' => $title)));
 
     // Disable the text format.
-    $this->drupalPost('admin/config/content/formats/' . $format_id . '/disable', array(), t('Disable'));
+    $this->drupalPost('admin/config/content/formats/manage/' . $format_id . '/disable', array(), t('Disable'));
     $this->assertRaw(t('Disabled text format %format.', array('%format' => $name)));
     $this->assertText('hook_filter_format_disable invoked.');
   }
diff --git a/core/modules/filter/lib/Drupal/filter/Tests/FilterSecurityTest.php b/core/modules/filter/lib/Drupal/filter/Tests/FilterSecurityTest.php
index 9b3eea0..13b2b04 100644
--- a/core/modules/filter/lib/Drupal/filter/Tests/FilterSecurityTest.php
+++ b/core/modules/filter/lib/Drupal/filter/Tests/FilterSecurityTest.php
@@ -81,7 +81,7 @@ function testDisableFilterModule() {
     $edit = array(
       'filters[filter_test_replace][status]' => 1,
     );
-    $this->drupalPost('admin/config/content/formats/' . $format_id, $edit, t('Save configuration'));
+    $this->drupalPost('admin/config/content/formats/manage/' . $format_id, $edit, t('Save configuration'));
 
     // Verify that filter_test_replace filter replaced the content.
     $this->drupalGet('node/' . $node->nid);
@@ -89,7 +89,7 @@ function testDisableFilterModule() {
     $this->assertText('Filter: Testing filter', 'Testing filter output found.');
 
     // Disable the text format entirely.
-    $this->drupalPost('admin/config/content/formats/' . $format_id . '/disable', array(), t('Disable'));
+    $this->drupalPost('admin/config/content/formats/manage/' . $format_id . '/disable', array(), t('Disable'));
 
     // Verify that the content is empty, because the text format does not exist.
     $this->drupalGet('node/' . $node->nid);
diff --git a/core/modules/php/lib/Drupal/php/Tests/PhpTestBase.php b/core/modules/php/lib/Drupal/php/Tests/PhpTestBase.php
index c18273a..a8a875c 100644
--- a/core/modules/php/lib/Drupal/php/Tests/PhpTestBase.php
+++ b/core/modules/php/lib/Drupal/php/Tests/PhpTestBase.php
@@ -47,7 +47,7 @@ function setUp() {
     $this->assertText('PHP code', 'PHP code text format was created.');
 
     // Verify that anonymous and authenticated user roles do not have access.
-    $this->drupalGet('admin/config/content/formats/' . $php_format_id);
+    $this->drupalGet('admin/config/content/formats/manage/' . $php_format_id);
     $this->assertFieldByName('roles[' . DRUPAL_ANONYMOUS_RID . ']', FALSE, 'Anonymous users do not have access to PHP code format.');
     $this->assertFieldByName('roles[' . DRUPAL_AUTHENTICATED_RID . ']', FALSE, 'Authenticated users do not have access to PHP code format.');
   }
diff --git a/core/modules/search/lib/Drupal/search/Tests/SearchCommentTest.php b/core/modules/search/lib/Drupal/search/Tests/SearchCommentTest.php
index 4d2a7ed..e94ac2c 100644
--- a/core/modules/search/lib/Drupal/search/Tests/SearchCommentTest.php
+++ b/core/modules/search/lib/Drupal/search/Tests/SearchCommentTest.php
@@ -63,7 +63,7 @@ function testSearchResultsComment() {
     $edit = array(
       'filters[filter_html_escape][status]' => TRUE,
     );
-    $this->drupalPost('admin/config/content/formats/' . $basic_html_format_id, $edit, t('Save configuration'));
+    $this->drupalPost('admin/config/content/formats/manage/' . $basic_html_format_id, $edit, t('Save configuration'));
     // Allow anonymous users to search content.
     $edit = array(
       DRUPAL_ANONYMOUS_RID . '[search content]' => 1,
diff --git a/core/modules/system/lib/Drupal/system/Tests/Menu/BreadcrumbTest.php b/core/modules/system/lib/Drupal/system/Tests/Menu/BreadcrumbTest.php
index c2d6593..4bdfbb5 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Menu/BreadcrumbTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Menu/BreadcrumbTest.php
@@ -167,11 +167,11 @@ function testBreadCrumbs() {
       'admin/config/content/formats' => t('Text formats and editors'),
     );
     $this->assertBreadcrumb('admin/config/content/formats/add', $trail);
-    $this->assertBreadcrumb("admin/config/content/formats/$format_id", $trail);
+    $this->assertBreadcrumb("admin/config/content/formats/manage/$format_id", $trail);
     $trail += array(
-      "admin/config/content/formats/$format_id" => $format->name,
+      "admin/config/content/formats/manage/$format_id" => $format->name,
     );
-    $this->assertBreadcrumb("admin/config/content/formats/$format_id/disable", $trail);
+    $this->assertBreadcrumb("admin/config/content/formats/manage/$format_id/disable", $trail);
 
     // Verify node breadcrumbs (without menu link).
     $node1 = $this->drupalCreateNode();
diff --git a/core/modules/text/lib/Drupal/text/Tests/TextFieldTest.php b/core/modules/text/lib/Drupal/text/Tests/TextFieldTest.php
index 9aed6ee..d537fd9 100644
--- a/core/modules/text/lib/Drupal/text/Tests/TextFieldTest.php
+++ b/core/modules/text/lib/Drupal/text/Tests/TextFieldTest.php
@@ -188,7 +188,7 @@ function _testTextfieldWidgetsFormatted($field_type, $widget_type) {
     $this->drupalLogin($this->admin_user);
     foreach (filter_formats() as $format) {
       if ($format->format != filter_fallback_format()) {
-        $this->drupalPost('admin/config/content/formats/' . $format->format . '/disable', array(), t('Disable'));
+        $this->drupalPost('admin/config/content/formats/manage/' . $format->format . '/disable', array(), t('Disable'));
       }
     }
     $this->drupalLogin($this->web_user);
