diff --git a/core/modules/menu_ui/src/Tests/MenuTest.php b/core/modules/menu_ui/src/Tests/MenuTest.php
index e33e53a..ff4ce8b 100644
--- a/core/modules/menu_ui/src/Tests/MenuTest.php
+++ b/core/modules/menu_ui/src/Tests/MenuTest.php
@@ -75,7 +75,9 @@ protected function setUp() {
     // Create users.
     $this->admin_user = $this->drupalCreateUser(array('access administration pages', 'administer blocks', 'administer menu', 'create article content'));
     $this->authenticated_user = $this->drupalCreateUser(array());
-  }
+   // Make test-page default.
+   \Drupal::config('system.site')->set('page.front', 'test-page')->save();
+    }
 
   /**
    * Tests menu functionality using the admin and user interfaces.
@@ -900,3 +902,44 @@ protected function doTestMenuBlock() {
   }
 
 }
+
+  /**
+   * Test menu system block.
+   */
+  function testMenuSystemBlock() {
+    $this->drupalLogin($this->admin_user);
+    $this->drupalGet('admin/structure/menu/add');
+    $menu_name = 'menublock';
+    $label = $this->randomName(10);
+    $edit = array(
+      'id' => $menu_name,
+      'description' => '',
+      'label' =>  $label,
+    );
+    $this->drupalPostForm('admin/structure/menu/add', $edit, t('Save'));
+
+    // Verify that confirmation message displayed.
+    $this->assertRaw(t('Menu %label has been added.', array('%label' => $label)));
+    $this->drupalGet('admin/structure/menu');
+    $this->assertText($label, 'Menu created');
+
+    // Confirm that the custom menu block is available.
+    $this->drupalGet('admin/structure/block/list/' . \Drupal::config('system.theme')->get('default'));
+    $this->assertText($label);
+
+    // Enable the system menu block.
+    $block = $this->drupalPlaceBlock('system_menu_block:' . $menu_name);
+    // Add a link to the new menu.
+    $node = $this->drupalCreateNode(array('type' => 'article'));
+    $item = $this->addMenuLink(0, 'node/' . $node->id(), $menu_name);
+
+    // Place the block.
+    $block->set('region', 'header');
+    $block->save();
+
+    // Go to the front page and verify the menu link.
+    $this->drupalLogout();
+   $this->drupalGet('');
+    $this->verifyMenuLink($item, $node);
+ }
+ 
diff --git a/core/modules/system/src/Form/ModulesListForm.php b/core/modules/system/src/Form/ModulesListForm.php
index 2e80482..32f3a40 100644
--- a/core/modules/system/src/Form/ModulesListForm.php
+++ b/core/modules/system/src/Form/ModulesListForm.php
@@ -7,6 +7,7 @@
 
 namespace Drupal\system\Form;
 
+use Drupal\Component\Utility\Html;
 use Drupal\Component\Utility\String;
 use Drupal\Component\Utility\Unicode;
 use Drupal\Core\Config\PreExistingConfigException;
diff --git a/core/modules/system/src/Form/ModulesUninstallForm.php b/core/modules/system/src/Form/ModulesUninstallForm.php
index 153e2ca..00550bd 100644
--- a/core/modules/system/src/Form/ModulesUninstallForm.php
+++ b/core/modules/system/src/Form/ModulesUninstallForm.php
@@ -110,7 +110,22 @@ public function buildForm(array $form, FormStateInterface $form_state) {
       ),
     );
 
-    $form['modules'] = array();
+    $profile = drupal_get_profile();
+
+    // Sort all modules by their name.
+    if (!empty($uninstallable)) {
+      uasort($uninstallable, 'system_sort_modules_by_info_name');
+   }
+
+    $form['uninstall'] = array(
+      '#type' => 'table',
+      '#header' => array(
+        'title' => ['data' => $this->t('Name')],
+        'description' => ['data' => $this->t('Description')],
+      ),
+      '#empty' => $this->t('There are no items available to uninstall.'),
+      '#tableselect' => TRUE,
+    );
 
     // Only build the rest of the form if there are any modules available to
     // uninstall;
@@ -118,23 +133,16 @@ public function buildForm(array $form, FormStateInterface $form_state) {
       return $form;
     }
 
-    $profile = drupal_get_profile();
-
-    // Sort all modules by their name.
-    uasort($uninstallable, 'system_sort_modules_by_info_name');
-    $validation_reasons = $this->moduleInstaller->validateUninstall(array_keys($uninstallable));
-
-    $form['uninstall'] = array('#tree' => TRUE);
     foreach ($uninstallable as $module_key => $module) {
-      $name = $module->info['name'] ?: $module->getName();
-      $form['modules'][$module->getName()]['#module_name'] = $name;
-      $form['modules'][$module->getName()]['name']['#markup'] = $name;
-      $form['modules'][$module->getName()]['description']['#markup'] = $this->t($module->info['description']);
-
-      $form['uninstall'][$module->getName()] = array(
-        '#type' => 'checkbox',
-        '#title' => $this->t('Uninstall @module module', array('@module' => $name)),
-        '#title_display' => 'invisible',
+       // Define <label> element for autogenerated checkbox.
+      $form['uninstall'][$module->getName()]['title']['#type'] = 'label';
+      $form['uninstall'][$module->getName()]['title']['#title'] = $module->info['name'] ?: $module->getName();
+
+      $form['uninstall'][$module->getName()]['description'] = array(
+        '#markup' => $this->t($module->info['description']),
+        '#wrapper_attributes' => array(
+          'class' => array('description'),
+        )
       );
 
       // If a validator returns reasons not to uninstall a module,
@@ -146,13 +154,25 @@ public function buildForm(array $form, FormStateInterface $form_state) {
       // All modules which depend on this one must be uninstalled first, before
       // we can allow this module to be uninstalled. (The installation profile
       // is excluded from this list.)
+      $required_modules = array();
       foreach (array_keys($module->required_by) as $dependent) {
         if ($dependent != $profile && drupal_get_installed_schema_version($dependent) != SCHEMA_UNINSTALLED) {
           $name = isset($modules[$dependent]->info['name']) ? $modules[$dependent]->info['name'] : $dependent;
-          $form['modules'][$module->getName()]['#required_by'][] = $name;
           $form['uninstall'][$module->getName()]['#disabled'] = TRUE;
+          $required_modules[] = $name;
         }
       }
+      if (!empty($required_modules)) {
+        $disabled_message = format_plural(count($required_modules),
+          'To uninstall @module, the following module must be uninstalled first: @required_modules',
+          'To uninstall @module, the following modules must be uninstalled first: @required_modules',
+          array('@module' => $module->getName(), '@required_modules' => implode(', ', $required_modules)));
+        $disabled_message = '<div class="admin-requirements">' . $disabled_message . '</div>';
+      }
+      else {
+        $disabled_message = '';
+      }
+      $form['uninstall'][$module->getName()]['description']['uninstall']['#markup'] = $this->t($disabled_message);
     }
 
     $form['#attached']['library'][] = 'system/drupal.system.modules';
diff --git a/core/modules/system/system.admin.inc b/core/modules/system/system.admin.inc
index 197767f..d167a52 100644
--- a/core/modules/system/system.admin.inc
+++ b/core/modules/system/system.admin.inc
@@ -197,160 +197,6 @@ function template_preprocess_status_report(&$variables) {
 }
 
 /**
- * Returns HTML for the modules form.
- *
- * @param $variables
- *   An associative array containing:
- *   - form: A render element representing the form.
- *
- * @ingroup themeable
- */
-function theme_system_modules_details($variables) {
-  $form = $variables['form'];
-
-  // Individual table headers.
-  $rows = array();
-  // Iterate through all the modules, which are children of this element.
-  foreach (Element::children($form) as $key) {
-    // Stick the key into $module for easier access.
-    $module = $form[$key];
-    // Create the row for the table.
-    $row = array();
-    // Add the checkbox into the first cell.
-    unset($module['enable']['#title']);
-    $module['#requires'] = array_filter($module['#requires']);
-    $module['#required_by'] = array_filter($module['#required_by']);
-
-    $requires = !empty($module['#requires']);
-    $required_by = !empty($module['#required_by']);
-    $version = !empty($module['version']['#markup']);
-
-    $row[] = array('class' => array('checkbox'), 'data' => drupal_render($module['enable']));
-
-    // Add the module label and expand/collapse functionalty.
-    $id = Html::getUniqueId('module-' . $key);
-    $col2 = '<label id="' . $id . '" for="' . $module['enable']['#id'] . '" class="module-name table-filter-text-source">' . drupal_render($module['name']) . '</label>';
-    $row[] = array('class' => array('module'), 'data' => SafeMarkup::set($col2));
-
-    // Add the description, along with any modules it requires.
-    $description = '';
-    $description .= '<div class="requirements">';
-    $description .= '<div class="admin-requirements">' . t('Machine name: !key', array('!key' => $key)) . '</div>';
-    if ($version || $requires || $required_by) {
-      if ($version) {
-        $description .= '<div class="admin-requirements">' . t('Version: !module-version', array('!module-version' => drupal_render($module['version']))) . '</div>';
-      }
-      if ($requires) {
-        $description .= '<div class="admin-requirements">' . t('Requires: !module-list', array('!module-list' => implode(', ', $module['#requires']))) . '</div>';
-      }
-      if ($required_by) {
-        $description .= '<div class="admin-requirements">' . t('Required by: !module-list', array('!module-list' => implode(', ', $module['#required_by']))) . '</div>';
-      }
-    }
-    $description .= '</div>';
-    $links = '';
-    foreach (array('help', 'permissions', 'configure') as $key) {
-      $links .= drupal_render($module['links'][$key]);
-    }
-    if ($links) {
-      $description .= '  <div class="links">';
-      $description .= $links;
-      $description .= '</div>';
-    }
-    $details = array(
-      '#type' => 'details',
-      '#title' => SafeMarkup::set('<span class="text"> ' . drupal_render($module['description']) . '</span>'),
-      '#attributes' => array('id' => $module['enable']['#id'] . '-description'),
-      '#description' => $description,
-    );
-    $col4 = drupal_render($details);
-    $row[] = array('class' => array('description', 'expand'), 'data' => $col4);
-
-    $rows[] = $module['#attributes'] + array('data' => $row);
-  }
-
-  $table = array(
-    '#type' => 'table',
-    '#header' => $form['#header'],
-    '#rows' => $rows,
-  );
-  return drupal_render($table);
-}
-
-/**
- * Returns HTML for a table of currently disabled modules.
- *
- * @param $variables
- *   An associative array containing:
- *   - form: A render element representing the form.
- *
- * @ingroup themeable
- */
-function theme_system_modules_uninstall($variables) {
-  $form = $variables['form'];
-
-  // No theming for the confirm form.
-  if (isset($form['confirm'])) {
-    return drupal_render($form);
-  }
-
-  // Table headers.
-  $header = array(t('Uninstall'),
-    t('Name'),
-    t('Description'),
-  );
-
-  // Display table.
-  $rows = array();
-  foreach (Element::children($form['modules']) as $module) {
-    $disabled_message = '';
-    // Add the modules requiring the module in question as a validation reason.
-    if (!empty($form['modules'][$module]['#required_by'])) {
-      $form['modules'][$module]['#validation_reasons'][] = \Drupal::translation()->translate('Required by: @modules', array('@modules' => implode(', ',$form['modules'][$module]['#required_by'])));
-    }
-    if (!empty($form['modules'][$module]['#validation_reasons'])) {
-      $disabled_message = \Drupal::translation()->formatPlural(count($form['modules'][$module]['#validation_reasons']),
-        'The following reason prevents @module from being uninstalled: @reasons',
-        'The following reasons prevents @module from being uninstalled: @reasons',
-        array('@module' => $form['modules'][$module]['#module_name'], '@reasons' => implode('; ', $form['modules'][$module]['#validation_reasons'])));
-    }
-    $rows[] = array(
-      array('data' => drupal_render($form['uninstall'][$module]), 'align' => 'center'),
-      array(
-        'data' => array(
-          '#type' => 'inline_template',
-          '#template' => '<label for="{{ module_id }}" class="module-name table-filter-text-source">{{ module_name }}</label>',
-          '#context' => array('module_id' => $form['uninstall'][$module]['#id'], 'module_name' => drupal_render($form['modules'][$module]['name'])),
-        )
-      ),
-      array(
-        'data' => array(
-          '#type' => 'inline_template',
-          '#template' => '{{ module_description }} {% if disabled_message is not empty %} <div class="admin-requirements">{{ disabled_message }}</div> {% endif %}',
-          '#context' => array(
-            'module_description' => drupal_render($form['modules'][$module]['description']),
-            'disabled_message' => $disabled_message,
-          ),
-        ),
-        'class' => array('description'),
-      ),
-    );
-  }
-
-  $table = array(
-    '#type' => 'table',
-    '#header' => $header,
-    '#rows' => $rows,
-    '#empty' => t('No modules are available to uninstall.'),
-  );
-  $output = drupal_render($form['filters']);
-  $output .= drupal_render($table);
-  $output .= drupal_render_children($form);
-
-  return $output;
-}
-
-/**
  * Prepares variables for appearance page templates.
  *
  * Default template: system-themes-page.html.twig.
diff --git a/core/modules/system/system.module b/core/modules/system/system.module
index 255449e..d809725 100644
--- a/core/modules/system/system.module
+++ b/core/modules/system/system.module
@@ -177,16 +177,6 @@ function system_theme() {
     'confirm_form' => array(
       'render element' => 'form',
     ),
-    'system_modules_details' => array(
-      'render element' => 'form',
-      'file' => 'system.admin.inc',
-      'function' => 'theme_system_modules_details',
-    ),
-    'system_modules_uninstall' => array(
-      'render element' => 'form',
-      'file' => 'system.admin.inc',
-      'function' => 'theme_system_modules_uninstall',
-    ),
     'status_report' => array(
       'variables' => array('requirements' => NULL),
       'file' => 'system.admin.inc',
