diff --git a/core/includes/common.inc b/core/includes/common.inc
index e523b1b..c88eb5c 100644
--- a/core/includes/common.inc
+++ b/core/includes/common.inc
@@ -2885,8 +2885,8 @@ function drupal_get_library($module, $name = NULL) {
  * In a situation where tree relationships are present, adding multiple
  * subgroups is not necessary, because the table will contain indentations that
  * provide enough information about the sibling and parent relationships. See
- * theme_menu_overview_form() for an example creating a table containing parent
- * relationships.
+ * MenuFormController::BuildOverviewForm for an example creating a table
+ * containing parent relationships.
  *
  * @param $element
  *   A form element to attach the tableDrag behavior to.
@@ -2923,7 +2923,7 @@ function drupal_get_library($module, $name = NULL) {
  *     to FALSE if the column should not be hidden.
  *   - 'limit': (optional) Limit the maximum amount of parenting in this table.
  *
- * @see theme_menu_overview_form()
+ * @see MenuFormController::buildOverviewForm()
  */
 function drupal_attach_tabledrag(&$element, array $options) {
   // Add default values to elements.
diff --git a/core/modules/menu/lib/Drupal/menu/MenuFormController.php b/core/modules/menu/lib/Drupal/menu/MenuFormController.php
index 9a7d93b..9b8de3e 100644
--- a/core/modules/menu/lib/Drupal/menu/MenuFormController.php
+++ b/core/modules/menu/lib/Drupal/menu/MenuFormController.php
@@ -236,14 +236,6 @@ public function save(array $form, array &$form_state) {
   protected function buildOverviewForm(array &$form, array &$form_state) {
     global $menu_admin;
 
-    // Ensure that menu_overview_form_submit() knows the parents of this form
-    // section.
-    $form['#tree'] = TRUE;
-    $form['#theme'] = 'menu_overview_form';
-    $form_state += array('menu_overview_form_parents' => array());
-
-    $form['#attached']['css'] = array(drupal_get_path('module', 'menu') . '/css/menu.admin.css');
-
     $links = array();
     $query = $this->entityQueryFactory->get('menu_link')
       ->condition('menu_name', $this->entity->id());
@@ -265,8 +257,76 @@ protected function buildOverviewForm(array &$form, array &$form_state) {
     menu_tree_check_access($tree, $node_links);
     $menu_admin = FALSE;
 
-    $form = array_merge($form, $this->buildOverviewTreeForm($tree, $delta));
-    $form['#empty_text'] = t('There are no menu links yet. <a href="@link">Add link</a>.', array('@link' => url('admin/structure/menu/manage/' . $this->entity->id() .'/add')));
+    $form = array(
+      '#type' => 'table',
+      '#attached' => array('css' => array(drupal_get_path('module', 'menu') . '/css/menu.admin.css')),
+      '#header' => array(
+        $this->t('Menu link'),
+        array(
+          'data' => $this->t('Enabled'),
+          'class' => array('checkbox'),
+        ),
+        $this->t('Weight'),
+        $this->t('Operations'),
+      ),
+      '#attributes' => array(
+        'id' => 'menu-overview',
+      ),
+      '#tabledrag' => array(
+        array(
+          'action' => 'match',
+          'relationship' => 'parent',
+          'group' => 'menu-plid',
+          'subgroup' => 'menu-plid',
+          'source' => 'menu-mlid',
+          'hidden' => TRUE,
+          'limit' => MENU_MAX_DEPTH - 1,
+        ),
+        array(
+          'action' => 'order',
+          'relationship' => 'sibling',
+          'group' => 'menu-weight',
+        ),
+      ),
+      '#empty' => $this->t('There are no menu links yet. <a href="@link">Add link</a>.', array('@link' => url('admin/structure/menu/manage/' . $this->entity->id() .'/add'))),
+    );
+
+    $links = $this->buildOverviewTreeForm($tree, $delta);
+    foreach (element_children($links) as $mlid) {
+      if (isset($links[$mlid]['hidden'])) {
+        $element = $links[$mlid];
+
+        // Add special classes to be used for tabledrag.js.
+        $element['plid']['#attributes']['class'] = array('menu-plid');
+        $element['mlid']['#attributes']['class'] = array('menu-mlid');
+        $element['weight']['#attributes']['class'] = array('menu-weight');
+
+        $form[$mlid]['#attributes'] = $element['#attributes'];
+        $form[$mlid]['#attributes']['class'][] = 'draggable';
+        $form[$mlid]['#weight'] = $element['#item']->weight;
+
+        $form[$mlid]['title'] = array(
+          array(
+            '#theme' => 'indentation',
+            '#size' => $element['#item']['depth'] - 1,
+          ),
+          $element['title'],
+        );
+        $form[$mlid]['hidden'] = $element['hidden'];
+        $form[$mlid]['hidden']['#wrapper_attributes'] = array('class' => array('checkbox', 'menu-enabled'));
+
+        // Set the parents for each of the elements so that
+        // form elements share the parent's form attributes.
+        $form[$mlid]['weight'] = array(
+          'weight' => $element['weight'],
+          'plid' => $element['plid'],
+          'mlid' => $element['mlid'],
+        );
+
+        // Operations (dropbutton) column.
+        $form[$mlid]['operations'] = $element['operations'];
+      }
+    }
 
     return $form;
   }
diff --git a/core/modules/menu/menu.admin.inc b/core/modules/menu/menu.admin.inc
deleted file mode 100644
index 57bba6d..0000000
--- a/core/modules/menu/menu.admin.inc
+++ /dev/null
@@ -1,90 +0,0 @@
-<?php
-
-/**
- * @file
- * Administrative page callbacks for menu module.
- */
-
-/**
- * Returns HTML for the menu overview form into a table.
- *
- * @param $variables
- *   An associative array containing:
- *   - form: A render element representing the form.
- *
- * @ingroup themeable
- */
-function theme_menu_overview_form($variables) {
-  $form = $variables['form'];
-
-  $header = array(
-    t('Menu link'),
-    array('data' => t('Enabled'), 'class' => array('checkbox')),
-    t('Weight'),
-    t('Operations'),
-  );
-
-  $rows = array();
-  foreach (element_children($form) as $mlid) {
-    if (isset($form[$mlid]['hidden'])) {
-      $element = &$form[$mlid];
-
-      // Add special classes to be used for tabledrag.js.
-      $element['plid']['#attributes']['class'] = array('menu-plid');
-      $element['mlid']['#attributes']['class'] = array('menu-mlid');
-      $element['weight']['#attributes']['class'] = array('menu-weight');
-
-      // Change the parent field to a hidden. This allows any value but hides the field.
-      $element['plid']['#type'] = 'hidden';
-
-      $indent = array(
-        '#theme' => 'indentation',
-        '#size' => $element['#item']['depth'] - 1,
-      );
-
-      $row = array();
-      $row[] = drupal_render($indent) . drupal_render($element['title']);
-      $row[] = array('data' => drupal_render($element['hidden']), 'class' => array('checkbox', 'menu-enabled'));
-      $row[] = drupal_render($element['weight']) . drupal_render($element['plid']) . drupal_render($element['mlid']);
-      $row[] = drupal_render($element['operations']);
-
-      $row = array_merge(array('data' => $row), $element['#attributes']);
-      $row['class'][] = 'draggable';
-      $rows[] = $row;
-    }
-  }
-  $output = '';
-  if (empty($rows)) {
-    $rows[] = array(array('data' => $form['#empty_text'], 'colspan' => '7'));
-  }
-
-  $table = array(
-    '#type' => 'table',
-    '#header' => $header,
-    '#rows' => $rows,
-    '#attributes' => array(
-      'id' => 'menu-overview',
-    ),
-    '#tabledrag' => array(
-      array(
-        'action' => 'match',
-        'relationship' => 'parent',
-        'group' => 'menu-plid',
-        'subgroup' => 'menu-plid',
-        'source' => 'menu-mlid',
-        'hidden' => TRUE,
-        'limit' => MENU_MAX_DEPTH - 1,
-      ),
-      array(
-        'action' => 'order',
-        'relationship' => 'sibling',
-        'group' => 'menu-weight',
-      ),
-    ),
-  );
-
-  $output .= drupal_render($form['inline_actions']);
-  $output .= drupal_render($table);
-  $output .= drupal_render_children($form);
-  return $output;
-}
diff --git a/core/modules/menu/menu.module b/core/modules/menu/menu.module
index 64a171b..0df1ec7 100644
--- a/core/modules/menu/menu.module
+++ b/core/modules/menu/menu.module
@@ -142,18 +142,6 @@ function menu_entity_bundle_info() {
 }
 
 /**
- * Implements hook_theme().
- */
-function menu_theme() {
-  return array(
-    'menu_overview_form' => array(
-      'file' => 'menu.admin.inc',
-      'render element' => 'form',
-    ),
-  );
-}
-
-/**
  * Load the data for a single custom menu.
  *
  * @param $menu_name
