diff --git a/core/core.services.yml b/core/core.services.yml
index 5583040..6b8334a 100644
--- a/core/core.services.yml
+++ b/core/core.services.yml
@@ -173,7 +173,7 @@ services:
     arguments: [default]
   form_builder:
     class: Drupal\Core\Form\FormBuilder
-    arguments: ['@form_validator', '@form_submitter', '@form_cache', '@module_handler', '@event_dispatcher', '@request_stack', '@class_resolver', '@theme.manager', '@?csrf_token', '@?kernel']
+    arguments: ['@form_validator', '@form_submitter', '@form_cache', '@module_handler', '@event_dispatcher', '@request_stack', '@class_resolver', '@theme.manager', '@?csrf_token', '@?http_kernel']
   form_validator:
     class: Drupal\Core\Form\FormValidator
     arguments: ['@request_stack', '@string_translation', '@csrf_token', '@logger.channel.form']
diff --git a/core/includes/theme.inc b/core/includes/theme.inc
index cc7ecc8..ef49f54 100644
--- a/core/includes/theme.inc
+++ b/core/includes/theme.inc
@@ -2027,6 +2027,19 @@ function template_preprocess_field(&$variables, $hook) {
   // readers.
   $variables['label'] = String::checkPlain($element['#title']);
 
+  // We want other preprocess functions and the theme implementation to have
+  // fast access to the field item render arrays. The item render array keys
+  // (deltas) should always be numerically indexed starting from 0, and looping
+  // on those keys is faster than calling
+  // \Drupal\Core\Render\Element::children() or looping on all keys within
+  // $element, since that requires traversal of all element properties.
+  $variables['items'] = array();
+  $delta = 0;
+  while (!empty($element[$delta])) {
+    $variables['items'][$delta] = $element[$delta];
+    $delta++;
+  }
+
   // Add default CSS classes. Since there can be many fields rendered on a page,
   // save some overhead by calling strtr() directly instead of
   // drupal_html_class().
@@ -2040,7 +2053,6 @@ function template_preprocess_field(&$variables, $hook) {
     'field-type-' . $variables['field_type_css'],
     'field-label-' . $element['#label_display'],
   );
-
   // Add a "clearfix" class to the wrapper since we float the label and the
   // field items in field.module.css if the label is inline.
   if ($element['#label_display'] == 'inline') {
@@ -2057,26 +2069,15 @@ function template_preprocess_field(&$variables, $hook) {
     $default_attributes = new Attribute;
   }
 
-  // We want other preprocess functions and the theme implementation to have
-  // fast access to the field item render arrays. The item render array keys
-  // (deltas) should always be numerically indexed starting from 0, and looping
-  // on those keys is faster than calling element_children() or looping on all
-  // keys within $element, since that requires traversal of all element
-  // properties.
-  $variables['items'] = array();
-  $delta = 0;
-  while (!empty($element[$delta])) {
-    $variables['items'][$delta]['content'] = $element[$delta];
-
-    // Modules (e.g., rdf.module) can add field item attributes (to
-    // $item->_attributes) within hook_entity_prepare_view(). Some field
-    // formatters move those attributes into some nested formatter-specific
-    // element in order have them rendered on the desired HTML element (e.g., on
-    // the <a> element of a field item being rendered as a link). Other field
-    // formatters leave them within $element['#items'][$delta]['_attributes'] to
-    // be rendered on the item wrappers provided by field.html.twig.
-    $variables['items'][$delta]['attributes'] = !empty($element['#items'][$delta]->_attributes) ? new Attribute($element['#items'][$delta]->_attributes) : clone($default_attributes);
-    $delta++;
+  // Modules (e.g., rdf.module) can add field item attributes (to
+  // $item->_attributes) within hook_entity_prepare_view(). Some field
+  // formatters move those attributes into some nested formatter-specific
+  // element in order have them rendered on the desired HTML element (e.g., on
+  // the <a> element of a field item being rendered as a link). Other field
+  // formatters leave them within $element['#items'][$delta]['_attributes'] to
+  // be rendered on the item wrappers provided by field.html.twig.
+  foreach ($variables['items'] as $delta => $item) {
+    $variables['item_attributes'][$delta] = !empty($element['#items'][$delta]->_attributes) ? new Attribute($element['#items'][$delta]->_attributes) : clone($default_attributes);
   }
 }
 
diff --git a/core/includes/update.inc b/core/includes/update.inc
index 22baff9..b6d07f4 100644
--- a/core/includes/update.inc
+++ b/core/includes/update.inc
@@ -733,7 +733,7 @@ function update_language_list($flags = LanguageInterface::STATE_CONFIGURABLE) {
       // No language module, so use the default language only.
       $languages = array($default->id => $default);
       // Add the special languages, they will be filtered later if needed.
-      $languages += \Drupal::languageManager()->getDefaultLockedLanguages($default->getWeight());
+      $languages += \Drupal::languageManager()->getDefaultLockedLanguages($default->weight);
     }
   }
 
diff --git a/core/lib/Drupal/Core/Config/ConfigImporter.php b/core/lib/Drupal/Core/Config/ConfigImporter.php
index 3efcd76..0a9849d 100644
--- a/core/lib/Drupal/Core/Config/ConfigImporter.php
+++ b/core/lib/Drupal/Core/Config/ConfigImporter.php
@@ -530,6 +530,7 @@ public function initialize() {
     // We have extensions to process.
     if ($this->totalExtensionsToProcess > 0) {
       $sync_steps[] = 'processExtensions';
+      $sync_steps[] = 'flush';
     }
     $sync_steps[] = 'processConfigurations';
 
@@ -540,6 +541,20 @@ public function initialize() {
   }
 
   /**
+   * Flushes Drupal's caches.
+   */
+  public function flush(array &$context) {
+    // Rebuild the container and flush Drupal's caches. If the container is not
+    // rebuilt first the entity types are not discovered correctly due to using
+    // an entity manager that has the incorrect container namespaces injected.
+    \Drupal::service('kernel')->rebuildContainer(TRUE);
+    drupal_flush_all_caches();
+    $this->reInjectMe();
+    $context['message'] = $this->t('Flushed all caches.');
+    $context['finished'] = 1;
+  }
+
+  /**
    * Processes extensions as a batch operation.
    *
    * @param array $context.
diff --git a/core/lib/Drupal/Core/Extension/ModuleHandler.php b/core/lib/Drupal/Core/Extension/ModuleHandler.php
index 727ab68..428ca2a 100644
--- a/core/lib/Drupal/Core/Extension/ModuleHandler.php
+++ b/core/lib/Drupal/Core/Extension/ModuleHandler.php
@@ -810,9 +810,8 @@ public function install(array $module_list, $enable_dependencies = TRUE) {
         // Now install the module's schema if necessary.
         drupal_install_schema($module);
 
-        // Clear plugin manager caches and flag router to rebuild if requested.
+        // Clear plugin manager caches.
         \Drupal::getContainer()->get('plugin.cache_clearer')->clearCachedDefinitions();
-        \Drupal::service('router.builder')->setRebuildNeeded();
 
         // Set the schema version to the number of the last update provided by
         // the module, or the minimum core schema version.
@@ -1000,9 +999,7 @@ public function uninstall(array $module_list, $uninstall_dependents = TRUE) {
       // its statically cached list.
       drupal_static_reset('system_rebuild_module_data');
 
-      // Clear plugin manager caches and flag router to rebuild if requested.
       \Drupal::getContainer()->get('plugin.cache_clearer')->clearCachedDefinitions();
-      \Drupal::service('router.builder')->setRebuildNeeded();
 
       // Update the kernel to exclude the uninstalled modules.
       \Drupal::service('kernel')->updateModules($module_filenames, $module_filenames);
@@ -1025,6 +1022,8 @@ public function uninstall(array $module_list, $uninstall_dependents = TRUE) {
     // Let other modules react.
     $this->invokeAll('modules_uninstalled', array($module_list));
 
+    drupal_flush_all_caches();
+
     return TRUE;
   }
 
diff --git a/core/lib/Drupal/Core/Form/FormBuilder.php b/core/lib/Drupal/Core/Form/FormBuilder.php
index ebab63f..6fb6467 100644
--- a/core/lib/Drupal/Core/Form/FormBuilder.php
+++ b/core/lib/Drupal/Core/Form/FormBuilder.php
@@ -14,7 +14,6 @@
 use Drupal\Component\Utility\UrlHelper;
 use Drupal\Core\Access\CsrfTokenGenerator;
 use Drupal\Core\DependencyInjection\ClassResolverInterface;
-use Drupal\Core\DrupalKernelInterface;
 use Drupal\Core\Extension\ModuleHandlerInterface;
 use Drupal\Core\Render\Element;
 use Drupal\Core\Site\Settings;
@@ -62,15 +61,11 @@ class FormBuilder implements FormBuilderInterface, FormValidatorInterface, FormS
   protected $csrfToken;
 
   /**
-   * The kernel to handle forms returning response objects.
+   * The HTTP kernel to handle forms returning response objects.
    *
-   * Explicitly use the DrupalKernel as that is consistent with index.php for
-   * terminating the request and in case someone rebuilds the container,
-   * this kernel is synthetic and always points to the new container.
-   *
-   * @var \Drupal\Core\DrupalKernelInterface
+   * @var \Symfony\Component\HttpKernel\HttpKernel
    */
-  protected $kernel;
+  protected $httpKernel;
 
   /**
    * The class resolver.
@@ -131,10 +126,10 @@ class FormBuilder implements FormBuilderInterface, FormValidatorInterface, FormS
    *   The theme manager.
    * @param \Drupal\Core\Access\CsrfTokenGenerator $csrf_token
    *   The CSRF token generator.
-   * @param \Drupal\Core\DrupalKernelInterface $kernel
-   *   The kernel.
+   * @param \Symfony\Component\HttpKernel\HttpKernelInterface $http_kernel
+   *   The HTTP kernel.
    */
-  public function __construct(FormValidatorInterface $form_validator, FormSubmitterInterface $form_submitter, FormCacheInterface $form_cache, ModuleHandlerInterface $module_handler, EventDispatcherInterface $event_dispatcher, RequestStack $request_stack, ClassResolverInterface $class_resolver, ThemeManagerInterface $theme_manager, CsrfTokenGenerator $csrf_token = NULL, DrupalKernelInterface $kernel = NULL) {
+  public function __construct(FormValidatorInterface $form_validator, FormSubmitterInterface $form_submitter, FormCacheInterface $form_cache, ModuleHandlerInterface $module_handler, EventDispatcherInterface $event_dispatcher, RequestStack $request_stack, ClassResolverInterface $class_resolver, ThemeManagerInterface $theme_manager, CsrfTokenGenerator $csrf_token = NULL, HttpKernelInterface $http_kernel = NULL) {
     $this->formValidator = $form_validator;
     $this->formSubmitter = $form_submitter;
     $this->formCache = $form_cache;
@@ -143,7 +138,7 @@ public function __construct(FormValidatorInterface $form_validator, FormSubmitte
     $this->requestStack = $request_stack;
     $this->classResolver = $class_resolver;
     $this->csrfToken = $csrf_token;
-    $this->kernel = $kernel;
+    $this->httpKernel = $http_kernel;
     $this->themeManager = $theme_manager;
   }
 
@@ -1080,14 +1075,14 @@ protected function buttonWasClicked($element, FormStateInterface &$form_state) {
    */
   protected function sendResponse(Response $response) {
     $request = $this->requestStack->getCurrentRequest();
-    $event = new FilterResponseEvent($this->kernel, $request, HttpKernelInterface::MASTER_REQUEST, $response);
+    $event = new FilterResponseEvent($this->httpKernel, $request, HttpKernelInterface::MASTER_REQUEST, $response);
 
     $this->eventDispatcher->dispatch(KernelEvents::RESPONSE, $event);
     // Prepare and send the response.
     $event->getResponse()
       ->prepare($request)
       ->send();
-    $this->kernel->terminate($request, $response);
+    $this->httpKernel->terminate($request, $response);
   }
 
   /**
diff --git a/core/lib/Drupal/Core/Language/Language.php b/core/lib/Drupal/Core/Language/Language.php
index 0158eb8..b04f60f 100644
--- a/core/lib/Drupal/Core/Language/Language.php
+++ b/core/lib/Drupal/Core/Language/Language.php
@@ -57,7 +57,7 @@ class Language implements LanguageInterface {
    *
    * @var int
    */
-  protected $weight = 0;
+  public $weight = 0;
 
   /**
    * Locked indicates a language used by the system, not an actual language.
diff --git a/core/lib/Drupal/Core/Language/LanguageManager.php b/core/lib/Drupal/Core/Language/LanguageManager.php
index 6fe99d6..ea7f830 100644
--- a/core/lib/Drupal/Core/Language/LanguageManager.php
+++ b/core/lib/Drupal/Core/Language/LanguageManager.php
@@ -135,7 +135,7 @@ public function getLanguages($flags = LanguageInterface::STATE_CONFIGURABLE) {
       $default = $this->getDefaultLanguage();
       $this->languages = array($default->id => $default);
       // Add the special languages, they will be filtered later if needed.
-      $this->languages += $this->getDefaultLockedLanguages($default->getWeight());
+      $this->languages += $this->getDefaultLockedLanguages($default->weight);
     }
 
     // Filter the full list of languages based on the value of the $all flag. By
diff --git a/core/modules/comment/comment.module b/core/modules/comment/comment.module
index 7b21340..08cfb36 100644
--- a/core/modules/comment/comment.module
+++ b/core/modules/comment/comment.module
@@ -841,7 +841,7 @@ function comment_preprocess_field(&$variables) {
     $variables['title_attributes']['class'][] = 'title';
 
     // Append additional attributes (eg. RDFa) from the first field item.
-    $variables['attributes'] += $variables['items'][0]['attributes']->storage();
+    $variables['attributes'] += $variables['item_attributes'][0]->storage();
 
     // Create separate variables for the comments and comment form.
     $variables['comments'] = $element[0]['comments'];
diff --git a/core/modules/comment/config/install/views.view.comments_recent.yml b/core/modules/comment/config/install/views.view.comments_recent.yml
index 7a4b559..98b0ce1 100644
--- a/core/modules/comment/config/install/views.view.comments_recent.yml
+++ b/core/modules/comment/config/install/views.view.comments_recent.yml
@@ -45,7 +45,6 @@ display:
           row_class: ''
           default_row_class: true
           type: ul
-          wrapper_class: item-list
           class: ''
         provider: views
       row:
diff --git a/core/modules/comment/src/Tests/CommentTitleTest.php b/core/modules/comment/src/Tests/CommentTitleTest.php
index 6d8c96f..4d1416b 100644
--- a/core/modules/comment/src/Tests/CommentTitleTest.php
+++ b/core/modules/comment/src/Tests/CommentTitleTest.php
@@ -38,7 +38,7 @@ public function testCommentEmptyTitles() {
     $regex = '/<a id="comment-' . $comment->id() . '"(.*?)';
     $regex .= $comment->comment_body->value . '(.*?)';
     $regex .= '/s';
-    $this->assertPattern($regex, 'Comment is created successfully');
+    $this->assertPattern($regex, 'Comment is created succesfully');
     // Tests that markup is not generated for the comment without header.
     $this->assertNoPattern('|<h3[^>]*></h3>|', 'Comment title H3 element not found when title is an empty string.');
   }
diff --git a/core/modules/comment/templates/comment.html.twig b/core/modules/comment/templates/comment.html.twig
index 87edce7..575510f 100644
--- a/core/modules/comment/templates/comment.html.twig
+++ b/core/modules/comment/templates/comment.html.twig
@@ -74,7 +74,7 @@
   the server which comments are new for the user. Rendering the final
   "new" indicator here would break the render cache.
   #}
-  <mark class="hidden" data-comment-timestamp="{{ new_indicator_timestamp }}"></mark>
+  <mark class="hidden new" data-comment-timestamp="{{ new_indicator_timestamp }}"></mark>
 
   {% if title %}
     <h3{{ title_attributes }}>{{ title }}</h3>
diff --git a/core/modules/config/src/Form/ConfigSync.php b/core/modules/config/src/Form/ConfigSync.php
index 9edfab6..f73de96 100644
--- a/core/modules/config/src/Form/ConfigSync.php
+++ b/core/modules/config/src/Form/ConfigSync.php
@@ -396,6 +396,7 @@ public static function finishBatch($success, $results, $operations) {
       $message = \Drupal::translation()->translate('An error occurred while processing %error_operation with arguments: @arguments', array('%error_operation' => $error_operation[0], '@arguments' => print_r($error_operation[1], TRUE)));
       drupal_set_message($message, 'error');
     }
+    drupal_flush_all_caches();
   }
 
 
diff --git a/core/modules/content_translation/content_translation.admin.inc b/core/modules/content_translation/content_translation.admin.inc
index 81473bf..92b75bf 100644
--- a/core/modules/content_translation/content_translation.admin.inc
+++ b/core/modules/content_translation/content_translation.admin.inc
@@ -338,4 +338,6 @@ function content_translation_form_language_content_settings_submit(array $form,
   // Ensure entity and menu router information are correctly rebuilt.
   \Drupal::entityManager()->clearCachedDefinitions();
   \Drupal::service('router.builder')->setRebuildNeeded();
+
+  drupal_set_message(t('Settings successfully updated.'));
 }
diff --git a/core/modules/language/src/ConfigurableLanguageManager.php b/core/modules/language/src/ConfigurableLanguageManager.php
index dbb68d2..6699ab0 100644
--- a/core/modules/language/src/ConfigurableLanguageManager.php
+++ b/core/modules/language/src/ConfigurableLanguageManager.php
@@ -298,7 +298,7 @@ public function getLanguages($flags = LanguageInterface::STATE_CONFIGURABLE) {
         $data['default'] = ($langcode == $default->id);
         $data['name'] = $data['label'];
         $this->languages[$langcode] = new Language($data);
-        $weight = max(array($weight, $this->languages[$langcode]->getWeight()));
+        $weight = max(array($weight, $this->languages[$langcode]->weight));
       }
 
       // Add locked languages, they will be filtered later if needed.
@@ -337,8 +337,8 @@ public function updateLockedLanguageWeights() {
 
     // Get maximum weight to update the system languages to keep them on bottom.
     foreach ($this->getLanguages(LanguageInterface::STATE_CONFIGURABLE) as $language) {
-      if (!$language->isLocked() && $language->getWeight() > $max_weight) {
-        $max_weight = $language->getWeight();
+      if (!$language->isLocked() && $language->weight > $max_weight) {
+        $max_weight = $language->weight;
       }
     }
 
diff --git a/core/modules/language/src/Entity/ConfigurableLanguage.php b/core/modules/language/src/Entity/ConfigurableLanguage.php
index 6fcf874..1235b8a 100644
--- a/core/modules/language/src/Entity/ConfigurableLanguage.php
+++ b/core/modules/language/src/Entity/ConfigurableLanguage.php
@@ -71,7 +71,7 @@ class ConfigurableLanguage extends ConfigEntityBase implements ConfigurableLangu
    *
    * @var integer
    */
-  protected $weight = 0;
+  public $weight = 0;
 
   /**
    * Locked languages cannot be edited.
diff --git a/core/modules/language/src/Tests/LanguageConfigurationTest.php b/core/modules/language/src/Tests/LanguageConfigurationTest.php
index ce8c7cf..d7cc61f 100644
--- a/core/modules/language/src/Tests/LanguageConfigurationTest.php
+++ b/core/modules/language/src/Tests/LanguageConfigurationTest.php
@@ -157,7 +157,7 @@ protected function checkConfigurableLanguageWeight($state = 'by default') {
     $replacements = array('@event' => $state);
     foreach (\Drupal::languageManager()->getLanguages(LanguageInterface::STATE_LOCKED) as $locked_language) {
       $replacements['%language'] = $locked_language->name;
-      $this->assertTrue($locked_language->getWeight() > $max_configurable_language_weight, format_string('System language %language has higher weight than configurable languages @event', $replacements));
+      $this->assertTrue($locked_language->weight > $max_configurable_language_weight, format_string('System language %language has higher weight than configurable languages @event', $replacements));
     }
   }
 
@@ -170,11 +170,10 @@ protected function checkConfigurableLanguageWeight($state = 'by default') {
   protected function getHighestConfigurableLanguageWeight(){
     $max_weight = 0;
 
-    /* @var $languages \Drupal\Core\Language\LanguageInterface[] */
     $languages = entity_load_multiple('configurable_language', NULL, TRUE);
     foreach ($languages as $language) {
-      if (!$language->isLocked() && $language->getWeight() > $max_weight) {
-        $max_weight = $language->getWeight();
+      if (!$language->isLocked() && $language->weight > $max_weight) {
+        $max_weight = $language->weight;
       }
     }
 
diff --git a/core/modules/node/templates/field--node--created.html.twig b/core/modules/node/templates/field--node--created.html.twig
index 5799a6c..dc474c7 100644
--- a/core/modules/node/templates/field--node--created.html.twig
+++ b/core/modules/node/templates/field--node--created.html.twig
@@ -8,17 +8,11 @@
  *
  * Available variables:
  * - attributes: HTML attributes for the containing span element.
- * - items: List of all the field items. Each item contains:
- *   - attributes: List of HTML attributes for each item.
- *   - content: The field item content.
+ * - items: List of all the field items.
  *
  * @see field.html.twig
  *
  * @ingroup themeable
  */
 #}
-<span{{ attributes }}>
-  {%- for item in items -%}
-    {{ item.content }}
-  {%- endfor -%}
-</span>
+<span{{ attributes }}>{{ items }}</span>
diff --git a/core/modules/node/templates/field--node--title.html.twig b/core/modules/node/templates/field--node--title.html.twig
index 3f37f83..25432c0 100644
--- a/core/modules/node/templates/field--node--title.html.twig
+++ b/core/modules/node/templates/field--node--title.html.twig
@@ -8,17 +8,11 @@
  *
  * Available variables:
  * - attributes: HTML attributes for the containing span element.
- * - items: List of all the field items. Each item contains:
- *   - attributes: List of HTML attributes for each item.
- *   - content: The field item content.
+ * - items: List of all the field items.
  *
  * @see field.html.twig
  *
  * @ingroup themeable
  */
 #}
-<span{{ attributes }}>
-  {%- for item in items -%}
-    {{ item.content }}
-  {%- endfor -%}
-</span>
+<span{{ attributes }}>{{ items }}</span>
diff --git a/core/modules/node/templates/field--node--uid.html.twig b/core/modules/node/templates/field--node--uid.html.twig
index c4318a6..163ed85 100644
--- a/core/modules/node/templates/field--node--uid.html.twig
+++ b/core/modules/node/templates/field--node--uid.html.twig
@@ -8,17 +8,11 @@
  *
  * Available variables:
  * - attributes: HTML attributes for the containing span element.
- * - items: List of all the field items. Each item contains:
- *   - attributes: List of HTML attributes for each item.
- *   - content: The field item content.
+ * - items: List of all the field items.
  *
  * @see field.html.twig
  *
  * @ingroup themeable
  */
 #}
-<span{{ attributes }}>
-  {%- for item in items -%}
-    {{ item.content }}
-  {%- endfor -%}
-</span>
+<span{{ attributes }}>{{ items }}</span>
diff --git a/core/modules/serialization/src/Encoder/XmlEncoder.php b/core/modules/serialization/src/Encoder/XmlEncoder.php
index a4fa0ff..3b19a44 100644
--- a/core/modules/serialization/src/Encoder/XmlEncoder.php
+++ b/core/modules/serialization/src/Encoder/XmlEncoder.php
@@ -9,6 +9,7 @@
 
 use Symfony\Component\Serializer\Encoder\EncoderInterface;
 use Symfony\Component\Serializer\Encoder\DecoderInterface;
+use Symfony\Component\Serializer\Encoder\SerializerAwareEncoder;
 use Symfony\Component\Serializer\Encoder\XmlEncoder as BaseXmlEncoder;
 
 /**
@@ -17,7 +18,7 @@
  * This acts as a wrapper class for Symfony's XmlEncoder so that it is not
  * implementing NormalizationAwareInterface, and can be normalized externally.
  */
-class XmlEncoder implements EncoderInterface, DecoderInterface {
+class XmlEncoder extends SerializerAwareEncoder implements EncoderInterface, DecoderInterface {
 
   /**
    * The formats that this Encoder supports.
@@ -60,7 +61,8 @@ public function setBaseEncoder($encoder) {
    * Implements \Symfony\Component\Serializer\Encoder\EncoderInterface::encode().
    */
   public function encode($data, $format, array $context = array()){
-    return $this->getBaseEncoder()->encode($data, $format, $context);
+    $normalized = $this->serializer->normalize($data, $format, $context);
+    return $this->getBaseEncoder()->encode($normalized, $format, $context);
   }
 
   /**
diff --git a/core/modules/serialization/tests/src/Unit/Encoder/XmlEncoderTest.php b/core/modules/serialization/tests/src/Unit/Encoder/XmlEncoderTest.php
index b814154..c48a3ec 100644
--- a/core/modules/serialization/tests/src/Unit/Encoder/XmlEncoderTest.php
+++ b/core/modules/serialization/tests/src/Unit/Encoder/XmlEncoderTest.php
@@ -61,6 +61,17 @@ public function testSupportsDecoding() {
    * Tests the encode() method.
    */
   public function testEncode() {
+    $serializer = $this->getMockBuilder('Symfony\Component\Serializer\Serializer')
+      ->disableOriginalConstructor()
+      ->setMethods(array('normalize'))
+      ->getMock();
+    $serializer->expects($this->once())
+      ->method('normalize')
+      ->with($this->testArray, 'test', array())
+      ->will($this->returnValue($this->testArray));
+
+    $this->encoder->setSerializer($serializer);
+
     $this->baseEncoder->expects($this->once())
       ->method('encode')
       ->with($this->testArray, 'test', array())
diff --git a/core/modules/simpletest/css/simpletest.module.css b/core/modules/simpletest/css/simpletest.module.css
index 71f7eea..88c4564 100644
--- a/core/modules/simpletest/css/simpletest.module.css
+++ b/core/modules/simpletest/css/simpletest.module.css
@@ -35,7 +35,7 @@ table#simpletest-form-table tr.simpletest-group label {
   display: inline;
 }
 
-div.message > div.item-list {
+div.message > ul {
   font-weight: normal;
 }
 
diff --git a/core/modules/simpletest/src/WebTestBase.php b/core/modules/simpletest/src/WebTestBase.php
index 98f68fc..6f3afba 100644
--- a/core/modules/simpletest/src/WebTestBase.php
+++ b/core/modules/simpletest/src/WebTestBase.php
@@ -27,6 +27,7 @@
 use Drupal\Core\StreamWrapper\PublicStream;
 use Drupal\Core\Datetime\DrupalDateTime;
 use Drupal\block\Entity\Block;
+use Drupal\user\Plugin\Validation\Constraint\UserNameConstraintValidator;
 use Symfony\Component\HttpFoundation\Request;
 use Drupal\user\Entity\Role;
 
@@ -527,8 +528,14 @@ protected function drupalCreateUser(array $permissions = array(), $name = NULL)
 
     // Create a user assigned to that role.
     $edit = array();
-    $edit['name']   = !empty($name) ? $name : $this->randomMachineName();
+    $edit['name']   = !empty($name) ? $name : $this->getRandomGenerator()->string(8, TRUE, array($this, 'randomUsernameValidate'));
     $edit['mail']   = $edit['name'] . '@example.com';
+    // It is possible that name + @example.com is not a valid email address
+    // since user names can contain whitespace and @ characters and start with a
+    // dot.
+    if (!valid_email_address($edit['mail'])) {
+      $edit['mail'] = $this->getRandomGenerator()->name() . '@example.com';
+    }
     $edit['pass']   = user_password();
     $edit['status'] = 1;
     if ($rid) {
@@ -2701,4 +2708,19 @@ protected function prepareRequestForGenerator($clean_urls = TRUE, $override_serv
 
     return $request;
   }
+
+  /**
+   * Callback for random username validation.
+   *
+   * @see \Drupal\Component\Utility\Random::string()
+   *
+   * @param string $string
+   *   The random string to validate.
+   *
+   * @return bool
+   *   TRUE if the random string is valid, FALSE if not.
+   */
+  public function randomUsernameValidate($string) {
+    return $this->randomStringValidate($string) && !UserNameConstraintValidator::hasIllegalCharacters($string);
+  }
 }
diff --git a/core/modules/system/core.api.php b/core/modules/system/core.api.php
index a863baa..1f6dd9e 100644
--- a/core/modules/system/core.api.php
+++ b/core/modules/system/core.api.php
@@ -96,9 +96,9 @@
  * data and other methods.
  *
  * REST requests can be authenticated. The Drupal Core Basic Auth module
- * provides authentication using the HTTP Basic protocol; the contributed module
+ * provides authentication using the HTTP Basic protocol; contributed module
  * OAuth (https://www.drupal.org/project/oauth) implements the OAuth
- * authentication protocol. You can also use cookie-based authentication, which
+ * authenticaion protocol. You can also use cookie-based authentication, which
  * would require users to be logged into the Drupal site while using the
  * application on the third-party site that is using the REST service.
  *
diff --git a/core/modules/system/css/system.theme.css b/core/modules/system/css/system.theme.css
index bf14339..0f1d8ae 100644
--- a/core/modules/system/css/system.theme.css
+++ b/core/modules/system/css/system.theme.css
@@ -21,24 +21,6 @@ td.active {
 }
 
 /**
- * Markup generated by theme_item_list().
- */
-.item-list .title {
-  font-weight: bold;
-}
-.item-list ul {
-  margin: 0 0 0.75em 0;
-  padding: 0;
-}
-.item-list ul li {
-  margin: 0 0 0.25em 1.5em; /* LTR */
-  padding: 0;
-}
-[dir="rtl"] .item-list ul li {
-  margin: 0 1.5em 0.25em 0;
-}
-
-/**
  * Markup generated by Form API.
  */
 .form-item,
diff --git a/core/modules/system/src/Form/ModulesListConfirmForm.php b/core/modules/system/src/Form/ModulesListConfirmForm.php
index c04a030..df7dfef 100644
--- a/core/modules/system/src/Form/ModulesListConfirmForm.php
+++ b/core/modules/system/src/Form/ModulesListConfirmForm.php
@@ -147,6 +147,7 @@ public function submitForm(array &$form, FormStateInterface $form_state) {
     // Gets module list after install process, flushes caches and displays a
     // message if there are changes.
     if ($before != $this->moduleHandler->getModuleList()) {
+      drupal_flush_all_caches();
       drupal_set_message($this->t('The configuration options have been saved.'));
     }
 
diff --git a/core/modules/system/src/Form/ModulesListForm.php b/core/modules/system/src/Form/ModulesListForm.php
index 23505fa..c1b2b73 100644
--- a/core/modules/system/src/Form/ModulesListForm.php
+++ b/core/modules/system/src/Form/ModulesListForm.php
@@ -511,6 +511,7 @@ public function submitForm(array &$form, FormStateInterface $form_state) {
     // Gets module list after install process, flushes caches and displays a
     // message if there are changes.
     if ($before != $this->moduleHandler->getModuleList()) {
+      drupal_flush_all_caches();
       drupal_set_message(t('The configuration options have been saved.'));
     }
   }
diff --git a/core/modules/system/src/Tests/HttpKernel/StackKernelIntegrationTest.php b/core/modules/system/src/Tests/HttpKernel/StackKernelIntegrationTest.php
index 6018122..103f71f 100644
--- a/core/modules/system/src/Tests/HttpKernel/StackKernelIntegrationTest.php
+++ b/core/modules/system/src/Tests/HttpKernel/StackKernelIntegrationTest.php
@@ -8,9 +8,7 @@
 namespace Drupal\system\Tests\HttpKernel;
 
 use Drupal\simpletest\KernelTestBase;
-use Drupal\Core\Url;
 use Symfony\Component\HttpFoundation\Request;
-use Symfony\Component\HttpKernel\HttpKernelInterface;
 
 /**
  * Tests the stacked kernel functionality.
@@ -40,13 +38,14 @@ protected function setUp() {
    * Tests a request.
    */
   public function testRequest() {
-    $request = Request::create((new Url('httpkernel_test.empty'))->toString());
+    $request = new Request();
     /** @var \Symfony\Component\HttpKernel\HttpKernelInterface $http_kernel */
     $http_kernel = \Drupal::service('http_kernel');
-    $http_kernel->handle($request, HttpKernelInterface::MASTER_REQUEST, FALSE);
+    $http_kernel->handle($request);
 
     $this->assertEqual($request->attributes->get('_hello'), 'world');
     $this->assertEqual($request->attributes->get('_previous_optional_argument'), 'test_argument');
   }
 
 }
+
diff --git a/core/modules/system/src/Tests/Path/UrlAlterFunctionalTest.php b/core/modules/system/src/Tests/Path/UrlAlterFunctionalTest.php
index 7f64ddb..baca1da 100644
--- a/core/modules/system/src/Tests/Path/UrlAlterFunctionalTest.php
+++ b/core/modules/system/src/Tests/Path/UrlAlterFunctionalTest.php
@@ -36,7 +36,7 @@ function testUrlAlter() {
     // Test a single altered path.
     $this->drupalGet("user/$name");
     $this->assertResponse('200', 'The user/username path gets resolved correctly');
-    $this->assertUrlOutboundAlter("user/$uid", "user/$name");
+    $this->assertUrlOutboundAlter("user/$uid", "user/" . urlencode($name));
 
     // Test that a path always uses its alias.
     $path = array('source' => "user/$uid/test1", 'alias' => 'alias/test1');
diff --git a/core/modules/system/src/Tests/Routing/RouterTest.php b/core/modules/system/src/Tests/Routing/RouterTest.php
index 4fd44bf..05f86f7 100644
--- a/core/modules/system/src/Tests/Routing/RouterTest.php
+++ b/core/modules/system/src/Tests/Routing/RouterTest.php
@@ -8,7 +8,6 @@
 namespace Drupal\system\Tests\Routing;
 
 use Drupal\simpletest\WebTestBase;
-use Symfony\Component\Routing\Exception\RouteNotFoundException;
 
 /**
  * Functional class for the full integrated routing system.
@@ -190,18 +189,9 @@ public function testControllerResolutionAjax() {
   /**
    * Tests that routes no longer exist for a module that has been uninstalled.
    */
-  public function testRouterUninstallInstall() {
+  public function testRouterUninstall() {
     \Drupal::moduleHandler()->uninstall(array('router_test'));
-    try {
-      \Drupal::service('router.route_provider')->getRouteByName('router_test.1');
-      $this->fail('Route was delete on uninstall.');
-    }
-    catch (RouteNotFoundException $e) {
-      $this->pass('Route was delete on uninstall.');
-    }
-    // Install the module again.
-    \Drupal::moduleHandler()->install(array('router_test'));
-    $route = \Drupal::service('router.route_provider')->getRouteByName('router_test.1');
-    $this->assertNotNull($route, 'Route exists after module installation');
+    $route_count = \Drupal::database()->query('SELECT COUNT(*) FROM {router} WHERE name = :route_name', array(':route_name' => 'router_test.1'))->fetchField();
+    $this->assertEqual(0, $route_count, 'All router_test routes have been removed on uninstall.');
   }
 }
diff --git a/core/modules/system/src/Tests/System/ThemeTest.php b/core/modules/system/src/Tests/System/ThemeTest.php
index 5078156..e1b091d 100644
--- a/core/modules/system/src/Tests/System/ThemeTest.php
+++ b/core/modules/system/src/Tests/System/ThemeTest.php
@@ -244,6 +244,8 @@ function testSwitchDefaultTheme() {
     $this->clickLink(t('Set as default'));
     $this->assertEqual(\Drupal::config('system.theme')->get('default'), 'bartik');
 
+    drupal_flush_all_caches();
+
     // Test the default theme on the secondary links (blocks admin page).
     $this->drupalGet('admin/structure/block');
     $this->assertText('Bartik(' . t('active tab') . ')', 'Default local task on blocks admin page is the default theme.');
diff --git a/core/modules/system/src/Tests/Theme/FunctionsTest.php b/core/modules/system/src/Tests/Theme/FunctionsTest.php
index c8d068c..0e55865 100644
--- a/core/modules/system/src/Tests/Theme/FunctionsTest.php
+++ b/core/modules/system/src/Tests/Theme/FunctionsTest.php
@@ -44,21 +44,21 @@ function testItemList() {
     // Verify that empty items produce the empty string.
     $variables = array();
     $variables['empty'] = 'No items found.';
-    $expected = '<div class="item-list">No items found.</div>';
+    $expected = 'No items found.';
     $this->assertThemeOutput('item_list', $variables, $expected, 'Empty %callback generates empty string.');
 
     // Verify that empty items produce the empty string with title.
     $variables = array();
     $variables['title'] = 'Some title';
     $variables['empty'] = 'No items found.';
-    $expected = '<div class="item-list"><h3>Some title</h3>No items found.</div>';
+    $expected = '<h3>Some title</h3>No items found.';
     $this->assertThemeOutput('item_list', $variables, $expected, 'Empty %callback generates empty string with title.');
 
     // Verify that title set to 0 is output.
     $variables = array();
     $variables['title'] = 0;
     $variables['empty'] = 'No items found.';
-    $expected = '<div class="item-list"><h3>0</h3>No items found.</div>';
+    $expected = '<h3>0</h3>No items found.';
     $this->assertThemeOutput('item_list', $variables, $expected, '%callback with title set to 0 generates a title.');
 
     // Verify that title set to a render array is output.
@@ -67,7 +67,7 @@ function testItemList() {
       '#markup' => '<span>Render array</span>',
     );
     $variables['empty'] = 'No items found.';
-    $expected = '<div class="item-list"><h3><span>Render array</span></h3>No items found.</div>';
+    $expected = '<h3><span>Render array</span></h3>No items found.';
     $this->assertThemeOutput('item_list', $variables, $expected, '%callback with title set to a render array generates a title.');
 
     // Verify that empty text is not displayed when there are list items.
@@ -75,7 +75,7 @@ function testItemList() {
     $variables['title'] = 'Some title';
     $variables['empty'] = 'No items found.';
     $variables['items'] = array('Un', 'Deux', 'Trois');
-    $expected = '<div class="item-list"><h3>Some title</h3><ul><li>Un</li><li>Deux</li><li>Trois</li></ul></div>';
+    $expected = '<h3>Some title</h3><ul><li>Un</li><li>Deux</li><li>Trois</li></ul>';
     $this->assertThemeOutput('item_list', $variables, $expected, '%callback does not print empty text when there are list items.');
 
     // Verify nested item lists.
@@ -136,24 +136,23 @@ function testItemList() {
       'f',
     );
 
-    $inner_b = '<div class="item-list"><ol id="blist">';
+    $inner_b = '<ol id="blist">';
     $inner_b .= '<li>ba</li>';
     $inner_b .= '<li class="item-class-bb">bb</li>';
-    $inner_b .= '</ol></div>';
+    $inner_b .= '</ol>';
 
-    $inner_cb = '<div class="item-list"><ul>';
+    $inner_cb = '<ul>';
     $inner_cb .= '<li>cba</li>';
     $inner_cb .= '<li>cbb</li>';
-    $inner_cb .= '</ul></div>';
+    $inner_cb .= '</ul>';
 
-    $inner_c = '<div class="item-list"><ul id="clist">';
+    $inner_c = '<ul id="clist">';
     $inner_c .= '<li>ca</li>';
     $inner_c .= '<li class="item-class-cb">cb' . $inner_cb . '</li>';
     $inner_c .= '<li>cc</li>';
-    $inner_c .= '</ul></div>';
+    $inner_c .= '</ul>';
 
-    $expected = '<div class="item-list">';
-    $expected .= '<h3>Some title</h3>';
+    $expected = '<h3>Some title</h3>';
     $expected .= '<ul id="parentlist">';
     $expected .= '<li>a</li>';
     $expected .= '<li id="item-id-b">b' . $inner_b . '</li>';
@@ -161,7 +160,7 @@ function testItemList() {
     $expected .= '<li id="item-id-d">d</li>';
     $expected .= '<li id="item-id-e"></li>';
     $expected .= '<li>f</li>';
-    $expected .= '</ul></div>';
+    $expected .= '</ul>';
 
     $this->assertThemeOutput('item_list', $variables, $expected);
   }
diff --git a/core/modules/system/templates/field.html.twig b/core/modules/system/templates/field.html.twig
index 4217b4f..d38b028 100644
--- a/core/modules/system/templates/field.html.twig
+++ b/core/modules/system/templates/field.html.twig
@@ -21,9 +21,8 @@
  * - title_attributes: HTML attributes for the title.
  * - label: The label for the field.
  * - content_attributes: HTML attributes for the content.
- * - items: List of all the field items. Each item contains:
- *   - attributes: List of HTML attributes for each item.
- *   - content: The field item's content.
+ * - items: List of all the field items.
+ * - item_attributes: List of HTML attributes for each item.
  *
  * @see template_preprocess_field()
  *
@@ -32,11 +31,11 @@
 #}
 <div{{ attributes }}>
   {% if not label_hidden %}
-    <div{{ title_attributes.addClass('field-label') }}>{{ label }}:&nbsp;</div>
+    <div class="field-label{% if title_attributes.class %} {{ title_attributes.class }}{% endif %}"{{ title_attributes|without('class') }}>{{ label }}:&nbsp;</div>
   {% endif %}
-  <div{{ content_attributes.addClass('field-items') }}>
-    {% for item in items %}
-      <div{{ item.attributes.addClass('field-item') }}>{{ item.content }}</div>
+  <div class="field-items"{{ content_attributes }}>
+    {% for delta, item in items %}
+      <div class="field-item"{{ item_attributes[delta] }}>{{ item }}</div>
     {% endfor %}
   </div>
 </div>
diff --git a/core/modules/system/templates/item-list.html.twig b/core/modules/system/templates/item-list.html.twig
index bd71e7f..2a59319 100644
--- a/core/modules/system/templates/item-list.html.twig
+++ b/core/modules/system/templates/item-list.html.twig
@@ -19,18 +19,16 @@
  */
 #}
 {%- if items or empty -%}
-  <div class="item-list">
-    {%- if title is not empty -%}
-      <h3>{{ title }}</h3>
-    {%- endif -%}
-    {%- if items -%}
-      <{{ list_type }}{{ attributes }}>
-        {%- for item in items -%}
-          <li{{ item.attributes }}>{{ item.value }}</li>
-        {%- endfor -%}
-      </{{ list_type }}>
-    {%- else -%}
-      {{- empty -}}
-    {%- endif -%}
-  </div>
+  {%- if title is not empty -%}
+    <h3>{{ title }}</h3>
+  {%- endif -%}
+  {%- if items -%}
+    <{{ list_type }}{{ attributes }}>
+      {%- for item in items -%}
+        <li{{ item.attributes }}>{{ item.value }}</li>
+      {%- endfor -%}
+    </{{ list_type }}>
+  {%- else -%}
+    {{- empty -}}
+  {%- endif -%}
 {%- endif %}
diff --git a/core/modules/system/tests/modules/httpkernel_test/httpkernel_test.routing.yml b/core/modules/system/tests/modules/httpkernel_test/httpkernel_test.routing.yml
deleted file mode 100644
index 7de4338..0000000
--- a/core/modules/system/tests/modules/httpkernel_test/httpkernel_test.routing.yml
+++ /dev/null
@@ -1,6 +0,0 @@
-httpkernel_test.empty:
-  path: '/httpkernel-test'
-  defaults:
-    _controller: '\Drupal\httpkernel_test\Controller\TestController::get'
-  requirements:
-    _access: 'TRUE'
diff --git a/core/modules/system/tests/modules/httpkernel_test/src/Controller/TestController.php b/core/modules/system/tests/modules/httpkernel_test/src/Controller/TestController.php
deleted file mode 100644
index 06ca4f6..0000000
--- a/core/modules/system/tests/modules/httpkernel_test/src/Controller/TestController.php
+++ /dev/null
@@ -1,24 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains \Drupal\httpkernel_test\Controller\TestController
- */
-
-namespace Drupal\httpkernel_test\Controller;
-
-use Symfony\Component\HttpFoundation\Response;
-
-/**
- * A test controller.
- */
-class TestController {
-
-  /**
-   * Return an empty response.
-   */
-  public function get() {
-    return new Response();
-  }
-
-}
diff --git a/core/modules/toolbar/css/toolbar.module.css b/core/modules/toolbar/css/toolbar.module.css
index 06224fe..30661d7 100644
--- a/core/modules/toolbar/css/toolbar.module.css
+++ b/core/modules/toolbar/css/toolbar.module.css
@@ -20,10 +20,9 @@
 /**
  * Very specific overrides for Drupal system CSS.
  */
+.toolbar ul,
 .toolbar li,
 .toolbar .menu li,
-.toolbar .item-list,
-.toolbar .item-list li,
 .toolbar .menu li.expanded {
   list-style-type: none;
   list-style-image: none;
diff --git a/core/modules/toolbar/js/views/ToolbarVisualView.js b/core/modules/toolbar/js/views/ToolbarVisualView.js
index e9dd6f0..62908e0 100644
--- a/core/modules/toolbar/js/views/ToolbarVisualView.js
+++ b/core/modules/toolbar/js/views/ToolbarVisualView.js
@@ -1,6 +1,6 @@
 /**
  * @file
- * A Backbone view for the toolbar element. Listens to mouse & touch.
+ * A Backbone view for the toolbar element.
  */
 
 (function ($, Drupal, drupalSettings, Backbone) {
@@ -8,23 +8,13 @@
   "use strict";
 
   /**
-   * Backbone view for the toolbar element. Listens to mouse & touch.
+   * Backbone view for the toolbar element.
    */
   Drupal.toolbar.ToolbarVisualView = Backbone.View.extend({
 
-    events: function () {
-      // Prevents delay and simulated mouse events.
-      var touchEndToClick = function (event) {
-        event.preventDefault();
-        event.target.click();
-      };
-
-      return {
-        'click .toolbar-bar .toolbar-tab': 'onTabClick',
-        'click .toolbar-toggle-orientation button': 'onOrientationToggleClick',
-        'touchend .toolbar-bar .toolbar-tab': touchEndToClick,
-        'touchend .toolbar-toggle-orientation button': touchEndToClick
-      };
+    events: {
+      'click .toolbar-bar .toolbar-tab': 'onTabClick',
+      'click .toolbar-toggle-orientation button': 'onOrientationToggleClick'
     },
 
     /**
diff --git a/core/modules/user/config/install/views.view.who_s_online.yml b/core/modules/user/config/install/views.view.who_s_online.yml
index 5b22082..0109ebd 100644
--- a/core/modules/user/config/install/views.view.who_s_online.yml
+++ b/core/modules/user/config/install/views.view.who_s_online.yml
@@ -52,7 +52,6 @@ display:
           row_class: ''
           default_row_class: true
           type: ul
-          wrapper_class: item-list
           class: ''
         provider: views
       row:
diff --git a/core/modules/user/src/Plugin/Validation/Constraint/UserNameConstraintValidator.php b/core/modules/user/src/Plugin/Validation/Constraint/UserNameConstraintValidator.php
index 5b788ca..38f0bbf 100644
--- a/core/modules/user/src/Plugin/Validation/Constraint/UserNameConstraintValidator.php
+++ b/core/modules/user/src/Plugin/Validation/Constraint/UserNameConstraintValidator.php
@@ -33,23 +33,36 @@ public function validate($items, Constraint $constraint) {
     if (strpos($name, '  ') !== FALSE) {
       $this->context->addViolation($constraint->multipleSpacesMessage);
     }
-    if (preg_match('/[^\x{80}-\x{F7} a-z0-9@_.\'-]/i', $name)
-      || preg_match(
-        '/[\x{80}-\x{A0}' .       // Non-printable ISO-8859-1 + NBSP
-        '\x{AD}' .                // Soft-hyphen
-        '\x{2000}-\x{200F}' .     // Various space characters
-        '\x{2028}-\x{202F}' .     // Bidirectional text overrides
-        '\x{205F}-\x{206F}' .     // Various text hinting characters
-        '\x{FEFF}' .              // Byte order mark
-        '\x{FF01}-\x{FF60}' .     // Full-width latin
-        '\x{FFF9}-\x{FFFD}' .     // Replacement characters
-        '\x{0}-\x{1F}]/u',        // NULL byte and control characters
-        $name)
-    ) {
+    if (static::hasIllegalCharacters($name)) {
       $this->context->addViolation($constraint->illegalMessage);
     }
     if (drupal_strlen($name) > USERNAME_MAX_LENGTH) {
       $this->context->addViolation($constraint->tooLongMessage, array('%name' => $name, '%max' => USERNAME_MAX_LENGTH));
     }
   }
+
+  /**
+   * Checks if the username has illegal characters.
+   *
+   * @param string $name
+   *   The username to check.
+   *
+   * @return bool
+   *   TRUE if the username has illegal characters, FALSE if not.
+   */
+  public static function hasIllegalCharacters($name) {
+    return preg_match('/[^\x{80}-\x{F7} a-z0-9@+_.\'-]/i', $name)
+    || preg_match(
+      '/[\x{80}-\x{A0}' .       // Non-printable ISO-8859-1 + NBSP
+      '\x{AD}' .                // Soft-hyphen
+      '\x{2000}-\x{200F}' .     // Various space characters
+      '\x{2028}-\x{202F}' .     // Bidirectional text overrides
+      '\x{205F}-\x{206F}' .     // Various text hinting characters
+      '\x{FEFF}' .              // Byte order mark
+      '\x{FF01}-\x{FF60}' .     // Full-width latin
+      '\x{FFF9}-\x{FFFD}' .     // Replacement characters
+      '\x{0}-\x{1F}]/u',        // NULL byte and control characters
+      $name);
+  }
+
 }
diff --git a/core/modules/user/src/Tests/UserAdminListingTest.php b/core/modules/user/src/Tests/UserAdminListingTest.php
index 65e9ef3..0a45c5e 100644
--- a/core/modules/user/src/Tests/UserAdminListingTest.php
+++ b/core/modules/user/src/Tests/UserAdminListingTest.php
@@ -69,8 +69,8 @@ public function testUserListing() {
     foreach ($result as $account) {
       $name = (string) $account->td[0]->span;
       $roles = array();
-      if (isset($account->td[2]->div->ul)) {
-        foreach ($account->td[2]->div->ul->li as $element) {
+      if (isset($account->td[2]->ul)) {
+        foreach ($account->td[2]->ul->li as $element) {
           $roles[] = (string) $element;
         }
       }
diff --git a/core/modules/user/src/Tests/UserValidationTest.php b/core/modules/user/src/Tests/UserValidationTest.php
index 81a9e48..9d68578 100644
--- a/core/modules/user/src/Tests/UserValidationTest.php
+++ b/core/modules/user/src/Tests/UserValidationTest.php
@@ -53,6 +53,7 @@ function testUsernames() {
       'foo@example.com'        => array('Valid username', 'assertNull'),
       'foo@-example.com'       => array('Valid username', 'assertNull'), // invalid domains are allowed in usernames
       'þòøÇßªř€'               => array('Valid username', 'assertNull'),
+      'foo+bar'                => array('Valid username', 'assertNull'), // '+' symbol is allowed
       'ᚠᛇᚻ᛫ᛒᛦᚦ'                => array('Valid UTF8 username', 'assertNull'), // runes
       ' foo'                   => array('Invalid username that starts with a space', 'assertNotNull'),
       'foo '                   => array('Invalid username that ends with a space', 'assertNotNull'),
diff --git a/core/modules/views/src/Plugin/views/style/HtmlList.php b/core/modules/views/src/Plugin/views/style/HtmlList.php
index d965792..b98b030 100644
--- a/core/modules/views/src/Plugin/views/style/HtmlList.php
+++ b/core/modules/views/src/Plugin/views/style/HtmlList.php
@@ -46,7 +46,6 @@ protected function defineOptions() {
 
     $options['type'] = array('default' => 'ul');
     $options['class'] = array('default' => '');
-    $options['wrapper_class'] = array('default' => 'item-list');
 
     return $options;
   }
@@ -62,13 +61,6 @@ public function buildOptionsForm(&$form, FormStateInterface $form_state) {
       '#options' => array('ul' => $this->t('Unordered list'), 'ol' => $this->t('Ordered list')),
       '#default_value' => $this->options['type'],
     );
-    $form['wrapper_class'] = array(
-      '#title' => $this->t('Wrapper class'),
-      '#description' => $this->t('The class to provide on the wrapper, outside the list.'),
-      '#type' => 'textfield',
-      '#size' => '30',
-      '#default_value' => $this->options['wrapper_class'],
-    );
     $form['class'] = array(
       '#title' => $this->t('List class'),
       '#description' => $this->t('The class to provide on the list element itself.'),
diff --git a/core/modules/views/src/Tests/Plugin/StyleHtmlListTest.php b/core/modules/views/src/Tests/Plugin/StyleHtmlListTest.php
index 0642eff..65d5db7 100644
--- a/core/modules/views/src/Tests/Plugin/StyleHtmlListTest.php
+++ b/core/modules/views/src/Tests/Plugin/StyleHtmlListTest.php
@@ -33,24 +33,16 @@ function testDefaultRowClasses() {
     $output = $view->preview();
     $output = drupal_render($output);
 
-    // Check that an empty class attribute is not added if the wrapper class is
-    // not set.
-    $this->assertTrue(strpos($output, '<div>') !== FALSE, 'Empty class is not added to DIV when class is not set');
-
     // Check that an empty class attribute is not added if the list class is
     // not set.
     $this->assertTrue(strpos($output, '<ul>') !== FALSE, 'Empty class is not added to UL when class is not set');
 
     // Set wrapper class and list class in style options.
     $view->style_plugin->options['class'] = 'class';
-    $view->style_plugin->options['wrapper_class'] = 'wrapper-class';
 
     $output = $view->preview();
     $output = drupal_render($output);
 
-    // Check that class attribute is present if the wrapper class is set.
-    $this->assertTrue(strpos($output, '<div class="wrapper-class">') !== FALSE, 'Class is added to DIV');
-
     // Check that class attribute is present if the list class is set.
     $this->assertTrue(strpos($output, '<ul class="class">') !== FALSE, 'Class is added to UL');
   }
diff --git a/core/modules/views/templates/views-view-list.html.twig b/core/modules/views/templates/views-view-list.html.twig
index 8de787c..207a25b 100644
--- a/core/modules/views/templates/views-view-list.html.twig
+++ b/core/modules/views/templates/views-view-list.html.twig
@@ -4,7 +4,6 @@
  * Default theme implementation for a view template to display a list of rows.
  *
  * Available variables:
- * - attributes: HTML attributes for the container.
  * - rows: A list of rows for this list.
  *   - attributes: The row's HTML attributes.
  *   - content: The row's contents.
@@ -18,21 +17,14 @@
  * @ingroup themeable
  */
 #}
-{% if attributes -%}
-  <div{{ attributes }}>
+{% if title %}
+  <h3>{{ title }}</h3>
 {% endif %}
-  {% if title %}
-    <h3>{{ title }}</h3>
-  {% endif %}
 
-  <{{ list.type }}{{ list.attributes }}>
+<{{ list.type }}{{ list.attributes }}>
 
-    {% for row in rows %}
-      <li{{ row.attributes }}>{{ row.content }}</li>
-    {% endfor %}
+  {% for row in rows %}
+    <li{{ row.attributes }}>{{ row.content }}</li>
+  {% endfor %}
 
-  </{{ list.type }}>
-
-{% if attributes -%}
-  </div>
-{% endif %}
+</{{ list.type }}>
diff --git a/core/modules/views/templates/views-view-summary.html.twig b/core/modules/views/templates/views-view-summary.html.twig
index 4d8ed8f..db9bae5 100644
--- a/core/modules/views/templates/views-view-summary.html.twig
+++ b/core/modules/views/templates/views-view-summary.html.twig
@@ -19,14 +19,12 @@
  * @ingroup themeable
  */
 #}
-<div class="item-list">
-  <ul class="views-summary">
-  {% for row in rows %}
-    <li><a href="{{ row.url }}"{{ row.attributes }}>{{ row.link }}</a>
-      {% if options.count %}
-        ({{ row.count }})
-      {% endif %}
-    </li>
-  {% endfor %}
-  </ul>
-</div>
+<ul class="views-summary">
+{% for row in rows %}
+  <li><a href="{{ row.url }}"{{ row.attributes }}>{{ row.link }}</a>
+    {% if options.count %}
+      ({{ row.count }})
+    {% endif %}
+  </li>
+{% endfor %}
+</ul>
diff --git a/core/modules/views/views.theme.inc b/core/modules/views/views.theme.inc
index 02f0175..a9bf6f6 100644
--- a/core/modules/views/views.theme.inc
+++ b/core/modules/views/views.theme.inc
@@ -842,12 +842,6 @@ function template_preprocess_views_view_list(&$variables) {
     $variables['list']['attributes'] = new Attribute(array('class' => $class));
   }
 
-  // Fetch wrapper classes from handler options.
-  if ($handler->options['wrapper_class']) {
-    $wrapper_class = explode(' ', $handler->options['wrapper_class']);
-    $variables['attributes']['class'] = array_map('drupal_clean_css_identifier', $wrapper_class);
-  }
-
   $variables['list']['type'] = $handler->options['type'];
 
   template_preprocess_views_view_unformatted($variables);
diff --git a/core/modules/views_ui/css/views_ui.admin.theme.css b/core/modules/views_ui/css/views_ui.admin.theme.css
index 47909d9..124be4c 100644
--- a/core/modules/views_ui/css/views_ui.admin.theme.css
+++ b/core/modules/views_ui/css/views_ui.admin.theme.css
@@ -912,7 +912,7 @@ td.group-title {
   content: "\00A0\003E";
 }
 
-.views-ui-dialog details .item-list {
+.views-ui-dialog details ul {
   padding-left: 2em;
 }
 /* @end */
@@ -1059,11 +1059,11 @@ td.group-title {
 
 /* @group HTML list */
 
-#views-live-preview .view-content > .item-list > ul {
+#views-live-preview .view-content > ul {
   list-style-position: outside;
   padding-left: 21px; /* LTR */
 }
-[dir="rtl"] #views-live-preview .view-content > .item-list > ul {
+[dir="rtl"] #views-live-preview .view-content > ul {
   padding-left: 0;
   padding-right: 21px;
 }
diff --git a/core/modules/views_ui/src/Tests/FieldUITest.php b/core/modules/views_ui/src/Tests/FieldUITest.php
index fac6e46..32bd4c4 100644
--- a/core/modules/views_ui/src/Tests/FieldUITest.php
+++ b/core/modules/views_ui/src/Tests/FieldUITest.php
@@ -42,18 +42,18 @@ public function testFieldUI() {
     // Ensure that the expected tokens appear in the UI.
     $edit_handler_url = 'admin/structure/views/nojs/handler/test_view/default/field/age';
     $this->drupalGet($edit_handler_url);
-    $result = $this->xpath('//details[@id="edit-options-alter-help"]/div[@class="details-wrapper"]/div[@class="item-list"]/fields/li');
+    $result = $this->xpath('//details[@id="edit-options-alter-help"]/div[@class="details-wrapper"]//li');
     $this->assertEqual((string) $result[0], '[age] == Age');
 
     $edit_handler_url = 'admin/structure/views/nojs/handler/test_view/default/field/id';
     $this->drupalGet($edit_handler_url);
-    $result = $this->xpath('//details[@id="edit-options-alter-help"]/div[@class="details-wrapper"]/div[@class="item-list"]/fields/li');
+    $result = $this->xpath('//details[@id="edit-options-alter-help"]/div[@class="details-wrapper"]//li');
     $this->assertEqual((string) $result[0], '[age] == Age');
     $this->assertEqual((string) $result[1], '[id] == ID');
 
     $edit_handler_url = 'admin/structure/views/nojs/handler/test_view/default/field/name';
     $this->drupalGet($edit_handler_url);
-    $result = $this->xpath('//details[@id="edit-options-alter-help"]/div[@class="details-wrapper"]/div[@class="item-list"]/fields/li');
+    $result = $this->xpath('//details[@id="edit-options-alter-help"]/div[@class="details-wrapper"]//li');
     $this->assertEqual((string) $result[0], '[age] == Age');
     $this->assertEqual((string) $result[1], '[id] == ID');
     $this->assertEqual((string) $result[2], '[name] == Name');
diff --git a/core/tests/Drupal/Tests/Core/Form/FormTestBase.php b/core/tests/Drupal/Tests/Core/Form/FormTestBase.php
index 61c4f95..47b80b1 100644
--- a/core/tests/Drupal/Tests/Core/Form/FormTestBase.php
+++ b/core/tests/Drupal/Tests/Core/Form/FormTestBase.php
@@ -117,9 +117,9 @@
   protected $translationManager;
 
   /**
-   * @var \Drupal\Core\DrupalKernelInterface|\PHPUnit_Framework_MockObject_MockObject
+   * @var \Symfony\Component\HttpKernel\HttpKernel|\PHPUnit_Framework_MockObject_MockObject
    */
-  protected $kernel;
+  protected $httpKernel;
 
   /**
    * @var \PHPUnit_Framework_MockObject_MockObject|\Psr\Log\LoggerInterface
@@ -142,7 +142,7 @@ protected function setUp() {
     $this->csrfToken = $this->getMockBuilder('Drupal\Core\Access\CsrfTokenGenerator')
       ->disableOriginalConstructor()
       ->getMock();
-    $this->kernel = $this->getMockBuilder('\Drupal\Core\DrupalKernel')
+    $this->httpKernel = $this->getMockBuilder('Symfony\Component\HttpKernel\HttpKernel')
       ->disableOriginalConstructor()
       ->getMock();
     $this->account = $this->getMock('Drupal\Core\Session\AccountInterface');
@@ -161,7 +161,7 @@ protected function setUp() {
       ->setMethods(array('batchGet', 'drupalInstallationAttempted'))
       ->getMock();
 
-    $this->formBuilder = new TestFormBuilder($this->formValidator, $this->formSubmitter, $this->formCache, $this->moduleHandler, $this->eventDispatcher, $this->requestStack, $this->classResolver, $this->themeManager, $this->csrfToken, $this->kernel);
+    $this->formBuilder = new TestFormBuilder($this->formValidator, $this->formSubmitter, $this->formCache, $this->moduleHandler, $this->eventDispatcher, $this->requestStack, $this->classResolver, $this->themeManager, $this->csrfToken, $this->httpKernel);
     $this->formBuilder->setCurrentUser($this->account);
   }
 
diff --git a/core/themes/bartik/css/style.css b/core/themes/bartik/css/style.css
index f03caa5..0d9ba5e 100644
--- a/core/themes/bartik/css/style.css
+++ b/core/themes/bartik/css/style.css
@@ -326,11 +326,11 @@ ul.menu li {
 [dir="rtl"] .region-content ol {
   padding: 0 15px 0.25em 0;
 }
-.item-list ul li {
+li {
   margin: 0;
   padding: 0.2em 0.5em 0 0; /* LTR */
 }
-[dir="rtl"] .item-list ul li {
+[dir="rtl"] li {
   padding: 0.2em 0 0 0.5em;
 }
 ul.tips {
@@ -494,30 +494,30 @@ h1.site-name {
   margin: 0;
   padding: 0;
 }
-.region-header #block-user-login div.item-list,
+.region-header #block-user-login ul,
 .region-header #block-user-login div.description {
   font-size: 0.916em;
   margin: 0;
 }
-.region-header #block-user-login div.item-list {
+.region-header #block-user-login ul {
   clear: both;
 }
 .region-header #block-user-login div.description {
   display: inline;
 }
-.region-header #block-user-login .item-list ul {
+.region-header #block-user-login ul {
   padding: 0;
   line-height: 1;
 }
-.region-header #block-user-login .item-list li {
+.region-header #block-user-login li {
   list-style: none;
   float: left; /* LTR */
   padding: 3px 0 1px;
 }
-.region-header #block-user-login .item-list li:last-child {
+.region-header #block-user-login li:last-child {
   padding-left: 0.5em; /* LTR */
 }
-[dir="rtl"] .region-header #block-user-login .item-list li:last-child {
+[dir="rtl"] .region-header #block-user-login li:last-child {
   padding-left: 0;
   padding-right: 0.5em;
 }
@@ -559,7 +559,7 @@ h1.site-name {
 [dir="rtl"] .site-branding-text,
 [dir="rtl"] .region-header .block,
 [dir="rtl"] .region-header #block-user-login .form-item,
-[dir="rtl"] .region-header #block-user-login .item-list li {
+[dir="rtl"] .region-header #block-user-login li {
   float: right;
 }
 
diff --git a/core/themes/bartik/templates/field--taxonomy-term-reference.html.twig b/core/themes/bartik/templates/field--taxonomy-term-reference.html.twig
index f1289ee..4c579ee 100644
--- a/core/themes/bartik/templates/field--taxonomy-term-reference.html.twig
+++ b/core/themes/bartik/templates/field--taxonomy-term-reference.html.twig
@@ -9,21 +9,20 @@
  * - title_attributes: HTML attributes for the label.
  * - label: The label for the field.
  * - content_attributes: HTML attributes for the content.
- * - items: List of all the field items. Each item contains:
- *   - attributes: List of HTML attributes for each item.
- *   - content: The field item's content.
+ * - items: List of all the field items.
+ * - item_attributes: List of HTML attributes for each item.
  *
  * @see template_preprocess_field()
  * @see bartik_preprocess_field()
  */
 #}
-<div{{ attributes.addClass('clearfix') }}>
+<div class="{{ attributes.class }} clearfix"{{ attributes|without('class') }}>
   {% if not label_hidden %}
     <h3{{ title_attributes }}>{{ label }}: </h3>
   {% endif %}
-  <ul{{ content_attributes.addClass('links', 'field-items') }}>
-    {% for item in items %}
-      <li{{ item.attributes }}>{{ item.content }}</li>
+  <ul class="links field-items {{ content_attributes.class }}"{{ content_attributes|without('class') }}>
+    {% for delta, item in items %}
+      <li class="taxonomy-term-reference-{{ delta }}"{{ item_attributes[delta] }}>{{ item }}</li>
     {% endfor %}
   </ul>
 </div>
diff --git a/core/themes/seven/css/components/menus-and-lists.css b/core/themes/seven/css/components/menus-and-lists.css
index bd2d908..c68808b 100644
--- a/core/themes/seven/css/components/menus-and-lists.css
+++ b/core/themes/seven/css/components/menus-and-lists.css
@@ -1,15 +1,7 @@
 /**
  * Menus and lists.
  */
-.item-list ul {
-  list-style-type: disc;
-  list-style-image: none;
-  margin: 0.25em 0 0.25em 1.5em; /* LTR */
-}
-[dir="rtl"] .item-list ul {
-  margin: 0.25em 1.5em 0.25em 0;
-}
-.item-list ul li,
+li,
 li.leaf,
 ul.menu li {
   list-style-type: disc;
@@ -18,13 +10,11 @@ ul.menu li {
 ul.menu li {
   margin: 0;
 }
-.item-list ul li.collapsed,
-ul.menu li.collapsed {
+li.collapsed {
   list-style-image: url(../../../../misc/menu-collapsed.png);
   list-style-type: disc;
 }
-.item-list ul li.expanded,
-ul.menu li.expanded {
+li.expanded {
   list-style-image: url(../../../../misc/menu-expanded.png);
   list-style-type: circle;
 }
diff --git a/core/themes/seven/css/components/tables.css b/core/themes/seven/css/components/tables.css
index 8242d85..14e1c92 100644
--- a/core/themes/seven/css/components/tables.css
+++ b/core/themes/seven/css/components/tables.css
@@ -93,7 +93,7 @@ th.active > a:focus:after,
 th.active > a:hover:after {
   border-bottom-color: #008ee6;
 }
-td .item-list ul {
+td ul {
   margin: 0;
 }
 td.active {
diff --git a/core/themes/seven/css/components/views-ui.css b/core/themes/seven/css/components/views-ui.css
index ed33366..d6a159f 100644
--- a/core/themes/seven/css/components/views-ui.css
+++ b/core/themes/seven/css/components/views-ui.css
@@ -93,8 +93,8 @@ details.fieldset-no-legend {
 
 /* @group Lists */
 
-.views-admin ul.secondary,
-.views-admin .item-list ul {
+.views-admin ul,
+.views-admin ul.secondary {
   margin: 0;
   padding: 0;
 }
