diff --git a/core/modules/system/system.admin.inc b/core/modules/system/system.admin.inc
index a5bb0f1..48d59ff 100644
--- a/core/modules/system/system.admin.inc
+++ b/core/modules/system/system.admin.inc
@@ -1060,73 +1060,6 @@ function theme_system_admin_index($variables) {
 }
 
 /**
- * Returns HTML for the status report.
- *
- * @param $variables
- *   An associative array containing:
- *   - requirements: An array of requirements.
- *
- * @ingroup themeable
- */
-function theme_status_report($variables) {
-  $requirements = $variables['requirements'];
-  $severities = array(
-    REQUIREMENT_INFO => array(
-      'title' => t('Info'),
-      'class' => 'info',
-    ),
-    REQUIREMENT_OK => array(
-      'title' => t('OK'),
-      'class' => 'ok',
-    ),
-    REQUIREMENT_WARNING => array(
-      'title' => t('Warning'),
-      'class' => 'warning',
-    ),
-    REQUIREMENT_ERROR => array(
-      'title' => t('Error'),
-      'class' => 'error',
-    ),
-  );
-  $output = '<table class="system-status-report"><thead><tr class="visually-hidden">';
-  $output .= '<th>' . t('Status') . '</th><th>' . t('Component') . '</th><th>' . t('Details') . '</th>';
-  $output .= '</tr></thead><tbody>';
-
-  foreach ($requirements as $requirement) {
-    if (empty($requirement['#type'])) {
-      // Always use the explicit requirement severity, if defined. Otherwise,
-      // default to REQUIREMENT_OK in the installer to visually confirm that
-      // installation requirements are met. And default to REQUIREMENT_INFO to
-      // denote neutral information without special visualization.
-      if (isset($requirement['severity'])) {
-        $severity = $severities[(int) $requirement['severity']];
-      }
-      elseif (defined('MAINTENANCE_MODE') && MAINTENANCE_MODE == 'install') {
-        $severity = $severities[REQUIREMENT_OK];
-      }
-      else {
-        $severity = $severities[REQUIREMENT_INFO];
-      }
-
-      $severity['icon'] = '<div title="' . $severity['title'] . '"><span class="visually-hidden">' . $severity['title'] . '</span></div>';
-
-      // Output table rows.
-      $output .= '<tr class="' . $severity['class'] . '">';
-      $output .= '<td class="status-icon">' . $severity['icon'] . '</td>';
-      $output .= '<td class="status-title">' . $requirement['title'] . '</td>';
-      $output .= '<td class="status-value">' . $requirement['value'];
-      if (!empty($requirement['description'])) {
-        $output .= '<div class="description">' . $requirement['description'] . '</div>';
-      }
-      $output .= '</td></tr>';
-    }
-  }
-
-  $output .= '</tbody></table>';
-  return $output;
-}
-
-/**
  * Returns HTML for the modules form.
  *
  * @param $variables
diff --git a/core/modules/system/system.module b/core/modules/system/system.module
index ac42ea3..97e22c9 100644
--- a/core/modules/system/system.module
+++ b/core/modules/system/system.module
@@ -162,7 +162,7 @@ function system_theme() {
     ),
     'status_report' => array(
       'render element' => 'requirements',
-      'file' => 'system.admin.inc',
+      'template' => 'system-status-report',
     ),
     'admin_page' => array(
       'variables' => array('blocks' => NULL),
@@ -2490,6 +2490,36 @@ function template_preprocess_system_plugin_ui_form(&$variables) {
 }
 
 /**
+ * Prepares variables for system status report templates.
+ *
+ * Default template: system-status-report.html.twig.
+ *
+ * @param array $variables
+ *   An associative array containing:
+ *   - requirements: an array of requirements.
+ */
+function template_preprocess_system_status_report(&$variables) {
+  $variables['severities'] = array(
+    REQUIREMENT_INFO => array(
+      'title' => t('Info'),
+      'class' => 'info',
+    ),
+    REQUIREMENT_OK => array(
+      'title' => t('OK'),
+      'class' => 'ok',
+    ),
+    REQUIREMENT_WARNING => array(
+      'title' => t('Warning'),
+      'class' => 'warning',
+    ),
+    REQUIREMENT_ERROR => array(
+      'title' => t('Error'),
+      'class' => 'error',
+    ),
+  );
+}
+
+/**
  * Provide a single block on the administration overview page.
  *
  * @param $item
diff --git a/core/modules/system/templates/system-status-report.html.twig b/core/modules/system/templates/system-status-report.html.twig
new file mode 100644
index 0000000..6fb1ef1
--- /dev/null
+++ b/core/modules/system/templates/system-status-report.html.twig
@@ -0,0 +1,47 @@
+{#
+/**
+ * @file
+ * Default theme implementation to present the theme status report.
+ *
+ * Available variables:
+ * - requirements: An array of requirements.
+ * - severities: An array of severities.
+ *
+ * @ingroup themeable
+ */
+#}
+<table class="system-status-report">
+  <thead>
+    <tr class="visually-hidden">
+      <th>{{ 'Status'|t }}</th>
+      <th>{{ 'Component'|t }}</th>
+      <th>{{ 'Details'|t }}</th>
+    </tr>
+  </thead>
+  <tbody>
+    {% for requirement in requirements %}
+      {# Always use the explicit requirement severity, if defined. Otherwise,
+        default to REQUIREMENT_OK in the installer to visually confirm that
+        installation requirements are met. And default to REQUIREMENT_INFO to
+        denote neutral information without special visualization. #}
+      {% if requirement.severity %}
+         {% set severity = severities[requirement.severity] %}
+      {% elseif MAINTENANCE_MODE == 'install' %}
+         {% set severity = severities.REQUIREMENT_OK %}
+      {% else %}
+         {% set severity = severities.REQUIREMENT_INFO %}
+      {% endif %}
+      {# Output table rows. #}
+      <tr class="{{ severity.class }}">
+        <td class="status-icon"><div title="{{ severity.title }}"><span class="visually-hidden">{{ severity.title }}</span></div></td>
+        <td class="status-title">{{ requirement.title }}</td>
+        <td class="status-value">
+          {{ requirement.value }}
+          {% if requirement.description is not empty %}
+            <div class="description">{{ requirement.description }}</div>
+          {% endif %}
+        </td>
+      </tr>
+    {% endfor %}
+  </tbody>
+</table>
