diff --git a/core/core.services.yml b/core/core.services.yml
index 5f7a779..7f9ed9b 100644
--- a/core/core.services.yml
+++ b/core/core.services.yml
@@ -774,7 +774,7 @@ services:
     class: Drupal\Core\EventSubscriber\DefaultExceptionHtmlSubscriber
     tags:
       - { name: event_subscriber }
-    arguments: ['@http_kernel', '@logger.channel.php']
+    arguments: ['@html_fragment_renderer', '@html_page_renderer']
   exception.default:
     class: Drupal\Core\EventSubscriber\DefaultExceptionSubscriber
     tags:
diff --git a/core/includes/common.inc b/core/includes/common.inc
index 77e270b..9b7fed4 100644
--- a/core/includes/common.inc
+++ b/core/includes/common.inc
@@ -2869,19 +2869,6 @@ function drupal_render(&$elements, $is_root_call = FALSE) {
 
   // Assume that if #theme is set it represents an implemented hook.
   $theme_is_implemented = isset($elements['#theme']);
-  // Check the elements for insecure HTML and pass through sanitization.
-  if (isset($elements)) {
-    $markup_keys = array(
-      '#description',
-      '#field_prefix',
-      '#field_suffix',
-    );
-    foreach ($markup_keys as $key) {
-      if (!empty($elements[$key]) && is_scalar($elements[$key])) {
-        $elements[$key] = SafeMarkup::checkAdminXss($elements[$key]);
-      }
-    }
-  }
 
   // Call the element's #theme function if it is set. Then any children of the
   // element have to be rendered there. If the internal #render_children
@@ -2963,9 +2950,8 @@ function drupal_render(&$elements, $is_root_call = FALSE) {
   // with how render cached output gets stored. This ensures that
   // #post_render_cache callbacks get the same data to work with, no matter if
   // #cache is disabled, #cache is enabled, there is a cache hit or miss.
-  $prefix = isset($elements['#prefix']) ? SafeMarkup::checkAdminXss($elements['#prefix']) : '';
-  $suffix = isset($elements['#suffix']) ? SafeMarkup::checkAdminXss($elements['#suffix']) : '';
-
+  $prefix = isset($elements['#prefix']) ? $elements['#prefix'] : '';
+  $suffix = isset($elements['#suffix']) ? $elements['#suffix'] : '';
   $elements['#markup'] = $prefix . $elements['#children'] . $suffix;
 
   // We've rendered this element (and its subtree!), now update the stack.
diff --git a/core/includes/unicode.inc b/core/includes/unicode.inc
index c9e7246..a0dc9cc 100644
--- a/core/includes/unicode.inc
+++ b/core/includes/unicode.inc
@@ -96,7 +96,7 @@ function drupal_xml_parser_create(&$data) {
   // Unsupported encodings are converted here into UTF-8.
   $php_supported = array('utf-8', 'iso-8859-1', 'us-ascii');
   if (!in_array(strtolower($encoding), $php_supported)) {
-    $out = Unicode::convertToUtf8($data, $encoding);
+    $out = drupal_convert_to_utf8($data, $encoding);
     if ($out !== FALSE) {
       $encoding = 'utf-8';
       $data = preg_replace('/^(<\?xml[^>]+encoding)="(.+?)"/', '\\1="utf-8"', $out);
diff --git a/core/lib/Drupal/Component/Utility/SafeMarkup.php b/core/lib/Drupal/Component/Utility/SafeMarkup.php
index 56bd518..dc0a6a1 100644
--- a/core/lib/Drupal/Component/Utility/SafeMarkup.php
+++ b/core/lib/Drupal/Component/Utility/SafeMarkup.php
@@ -52,7 +52,7 @@ class SafeMarkup {
    * or element that set it. Therefore, only valid HTML should be
    * marked as safe (never partial markup). For example, you should never do:
    * @code
-   *   SafeMarkup::set('<');
+   *   SafeMarkup::set("<");
    * @endcode
    * or:
    * @code
@@ -85,7 +85,7 @@ public static function set($string, $strategy = 'html') {
    * @param string $string
    *   The content to be checked.
    * @param string $strategy
-   *   The escaping strategy. See self::set(). Defaults to 'html'.
+   *   The escaping strategy. See SafeMarkup::set(). Defaults to 'html'.
    *
    * @return bool
    *   TRUE if the string has been marked secure, FALSE otherwise.
@@ -103,7 +103,7 @@ public static function isSafe($string, $strategy = 'html') {
    * added to any safe strings already marked for the current request.
    *
    * @param array $safe_strings
-   *   A list of safe strings as previously retrieved by self::getAll().
+   *   A list of safe strings as previously retrieved by SafeMarkup::getAll().
    *
    * @throws \UnexpectedValueException
    */
@@ -125,34 +125,18 @@ public static function setMultiple(array $safe_strings) {
   /**
    * Encodes special characters in a plain-text string for display as HTML.
    *
-   * @param string $string
+   * @param $string
    *   A string.
    *
    * @return string
    *   The escaped string. If $string was already set as safe with
-   *   self::set(), it won't be escaped again.
+   *   SafeString::set, it won't be escaped again.
    */
   public static function escape($string) {
     return static::isSafe($string) ? $string : String::checkPlain($string);
   }
 
   /**
-   * Applies a very permissive XSS/HTML filter for admin-only use.
-   *
-   * @param string $string
-   *   A string.
-   *
-   * @return string
-   *   The escaped string. If $string was already set as safe with
-   *   self::set(), it won't be escaped again.
-   *
-   * @see \Drupal\Component\Utility\Xss::filterAdmin()
-   */
-  public static function checkAdminXss($string) {
-    return static::isSafe($string) ? $string : Xss::filterAdmin($string);
-  }
-
-  /**
   * Retrieves all strings currently marked as safe.
   *
   * This is useful for the batch and form APIs, where it is important to
diff --git a/core/lib/Drupal/Core/Controller/HtmlControllerBase.php b/core/lib/Drupal/Core/Controller/HtmlControllerBase.php
index 88e0efe..b2a639b 100644
--- a/core/lib/Drupal/Core/Controller/HtmlControllerBase.php
+++ b/core/lib/Drupal/Core/Controller/HtmlControllerBase.php
@@ -49,16 +49,13 @@ public function __construct(TitleResolverInterface $title_resolver, RenderHtmlRe
   /**
    * Converts a render array into an HtmlFragment object.
    *
-   * @param array|\Drupal\Core\Page\HtmlFragmentInterface|\Symfony\Component\HttpFoundation\Response $page_content
+   * @param array|string $page_content
    *   The page content area to display.
    * @param \Symfony\Component\HttpFoundation\Request $request
    *   The request object.
    *
    * @return \Drupal\Core\Page\HtmlPage
    *   A page object.
-   *
-   * @throws \InvalidArgumentException
-   *   Thrown if the controller returns a string.
    */
   protected function createHtmlFragment($page_content, Request $request) {
     // Allow controllers to return a HtmlFragment or a Response object directly.
@@ -66,8 +63,8 @@ protected function createHtmlFragment($page_content, Request $request) {
       return $page_content;
     }
 
-    if (is_string($page_content)) {
-      throw new \InvalidArgumentException('_content controllers are not allowed to return strings. You can return a render array, a html fragment or a response object.');
+    if (!is_array($page_content)) {
+      $page_content = ['#markup' => $page_content];
     }
 
     $fragment = $this->renderHtmlRenderer->render($page_content);
diff --git a/core/lib/Drupal/Core/EventSubscriber/CustomPageExceptionHtmlSubscriber.php b/core/lib/Drupal/Core/EventSubscriber/CustomPageExceptionHtmlSubscriber.php
index c393a34..ae3d944 100644
--- a/core/lib/Drupal/Core/EventSubscriber/CustomPageExceptionHtmlSubscriber.php
+++ b/core/lib/Drupal/Core/EventSubscriber/CustomPageExceptionHtmlSubscriber.php
@@ -9,15 +9,17 @@
 
 use Drupal\Core\Config\ConfigFactoryInterface;
 use Drupal\Core\Path\AliasManagerInterface;
+use Drupal\Core\Utility\Error;
 use Psr\Log\LoggerInterface;
+use Symfony\Component\HttpFoundation\Request;
 use Symfony\Component\HttpFoundation\Response;
 use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent;
 use Symfony\Component\HttpKernel\HttpKernelInterface;
 
 /**
- * Exception subscriber for handling core custom HTML error pages.
+ * Exception subscriber for handling core custom error pages.
  */
-class CustomPageExceptionHtmlSubscriber extends DefaultExceptionHtmlSubscriber {
+class CustomPageExceptionHtmlSubscriber extends HttpExceptionSubscriberBase {
 
   /**
    * The configuration factory.
@@ -34,6 +36,20 @@ class CustomPageExceptionHtmlSubscriber extends DefaultExceptionHtmlSubscriber {
   protected $aliasManager;
 
   /**
+   * The HTTP kernel.
+   *
+   * @var \Symfony\Component\HttpKernel\HttpKernelInterface
+   */
+  protected $httpKernel;
+
+  /**
+   * The logger instance.
+   *
+   * @var \Psr\Log\LoggerInterface
+   */
+  protected $logger;
+
+  /**
    * Constructs a new CustomPageExceptionHtmlSubscriber.
    *
    * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
@@ -46,9 +62,10 @@ class CustomPageExceptionHtmlSubscriber extends DefaultExceptionHtmlSubscriber {
    *   The logger service.
    */
   public function __construct(ConfigFactoryInterface $config_factory, AliasManagerInterface $alias_manager, HttpKernelInterface $http_kernel, LoggerInterface $logger) {
-    parent::__construct($http_kernel, $logger);
     $this->configFactory = $config_factory;
     $this->aliasManager = $alias_manager;
+    $this->httpKernel = $http_kernel;
+    $this->logger = $logger;
   }
 
   /**
@@ -59,7 +76,17 @@ protected static function getPriority() {
   }
 
   /**
-   * {@inheritdoc}
+   * {@inheritDoc}
+   */
+  protected function getHandledFormats() {
+    return ['html'];
+  }
+
+  /**
+   * Handles a 403 error for HTML.
+   *
+   * @param \Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent $event
+   *   The event to process.
    */
   public function on403(GetResponseForExceptionEvent $event) {
     $path = $this->aliasManager->getPathByAlias($this->configFactory->get('system.site')->get('page.403'));
@@ -67,11 +94,56 @@ public function on403(GetResponseForExceptionEvent $event) {
   }
 
   /**
-   * {@inheritdoc}
+   * Handles a 404 error for HTML.
+   *
+   * @param \Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent $event
+   *   The event to process.
    */
   public function on404(GetResponseForExceptionEvent $event) {
     $path = $this->aliasManager->getPathByAlias($this->configFactory->get('system.site')->get('page.404'));
     $this->makeSubrequest($event, $path, Response::HTTP_NOT_FOUND);
   }
 
+  /**
+   * Makes a subrequest to retrieve a custom error page.
+   *
+   * @param \Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent $event
+   *   The event to process
+   * @param string $path
+   *   The path to which to make a subrequest for this error message.
+   * @param int $status_code
+   *   The status code for the error being handled.
+   */
+  protected function makeSubrequest(GetResponseForExceptionEvent $event, $path, $status_code) {
+    $request = $event->getRequest();
+
+    // @todo Remove dependency on the internal _system_path attribute:
+    //   https://www.drupal.org/node/2293523.
+    $system_path = $request->attributes->get('_system_path');
+
+    if ($path && $path != $system_path) {
+      // @todo The create() method expects a slash-prefixed path, but we store a
+      //   normal system path in the site_404 variable.
+      if ($request->getMethod() === 'POST') {
+        $sub_request = Request::create($request->getBaseUrl() . '/' . $path, 'POST', ['destination' => $system_path, '_exception_statuscode' => $status_code] + $request->request->all(), $request->cookies->all(), [], $request->server->all());
+      }
+      else {
+        $sub_request = Request::create($request->getBaseUrl() . '/' . $path, 'GET', $request->query->all() + ['destination' => $system_path, '_exception_statuscode' => $status_code], $request->cookies->all(), [], $request->server->all());
+      }
+
+      try {
+        $response = $this->httpKernel->handle($sub_request, HttpKernelInterface::SUB_REQUEST);
+        $response->setStatusCode($status_code);
+        $event->setResponse($response);
+      }
+      catch (\Exception $e) {
+        // If an error happened in the subrequest we can't do much else.
+        // Instead, just log it.  The DefaultExceptionHandler will catch the
+        // original exception and handle it normally.
+        $error = Error::decodeException($e);
+        $this->logger->log($error['severity_level'], '%type: !message in %function (line %line of %file).', $error);
+      }
+    }
+  }
+
 }
diff --git a/core/lib/Drupal/Core/EventSubscriber/DefaultExceptionHtmlSubscriber.php b/core/lib/Drupal/Core/EventSubscriber/DefaultExceptionHtmlSubscriber.php
index 9535abf..0df6a30 100644
--- a/core/lib/Drupal/Core/EventSubscriber/DefaultExceptionHtmlSubscriber.php
+++ b/core/lib/Drupal/Core/EventSubscriber/DefaultExceptionHtmlSubscriber.php
@@ -7,43 +7,44 @@
 
 namespace Drupal\Core\EventSubscriber;
 
-use Drupal\Core\Utility\Error;
-use Psr\Log\LoggerInterface;
-use Symfony\Component\HttpFoundation\Request;
+use Drupal\Core\Page\HtmlFragment;
+use Drupal\Core\Page\HtmlFragmentRendererInterface;
+use Drupal\Core\Page\HtmlPageRendererInterface;
+use Drupal\Core\StringTranslation\StringTranslationTrait;
 use Symfony\Component\HttpFoundation\Response;
 use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent;
-use Symfony\Component\HttpKernel\HttpKernelInterface;
 
 /**
- * Exception subscriber for handling core default HTML error pages.
+ * Handle most HTTP errors for HTML.
  */
 class DefaultExceptionHtmlSubscriber extends HttpExceptionSubscriberBase {
+  use StringTranslationTrait;
 
   /**
-   * The HTTP kernel.
+   * The HTML fragment renderer.
    *
-   * @var \Symfony\Component\HttpKernel\HttpKernelInterface
+   * @var \Drupal\Core\Page\HtmlFragmentRendererInterface
    */
-  protected $httpKernel;
+  protected $fragmentRenderer;
 
   /**
-   * The logger instance.
+   * The HTML page renderer.
    *
-   * @var \Psr\Log\LoggerInterface
+   * @var \Drupal\Core\Page\HtmlPageRendererInterface
    */
-  protected $logger;
+  protected $htmlPageRenderer;
 
   /**
    * Constructs a new DefaultExceptionHtmlSubscriber.
    *
-   * @param \Symfony\Component\HttpKernel\HttpKernelInterface $http_kernel
-   *   The HTTP kernel.
-   * @param \Psr\Log\LoggerInterface $logger
-   *   The logger service.
+   * @param \Drupal\Core\Page\HtmlFragmentRendererInterface $fragment_renderer
+   *   The fragment renderer.
+   * @param \Drupal\Core\Page\HtmlPageRendererInterface $page_renderer
+   *   The page renderer.
    */
-  public function __construct(HttpKernelInterface $http_kernel, LoggerInterface $logger) {
-    $this->httpKernel = $http_kernel;
-    $this->logger = $logger;
+  public function __construct(HtmlFragmentRendererInterface $fragment_renderer, HtmlPageRendererInterface $page_renderer) {
+    $this->fragmentRenderer = $fragment_renderer;
+    $this->htmlPageRenderer = $page_renderer;
   }
 
   /**
@@ -69,7 +70,9 @@ protected function getHandledFormats() {
    *   The event to process.
    */
   public function on403(GetResponseForExceptionEvent $event) {
-    $this->makeSubrequest($event, 'system/403', Response::HTTP_FORBIDDEN);
+    $response = $this->createResponse($this->t('Access denied'), $this->t('You are not authorized to access this page.'), Response::HTTP_FORBIDDEN);
+    $response->headers->set('Content-type', 'text/html');
+    $event->setResponse($response);
   }
 
   /**
@@ -79,50 +82,40 @@ public function on403(GetResponseForExceptionEvent $event) {
    *   The event to process.
    */
   public function on404(GetResponseForExceptionEvent $event) {
-    $this->makeSubrequest($event, 'system/404', Response::HTTP_NOT_FOUND);
+    $path = $event->getRequest()->getPathInfo();
+    $response = $this->createResponse($this->t('Page not found'), $this->t('The requested page "@path" could not be found.', ['@path' => $path]), Response::HTTP_NOT_FOUND);
+    $response->headers->set('Content-type', 'text/html');
+    $event->setResponse($response);
   }
 
   /**
-   * Makes a subrequest to retrieve the default error page.
+   * Handles a 405 error for HTML.
    *
    * @param \Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent $event
-   *   The event to process
-   * @param string $path
-   *   The path to which to make a subrequest for this error message.
-   * @param int $status_code
-   *   The status code for the error being handled.
+   *   The event to process.
    */
-  protected function makeSubrequest(GetResponseForExceptionEvent $event, $path, $status_code) {
-    $request = $event->getRequest();
-
-    // @todo Remove dependency on the internal _system_path attribute:
-    //   https://www.drupal.org/node/2293523.
-    $system_path = $request->attributes->get('_system_path');
-
-    if ($path && $path != $system_path) {
-      if ($request->getMethod() === 'POST') {
-        $sub_request = Request::create($request->getBaseUrl() . '/' . $path, 'POST', ['destination' => $system_path, '_exception_statuscode' => $status_code] + $request->request->all(), $request->cookies->all(), [], $request->server->all());
-      }
-      else {
-        $sub_request = Request::create($request->getBaseUrl() . '/' . $path, 'GET', $request->query->all() + ['destination' => $system_path, '_exception_statuscode' => $status_code], $request->cookies->all(), [], $request->server->all());
-      }
+  public function on405(GetResponseForExceptionEvent $event) {
+    $response = new Response('Method Not Allowed', Response::HTTP_METHOD_NOT_ALLOWED);
+    $response->headers->set('Content-type', 'text/html');
+    $event->setResponse($response);
+  }
 
-      try {
-        // Persist the 'exception' attribute to the subrequest.
-        $sub_request->attributes->set('exception', $request->attributes->get('exception'));
+  /**
+   * @param $title
+   *   The page title of the response.
+   * @param $body
+   *   The body of the error page.
+   * @param $response_code
+   *   The HTTP response code of the response.
+   * @return Response
+   *   An error Response object ready to return to the browser.
+   */
+  protected function createResponse($title, $body, $response_code) {
+    $fragment = new HtmlFragment($body);
+    $fragment->setTitle($title);
 
-        $response = $this->httpKernel->handle($sub_request, HttpKernelInterface::SUB_REQUEST);
-        $response->setStatusCode($status_code);
-        $event->setResponse($response);
-      }
-      catch (\Exception $e) {
-        // If an error happened in the subrequest we can't do much else. Instead,
-        // just log it. The DefaultExceptionSubscriber will catch the original
-        // exception and handle it normally.
-        $error = Error::decodeException($e);
-        $this->logger->log($error['severity_level'], '%type: !message in %function (line %line of %file).', $error);
-      }
-    }
+    $page = $this->fragmentRenderer->render($fragment, $response_code);
+    return new Response($this->htmlPageRenderer->render($page), $page->getStatusCode());
   }
 
 }
diff --git a/core/lib/Drupal/Core/Mail/Plugin/Mail/PhpMail.php b/core/lib/Drupal/Core/Mail/Plugin/Mail/PhpMail.php
index caa2af3..f3d7aaf 100644
--- a/core/lib/Drupal/Core/Mail/Plugin/Mail/PhpMail.php
+++ b/core/lib/Drupal/Core/Mail/Plugin/Mail/PhpMail.php
@@ -7,7 +7,6 @@
 
 namespace Drupal\Core\Mail\Plugin\Mail;
 
-use Drupal\Component\Utility\Unicode;
 use Drupal\Core\Mail\MailInterface;
 use Drupal\Core\Site\Settings;
 
@@ -66,11 +65,11 @@ public function mail(array $message) {
     }
     $mimeheaders = array();
     foreach ($message['headers'] as $name => $value) {
-      $mimeheaders[] = $name . ': ' . Unicode::mimeHeaderEncode($value);
+      $mimeheaders[] = $name . ': ' . mime_header_encode($value);
     }
     $line_endings = Settings::get('mail_line_endings', PHP_EOL);
     // Prepare mail commands.
-    $mail_subject = Unicode::mimeHeaderEncode($message['subject']);
+    $mail_subject = mime_header_encode($message['subject']);
     // Note: email uses CRLF for line-endings. PHP's API requires LF
     // on Unix and CRLF on Windows. Drupal automatically guesses the
     // line-ending format appropriate for your system. If you need to
diff --git a/core/lib/Drupal/Core/Render/Element/HtmlTag.php b/core/lib/Drupal/Core/Render/Element/HtmlTag.php
index e183c3e..851bbf9 100644
--- a/core/lib/Drupal/Core/Render/Element/HtmlTag.php
+++ b/core/lib/Drupal/Core/Render/Element/HtmlTag.php
@@ -139,33 +139,27 @@ public static function preRenderConditionalComments($element) {
       $expression = '!IE';
     }
     else {
-      // The IE expression might contain some user input data.
-      $expression = SafeMarkup::checkAdminXss($browsers['IE']);
+      $expression = $browsers['IE'];
     }
 
-    // If the #prefix and #suffix properties are used, wrap them with
-    // conditional comment markup. The conditional comment expression is
-    // evaluated by Internet Explorer only. To control the rendering by other
-    // browsers, use either the "downlevel-hidden" or "downlevel-revealed"
-    // technique. See http://en.wikipedia.org/wiki/Conditional_comment
-    // for details.
-
-    // Ensure what we are dealing with is safe.
-    // This would be done later anyway in drupal_render().
-    $prefix = isset($elements['#prefix']) ? SafeMarkup::checkAdminXss($elements['#prefix']) : '';
-    $suffix = isset($elements['#suffix']) ? SafeMarkup::checkAdminXss($elements['#suffix']) : '';
-
-    // Now calling SafeMarkup::set is safe, because we ensured the
-    // data coming in was at least admin escaped.
+    // Wrap the element's potentially existing #prefix and #suffix properties with
+    // conditional comment markup. The conditional comment expression is evaluated
+    // by Internet Explorer only. To control the rendering by other browsers,
+    // either the "downlevel-hidden" or "downlevel-revealed" technique must be
+    // used. See http://en.wikipedia.org/wiki/Conditional_comment for details.
+    $element += array(
+      '#prefix' => '',
+      '#suffix' => '',
+    );
     if (!$browsers['!IE']) {
       // "downlevel-hidden".
-      $element['#prefix'] = SafeMarkup::set("\n<!--[if $expression]>\n" . $prefix);
-      $element['#suffix'] = SafeMarkup::set($suffix . "<![endif]-->\n");
+      $element['#prefix'] = "\n<!--[if $expression]>\n" . $element['#prefix'];
+      $element['#suffix'] .= "<![endif]-->\n";
     }
     else {
       // "downlevel-revealed".
-      $element['#prefix'] = SafeMarkup::set("\n<!--[if $expression]><!-->\n" . $prefix);
-      $element['#suffix'] = SafeMarkup::set($suffix . "<!--<![endif]-->\n");
+      $element['#prefix'] = "\n<!--[if $expression]><!-->\n" . $element['#prefix'];
+      $element['#suffix'] .= "<!--<![endif]-->\n";
     }
 
     return $element;
diff --git a/core/lib/Drupal/Core/Render/Element/MachineName.php b/core/lib/Drupal/Core/Render/Element/MachineName.php
index f0c3768..24ac3a4 100644
--- a/core/lib/Drupal/Core/Render/Element/MachineName.php
+++ b/core/lib/Drupal/Core/Render/Element/MachineName.php
@@ -8,6 +8,7 @@
 namespace Drupal\Core\Render\Element;
 
 use Drupal\Component\Utility\NestedArray;
+use Drupal\Component\Utility\SafeMarkup;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Language\LanguageInterface;
 
@@ -151,13 +152,13 @@ public static function processMachineName(&$element, FormStateInterface $form_st
     $element['#machine_name']['suffix'] = '#' . $suffix_id;
 
     if ($element['#machine_name']['standalone']) {
-      $element['#suffix'] = $element['#suffix'] . ' <small id="' . $suffix_id . '">&nbsp;</small>';
+      $element['#suffix'] = SafeMarkup::set($element['#suffix'] . ' <small id="' . $suffix_id . '">&nbsp;</small>');
     }
     else {
       // Append a field suffix to the source form element, which will contain
       // the live preview of the machine name.
       $source += array('#field_suffix' => '');
-      $source['#field_suffix'] = $source['#field_suffix'] . ' <small id="' . $suffix_id . '">&nbsp;</small>';
+      $source['#field_suffix'] = SafeMarkup::set($source['#field_suffix'] . ' <small id="' . $suffix_id . '">&nbsp;</small>');
 
       $parents = array_merge($element['#machine_name']['source'], array('#field_suffix'));
       NestedArray::setValue($form_state->getCompleteForm(), $parents, $source['#field_suffix']);
diff --git a/core/lib/Drupal/Core/TypedData/TypedDataManager.php b/core/lib/Drupal/Core/TypedData/TypedDataManager.php
index 05e7f4c..9206d23 100644
--- a/core/lib/Drupal/Core/TypedData/TypedDataManager.php
+++ b/core/lib/Drupal/Core/TypedData/TypedDataManager.php
@@ -8,7 +8,6 @@
 namespace Drupal\Core\TypedData;
 
 use Drupal\Component\Plugin\Exception\PluginException;
-use Drupal\Component\Utility\Crypt;
 use Drupal\Component\Utility\String;
 use Drupal\Core\Cache\CacheBackendInterface;
 use Drupal\Core\Extension\ModuleHandlerInterface;
@@ -256,7 +255,7 @@ public function getPropertyInstance(TypedDataInterface $object, $property_name,
     }
     $key = $definition->getDataType();
     if ($settings = $definition->getSettings()) {
-      $key .= ':' . Crypt::hashBase64(serialize($settings));
+      $key .= ':' . implode(',', $settings);
     }
     $key .= ':' . $object->getPropertyPath() . '.';
     // If we are creating list items, we always use 0 in the key as all list
diff --git a/core/modules/aggregator/src/AggregatorFeedViewsData.php b/core/modules/aggregator/src/AggregatorFeedViewsData.php
index 73a3871..cc96226 100644
--- a/core/modules/aggregator/src/AggregatorFeedViewsData.php
+++ b/core/modules/aggregator/src/AggregatorFeedViewsData.php
@@ -7,19 +7,27 @@
 
 namespace Drupal\aggregator;
 
-use Drupal\views\EntityViewsData;
 use Drupal\views\EntityViewsDataInterface;
 
 /**
  * Provides the views data for the aggregator feed entity type.
  */
-class AggregatorFeedViewsData extends EntityViewsData implements EntityViewsDataInterface {
+class AggregatorFeedViewsData implements EntityViewsDataInterface {
 
   /**
    * {@inheritdoc}
    */
   public function getViewsData() {
-    $data = parent::getViewsData();
+    $data = array();
+
+    $data['aggregator_feed']['table']['group']  = t('Aggregator feed');
+
+    $data['aggregator_feed']['table']['base'] = array(
+      'field' => 'fid',
+      'title' => t('Aggregator feed'),
+    );
+
+    $data['aggregator_feed']['table']['entity type'] = 'aggregator_feed';
 
     $data['aggregator_feed']['table']['join'] = array(
       'aggregator_item' => array(
@@ -28,28 +36,128 @@ public function getViewsData() {
       ),
     );
 
-    $data['aggregator_feed']['fid']['help'] = $this->t('The unique ID of the aggregator feed.');
-    $data['aggregator_feed']['fid']['argument']['id'] = 'aggregator_fid';
-    $data['aggregator_feed']['fid']['argument']['name field'] = 'title';
-    $data['aggregator_feed']['fid']['argument']['numeric'] = TRUE;
-
-    $data['aggregator_feed']['fid']['filter']['id'] = 'numeric';
+    $data['aggregator_feed']['fid'] = array(
+      'title' => t('Feed ID'),
+      'help' => t('The unique ID of the aggregator feed.'),
+      'field' => array(
+        'id' => 'numeric',
+      ),
+      'argument' => array(
+        'id' => 'aggregator_fid',
+        'name field' => 'title',
+        'numeric' => TRUE,
+      ),
+      'filter' => array(
+        'id' => 'numeric',
+      ),
+      'sort' => array(
+        'id' => 'standard',
+      ),
+    );
 
-    $data['aggregator_feed']['title']['help'] = $this->t('The title of the aggregator feed.');
-    $data['aggregator_feed']['title']['field']['id'] = 'aggregator_title_link';
-    $data['aggregator_feed']['argument']['id'] = 'string';
+    $data['aggregator_feed']['title'] = array(
+      'title' => t('Title'),
+      'help' => t('The title of the aggregator feed.'),
+      'field' => array(
+        'id' => 'aggregator_title_link',
+        'extra' => array('link'),
+      ),
+      'sort' => array(
+        'id' => 'standard',
+      ),
+      'filter' => array(
+        'id' => 'string',
+      ),
+      'argument' => array(
+        'id' => 'string',
+      ),
+    );
 
-    $data['aggregator_feed']['url']['help'] = $this->t('The fully-qualified URL of the feed.');
+    $data['aggregator_feed']['url'] = array(
+      'title' => t('URL'),
+      'help' => t('The fully-qualified URL of the feed.'),
+      'field' => array(
+        'id' => 'url',
+      ),
+      'argument' => array(
+        'id' => 'string',
+      ),
+      'sort' => array(
+        'id' => 'standard',
+      ),
+      'filter' => array(
+        'id' => 'string',
+      ),
+    );
 
-    $data['aggregator_feed']['link']['help'] = $this->t('The link to the source URL of the feed.');
+    $data['aggregator_feed']['link'] = array(
+      'title' => t('Link'),
+      'help' => t('The link to the source URL of the feed.'),
+      'field' => array(
+        'id' => 'url',
+      ),
+      'argument' => array(
+        'id' => 'string',
+      ),
+      'sort' => array(
+        'id' => 'standard',
+      ),
+      'filter' => array(
+        'id' => 'string',
+      ),
+    );
 
-    $data['aggregator_feed']['checked']['help'] = $this->t('The date the feed was last checked for new content.');
+    $data['aggregator_feed']['checked'] = array(
+      'title' => t('Last checked'),
+      'help' => t('The date the feed was last checked for new content.'),
+      'field' => array(
+        'id' => 'date',
+      ),
+      'sort' => array(
+        'id' => 'date',
+      ),
+      'filter' => array(
+        'id' => 'date',
+      ),
+      'argument' => array(
+        'id' => 'date',
+      ),
+    );
 
-    $data['aggregator_feed']['description']['help'] = $this->t('The description of the aggregator feed.');
-    $data['aggregator_feed']['description']['field']['id'] = 'xss';
-    $data['aggregator_feed']['description']['field']['click sortable'] = FALSE;
+    $data['aggregator_feed']['description'] = array(
+      'title' => t('Description'),
+      'help' => t('The description of the aggregator feed.'),
+      'field' => array(
+        'id' => 'xss',
+        'click sortable' => FALSE,
+      ),
+      'filter' => array(
+        'id' => 'string',
+      ),
+      'argument' => array(
+        'id' => 'string',
+      ),
+      'sort' => array(
+        'id' => 'standard',
+      ),
+    );
 
-    $data['aggregator_feed']['modified']['help'] = $this->t('The date of the most recent new content on the feed.');
+    $data['aggregator_feed']['modified'] = array(
+      'title' => t('Last modified'),
+      'help' => t('The date of the most recent new content on the feed.'),
+      'field' => array(
+        'id' => 'date',
+      ),
+      'sort' => array(
+        'id' => 'date',
+      ),
+      'filter' => array(
+        'id' => 'date',
+      ),
+      'argument' => array(
+        'id' => 'date',
+      ),
+    );
 
     return $data;
   }
diff --git a/core/modules/aggregator/src/AggregatorItemViewsData.php b/core/modules/aggregator/src/AggregatorItemViewsData.php
index 8e40930..cdaae27 100644
--- a/core/modules/aggregator/src/AggregatorItemViewsData.php
+++ b/core/modules/aggregator/src/AggregatorItemViewsData.php
@@ -7,44 +7,150 @@
 
 namespace Drupal\aggregator;
 
-use Drupal\views\EntityViewsData;
 use Drupal\views\EntityViewsDataInterface;
 
 /**
  * Provides the views data for the aggregator item entity type.
  */
-class AggregatorItemViewsData extends EntityViewsData implements EntityViewsDataInterface {
+class AggregatorItemViewsData implements EntityViewsDataInterface {
 
   /**
    * {@inheritdoc}
    */
   public function getViewsData() {
-    $data = parent::getViewsData();
-
-    $data['aggregator_item']['table']['base']['help'] = $this->t('Aggregator items are imported from external RSS and Atom news feeds.');
-
-
-    $data['aggregator_item']['iid']['help'] = $this->t('The unique ID of the aggregator item.');
-    $data['aggregator_item']['iid']['argument']['id'] = 'aggregator_iid';
-    $data['aggregator_item']['iid']['argument']['name field'] = 'title';
-    $data['aggregator_item']['iid']['argument']['numeric'] = TRUE;
-
-    $data['aggregator_item']['title']['help'] = $this->t('The title of the aggregator item.');
-    $data['aggregator_item']['title']['field']['id'] = 'aggregator_title_link';
-    $data['aggregator_item']['title']['field']['extra'] = 'link';
-
-    $data['aggregator_item']['link']['help'] = $this->t('The link to the original source URL of the item.');
-
-    $data['aggregator_item']['author']['help'] = $this->t('The author of the original imported item.');
-    $data['aggregator_item']['author']['field']['id'] = 'aggregator_xss';
-
-    $data['aggregator_item']['guid']['help'] = $this->t('The guid of the original imported item.');
-
-    $data['aggregator_item']['description']['help'] = $this->t('The actual content of the imported item.');
-    $data['aggregator_item']['description']['field']['id'] = 'aggregator_xss';
-    $data['aggregator_item']['description']['field']['click sortable'] = FALSE;
-
-    $data['aggregator_item']['timestamp']['help'] = $this->t('The date the original feed item was posted. (With some feeds, this will be the date it was imported.)');
+    $data = array();
+
+    $data['aggregator_item']['table']['group'] = t('Aggregator');
+
+    $data['aggregator_item']['table']['base'] = array(
+      'field' => 'iid',
+      'title' => t('Aggregator item'),
+      'help' => t('Aggregator items are imported from external RSS and Atom news feeds.'),
+    );
+    $data['aggregator_item']['table']['entity type'] = 'aggregator_item';
+
+    $data['aggregator_item']['iid'] = array(
+      'title' => t('Item ID'),
+      'help' => t('The unique ID of the aggregator item.'),
+      'field' => array(
+        'id' => 'numeric',
+      ),
+      'argument' => array(
+        'id' => 'aggregator_iid',
+        'name field' => 'title',
+        'numeric' => TRUE,
+      ),
+      'filter' => array(
+        'id' => 'numeric',
+      ),
+      'sort' => array(
+        'id' => 'standard',
+      ),
+    );
+
+    $data['aggregator_item']['title'] = array(
+      'title' => t('Title'),
+      'help' => t('The title of the aggregator item.'),
+      'field' => array(
+        'id' => 'aggregator_title_link',
+        'extra' => array('link'),
+      ),
+      'argument' => array(
+        'id' => 'string',
+      ),
+      'sort' => array(
+        'id' => 'standard',
+      ),
+      'filter' => array(
+        'id' => 'string',
+      ),
+    );
+
+    $data['aggregator_item']['link'] = array(
+      'title' => t('Link'),
+      'help' => t('The link to the original source URL of the item.'),
+      'field' => array(
+        'id' => 'url',
+      ),
+      'argument' => array(
+        'id' => 'string',
+      ),
+      'sort' => array(
+        'id' => 'standard',
+      ),
+      'filter' => array(
+        'id' => 'string',
+      ),
+    );
+
+    $data['aggregator_item']['author'] = array(
+      'title' => t('Author'),
+      'help' => t('The author of the original imported item.'),
+      'field' => array(
+        'id' => 'aggregator_xss',
+      ),
+      'argument' => array(
+        'id' => 'string',
+      ),
+      'sort' => array(
+        'id' => 'standard',
+      ),
+      'filter' => array(
+        'id' => 'string',
+      ),
+    );
+
+    $data['aggregator_item']['guid'] = array(
+      'title' => t('GUID'),
+      'help' => t('The guid of the original imported item.'),
+      'field' => array(
+        'id' => 'standard',
+      ),
+      'argument' => array(
+        'id' => 'string',
+      ),
+      'sort' => array(
+        'id' => 'standard',
+      ),
+      'filter' => array(
+        'id' => 'string',
+      ),
+    );
+
+    $data['aggregator_item']['description'] = array(
+      'title' => t('Body'),
+      'help' => t('The actual content of the imported item.'),
+      'field' => array(
+        'id' => 'aggregator_xss',
+        'click sortable' => FALSE,
+      ),
+      'argument' => array(
+        'id' => 'string',
+      ),
+      'filter' => array(
+        'id' => 'string',
+      ),
+      'sort' => array(
+        'id' => 'standard',
+      ),
+    );
+
+    $data['aggregator_item']['timestamp'] = array(
+      'title' => t('Timestamp'),
+      'help' => t('The date the original feed item was posted. (With some feeds, this will be the date it was imported.)'),
+      'field' => array(
+        'id' => 'date',
+      ),
+      'sort' => array(
+        'id' => 'date',
+      ),
+      'filter' => array(
+        'id' => 'date',
+      ),
+      'argument' => array(
+        'id' => 'date',
+      ),
+    );
 
     return $data;
   }
diff --git a/core/modules/aggregator/templates/aggregator-feed.html.twig b/core/modules/aggregator/templates/aggregator-feed.html.twig
index 57f7d15..1876c45 100644
--- a/core/modules/aggregator/templates/aggregator-feed.html.twig
+++ b/core/modules/aggregator/templates/aggregator-feed.html.twig
@@ -18,7 +18,7 @@
  * @ingroup themeable
  */
 #}
-<div>
+<div{{ attributes.addClass('aggregator-feed') }}>
 
   {{ title_prefix }}
   {% if not full %}
diff --git a/core/modules/aggregator/templates/aggregator-item.html.twig b/core/modules/aggregator/templates/aggregator-item.html.twig
index 1f04de5..8f31937 100644
--- a/core/modules/aggregator/templates/aggregator-item.html.twig
+++ b/core/modules/aggregator/templates/aggregator-item.html.twig
@@ -16,9 +16,9 @@
  * @ingroup themeable
  */
 #}
-<div>
+<div{{ attributes.addClass('aggregator-item') }}>
   {{ title_prefix }}
-  <h3>
+  <h3 class="feed-item-title">
     <a href="{{ url }}">{{ title }}</a>
   </h3>
   {{ title_suffix }}
diff --git a/core/modules/block/src/Tests/BlockTest.php b/core/modules/block/src/Tests/BlockTest.php
index 9ce288c..1996c9b 100644
--- a/core/modules/block/src/Tests/BlockTest.php
+++ b/core/modules/block/src/Tests/BlockTest.php
@@ -47,6 +47,9 @@ function testBlockVisibility() {
     $this->drupalGet('user');
     $this->assertNoText($title, 'Block was not displayed according to block visibility rules.');
 
+    $this->drupalGet('USER/' . $this->adminUser->id());
+    $this->assertNoText($title, 'Block was not displayed according to block visibility rules regardless of path case.');
+
     // Confirm that the block is not displayed to anonymous users.
     $this->drupalLogout();
     $this->drupalGet('');
diff --git a/core/modules/config/src/Tests/SchemaCheckTestTrait.php b/core/modules/config/src/Tests/SchemaCheckTestTrait.php
index c5b4cba..a0d3e99 100644
--- a/core/modules/config/src/Tests/SchemaCheckTestTrait.php
+++ b/core/modules/config/src/Tests/SchemaCheckTestTrait.php
@@ -49,4 +49,13 @@ public function assertConfigSchema(TypedConfigManagerInterface $typed_config, $c
       }
     }
   }
+
+  /**
+   * @param $config_name
+   */
+  public function assertConfigSchemaByName($config_name) {
+    $config = \Drupal::config($config_name);
+    $this->assertConfigSchema(\Drupal::service('config.typed'), $config->getName(), $config->get());
+  }
+
 }
diff --git a/core/modules/contact/src/MessageInterface.php b/core/modules/contact/src/MessageInterface.php
index 7ae39c8..224564e 100644
--- a/core/modules/contact/src/MessageInterface.php
+++ b/core/modules/contact/src/MessageInterface.php
@@ -2,7 +2,7 @@
 
 /**
  * @file
- * Contains \Drupal\contact\MessageInterface.
+ * Contains \Drupal\contact\Entity\MessageInterface.
  */
 
 namespace Drupal\contact;
diff --git a/core/modules/editor/editor.admin.inc b/core/modules/editor/editor.admin.inc
index 83bc2cf..85006eb 100644
--- a/core/modules/editor/editor.admin.inc
+++ b/core/modules/editor/editor.admin.inc
@@ -6,6 +6,7 @@
  */
 
 use Drupal\Core\StreamWrapper\StreamWrapperInterface;
+use Drupal\Component\Utility\SafeMarkup;
 use Drupal\editor\Entity\Editor;
 
 /**
@@ -92,8 +93,8 @@ function editor_image_upload_settings_form(Editor $editor) {
   $form['max_dimensions'] = array(
     '#type' => 'item',
     '#title' => t('Maximum dimensions'),
-    '#field_prefix' => '<div class="container-inline clearfix">',
-    '#field_suffix' => '</div>',
+    '#field_prefix' => SafeMarkup::set('<div class="container-inline clearfix">'),
+    '#field_suffix' => SafeMarkup::set('</div>'),
     '#description' => t('Images larger than these dimensions will be scaled down.'),
     '#states' => $show_if_image_uploads_enabled,
   );
diff --git a/core/modules/field_ui/src/Tests/FieldUiTestBase.php b/core/modules/field_ui/src/Tests/FieldUiTestBase.php
index 314cf5b..962acec 100644
--- a/core/modules/field_ui/src/Tests/FieldUiTestBase.php
+++ b/core/modules/field_ui/src/Tests/FieldUiTestBase.php
@@ -105,7 +105,6 @@ function fieldUIAddExistingField($bundle_path, $initial_edit, $field_edit = arra
 
     // First step : 'Re-use existing field' on the 'Manage fields' page.
     $this->drupalPostForm("$bundle_path/fields", $initial_edit, t('Save'));
-    $this->assertNoRaw('&amp;lt;', 'The page does not have double escaped HTML tags.');
 
     // Second step : 'Field settings' form.
     $this->drupalPostForm(NULL, $field_edit, t('Save settings'));
diff --git a/core/modules/file/file.module b/core/modules/file/file.module
index 9f83add..06e71ae 100644
--- a/core/modules/file/file.module
+++ b/core/modules/file/file.module
@@ -532,7 +532,7 @@ function file_save_data($data, $destination = NULL, $replace = FILE_EXISTS_RENAM
  *   \Symfony\Component\HttpFoundation\StreamedResponse.
  */
 function file_get_content_headers(FileInterface $file) {
-  $type = Unicode::mimeHeaderEncode($file->getMimeType());
+  $type = mime_header_encode($file->getMimeType());
 
   return array(
     'Content-Type' => $type,
diff --git a/core/modules/migrate/src/Plugin/migrate/source/SqlBase.php b/core/modules/migrate/src/Plugin/migrate/source/SqlBase.php
index a008568..074184f 100644
--- a/core/modules/migrate/src/Plugin/migrate/source/SqlBase.php
+++ b/core/modules/migrate/src/Plugin/migrate/source/SqlBase.php
@@ -155,11 +155,10 @@ protected function runQuery() {
           $map_key = 'sourceid' . $count;
           $this->query->addField($alias, $map_key, "migrate_map_$map_key");
         }
-        if ($n = count($this->migration->get('destinationIds'))) {
-          for ($count = 1; $count <= $n; $count++) {
-            $map_key = 'destid' . $count++;
-            $this->query->addField($alias, $map_key, "migrate_map_$map_key");
-          }
+        $n = count($this->migration->get('destinationIds'));
+        for ($count = 1; $count <= $n; $count++) {
+          $map_key = 'destid' . $count++;
+          $this->query->addField($alias, $map_key, "migrate_map_$map_key");
         }
         $this->query->addField($alias, 'source_row_status', 'migrate_map_source_row_status');
       }
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_forum_settings.yml b/core/modules/migrate_drupal/config/install/migrate.migration.d6_forum_settings.yml
index 30d229c..cee5a69 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_forum_settings.yml
+++ b/core/modules/migrate_drupal/config/install/migrate.migration.d6_forum_settings.yml
@@ -10,20 +10,12 @@ source:
     - forum_order
     - forum_block_num_0
     - forum_block_num_1
-    - forum_nav_vocabulary
 process:
   'block/active/limit': forum_block_num_0
   'block/new/limit': forum_block_num_1
   'topics/hot_threshold': forum_hot_topic
   'topics/page_limit': forum_per_page
   'topics/order': forum_order
-  vocabulary:
-    plugin: migration
-    migration: d6_taxonomy_vocabulary
-    source: forum_nav_vocabulary
 destination:
   plugin: config
   config_name: forum.settings
-migration_dependencies:
-  required:
-    - d6_taxonomy_vocabulary
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_node_settings.yml b/core/modules/migrate_drupal/config/install/migrate.migration.d6_node_settings.yml
index 487a4c4..10a7253 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_node_settings.yml
+++ b/core/modules/migrate_drupal/config/install/migrate.migration.d6_node_settings.yml
@@ -6,10 +6,11 @@ source:
   plugin: variable
   variables:
     - node_admin_theme
-    - default_nodes_main
 process:
   use_admin_theme: node_admin_theme
-  items_per_page: default_nodes_main
 destination:
   plugin: config
   config_name: node.settings
+migration_dependencies:
+  required:
+    - d6_node_type
diff --git a/core/modules/migrate_drupal/src/Tests/Dump/Drupal6NodeSettings.php b/core/modules/migrate_drupal/src/Tests/Dump/Drupal6NodeSettings.php
index eb4353e..4fb67b9 100644
--- a/core/modules/migrate_drupal/src/Tests/Dump/Drupal6NodeSettings.php
+++ b/core/modules/migrate_drupal/src/Tests/Dump/Drupal6NodeSettings.php
@@ -25,10 +25,6 @@ public function load() {
       'name' => 'node_admin_theme',
       'value' => 'i:0;',
     ))
-    ->values(array(
-      'name' => 'default_nodes_main',
-      'value' => 's:1:"3";',
-    ))
     ->execute();
   }
 }
diff --git a/core/modules/migrate_drupal/src/Tests/d6/MigrateForumConfigsTest.php b/core/modules/migrate_drupal/src/Tests/d6/MigrateForumConfigsTest.php
index 6f3c2bc..095254e 100644
--- a/core/modules/migrate_drupal/src/Tests/d6/MigrateForumConfigsTest.php
+++ b/core/modules/migrate_drupal/src/Tests/d6/MigrateForumConfigsTest.php
@@ -32,11 +32,6 @@ class MigrateForumConfigsTest extends MigrateDrupalTestBase {
    */
   protected function setUp() {
     parent::setUp();
-    $this->prepareMigrations(array(
-      'd6_taxonomy_vocabulary' => array(
-        array(array(1), array('vocabulary_1_i_0_')),
-      )
-    ));
     $migration = entity_load('migration', 'd6_forum_settings');
     $dumps = array(
       $this->getDumpDirectory() . '/Drupal6ForumSettings.php',
@@ -54,7 +49,8 @@ public function testForumSettings() {
     $this->assertIdentical($config->get('topics.hot_threshold'), 15);
     $this->assertIdentical($config->get('topics.page_limit'), 25);
     $this->assertIdentical($config->get('topics.order'), 1);
-    $this->assertIdentical($config->get('vocabulary'), 'vocabulary_1_i_0_');
+    // The vocabulary vid depends on existing vids when the Forum module was enabled. This would have to be user-selectable based on a query to the D6 vocabulary table.
+    //$this->assertIdentical($config->get('forum_nav_vocabulary'), '1');
     // This is 'forum_block_num_0' in D6, but block:active:limit' in D8.
     $this->assertIdentical($config->get('block.active.limit'), 5);
     // This is 'forum_block_num_1' in D6, but 'block:new:limit' in D8.
diff --git a/core/modules/migrate_drupal/src/Tests/d6/MigrateNodeConfigsTest.php b/core/modules/migrate_drupal/src/Tests/d6/MigrateNodeConfigsTest.php
index d2675f2..0f3d539 100644
--- a/core/modules/migrate_drupal/src/Tests/d6/MigrateNodeConfigsTest.php
+++ b/core/modules/migrate_drupal/src/Tests/d6/MigrateNodeConfigsTest.php
@@ -47,8 +47,7 @@ protected function setUp() {
    */
   public function testNodeSettings() {
     $config = \Drupal::config('node.settings');
-    $this->assertIdentical($config->get('use_admin_theme'), FALSE);
-    $this->assertIdentical($config->get('items_per_page'), 3);
+    $this->assertIdentical($config->get('use_admin_theme'), false);
     $this->assertConfigSchema(\Drupal::service('config.typed'), 'node.settings', $config->get());
   }
 
diff --git a/core/modules/options/src/Tests/OptionsFieldUITest.php b/core/modules/options/src/Tests/OptionsFieldUITest.php
index 40343bf..e3b4684 100644
--- a/core/modules/options/src/Tests/OptionsFieldUITest.php
+++ b/core/modules/options/src/Tests/OptionsFieldUITest.php
@@ -278,7 +278,6 @@ protected function createOptionsField($type) {
   function assertAllowedValuesInput($input_string, $result, $message) {
     $edit = array('field_storage[settings][allowed_values]' => $input_string);
     $this->drupalPostForm($this->admin_path, $edit, t('Save field settings'));
-    $this->assertNoRaw('&amp;lt;', 'The page does not have double escaped HTML tags.');
 
     if (is_string($result)) {
       $this->assertText($result, $message);
diff --git a/core/modules/rdf/rdf.module b/core/modules/rdf/rdf.module
index c3fce4f..371be2c 100644
--- a/core/modules/rdf/rdf.module
+++ b/core/modules/rdf/rdf.module
@@ -498,14 +498,14 @@ function rdf_preprocess_comment(&$variables) {
   }
   // Adds RDF metadata markup above comment body.
   if (!empty($variables['rdf_metadata_attributes'])) {
+    if (!isset($variables['content']['comment_body']['#prefix'])) {
+      $variables['content']['comment_body']['#prefix'] = '';
+    }
     $rdf_metadata = array(
       '#theme' => 'rdf_metadata',
       '#metadata' => $variables['rdf_metadata_attributes'],
     );
-    if (!empty($variables['content']['comment_body']['#prefix'])) {
-      $rdf_metadata['#suffix'] = $variables['content']['comment_body']['#prefix'];
-    }
-    $variables['content']['comment_body']['#prefix'] = drupal_render($rdf_metadata);
+    $variables['content']['comment_body']['#prefix'] = drupal_render($rdf_metadata) . $variables['content']['comment_body']['#prefix'];
   }
 }
 
diff --git a/core/modules/rdf/templates/rdf-metadata.html.twig b/core/modules/rdf/templates/rdf-metadata.html.twig
index 4d96136..4f65294 100644
--- a/core/modules/rdf/templates/rdf-metadata.html.twig
+++ b/core/modules/rdf/templates/rdf-metadata.html.twig
@@ -18,5 +18,5 @@
  */
 #}
 {% for attributes in metadata %}
-  <span{{ attributes.addClass('hidden') }}></span>
+  <span{{ attributes.addClass('rdf-meta', 'hidden') }}></span>
 {% endfor %}
diff --git a/core/modules/rest/src/Tests/DeleteTest.php b/core/modules/rest/src/Tests/DeleteTest.php
index 6456df1..402325c 100644
--- a/core/modules/rest/src/Tests/DeleteTest.php
+++ b/core/modules/rest/src/Tests/DeleteTest.php
@@ -55,7 +55,7 @@ public function testDelete() {
       // Try to delete an entity that does not exist.
       $response = $this->httpRequest($entity_type . '/9999', 'DELETE');
       $this->assertResponse(404);
-      $this->assertText('The requested page could not be found.');
+      $this->assertText('The requested page "/' . $entity_type . '/9999" could not be found.');
 
       // Try to delete an entity without proper permissions.
       $this->drupalLogout();
diff --git a/core/modules/search/templates/search-result.html.twig b/core/modules/search/templates/search-result.html.twig
index 4847c9c..732489b 100644
--- a/core/modules/search/templates/search-result.html.twig
+++ b/core/modules/search/templates/search-result.html.twig
@@ -59,15 +59,15 @@
  */
 #}
 {{ title_prefix }}
-<h3{{ title_attributes }}>
+<h3 class="title"{{ title_attributes }}>
   <a href="{{ url }}">{{ title }}</a>
 </h3>
 {{ title_suffix }}
-<div>
+<div class="search-snippet-info">
   {% if snippet %}
-    <p{{ content_attributes }}>{{ snippet }}</p>
+    <p class="search-snippet"{{ content_attributes }}>{{ snippet }}</p>
   {% endif %}
   {% if info %}
-    <p>{{ info }}</p>
+    <p class="search-info">{{ info }}</p>
   {% endif %}
 </div>
diff --git a/core/modules/system/src/Controller/Http4xxController.php b/core/modules/system/src/Controller/Http4xxController.php
deleted file mode 100644
index 7add79e..0000000
--- a/core/modules/system/src/Controller/Http4xxController.php
+++ /dev/null
@@ -1,41 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains \Drupal\system\Controller\Http4xxController.
- */
-
-namespace Drupal\system\Controller;
-
-use Drupal\Core\Controller\ControllerBase;
-
-/**
- * Controller for default HTTP 4xx responses.
- */
-class Http4xxController extends ControllerBase {
-
-  /**
-   * The default 403 content.
-   *
-   * @return array
-   *  A render array containing the message to display for 404 pages.
-   */
-  public function on403() {
-    return [
-      '#markup' => $this->t('You are not authorized to access this page.'),
-    ];
-  }
-
-  /**
-   * The default 404 content.
-   *
-   * @return array
-   *  A render array containing the message to display for 404 pages.
-   */
-  public function on404() {
-    return [
-      '#markup' => $this->t('The requested page could not be found.'),
-    ];
-  }
-
-}
diff --git a/core/modules/system/src/Tests/Common/RenderTest.php b/core/modules/system/src/Tests/Common/RenderTest.php
index 739e3b5..381ff8d 100644
--- a/core/modules/system/src/Tests/Common/RenderTest.php
+++ b/core/modules/system/src/Tests/Common/RenderTest.php
@@ -808,10 +808,10 @@ function testDrupalRenderRenderCachePlaceholder() {
         ),
       ),
       '#markup' => $placeholder,
-      '#prefix' => '<pre>',
-      '#suffix' => '</pre>',
+      '#prefix' => '<foo>',
+      '#suffix' => '</foo>'
     );
-    $expected_output = '<pre><bar>' . $context['bar'] . '</bar></pre>';
+    $expected_output = '<foo><bar>' . $context['bar'] . '</bar></foo>';
 
     // #cache disabled.
     $element = $test_element;
@@ -852,7 +852,7 @@ function testDrupalRenderRenderCachePlaceholder() {
     $this->assertIdentical($token, $expected_token, 'The tokens are identical');
     // Verify the token is in the cached element.
     $expected_element = array(
-      '#markup' => '<pre><drupal-render-cache-placeholder callback="common_test_post_render_cache_placeholder" token="'. $expected_token . '"></drupal-render-cache-placeholder></pre>',
+      '#markup' => '<foo><drupal-render-cache-placeholder callback="common_test_post_render_cache_placeholder" token="'. $expected_token . '"></drupal-render-cache-placeholder></foo>',
       '#attached' => array(),
       '#post_render_cache' => array(
         'common_test_post_render_cache_placeholder' => array(
@@ -895,11 +895,11 @@ function testDrupalRenderChildElementRenderCachePlaceholder() {
           ],
         ],
         '#markup' => $placeholder,
-        '#prefix' => '<pre>',
-        '#suffix' => '</pre>'
+        '#prefix' => '<foo>',
+        '#suffix' => '</foo>'
       ],
     ];
-    $expected_output = '<pre><bar>' . $context['bar'] . '</bar></pre>' . "\n";
+    $expected_output = '<foo><bar>' . $context['bar'] . '</bar></foo>' . "\n";
 
     // #cache disabled.
     $element = $test_element;
@@ -943,7 +943,7 @@ function testDrupalRenderChildElementRenderCachePlaceholder() {
     $this->assertIdentical($token, $expected_token, 'The tokens are identical for the child element');
     // Verify the token is in the cached element.
     $expected_element = array(
-      '#markup' => '<pre><drupal-render-cache-placeholder callback="common_test_post_render_cache_placeholder" token="'. $expected_token . '"></drupal-render-cache-placeholder></pre>',
+      '#markup' => '<foo><drupal-render-cache-placeholder callback="common_test_post_render_cache_placeholder" token="'. $expected_token . '"></drupal-render-cache-placeholder></foo>',
       '#attached' => array(),
       '#post_render_cache' => array(
         'common_test_post_render_cache_placeholder' => array(
@@ -969,7 +969,7 @@ function testDrupalRenderChildElementRenderCachePlaceholder() {
     $this->assertIdentical($token, $expected_token, 'The tokens are identical for the parent element');
     // Verify the token is in the cached element.
     $expected_element = array(
-      '#markup' => '<pre><drupal-render-cache-placeholder callback="common_test_post_render_cache_placeholder" token="'. $expected_token . '"></drupal-render-cache-placeholder></pre>' . "\n",
+      '#markup' => '<foo><drupal-render-cache-placeholder callback="common_test_post_render_cache_placeholder" token="'. $expected_token . '"></drupal-render-cache-placeholder></foo>' . "\n",
       '#attached' => array(),
       '#post_render_cache' => array(
         'common_test_post_render_cache_placeholder' => array(
@@ -999,7 +999,7 @@ function testDrupalRenderChildElementRenderCachePlaceholder() {
     $this->assertIdentical($token, $expected_token, 'The tokens are identical for the child element');
     // Verify the token is in the cached element.
     $expected_element = array(
-      '#markup' => '<pre><drupal-render-cache-placeholder callback="common_test_post_render_cache_placeholder" token="'. $expected_token . '"></drupal-render-cache-placeholder></pre>',
+      '#markup' => '<foo><drupal-render-cache-placeholder callback="common_test_post_render_cache_placeholder" token="'. $expected_token . '"></drupal-render-cache-placeholder></foo>',
       '#attached' => array(),
       '#post_render_cache' => array(
         'common_test_post_render_cache_placeholder' => array(
diff --git a/core/modules/system/src/Tests/Entity/EntityUnitTestBase.php b/core/modules/system/src/Tests/Entity/EntityUnitTestBase.php
index c1dc0ff..ada31f2 100644
--- a/core/modules/system/src/Tests/Entity/EntityUnitTestBase.php
+++ b/core/modules/system/src/Tests/Entity/EntityUnitTestBase.php
@@ -20,7 +20,7 @@
    *
    * @var array
    */
-  public static $modules = array('entity', 'user', 'system', 'field', 'text', 'filter', 'entity_test', 'entity_reference');
+  public static $modules = array('entity', 'user', 'system', 'field', 'text', 'filter', 'entity_test');
 
   /**
    * The entity manager service.
diff --git a/core/modules/system/src/Tests/Routing/ExceptionHandlingTest.php b/core/modules/system/src/Tests/Routing/ExceptionHandlingTest.php
index 0d925b7..b6ed513 100644
--- a/core/modules/system/src/Tests/Routing/ExceptionHandlingTest.php
+++ b/core/modules/system/src/Tests/Routing/ExceptionHandlingTest.php
@@ -77,14 +77,14 @@ public function testHtml403() {
 
     /** @var \Symfony\Component\HttpKernel\HttpKernelInterface $kernel */
     $kernel = \Drupal::getContainer()->get('http_kernel');
-    $response = $kernel->handle($request)->prepare($request);
+    $response = $kernel->handle($request);
 
     $this->assertEqual($response->getStatusCode(), Response::HTTP_FORBIDDEN);
-    $this->assertEqual($response->headers->get('Content-type'), 'text/html; charset=UTF-8');
+    $this->assertEqual($response->headers->get('Content-type'), 'text/html');
   }
 
   /**
-   * Tests the exception handling for HTML and 404 status code.
+   * Tests the exception handling for HTML and 403 status code.
    */
   public function testHtml404() {
     $request = Request::create('/not-found');
@@ -93,10 +93,27 @@ public function testHtml404() {
 
     /** @var \Symfony\Component\HttpKernel\HttpKernelInterface $kernel */
     $kernel = \Drupal::getContainer()->get('http_kernel');
-    $response = $kernel->handle($request)->prepare($request);
+    $response = $kernel->handle($request);
 
     $this->assertEqual($response->getStatusCode(), Response::HTTP_NOT_FOUND);
-    $this->assertEqual($response->headers->get('Content-type'), 'text/html; charset=UTF-8');
+    $this->assertEqual($response->headers->get('Content-type'), 'text/html');
+  }
+
+  /**
+   * Tests the exception handling for HTML and 405 status code.
+   */
+  public function testHtml405() {
+    $request = Request::create('/admin', 'NOT_EXISTING');
+    $request->headers->set('Accept', 'text/html');
+    $request->setFormat('html', ['text/html']);
+
+    /** @var \Symfony\Component\HttpKernel\HttpKernelInterface $kernel */
+    $kernel = \Drupal::getContainer()->get('http_kernel');
+    $response = $kernel->handle($request);
+
+    $this->assertEqual($response->getStatusCode(), Response::HTTP_METHOD_NOT_ALLOWED);
+    $this->assertEqual($response->headers->get('Content-type'), 'text/html');
+    $this->assertEqual($response->getContent(), 'Method Not Allowed');
   }
 
 }
diff --git a/core/modules/system/system.admin.inc b/core/modules/system/system.admin.inc
index 0430cd9..0231667 100644
--- a/core/modules/system/system.admin.inc
+++ b/core/modules/system/system.admin.inc
@@ -259,7 +259,7 @@ function theme_system_modules_details($variables) {
       '#type' => 'details',
       '#title' => SafeMarkup::set('<span class="text"> ' . drupal_render($module['description']) . '</span>'),
       '#attributes' => array('id' => $module['enable']['#id'] . '-description'),
-      '#description' => $description,
+      '#description' => SafeMarkup::set($description),
     );
     $col4 = drupal_render($details);
     $row[] = array('class' => array('description', 'expand'), 'data' => $col4);
diff --git a/core/modules/system/system.routing.yml b/core/modules/system/system.routing.yml
index 4d54d00..b285bcf 100644
--- a/core/modules/system/system.routing.yml
+++ b/core/modules/system/system.routing.yml
@@ -7,22 +7,6 @@ system.ajax:
   requirements:
     _access: 'TRUE'
 
-system.403:
-  path: '/system/403'
-  defaults:
-    _content: '\Drupal\system\Controller\Http4xxController:on403'
-    _title: 'Access denied'
-  requirements:
-    _access: 'TRUE'
-
-system.404:
-  path: '/system/404'
-  defaults:
-    _content: '\Drupal\system\Controller\Http4xxController:on404'
-    _title: 'Page not found'
-  requirements:
-    _access: 'TRUE'
-
 system.admin:
   path: '/admin'
   defaults:
diff --git a/core/modules/system/tests/modules/ajax_forms_test/ajax_forms_test.module b/core/modules/system/tests/modules/ajax_forms_test/ajax_forms_test.module
index 2ecbe2a..9a7fb8a 100644
--- a/core/modules/system/tests/modules/ajax_forms_test/ajax_forms_test.module
+++ b/core/modules/system/tests/modules/ajax_forms_test/ajax_forms_test.module
@@ -194,7 +194,7 @@ function ajax_forms_test_advanced_commands_settings_with_merging_callback($form,
 function ajax_forms_test_validation_form_callback($form, FormStateInterface $form_state) {
   drupal_set_message("ajax_forms_test_validation_form_callback invoked");
   drupal_set_message(t("Callback: drivertext=%drivertext, spare_required_field=%spare_required_field", array('%drivertext' => $form_state->getValue('drivertext'), '%spare_required_field' => $form_state->getValue('spare_required_field'))));
-  return ['#markup' => '<div id="message_area">ajax_forms_test_validation_form_callback at ' . date('c') . '</div>'];
+  return '<div id="message_area">ajax_forms_test_validation_form_callback at ' . date('c') . '</div>';
 }
 
 /**
@@ -203,7 +203,7 @@ function ajax_forms_test_validation_form_callback($form, FormStateInterface $for
 function ajax_forms_test_validation_number_form_callback($form, FormStateInterface $form_state) {
   drupal_set_message("ajax_forms_test_validation_number_form_callback invoked");
   drupal_set_message(t("Callback: drivernumber=%drivernumber, spare_required_field=%spare_required_field", array('%drivernumber' => $form_state->getValue('drivernumber'), '%spare_required_field' => $form_state->getValue('spare_required_field'))));
-  return ['#markup' => '<div id="message_area_number">ajax_forms_test_validation_number_form_callback at ' . date('c') . '</div>'];
+  return '<div id="message_area_number">ajax_forms_test_validation_number_form_callback at ' . date('c') . '</div>';
 }
 
 /**
diff --git a/core/modules/system/tests/modules/entity_test/src/Controller/EntityTestController.php b/core/modules/system/tests/modules/entity_test/src/Controller/EntityTestController.php
index 00619ef..75fa1c1 100644
--- a/core/modules/system/tests/modules/entity_test/src/Controller/EntityTestController.php
+++ b/core/modules/system/tests/modules/entity_test/src/Controller/EntityTestController.php
@@ -88,7 +88,7 @@ public function testEdit(Request $request, $entity_type_id) {
    * @see \Drupal\entity_test\Routing\EntityTestRoutes::routes()
    */
   public function testAdmin() {
-    return [];
+    return '';
   }
 
   /**
diff --git a/core/modules/system/tests/modules/error_test/src/Controller/ErrorTestController.php b/core/modules/system/tests/modules/error_test/src/Controller/ErrorTestController.php
index 8ba584a..7a4bf90 100644
--- a/core/modules/system/tests/modules/error_test/src/Controller/ErrorTestController.php
+++ b/core/modules/system/tests/modules/error_test/src/Controller/ErrorTestController.php
@@ -53,7 +53,7 @@ public function generateWarnings($collect_errors = FALSE) {
     $awesomely_big = 1/0;
     // This will generate a user error.
     trigger_error("Drupal is awesome", E_USER_WARNING);
-    return [];
+    return "";
   }
 
   /**
diff --git a/core/modules/system/tests/modules/menu_test/menu_test.module b/core/modules/system/tests/modules/menu_test/menu_test.module
index a87983b..a5ce74e 100644
--- a/core/modules/system/tests/modules/menu_test/menu_test.module
+++ b/core/modules/system/tests/modules/menu_test/menu_test.module
@@ -91,7 +91,7 @@ function menu_test_menu_local_tasks_alter(&$data, $route_name) {
  * @deprecated Use \Drupal\menu_test\Controller\MenuTestController::menuTestCallback()
  */
 function menu_test_callback() {
-  return ['#markup' => 'This is menu_test_callback().'];
+  return 'This is menu_test_callback().';
 }
 
 /**
@@ -117,7 +117,7 @@ function menu_test_theme_page_callback($inherited = FALSE) {
   if ($inherited) {
     $output .= ' Theme negotiation inheritance is being tested.';
   }
-  return ['#markup' => $output];
+  return $output;
 }
 
 /**
diff --git a/core/modules/system/tests/modules/menu_test/src/TestControllers.php b/core/modules/system/tests/modules/menu_test/src/TestControllers.php
index bbc4f1f..608e0c7 100644
--- a/core/modules/system/tests/modules/menu_test/src/TestControllers.php
+++ b/core/modules/system/tests/modules/menu_test/src/TestControllers.php
@@ -19,28 +19,28 @@ class TestControllers {
    * Returns page to be used as a login path.
    */
   public function testLogin() {
-    return ['#markup' => 'This is TestControllers::testLogin.'];
+    return 'This is TestControllers::testLogin.';
   }
 
   /**
    * Prints out test data.
    */
   public function test1() {
-    return ['#markup' => 'test1'];
+    return 'test1';
   }
 
   /**
    * Prints out test data.
    */
   public function test2() {
-    return ['#markup' => 'test2'];
+    return 'test2';
   }
 
   /**
    * Prints out test data.
    */
   public function testDerived() {
-    return ['#markup' => 'testDerived'];
+    return 'testDerived';
   }
 
   /**
@@ -54,10 +54,10 @@ public function testDerived() {
    */
   public function testDefaults($placeholder = NULL) {
     if ($placeholder) {
-      return ['#markup' => String::format("Sometimes there is a placeholder: '@placeholder'.", array('@placeholder' => $placeholder))];
+      return String::format("Sometimes there is a placeholder: '@placeholder'.", array('@placeholder' => $placeholder));
     }
     else {
-      return ['#markup' => String::format('Sometimes there is no placeholder.')];
+      return String::format('Sometimes there is no placeholder.');
     }
   }
 
diff --git a/core/modules/system/tests/modules/module_test/src/Controller/ModuleTestController.php b/core/modules/system/tests/modules/module_test/src/Controller/ModuleTestController.php
index 3a2532e..df3b8f7 100644
--- a/core/modules/system/tests/modules/module_test/src/Controller/ModuleTestController.php
+++ b/core/modules/system/tests/modules/module_test/src/Controller/ModuleTestController.php
@@ -30,7 +30,7 @@ public function hookDynamicLoadingInvokeAll() {
    * @todo Remove module_test_class_loading().
    */
   public function testClassLoading() {
-    return ['#markup' => module_test_class_loading()];
+    return module_test_class_loading();
   }
 
 }
diff --git a/core/modules/system/tests/modules/paramconverter_test/src/TestControllers.php b/core/modules/system/tests/modules/paramconverter_test/src/TestControllers.php
index 33f52fc..8b48b45 100644
--- a/core/modules/system/tests/modules/paramconverter_test/src/TestControllers.php
+++ b/core/modules/system/tests/modules/paramconverter_test/src/TestControllers.php
@@ -19,14 +19,14 @@ class TestControllers {
   public function testUserNodeFoo(EntityInterface $user, NodeInterface $node, Request $request) {
     $foo = $request->attributes->get('foo');
     $foo = is_object($foo) ? $foo->label() : $foo;
-    return ['#markup' => "user: {$user->label()}, node: {$node->label()}, foo: $foo"];
+    return "user: {$user->label()}, node: {$node->label()}, foo: $foo";
   }
 
   public function testNodeSetParent(NodeInterface $node, NodeInterface $parent) {
-    return ['#markup' => "Setting '{$parent->label()}' as parent of '{$node->label()}'."];
+    return "Setting '{$parent->label()}' as parent of '{$node->label()}'.";
   }
 
   public function testEntityLanguage(NodeInterface $node) {
-    return ['#markup' => $node->label()];
+    return $node->label();
   }
 }
diff --git a/core/modules/system/tests/modules/router_test_directory/src/TestContent.php b/core/modules/system/tests/modules/router_test_directory/src/TestContent.php
index dc2caca..6559c70 100644
--- a/core/modules/system/tests/modules/router_test_directory/src/TestContent.php
+++ b/core/modules/system/tests/modules/router_test_directory/src/TestContent.php
@@ -43,7 +43,7 @@ public static function create(ContainerInterface $container) {
    * Provides example content for testing route enhancers.
    */
   public function test1() {
-    return ['#markup' => 'abcde'];
+    return 'abcde';
   }
 
   /**
@@ -54,13 +54,13 @@ public function test1() {
    */
   public function test11() {
     $account = $this->currentUser();
-    return ['#markup' => $account->getUsername()];
+    return $account->getUsername();
   }
 
   public function testAccount(UserInterface $user) {
     $current_user_name = $this->currentUser()->getUsername();
     $this->currentUser()->setAccount($user);
-    return ['#markup' => $current_user_name . ':' . $user->getUsername()];
+    return $current_user_name . ':' . $user->getUsername();
   }
 
   /**
diff --git a/core/modules/system/tests/modules/router_test_directory/src/TestControllers.php b/core/modules/system/tests/modules/router_test_directory/src/TestControllers.php
index 10ba2ca..1eec263 100644
--- a/core/modules/system/tests/modules/router_test_directory/src/TestControllers.php
+++ b/core/modules/system/tests/modules/router_test_directory/src/TestControllers.php
@@ -26,19 +26,19 @@ public function test1() {
   }
 
   public function test2() {
-    return ['#markup' => "test2"];
+    return "test2";
   }
 
   public function test3($value) {
-    return ['#markup' => $value];
+    return $value;
   }
 
   public function test4($value) {
-    return ['#markup' => $value];
+    return $value;
   }
 
   public function test5() {
-    return ['#markup' => "test5"];
+    return "test5";
   }
 
   public function test6() {
diff --git a/core/modules/system/tests/modules/session_test/src/Controller/SessionTestController.php b/core/modules/system/tests/modules/session_test/src/Controller/SessionTestController.php
index 5993056..5fbd412 100644
--- a/core/modules/system/tests/modules/session_test/src/Controller/SessionTestController.php
+++ b/core/modules/system/tests/modules/session_test/src/Controller/SessionTestController.php
@@ -24,8 +24,8 @@ class SessionTestController extends ControllerBase {
    */
   public function get() {
     return empty($_SESSION['session_test_value'])
-      ? []
-      : ['#markup' => $this->t('The current value of the stored session variable is: %val', array('%val' => $_SESSION['session_test_value']))];
+      ? ""
+      : $this->t('The current value of the stored session variable is: %val', array('%val' => $_SESSION['session_test_value']));
   }
 
   /**
@@ -41,7 +41,7 @@ public function getId() {
 
     \Drupal::service('session_manager')->save();
 
-    return ['#markup' => 'session_id:' . session_id() . "\n"];
+    return 'session_id:' . session_id() . "\n";
   }
 
   /**
@@ -54,7 +54,7 @@ public function getId() {
    *   A notification message with session ID.
    */
   public function getIdFromCookie(Request $request) {
-    return ['#markup' => 'session_id:' . $request->cookies->get(session_name()) . "\n"];
+    return 'session_id:' . $request->cookies->get(session_name()) . "\n";
   }
 
   /**
@@ -69,7 +69,7 @@ public function getIdFromCookie(Request $request) {
   public function set($test_value) {
     $_SESSION['session_test_value'] = $test_value;
 
-    return ['#markup' => $this->t('The current value of the stored session variable has been set to %val', array('%val' => $test_value))];
+    return $this->t('The current value of the stored session variable has been set to %val', array('%val' => $test_value));
   }
 
   /**
@@ -85,7 +85,7 @@ public function set($test_value) {
   public function noSet($test_value) {
     \Drupal::service('session_manager')->disable();
     $this->set($test_value);
-    return ['#markup' => $this->t('session saving was disabled, and then %val was set', array('%val' => $test_value))];
+    return $this->t('session saving was disabled, and then %val was set', array('%val' => $test_value));
   }
 
   /**
@@ -111,7 +111,6 @@ public function setMessage() {
   public function setMessageButDontSave() {
     \Drupal::service('session_manager')->disable();
     $this->setMessage();
-    return ['#markup' => ''];
   }
 
   /**
@@ -125,7 +124,6 @@ public function setNotStarted() {
     if (!drupal_session_will_start()) {
       $this->set($this->t('Session was not started'));
     }
-    return ['#markup' => ''];
   }
 
   /**
@@ -135,6 +133,6 @@ public function setNotStarted() {
    *   A notification message.
    */
   public function isLoggedIn() {
-    return ['#markup' => $this->t('User is logged in.')];
+    return $this->t('User is logged in.');
   }
 }
diff --git a/core/modules/system/tests/modules/system_test/src/Controller/SystemTestController.php b/core/modules/system/tests/modules/system_test/src/Controller/SystemTestController.php
index d79e3f6..c6b6903 100644
--- a/core/modules/system/tests/modules/system_test/src/Controller/SystemTestController.php
+++ b/core/modules/system/tests/modules/system_test/src/Controller/SystemTestController.php
@@ -49,7 +49,7 @@ public static function create(ContainerInterface $container) {
    *   The text to display.
    */
   public function mainContentFallback() {
-    return ['#markup' => $this->t('Content to test main content fallback')];
+    return $this->t('Content to test main content fallback');
   }
 
   /**
@@ -65,7 +65,7 @@ public function drupalSetMessageTest() {
 
     // Remove the first.
     unset($_SESSION['messages']['status'][0]);
-    return [];
+    return '';
   }
 
   /**
@@ -93,10 +93,10 @@ public function lockExit() {
    */
   public function lockPersist($lock_name) {
     if ($this->persistentLock->acquire($lock_name)) {
-      return ['#markup' => 'TRUE: Lock successfully acquired in SystemTestController::lockPersist()'];
+      return 'TRUE: Lock successfully acquired in SystemTestController::lockPersist()';
     }
     else {
-      return ['#markup' => 'FALSE: Lock not acquired in SystemTestController::lockPersist()'];
+      return 'FALSE: Lock not acquired in SystemTestController::lockPersist()';
     }
   }
 
@@ -154,9 +154,8 @@ public function shutdownFunctions($arg1, $arg2) {
     // @see _drupal_shutdown_function()
     // @see \Drupal\system\Tests\System\ShutdownFunctionsTest
     if (function_exists('fastcgi_finish_request')) {
-      return ['#markup' => 'The function fastcgi_finish_request exists when serving the request.'];
+      return 'The function fastcgi_finish_request exists when serving the request.';
     }
-    return [];
   }
 
   /**
diff --git a/core/modules/system/tests/modules/system_test/system_test.module b/core/modules/system/tests/modules/system_test/system_test.module
index 8024680..78c1504 100644
--- a/core/modules/system/tests/modules/system_test/system_test.module
+++ b/core/modules/system/tests/modules/system_test/system_test.module
@@ -72,10 +72,10 @@ function system_test_system_info_alter(&$info, Extension $file, $type) {
 function system_test_lock_acquire() {
   if (\Drupal::lock()->acquire('system_test_lock_acquire')) {
     \Drupal::lock()->release('system_test_lock_acquire');
-    return ['#markup' => 'TRUE: Lock successfully acquired in system_test_lock_acquire()'];
+    return 'TRUE: Lock successfully acquired in system_test_lock_acquire()';
   }
   else {
-    return ['#markup' => 'FALSE: Lock not acquired in system_test_lock_acquire()'];
+    return 'FALSE: Lock not acquired in system_test_lock_acquire()';
   }
 }
 
@@ -91,7 +91,7 @@ function system_test_lock_exit() {
     exit();
   }
   else {
-    return ['#markup' => 'FALSE: Lock not acquired in system_test_lock_exit()'];
+    return 'FALSE: Lock not acquired in system_test_lock_exit()';
   }
 }
 
diff --git a/core/modules/system/tests/modules/theme_test/src/ThemeTestController.php b/core/modules/system/tests/modules/theme_test/src/ThemeTestController.php
index fb8e1f9..caf9533 100644
--- a/core/modules/system/tests/modules/theme_test/src/ThemeTestController.php
+++ b/core/modules/system/tests/modules/theme_test/src/ThemeTestController.php
@@ -56,7 +56,7 @@ public function testInfoStylesheets() {
    *   A render array containing a theme override.
    */
   public function testTemplate() {
-    return ['#markup' => \Drupal::theme()->render('theme_test_template_test', array())];
+    return \Drupal::theme()->render('theme_test_template_test', array());
   }
 
   /**
@@ -82,7 +82,7 @@ public function testInlineTemplate() {
    *   An HTML string containing the themed output.
    */
   public function testSuggestion() {
-    return ['#markup' => \Drupal::theme()->render(array('theme_test__suggestion', 'theme_test'), array())];
+    return \Drupal::theme()->render(array('theme_test__suggestion', 'theme_test'), array());
   }
 
   /**
@@ -92,7 +92,7 @@ public function testSuggestion() {
    *   Content in theme_test_output GLOBAL.
    */
   public function testRequestListener() {
-    return ['#markup' =>  $GLOBALS['theme_test_output']];
+    return $GLOBALS['theme_test_output'];
   }
 
   /**
diff --git a/core/modules/system/tests/modules/twig_theme_test/src/TwigThemeTestController.php b/core/modules/system/tests/modules/twig_theme_test/src/TwigThemeTestController.php
index f657c4d..9441a50 100644
--- a/core/modules/system/tests/modules/twig_theme_test/src/TwigThemeTestController.php
+++ b/core/modules/system/tests/modules/twig_theme_test/src/TwigThemeTestController.php
@@ -18,7 +18,7 @@ class TwigThemeTestController {
    * Menu callback for testing PHP variables in a Twig template.
    */
   public function phpVariablesRender() {
-    return ['#markup' => \Drupal::theme()->render('twig_theme_test_php_variables', array())];
+    return \Drupal::theme()->render('twig_theme_test_php_variables', array());
   }
 
   /**
diff --git a/core/modules/user/templates/user.html.twig b/core/modules/user/templates/user.html.twig
index b00a744..c44448b 100644
--- a/core/modules/user/templates/user.html.twig
+++ b/core/modules/user/templates/user.html.twig
@@ -23,7 +23,7 @@
  * @ingroup themeable
  */
 #}
-<article{{ attributes }}>
+<article{{ attributes.addClass('profile') }}>
   {% if content %}
     {{- content -}}
   {% endif %}
diff --git a/core/modules/user/templates/username.html.twig b/core/modules/user/templates/username.html.twig
index 5d4f2f7..7859376 100644
--- a/core/modules/user/templates/username.html.twig
+++ b/core/modules/user/templates/username.html.twig
@@ -19,7 +19,7 @@
  */
 #}
 {% if link_path -%}
-  <a{{ attributes }}>{{ name }}{{ extra }}</a>
+  <a{{ attributes.addClass('username') }}>{{ name }}{{ extra }}</a>
 {%- else -%}
   <span{{ attributes }}>{{ name }}{{ extra }}</span>
 {%- endif -%}
diff --git a/core/modules/views/config/schema/views.data_types.schema.yml b/core/modules/views/config/schema/views.data_types.schema.yml
index 3e1c25b..60a099b 100644
--- a/core/modules/views/config/schema/views.data_types.schema.yml
+++ b/core/modules/views/config/schema/views.data_types.schema.yml
@@ -27,9 +27,6 @@ views_display:
         provider:
           type: string
           label: 'Provider'
-        dependencies:
-          type: config_dependencies
-          label: 'Dependencies'
     exposed_form:
       type: mapping
       label: 'Exposed form'
@@ -43,9 +40,6 @@ views_display:
         provider:
           type: string
           label: 'Provider'
-        dependencies:
-          type: config_dependencies
-          label: 'Dependencies'
     access:
       type: mapping
       label: 'Access'
@@ -58,9 +52,6 @@ views_display:
         provider:
           type: string
           label: 'Provider'
-        dependencies:
-          type: config_dependencies
-          label: 'Dependencies'
     cache:
       type: views.cache.[type]
     empty:
@@ -108,9 +99,6 @@ views_display:
         provider:
           type: string
           label: 'Provider'
-        dependencies:
-          type: config_dependencies
-          label: 'Dependencies'
     row:
       type: mapping
       label: 'Row'
@@ -123,9 +111,6 @@ views_display:
         provider:
           type: string
           label: 'Provider'
-        dependencies:
-          type: config_dependencies
-          label: 'Dependencies'
     query:
       type: mapping
       label: 'Query'
@@ -138,9 +123,6 @@ views_display:
         provider:
           type: string
           label: 'Provider'
-        dependencies:
-          type: config_dependencies
-          label: 'Dependencies'
     defaults:
       type: mapping
       label: 'Defaults'
@@ -797,8 +779,12 @@ views_filter:
             - type: integer
               label: 'Default'
         group_items:
-          type: views.filter.group_items.[plugin_id]
+          type: sequence
           label: 'Group items'
+          sequence:
+            - type: views.filter.group_item.[%parent.%parent.%parent.plugin_id]
+              label: 'Group item'
+
     plugin_id:
       type: string
       label: 'Plugin ID'
@@ -806,21 +792,19 @@ views_filter:
       type: string
       label: 'Provider'
 
-views_filter_group_items:
-  type: sequence
-  sequence:
-    - type: mapping
-      label: 'Group item'
-      mapping:
-        title:
-          type: label
-          label: 'Label'
-        operator:
-          type: string
-          label: 'Operator'
-        value:
-          type: label
-          label: 'Value'
+views_filter_group_item:
+  type: mapping
+  label: 'Group item'
+  mapping:
+    title:
+      type: label
+      label: 'Label'
+    operator:
+      type: string
+      label: 'Operator'
+    value:
+      type: label
+      label: 'Value'
 
 views_relationship:
   type: mapping
@@ -901,6 +885,3 @@ views_cache:
     provider:
       type: string
       label: 'Provider'
-    dependencies:
-      type: config_dependencies
-      label: 'Dependencies'
diff --git a/core/modules/views/config/schema/views.filter.schema.yml b/core/modules/views/config/schema/views.filter.schema.yml
index 537ba81..3a97c25 100644
--- a/core/modules/views/config/schema/views.filter.schema.yml
+++ b/core/modules/views/config/schema/views.filter.schema.yml
@@ -31,12 +31,16 @@ views.filter.combine:
         - type: string
           label: 'Field'
 
-views.filter.date:
-  type: views.filter.numeric
+views.filter_value.date:
+  type: views.filter_value.numeric
   label: 'Date'
+  mapping:
+    type:
+      type: string
+      label: 'Type'
 
-views.filter.groupby_numeric:
-  type: views.filter.numeric
+views.filter_value.groupby_numeric:
+  type: views.filter_value.numeric
   label: 'Group by numeric'
 
 views.filter.in_operator:
@@ -75,29 +79,22 @@ views.filter.string:
       type: string
       label: 'Value'
 
-views.filter.numeric:
-  type: views_filter
+views.filter_value.numeric:
+  type: mapping
   label: 'Numeric'
   mapping:
+    min:
+      type: string
+      label: 'Min'
+    max:
+      type: string
+      label: 'And max'
     value:
-      type: mapping
-      label: 'Operator'
-      mapping:
-        min:
-          type: string
-          label: 'Min'
-        max:
-          type: string
-          label: 'And max'
-        value:
-          type: string
-          label: 'Value'
-        type:
-          type: string
-          label: 'Value type'
+      type: string
+      label: 'Value'
 
-views.filter.equality:
-  type: views.filter.numeric
+views.filter_value.equality:
+  type: views.filter_value.numeric
   label: 'Equality'
 
 views.filter.many_to_one:
@@ -121,17 +118,16 @@ views.filter.standard:
   type: views_filter
   label: 'Standard'
 
-views.filter.group_items.*:
-  type: views_filter_group_items
+views.filter.group_item.*:
+  type: views_filter_group_item
   label: 'Default'
 
-views.filter.group_items.string:
-  type: views_filter_group_items
-  label: 'String group items'
-
-views.filter.group_items.boolean:
-  type: views_filter_group_items
+views.filter.group_item.numeric:
+  type: views_filter_group_item
   label: 'Group items'
+  mapping:
+    value:
+      type: views.filter_value.numeric
 
 # Schema for the views filter value.
 
diff --git a/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_view.yml b/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_view.yml
index 164abad..27b1121 100644
--- a/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_view.yml
+++ b/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_view.yml
@@ -38,7 +38,7 @@ display:
         options:
           offset: '0'
         type: none
-      pager_options: {  }
+      pager_options: false
       sorts:
         id:
           field: id
diff --git a/core/modules/views_ui/src/Tests/FilterNumericWebTest.php b/core/modules/views_ui/src/Tests/FilterNumericWebTest.php
new file mode 100644
index 0000000..89e9782
--- /dev/null
+++ b/core/modules/views_ui/src/Tests/FilterNumericWebTest.php
@@ -0,0 +1,90 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\views_ui\Tests\FilterBooleanWebTest.
+ */
+
+namespace Drupal\views_ui\Tests;
+
+use Drupal\config\Tests\SchemaCheckTestTrait;
+
+/**
+ * Tests the numeric filter UI.
+ *
+ * @group views_ui
+ * @see \Drupal\views\Plugin\views\filter\Numeric
+ */
+class FilterNumericWebTest extends UITestBase {
+  use SchemaCheckTestTrait;
+
+  /**
+   * Views used by this test.
+   *
+   * @var array
+   */
+  public static $testViews = array('test_view');
+
+  /**
+   * Tests the filter numeric UI.
+   */
+  public function testFilterNumericUI() {
+    $this->drupalPostForm('admin/structure/views/nojs/add-handler/test_view/default/filter', array('name[views_test_data.age]' => TRUE), t('Add and configure @handler', array('@handler' => t('filter criteria'))));
+
+    $this->drupalPostForm(NULL, array(), t('Expose filter'));
+    $this->drupalPostForm(NULL, array(), t('Grouped filters'));
+
+    $edit = array();
+    $edit['options[group_info][group_items][1][title]'] = 'Old';
+    $edit['options[group_info][group_items][1][operator]'] = '>';
+    $edit['options[group_info][group_items][1][value][value]'] = 27;
+    $edit['options[group_info][group_items][2][title]'] = 'Young';
+    $edit['options[group_info][group_items][2][operator]'] = '<=';
+    $edit['options[group_info][group_items][2][value][value]'] = 27;
+    $edit['options[group_info][group_items][3][title]'] = 'Not 25';
+    $edit['options[group_info][group_items][3][operator]'] = '!=';
+    $edit['options[group_info][group_items][3][value][value]'] = 25;
+
+    $this->drupalPostForm(NULL, $edit, t('Apply'));
+    $this->drupalPostForm('admin/structure/views/view/test_view', array(), t('Save'));
+    $this->assertConfigSchemaByName('views.view.test_view');
+
+    // Test that the exposed filter works as expected.
+    $this->drupalPostForm(NULL, array(), t('Update preview'));
+    $this->assertText('John');
+    $this->assertText('Paul');
+    $this->assertText('Ringo');
+    $this->assertText('George');
+    $this->assertText('Meredith');
+    $this->drupalPostForm(NULL, array('age' => '2'), t('Update preview'));
+    $this->assertText('John');
+    $this->assertText('Paul');
+    $this->assertNoText('Ringo');
+    $this->assertText('George');
+    $this->assertNoText('Meredith');
+
+    // Change the filter to a single filter to test the schema when the operator
+    // is not exposed.
+    $this->drupalPostForm('admin/structure/views/nojs/handler/test_view/default/filter/age', array(), t('Single filter'));
+    $edit = array();
+    $edit['options[value][value]'] = 25;
+    $this->drupalPostForm(NULL, $edit, t('Apply'));
+    $this->drupalPostForm('admin/structure/views/view/test_view', array(), t('Save'));
+    $this->assertConfigSchemaByName('views.view.test_view');
+
+    // Test that the filter works as expected.
+    $this->drupalPostForm(NULL, array(), t('Update preview'));
+    $this->assertText('John');
+    $this->assertNoText('Paul');
+    $this->assertNoText('Ringo');
+    $this->assertNoText('George');
+    $this->assertNoText('Meredith');
+    $this->drupalPostForm(NULL, array('age' => '26'), t('Update preview'));
+    $this->assertNoText('John');
+    $this->assertText('Paul');
+    $this->assertNoText('Ringo');
+    $this->assertNoText('George');
+    $this->assertNoText('Meredith');
+  }
+
+}
diff --git a/core/modules/views_ui/src/Tests/XssTest.php b/core/modules/views_ui/src/Tests/XssTest.php
deleted file mode 100644
index 36c0069..0000000
--- a/core/modules/views_ui/src/Tests/XssTest.php
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains \Drupal\views_ui\Tests\XssTest.
- */
-
-namespace Drupal\views_ui\Tests;
-
-/**
- * @group views_ui
- */
-class XssTest extends UITestBase {
-
-  /**
-   * Modules to enable.
-   *
-   * @var array
-   */
-  public static $modules = array('node', 'user', 'views_ui', 'views_ui_test');
-
-  public function testViewsUi() {
-    $this->drupalGet('admin/structure/views');
-    $this->assertRaw('&lt;script&gt;alert(&quot;foo&quot;);&lt;/script&gt;, &lt;marquee&gt;test&lt;/marquee&gt;', 'The view tag is properly escaped.');
-
-    $this->drupalGet('admin/structure/views/view/sa_contrib_2013_035');
-    $this->assertRaw('&amp;lt;marquee&amp;gt;test&amp;lt;/marquee&amp;gt;', 'Field admin label is properly escaped.');
-
-    $this->drupalGet('admin/structure/views/nojs/handler/sa_contrib_2013_035/page_1/header/area');
-    $this->assertRaw('[title] == &amp;lt;marquee&amp;gt;test&amp;lt;/marquee&amp;gt;', 'Token label is properly escaped.');
-    $this->assertRaw('[title_1] == &amp;lt;script&amp;gt;alert(&amp;quot;XSS&amp;quot;)&amp;lt;/script&amp;gt;', 'Token label is properly escaped.');
-  }
-
-}
diff --git a/core/modules/views_ui/tests/modules/views_ui_test/config/install/views.view.sa_contrib_2013_035.yml b/core/modules/views_ui/tests/modules/views_ui_test/config/install/views.view.sa_contrib_2013_035.yml
deleted file mode 100644
index 5972d15..0000000
--- a/core/modules/views_ui/tests/modules/views_ui_test/config/install/views.view.sa_contrib_2013_035.yml
+++ /dev/null
@@ -1,215 +0,0 @@
-uuid: 93005672-5b8a-4a7a-9342-6651552bb753
-langcode: en
-status: true
-dependencies:
-  module:
-    - node
-id: sa_contrib_2013_035
-label: SA_CONTRIB_2013_035
-module: views
-description: ''
-tag: '<script>alert("foo");</script>, <marquee>test</marquee>'
-base_table: node
-base_field: nid
-core: 8.x
-display:
-  default:
-    display_plugin: default
-    id: default
-    display_title: Master
-    position: 0
-    provider: views
-    display_options:
-      access:
-        type: perm
-        options:
-          perm: 'access content'
-        provider: user
-        dependencies: {  }
-      cache:
-        type: none
-        options: {  }
-        provider: views
-        dependencies: {  }
-      query:
-        type: views_query
-        options:
-          disable_sql_rewrite: false
-          distinct: false
-          replica: false
-          query_comment: false
-          query_tags: {  }
-        provider: views
-        dependencies: {  }
-      exposed_form:
-        type: basic
-        options:
-          submit_button: Apply
-          reset_button: false
-          reset_button_label: Reset
-          exposed_sorts_label: 'Sort by'
-          expose_sort_order: true
-          sort_asc_label: Asc
-          sort_desc_label: Desc
-        provider: views
-        dependencies: {  }
-      pager:
-        type: none
-        options:
-          offset: 0
-        provider: views
-      style:
-        type: default
-        options:
-          grouping: {  }
-          row_class: ''
-          default_row_class: true
-          uses_fields: false
-        provider: views
-        dependencies: {  }
-      row:
-        type: fields
-        options:
-          inline: {  }
-          separator: ''
-          hide_empty: false
-          default_field_elements: true
-        provider: views
-        dependencies: {  }
-      fields:
-        title:
-          id: title
-          table: node_field_data
-          field: title
-          relationship: none
-          group_type: group
-          admin_label: '<marquee>test</marquee>'
-          dependencies:
-            module:
-              - node
-              - node
-              - node
-          label: ''
-          exclude: false
-          alter:
-            alter_text: false
-            text: ''
-            make_link: false
-            path: ''
-            absolute: false
-            external: false
-            replace_spaces: false
-            path_case: none
-            trim_whitespace: false
-            alt: ''
-            rel: ''
-            link_class: ''
-            prefix: ''
-            suffix: ''
-            target: ''
-            nl2br: false
-            max_length: ''
-            word_boundary: false
-            ellipsis: false
-            more_link: false
-            more_link_text: ''
-            more_link_path: ''
-            strip_tags: false
-            trim: false
-            preserve_tags: ''
-            html: false
-          element_type: ''
-          element_class: ''
-          element_label_type: ''
-          element_label_class: ''
-          element_label_colon: false
-          element_wrapper_type: ''
-          element_wrapper_class: ''
-          element_default_classes: true
-          empty: ''
-          hide_empty: false
-          empty_zero: false
-          hide_alter_empty: true
-          link_to_node: true
-          plugin_id: node
-          provider: node
-        title_1:
-          id: title_1
-          table: node_field_data
-          field: title
-          relationship: none
-          group_type: group
-          admin_label: '<script>alert("XSS")</script>'
-          dependencies:
-            module:
-              - node
-          label: ''
-          exclude: false
-          alter:
-            alter_text: false
-            text: ''
-            make_link: false
-            path: ''
-            absolute: false
-            external: false
-            replace_spaces: false
-            path_case: none
-            trim_whitespace: false
-            alt: ''
-            rel: ''
-            link_class: ''
-            prefix: ''
-            suffix: ''
-            target: ''
-            nl2br: false
-            max_length: ''
-            word_boundary: true
-            ellipsis: true
-            more_link: false
-            more_link_text: ''
-            more_link_path: ''
-            strip_tags: false
-            trim: false
-            preserve_tags: ''
-            html: false
-          element_type: ''
-          element_class: ''
-          element_label_type: ''
-          element_label_class: ''
-          element_label_colon: false
-          element_wrapper_type: ''
-          element_wrapper_class: ''
-          element_default_classes: true
-          empty: ''
-          hide_empty: false
-          empty_zero: false
-          hide_alter_empty: true
-          link_to_node: true
-          plugin_id: node
-          provider: node
-      filters: {  }
-      sorts: {  }
-      header:
-        area:
-          id: area
-          table: views
-          field: area
-          plugin_id: text
-          provider: views
-      footer: {  }
-      empty: {  }
-      relationships: {  }
-      arguments: {  }
-      field_langcode: '***LANGUAGE_language_content***'
-      field_langcode_add_to_query: null
-      title: '<marquee>VIEWS TITLE</marquee>'
-  page_1:
-    display_plugin: page
-    id: page_1
-    display_title: Page
-    position: 2
-    provider: views
-    display_options:
-      field_langcode: '***LANGUAGE_language_content***'
-      field_langcode_add_to_query: null
-      path: foobar
diff --git a/core/themes/classy/templates/aggregator-block-item.html.twig b/core/themes/classy/templates/aggregator-block-item.html.twig
deleted file mode 100644
index c5a7f3c..0000000
--- a/core/themes/classy/templates/aggregator-block-item.html.twig
+++ /dev/null
@@ -1,15 +0,0 @@
-{#
-/**
- * @file
- * Default theme implementation for feed item for display in the block.
- *
- * Available variables:
- * - url: URL to the feed item.
- * - title: Title of the feed item.
- *
- * @see template_preprocess_aggregator_block_item()
- *
- * @ingroup themeable
- */
-#}
-<a href="{{ url }}">{{ title }}</a>
diff --git a/core/themes/classy/templates/aggregator-feed.html.twig b/core/themes/classy/templates/aggregator-feed.html.twig
deleted file mode 100644
index 1876c45..0000000
--- a/core/themes/classy/templates/aggregator-feed.html.twig
+++ /dev/null
@@ -1,31 +0,0 @@
-{#
-/**
- * @file
- * Default theme implementation to present an aggregator feed.
- *
- * The contents are rendered above feed listings when browsing source feeds.
- * For example, "example.com/aggregator/sources/1".
- *
- * Available variables:
- * - title: Title of the feed item.
- * - content: All field items. Use {{ content }} to print them all,
- *   or print a subset such as {{ content.field_example }}. Use
- *   {{ content|without('field_example') }} to temporarily suppress the printing
- *   of a given element.
- *
- * @see template_preprocess_aggregator_feed()
- *
- * @ingroup themeable
- */
-#}
-<div{{ attributes.addClass('aggregator-feed') }}>
-
-  {{ title_prefix }}
-  {% if not full %}
-    <h2{{ title_attributes }}>{{ title }}</h2>
-  {% endif %}
-  {{ title_suffix }}
-
-  {{ content }}
-
-</div>
diff --git a/core/themes/classy/templates/aggregator-item.html.twig b/core/themes/classy/templates/aggregator-item.html.twig
deleted file mode 100644
index 8f31937..0000000
--- a/core/themes/classy/templates/aggregator-item.html.twig
+++ /dev/null
@@ -1,28 +0,0 @@
-{#
-/**
- * @file
- * Default theme implementation to present a feed item in an aggregator page.
- *
- * Available variables:
- * - url: URL to the originating feed item.
- * - title: Title of the feed item.
- * - content: All field items. Use {{ content }} to print them all,
- *   or print a subset such as {{ content.field_example }}. Use
- *   {{ content|without('field_example') }} to temporarily suppress the printing
- *   of a given element.
- *
- * @see template_preprocess_aggregator_item()
- *
- * @ingroup themeable
- */
-#}
-<div{{ attributes.addClass('aggregator-item') }}>
-  {{ title_prefix }}
-  <h3 class="feed-item-title">
-    <a href="{{ url }}">{{ title }}</a>
-  </h3>
-  {{ title_suffix }}
-
-  {{ content }}
-
-</div>
diff --git a/core/themes/classy/templates/file-link.html.twig b/core/themes/classy/templates/file-link.html.twig
deleted file mode 100644
index fbbf08b..0000000
--- a/core/themes/classy/templates/file-link.html.twig
+++ /dev/null
@@ -1,16 +0,0 @@
-{#
-/**
- * @file
- * Default theme implementation for a link to a file.
- *
- * Available variables:
- * - attributes: The HTML attributes for the containing element.
- * - link: A link to the file.
- * - icon: The icon image representing the file type.
- *
- * @see template_preprocess_file_link()
- *
- * @ingroup themeable
- */
-#}
-<span{{ attributes }}>{{ icon }} {{ link }}</span>
diff --git a/core/themes/classy/templates/file-managed-file.html.twig b/core/themes/classy/templates/file-managed-file.html.twig
deleted file mode 100644
index 9a33ae1..0000000
--- a/core/themes/classy/templates/file-managed-file.html.twig
+++ /dev/null
@@ -1,17 +0,0 @@
-{#
-/**
- * @file
- * Default theme implementation to display a file form widget.
- *
- * Available variables:
- * - element: Form element for the file upload.
- * - attributes: HTML attributes for the containing element.
- *
- * @see template_preprocess_file_managed_file()
- *
- * @ingroup themeable
- */
-#}
-<div{{ attributes }}>
-  {{ element }}
-</div>
diff --git a/core/themes/classy/templates/file-upload-help.html.twig b/core/themes/classy/templates/file-upload-help.html.twig
deleted file mode 100644
index 8fa6b3e..0000000
--- a/core/themes/classy/templates/file-upload-help.html.twig
+++ /dev/null
@@ -1,14 +0,0 @@
-{#
-/**
- * @file
- * Default theme implementation to display help text for file fields.
- *
- * Available variables:
- * - descriptions: Lines of help text for uploading a file.
- *
- * @see template_preprocess_file_upload_help()
- *
- * @ingroup themeable
- */
-#}
-{{ descriptions|safe_join('<br />') }}
diff --git a/core/themes/classy/templates/file-widget-multiple.html.twig b/core/themes/classy/templates/file-widget-multiple.html.twig
deleted file mode 100644
index 25534a5..0000000
--- a/core/themes/classy/templates/file-widget-multiple.html.twig
+++ /dev/null
@@ -1,16 +0,0 @@
-{#
-/**
- * @file
- * Default theme implementation to display a multi file form widget.
- *
- * Available variables:
- * - table: Table of previously uploaded files.
- * - element: The form element for uploading another file.
- *
- * @see template_preprocess_file_widget_multiple()
- *
- * @ingroup themeable
- */
-#}
-{{ table }}
-{{ element }}
diff --git a/core/themes/classy/templates/file-widget.html.twig b/core/themes/classy/templates/file-widget.html.twig
deleted file mode 100644
index 892ed3d..0000000
--- a/core/themes/classy/templates/file-widget.html.twig
+++ /dev/null
@@ -1,17 +0,0 @@
-{#
-/**
- * @file
- * Default theme implementation to display a file widget.
- *
- * Available variables:
- * - element: Form element for the managed file.
- * - attributes: Remaining HTML attributes for the containing element.
- *
- * @see template_preprocess_file_widget()
- *
- * @ingroup themeable
- */
-#}
-<div{{ attributes }}>
-  {{ element }}
-</div>
diff --git a/core/themes/classy/templates/rdf-metadata.html.twig b/core/themes/classy/templates/rdf-metadata.html.twig
deleted file mode 100644
index 4f65294..0000000
--- a/core/themes/classy/templates/rdf-metadata.html.twig
+++ /dev/null
@@ -1,22 +0,0 @@
-{#
-/**
- * @file
- * Default theme implementation for empty spans with RDF attributes.
- *
- * The XHTML+RDFa doctype allows either <span></span> or <span /> syntax to
- * be used, but for maximum browser compatibility, W3C recommends the
- * former when serving pages using the text/html media type, see
- * http://www.w3.org/TR/xhtml1/#C_3.
- *
- * Available variables:
- * - metadata: Each item within corresponds to its own set of attributes,
- *   and therefore, needs its own 'attributes' element.
- *
- * @see template_preprocess_rdf_metadata()
- *
- * @ingroup themeable
- */
-#}
-{% for attributes in metadata %}
-  <span{{ attributes.addClass('rdf-meta', 'hidden') }}></span>
-{% endfor %}
diff --git a/core/themes/classy/templates/search-result.html.twig b/core/themes/classy/templates/search-result.html.twig
deleted file mode 100644
index 732489b..0000000
--- a/core/themes/classy/templates/search-result.html.twig
+++ /dev/null
@@ -1,73 +0,0 @@
-{#
-/**
- * @file
- * Default theme implementation for displaying a single search result.
- *
- * This template renders a single search result. The list of results is
- * rendered using '#theme' => 'item_list', with suggestions of:
- * - item_list__search_results__(plugin_id)
- * - item_list__search_results
- *
- * Available variables:
- * - url: URL of the result.
- * - title: Title of the result.
- * - snippet: A small preview of the result. Does not apply to user searches.
- * - info: String of all the meta information ready for print. Does not apply
- *   to user searches.
- * - plugin_id: The machine-readable name of the plugin being executed,such
- *   as "node_search" or "user_search".
- * - title_prefix: Additional output populated by modules, intended to be
- *   displayed in front of the main title tag that appears in the template.
- * - title_suffix: Additional output populated by modules, intended to be
- *   displayed after the main title tag that appears in the template.
- * - info_split: Contains same data as info, but split into separate parts.
- *   - info_split.type: Node type (or item type string supplied by module).
- *   - info_split.user: Author of the node linked to users profile. Depends
- *     on permission.
- *   - info_split.date: Last update of the node. Short formatted.
- *   - info_split.comment: Number of comments output as "% comments", %
- *     being the count. (Depends on comment.module).
- * @todo The info variable needs to be made drillable and each of these sub
- *   items should instead be within info and renamed info.foo, info.bar, etc.
- *
- * Other variables:
- * - title_attributes: HTML attributes for the title.
- * - content_attributes: HTML attributes for the content.
- *
- * Since info_split is keyed, a direct print of the item is possible.
- * This array does not apply to user searches so it is recommended to check
- * for its existence before printing. The default keys of 'type', 'user' and
- * 'date' always exist for node searches. Modules may provide other data.
- * @code
- *   {% if (info_split.comment) %}
- *     <span class="info-comment">
- *       {{ info_split.comment }}
- *     </span>
- *   {% endif %}
- * @endcode
- *
- * To check for all available data within info_split, use the code below.
- * @code
- *   <pre>
- *     {{ dump(info_split) }}
- *   </pre>
- * @endcode
- *
- * @see template_preprocess_search_result()
- *
- * @ingroup themeable
- */
-#}
-{{ title_prefix }}
-<h3 class="title"{{ title_attributes }}>
-  <a href="{{ url }}">{{ title }}</a>
-</h3>
-{{ title_suffix }}
-<div class="search-snippet-info">
-  {% if snippet %}
-    <p class="search-snippet"{{ content_attributes }}>{{ snippet }}</p>
-  {% endif %}
-  {% if info %}
-    <p class="search-info">{{ info }}</p>
-  {% endif %}
-</div>
diff --git a/core/themes/classy/templates/user.html.twig b/core/themes/classy/templates/user.html.twig
deleted file mode 100644
index c44448b..0000000
--- a/core/themes/classy/templates/user.html.twig
+++ /dev/null
@@ -1,30 +0,0 @@
-{#
-/**
- * @file
- * Default theme implementation to present all user data.
- *
- * This template is used when viewing a registered user's page,
- * e.g., example.com/user/123. 123 being the user's ID.
- *
- * Available variables:
- * - content: A list of content items. Use 'content' to print all content, or
- *   print a subset such as 'content.field_example'.
- * - Field variables: For each field attached to the user a corresponding
- *   variable is defined; e.g., account.field_example has a variable
- *   'field_example' defined. When needing to access a field's raw values,
- *   developers/themers are strongly encouraged to use these variables.
- *   Otherwise they will have to explicitly specify the desired field language,
- *   e.g. account.field_example.en, thus overriding any language negotiation
- *   rule that was previously applied.
- * - attributes: HTML attributes for the container element.
- *
- * @see template_preprocess_user()
- *
- * @ingroup themeable
- */
-#}
-<article{{ attributes.addClass('profile') }}>
-  {% if content %}
-    {{- content -}}
-  {% endif %}
-</article>
diff --git a/core/themes/classy/templates/username.html.twig b/core/themes/classy/templates/username.html.twig
deleted file mode 100644
index 7859376..0000000
--- a/core/themes/classy/templates/username.html.twig
+++ /dev/null
@@ -1,25 +0,0 @@
-{#
-/**
- * @file
- * Default theme implementation for displaying a username.
- *
- * Available variables:
- * - account: The full account information for the user.
- * - name: The user's name, sanitized.
- * - extra: Additional text to append to the user's name, sanitized.
- * - link_path: The path or URL of the user's profile page, home page,
- *   or other desired page to link to for more information about the user.
- * - link_options: Options to pass to the url() function's $options parameter if
- *   linking the user's name to the user's page.
- * - attributes: HTML attributes for the containing element.
- *
- * @see template_preprocess_username()
- *
- * @ingroup themeable
- */
-#}
-{% if link_path -%}
-  <a{{ attributes.addClass('username') }}>{{ name }}{{ extra }}</a>
-{%- else -%}
-  <span{{ attributes }}>{{ name }}{{ extra }}</span>
-{%- endif -%}
