diff --git a/core/config/schema/core.entity.schema.yml b/core/config/schema/core.entity.schema.yml
index aab3c1a..3a0fe8e 100644
--- a/core/config/schema/core.entity.schema.yml
+++ b/core/config/schema/core.entity.schema.yml
@@ -192,6 +192,9 @@ field.widget.settings.email_default:
     placeholder:
       type: label
       label: 'Placeholder'
+    size:
+      type: integer
+      label: 'Size of email field'
 
 field.widget.settings.datetime_timestamp:
   type: mapping
diff --git a/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php b/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php
index f9a2727..af14f6e 100644
--- a/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php
+++ b/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php
@@ -25,7 +25,6 @@
 use Drupal\Core\Field\FieldStorageDefinitionInterface;
 use Drupal\Core\Language\LanguageInterface;
 use Drupal\field\FieldStorageConfigInterface;
-use Drupal\Core\Language\LanguageManagerInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
@@ -123,13 +122,6 @@ class SqlContentEntityStorage extends ContentEntityStorageBase implements SqlEnt
   protected $cacheBackend;
 
   /**
-   * The language manager.
-   *
-   * @var \Drupal\Core\Language\LanguageManagerInterface
-   */
-  protected $languageManager;
-
-  /**
    * {@inheritdoc}
    */
   public static function createInstance(ContainerInterface $container, EntityTypeInterface $entity_type) {
@@ -137,8 +129,7 @@ public static function createInstance(ContainerInterface $container, EntityTypeI
       $entity_type,
       $container->get('database'),
       $container->get('entity.manager'),
-      $container->get('cache.entity'),
-      $container->get('language_manager')
+      $container->get('cache.entity')
     );
   }
 
@@ -164,15 +155,12 @@ public function getFieldStorageDefinitions() {
    *   The entity manager.
    * @param \Drupal\Core\Cache\CacheBackendInterface $cache_backend
    *   The cache backend to be used.
-   * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager
-   *   The language manager.
    */
-  public function __construct(EntityTypeInterface $entity_type, Connection $database, EntityManagerInterface $entity_manager, CacheBackendInterface $cache, LanguageManagerInterface $language_manager) {
+  public function __construct(EntityTypeInterface $entity_type, Connection $database, EntityManagerInterface $entity_manager, CacheBackendInterface $cache) {
     parent::__construct($entity_type);
     $this->database = $database;
     $this->entityManager = $entity_manager;
     $this->cacheBackend = $cache;
-    $this->languageManager = $language_manager;
     $this->initTableLayout();
   }
 
@@ -1263,7 +1251,7 @@ protected function loadFieldItems(array $entities) {
     }
 
     // Load field data.
-    $langcodes = array_keys($this->languageManager->getLanguages(LanguageInterface::STATE_ALL));
+    $langcodes = array_keys(language_list(LanguageInterface::STATE_ALL));
     foreach ($storage_definitions as $field_name => $storage_definition) {
       $table = $load_current ? $table_mapping->getDedicatedDataTableName($storage_definition) : $table_mapping->getDedicatedRevisionTableName($storage_definition);
 
diff --git a/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/EmailDefaultWidget.php b/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/EmailDefaultWidget.php
index ce60ebc..c82257f 100644
--- a/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/EmailDefaultWidget.php
+++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/EmailDefaultWidget.php
@@ -10,6 +10,7 @@
 use Drupal\Core\Field\FieldItemListInterface;
 use Drupal\Core\Field\WidgetBase;
 use Drupal\Core\Form\FormStateInterface;
+use Drupal\Core\Render\Element\Email;
 
 /**
  * Plugin implementation of the 'email_default' widget.
@@ -29,6 +30,7 @@ class EmailDefaultWidget extends WidgetBase {
    */
   public static function defaultSettings() {
     return array(
+      'size' => 60,
       'placeholder' => '',
     ) + parent::defaultSettings();
   }
@@ -71,6 +73,8 @@ public function formElement(FieldItemListInterface $items, $delta, array $elemen
       '#type' => 'email',
       '#default_value' => isset($items[$delta]->value) ? $items[$delta]->value : NULL,
       '#placeholder' => $this->getSetting('placeholder'),
+      '#size' => $this->getSetting('size'),
+      '#maxlength' => Email::EMAIL_MAX_LENGTH,
     );
     return $element;
   }
diff --git a/core/lib/Drupal/Core/Session/UserSession.php b/core/lib/Drupal/Core/Session/UserSession.php
index 92629d5..1a23a04 100644
--- a/core/lib/Drupal/Core/Session/UserSession.php
+++ b/core/lib/Drupal/Core/Session/UserSession.php
@@ -183,7 +183,7 @@ public function isAnonymous() {
    * {@inheritdoc}
    */
   function getPreferredLangcode($fallback_to_default = TRUE) {
-    $language_list = \Drupal::languageManager()->getLanguages();
+    $language_list = language_list();
     if (!empty($this->preferred_langcode) && isset($language_list[$this->preferred_langcode])) {
       return $language_list[$this->preferred_langcode]->getId();
     }
@@ -196,7 +196,7 @@ function getPreferredLangcode($fallback_to_default = TRUE) {
    * {@inheritdoc}
    */
   function getPreferredAdminLangcode($fallback_to_default = TRUE) {
-    $language_list = \Drupal::languageManager()->getLanguages();
+    $language_list = language_list();
     if (!empty($this->preferred_admin_langcode) && isset($language_list[$this->preferred_admin_langcode])) {
       return $language_list[$this->preferred_admin_langcode]->getId();
     }
diff --git a/core/lib/Drupal/Core/Validation/Plugin/Validation/Constraint/PrimitiveTypeConstraintValidator.php b/core/lib/Drupal/Core/Validation/Plugin/Validation/Constraint/PrimitiveTypeConstraintValidator.php
index fe3a1fb..0f57e32 100644
--- a/core/lib/Drupal/Core/Validation/Plugin/Validation/Constraint/PrimitiveTypeConstraintValidator.php
+++ b/core/lib/Drupal/Core/Validation/Plugin/Validation/Constraint/PrimitiveTypeConstraintValidator.php
@@ -49,7 +49,7 @@ public function validate($value, Constraint $constraint) {
     if ($typed_data instanceof StringInterface && !is_scalar($value)) {
       $valid = FALSE;
     }
-    if ($typed_data instanceof UriInterface && filter_var($value, FILTER_VALIDATE_URL) === FALSE) {
+    if ($typed_data instanceof UriInterface && $value !== '' && filter_var($value, FILTER_VALIDATE_URL) === FALSE) {
       $valid = FALSE;
     }
     // @todo: Move those to separate constraint validators.
diff --git a/core/modules/comment/comment.info.yml b/core/modules/comment/comment.info.yml
index ea529a4..d81583e 100644
--- a/core/modules/comment/comment.info.yml
+++ b/core/modules/comment/comment.info.yml
@@ -5,5 +5,6 @@ package: Core
 version: VERSION
 core: 8.x
 dependencies:
+  - entity_reference
   - text
 configure: comment.admin
diff --git a/core/modules/comment/comment.services.yml b/core/modules/comment/comment.services.yml
index 239cdb2..6eef4d6 100644
--- a/core/modules/comment/comment.services.yml
+++ b/core/modules/comment/comment.services.yml
@@ -16,7 +16,7 @@ services:
 
   comment.post_render_cache:
     class: Drupal\comment\CommentPostRenderCache
-    arguments: ['@entity.manager', '@entity.form_builder']
+    arguments: ['@entity.manager', '@entity.form_builder', '@current_user']
 
   comment.link_builder:
     class: Drupal\comment\CommentLinkBuilder
diff --git a/core/modules/comment/src/CommentAccessControlHandler.php b/core/modules/comment/src/CommentAccessControlHandler.php
index 7d6504c..1706c85 100644
--- a/core/modules/comment/src/CommentAccessControlHandler.php
+++ b/core/modules/comment/src/CommentAccessControlHandler.php
@@ -100,7 +100,7 @@ protected function checkFieldAccess($operation, FieldDefinitionInterface $field_
         /** @var \Drupal\comment\CommentInterface $entity */
         $entity = $items->getEntity();
         $commented_entity = $entity->getCommentedEntity();
-        $anonymous_contact = $commented_entity->get($entity->getFieldName())->getFieldDefinition()->getSetting('anonymous_contact');
+        $anonymous_contact = $commented_entity->get($entity->getFieldName())->getFieldDefinition()->getSetting('anonymous');
         $admin_access = AccessResult::allowedIfHasPermission($account, 'administer comments');
         $anonymous_access = AccessResult::allowedIf($entity->isNew() && $account->isAnonymous() && $anonymous_contact != COMMENT_ANONYMOUS_MAYNOT_CONTACT && $account->hasPermission('post comments'))
           ->cachePerRole()
diff --git a/core/modules/comment/src/CommentForm.php b/core/modules/comment/src/CommentForm.php
index fbb7442..a41c1e9 100644
--- a/core/modules/comment/src/CommentForm.php
+++ b/core/modules/comment/src/CommentForm.php
@@ -8,12 +8,13 @@
 namespace Drupal\comment;
 
 use Drupal\comment\Plugin\Field\FieldType\CommentItemInterface;
+use Drupal\Component\Utility\Html;
 use Drupal\Component\Utility\String;
 use Drupal\Component\Utility\Unicode;
-use Drupal\Core\Datetime\DrupalDateTime;
 use Drupal\Core\Entity\ContentEntityForm;
 use Drupal\Core\Entity\EntityManagerInterface;
 use Drupal\Core\Form\FormStateInterface;
+use Drupal\Core\Language\Language;
 use Drupal\Core\Language\LanguageInterface;
 use Drupal\Core\Session\AccountInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
@@ -56,31 +57,17 @@ public function __construct(EntityManagerInterface $entity_manager, AccountInter
   /**
    * {@inheritdoc}
    */
-  protected function init(FormStateInterface $form_state) {
-    $comment = $this->entity;
-
-    // Make the comment inherit the current content language unless specifically
-    // set.
-    if ($comment->isNew()) {
-      $language_content = \Drupal::languageManager()->getCurrentLanguage(LanguageInterface::TYPE_CONTENT);
-      $comment->langcode->value = $language_content->getId();
-    }
-
-    parent::init($form_state);
-  }
-
-  /**
-   * Overrides Drupal\Core\Entity\EntityForm::form().
-   */
   public function form(array $form, FormStateInterface $form_state) {
     /** @var \Drupal\comment\CommentInterface $comment */
     $comment = $this->entity;
+    $form = parent::form($form, $form_state, $comment);
+
     $entity = $this->entityManager->getStorage($comment->getCommentedEntityTypeId())->load($comment->getCommentedEntityId());
     $field_name = $comment->getFieldName();
     $field_definition = $this->entityManager->getFieldDefinitions($entity->getEntityTypeId(), $entity->bundle())[$comment->getFieldName()];
 
     // Use #comment-form as unique jump target, regardless of entity type.
-    $form['#id'] = drupal_html_id('comment_form');
+    $form['#id'] = Html::getUniqueId('comment_form');
     $form['#theme'] = array('comment_form__' . $entity->getEntityTypeId() . '__' . $entity->bundle() . '__' . $field_name, 'comment_form');
 
     $anonymous_contact = $field_definition->getSetting('anonymous');
@@ -113,7 +100,6 @@ public function form(array $form, FormStateInterface $form_state) {
 
     // Prepare default values for form elements.
     if ($is_admin) {
-      $author = $comment->getAuthorName();
       $status = $comment->getStatus();
       if (empty($comment_preview)) {
         $form['#title'] = $this->t('Edit comment %title', array(
@@ -122,73 +108,25 @@ public function form(array $form, FormStateInterface $form_state) {
       }
     }
     else {
-      if ($this->currentUser->isAuthenticated()) {
-        $author = $this->currentUser->getUsername();
-      }
-      else {
-        $author = ($comment->getAuthorName() ? $comment->getAuthorName() : '');
-      }
       $status = ($this->currentUser->hasPermission('skip comment approval') ? CommentInterface::PUBLISHED : CommentInterface::NOT_PUBLISHED);
     }
 
-    $date = '';
-    if ($comment->id()) {
-      $date = !empty($comment->date) ? $comment->date : DrupalDateTime::createFromTimestamp($comment->getCreatedTime());
-    }
-
     // Add the author name field depending on the current user.
-    $form['author']['name'] = array(
-      '#type' => 'textfield',
-      '#title' => $this->t('Your name'),
-      '#default_value' => $author,
-      '#required' => ($this->currentUser->isAnonymous() && $anonymous_contact == COMMENT_ANONYMOUS_MUST_CONTACT),
-      '#maxlength' => 60,
-      '#size' => 30,
-    );
-    if ($is_admin) {
-      $form['author']['name']['#title'] = $this->t('Authored by');
-      $form['author']['name']['#description'] = $this->t('Leave blank for %anonymous.', array('%anonymous' => $this->config('user.settings')->get('anonymous')));
-      $form['author']['name']['#autocomplete_route_name'] = 'user.autocomplete';
-    }
-    elseif ($this->currentUser->isAuthenticated()) {
-      $form['author']['name']['#type'] = 'item';
-      $form['author']['name']['#value'] = $form['author']['name']['#default_value'];
-      $form['author']['name']['#theme'] = 'username';
-      $form['author']['name']['#account'] = $this->currentUser;
-    }
-    elseif($this->currentUser->isAnonymous()) {
-      $form['author']['name']['#attributes']['data-drupal-default-value'] = $this->config('user.settings')->get('anonymous');
+    $form['uid']['widget'][0]['value']['#required'] = ($this->currentUser->isAnonymous() && $anonymous_contact == COMMENT_ANONYMOUS_MUST_CONTACT);
+    if ($this->currentUser->isAuthenticated()) {
+      $form['uid']['widget'][0]['value']['#type'] = 'item';
+      $form['uid']['widget'][0]['value']['#value'] = $this->currentUser->id();
+      $form['uid']['widget'][0]['value']['#theme'] = 'username';
+      $form['uid']['widget'][0]['value']['#account'] = $this->currentUser;
     }
 
     // Add author email and homepage fields depending on the current user.
-    $form['author']['mail'] = array(
-      '#type' => 'email',
-      '#title' => $this->t('Email'),
-      '#default_value' => $comment->getAuthorEmail(),
-      '#required' => ($this->currentUser->isAnonymous() && $anonymous_contact == COMMENT_ANONYMOUS_MUST_CONTACT),
-      '#maxlength' => 64,
-      '#size' => 30,
-      '#description' => $this->t('The content of this field is kept private and will not be shown publicly.'),
-      '#access' => $is_admin || ($this->currentUser->isAnonymous() && $anonymous_contact != COMMENT_ANONYMOUS_MAYNOT_CONTACT),
-    );
+    $form['mail']['widget'][0]['value']['#required'] = ($this->currentUser->isAnonymous() && $anonymous_contact == COMMENT_ANONYMOUS_MUST_CONTACT);
 
-    $form['author']['homepage'] = array(
-      '#type' => 'url',
-      '#title' => $this->t('Homepage'),
-      '#default_value' => $comment->getHomepage(),
-      '#maxlength' => 255,
-      '#size' => 30,
-      '#access' => $is_admin || ($this->currentUser->isAnonymous() && $anonymous_contact != COMMENT_ANONYMOUS_MAYNOT_CONTACT),
-    );
-
-    // Add administrative comment publishing options.
-    $form['author']['date'] = array(
-      '#type' => 'datetime',
-      '#title' => $this->t('Authored on'),
-      '#default_value' => $date,
-      '#size' => 20,
-      '#access' => $is_admin,
-    );
+    $form['uid']['#group'] = 'author';
+    $form['mail']['#group'] = 'author';
+    $form['homepage']['#group'] = 'author';
+    $form['created']['#group'] = 'author';
 
     $form['author']['status'] = array(
       '#type' => 'radios',
@@ -198,20 +136,14 @@ public function form(array $form, FormStateInterface $form_state) {
         CommentInterface::PUBLISHED => $this->t('Published'),
         CommentInterface::NOT_PUBLISHED => $this->t('Not published'),
       ),
-      '#access' => $is_admin,
+      '#access' => $comment->status->access('edit'),
     );
 
-    // Used for conditional validation of author fields.
-    $form['is_anonymous'] = array(
-      '#type' => 'value',
-      '#value' => ($comment->id() ? !$comment->getOwnerId() : $this->currentUser->isAnonymous()),
-    );
-
-    return parent::form($form, $form_state, $comment);
+    return $form;
   }
 
   /**
-   * Overrides Drupal\Core\Entity\EntityForm::actions().
+   * {@inheritdoc}
    */
   protected function actions(array $form, FormStateInterface $form_state) {
     $element = parent::actions($form, $form_state);
@@ -243,55 +175,6 @@ protected function actions(array $form, FormStateInterface $form_state) {
   }
 
   /**
-   * Overrides Drupal\Core\Entity\EntityForm::validate().
-   */
-  public function validate(array $form, FormStateInterface $form_state) {
-    parent::validate($form, $form_state);
-    $entity = $this->entity;
-
-    if (!$entity->isNew()) {
-      // Verify the name in case it is being changed from being anonymous.
-      $accounts = $this->entityManager->getStorage('user')->loadByProperties(array('name' => $form_state->getValue('name')));
-      $account = reset($accounts);
-      $form_state->setValue('uid', $account ? $account->id() : 0);
-
-      $date = $form_state->getValue('date');
-      if ($date instanceOf DrupalDateTime && $date->hasErrors()) {
-        $form_state->setErrorByName('date', $this->t('You have to specify a valid date.'));
-      }
-      if ($form_state->getValue('name') && !$form_state->getValue('is_anonymous') && !$account) {
-        $form_state->setErrorByName('name', $this->t('You have to specify a valid author.'));
-      }
-    }
-    elseif ($form_state->getValue('is_anonymous')) {
-      // Validate anonymous comment author fields (if given). If the (original)
-      // author of this comment was an anonymous user, verify that no registered
-      // user with this name exists.
-      if ($form_state->getValue('name')) {
-        $accounts = $this->entityManager->getStorage('user')->loadByProperties(array('name' => $form_state->getValue('name')));
-        if (!empty($accounts)) {
-          $form_state->setErrorByName('name', $this->t('The name you used belongs to a registered user.'));
-        }
-      }
-    }
-  }
-
-  /**
-   * Overrides EntityForm::buildEntity().
-   */
-  public function buildEntity(array $form, FormStateInterface $form_state) {
-    $comment = parent::buildEntity($form, $form_state);
-    if (!$form_state->isValueEmpty('date') && $form_state->getValue('date') instanceOf DrupalDateTime) {
-      $comment->setCreatedTime($form_state->getValue('date')->getTimestamp());
-    }
-    else {
-      $comment->setCreatedTime(REQUEST_TIME);
-    }
-    $comment->changed->value = REQUEST_TIME;
-    return $comment;
-  }
-
-  /**
    * {@inheritdoc}
    */
   public function submitForm(array &$form, FormStateInterface $form_state) {
@@ -302,9 +185,6 @@ public function submitForm(array &$form, FormStateInterface $form_state) {
     // @todo Too fragile. Should be prepared and stored in comment_form()
     // already.
     $author_name = $comment->getAuthorName();
-    if (!$comment->is_anonymous && !empty($author_name) && ($account = user_load_by_name($author_name))) {
-      $comment->setOwner($account);
-    }
     // If the comment was posted by an anonymous user and no author name was
     // required, use "Anonymous" by default.
     if ($comment->is_anonymous && (!isset($author_name) || $author_name === '')) {
@@ -346,7 +226,7 @@ public function preview(array &$form, FormStateInterface $form_state) {
   }
 
   /**
-   * Overrides Drupal\Core\Entity\EntityForm::save().
+   * {@inheritdoc}
    */
   public function save(array $form, FormStateInterface $form_state) {
     $comment = $this->entity;
diff --git a/core/modules/comment/src/CommentPostRenderCache.php b/core/modules/comment/src/CommentPostRenderCache.php
index ce64d6d..52198ad 100644
--- a/core/modules/comment/src/CommentPostRenderCache.php
+++ b/core/modules/comment/src/CommentPostRenderCache.php
@@ -9,6 +9,7 @@
 
 use Drupal\Core\Entity\EntityFormBuilderInterface;
 use Drupal\Core\Entity\EntityManagerInterface;
+use Drupal\Core\Session\AccountInterface;
 use Drupal\field\Entity\FieldStorageConfig;
 
 /**
@@ -31,16 +32,26 @@ class CommentPostRenderCache {
   protected $entityFormBuilder;
 
   /**
+   * The current user.
+   *
+   * @var \Drupal\Core\Session\AccountInterface
+   */
+  protected $currentUser;
+
+  /**
    * Constructs a new CommentPostRenderCache object.
    *
    * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager
    *   The entity manager service.
    * @param \Drupal\Core\Entity\EntityFormBuilderInterface $entity_form_builder
    *   The entity form builder service.
+   * @param \Drupal\Core\Session\AccountInterface $current_user
+   *   The current user.
    */
-  public function __construct(EntityManagerInterface $entity_manager, EntityFormBuilderInterface $entity_form_builder) {
+  public function __construct(EntityManagerInterface $entity_manager, EntityFormBuilderInterface $entity_form_builder, AccountInterface $current_user) {
     $this->entityManager = $entity_manager;
     $this->entityFormBuilder = $entity_form_builder;
+    $this->currentUser = $current_user;
   }
 
   /**
@@ -67,6 +78,7 @@ public function renderForm(array $element, array $context) {
       'field_name' => $field_name,
       'comment_type' => $field_storage->getSetting('bundle'),
       'pid' => NULL,
+      'uid' => $this->currentUser->id(),
     );
     $comment = $this->entityManager->getStorage('comment')->create($values);
     $form = $this->entityFormBuilder->getForm($comment);
diff --git a/core/modules/comment/src/CommentStorage.php b/core/modules/comment/src/CommentStorage.php
index 7e3e867..2cbaed7 100644
--- a/core/modules/comment/src/CommentStorage.php
+++ b/core/modules/comment/src/CommentStorage.php
@@ -15,7 +15,6 @@
 use Drupal\Core\Entity\FieldableEntityInterface;
 use Drupal\Core\Entity\Sql\SqlContentEntityStorage;
 use Drupal\Core\Session\AccountInterface;
-use Drupal\Core\Language\LanguageManagerInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
@@ -46,11 +45,9 @@ class CommentStorage extends SqlContentEntityStorage implements CommentStorageIn
    *   Cache backend instance to use.
    * @param \Drupal\Core\Session\AccountInterface $current_user
    *   The current user.
-   * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager
-   *   The language manager.
    */
-  public function __construct(EntityTypeInterface $entity_info, Connection $database, EntityManagerInterface $entity_manager, AccountInterface $current_user, CacheBackendInterface $cache, LanguageManagerInterface $language_manager) {
-    parent::__construct($entity_info, $database, $entity_manager, $cache, $language_manager);
+  public function __construct(EntityTypeInterface $entity_info, Connection $database, EntityManagerInterface $entity_manager, AccountInterface $current_user, CacheBackendInterface $cache) {
+    parent::__construct($entity_info, $database, $entity_manager, $cache);
     $this->currentUser = $current_user;
   }
 
@@ -63,8 +60,7 @@ public static function createInstance(ContainerInterface $container, EntityTypeI
       $container->get('database'),
       $container->get('entity.manager'),
       $container->get('current_user'),
-      $container->get('cache.entity'),
-      $container->get('language_manager')
+      $container->get('cache.entity')
     );
   }
 
diff --git a/core/modules/comment/src/Controller/CommentController.php b/core/modules/comment/src/Controller/CommentController.php
index 4af3f05..c26a112 100644
--- a/core/modules/comment/src/Controller/CommentController.php
+++ b/core/modules/comment/src/Controller/CommentController.php
@@ -265,6 +265,7 @@ public function getReplyForm(Request $request, EntityInterface $entity, $field_n
       'pid' => $pid,
       'entity_type' => $entity->getEntityTypeId(),
       'field_name' => $field_name,
+      'uid' => $this->currentUser()->id(),
     ));
     $build['comment_form'] = $this->entityFormBuilder()->getForm($comment);
 
diff --git a/core/modules/comment/src/Entity/Comment.php b/core/modules/comment/src/Entity/Comment.php
index 828c1b6..a359dc2 100644
--- a/core/modules/comment/src/Entity/Comment.php
+++ b/core/modules/comment/src/Entity/Comment.php
@@ -248,7 +248,19 @@ public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
       ->setDescription(t('The user ID of the comment author.'))
       ->setTranslatable(TRUE)
       ->setSetting('target_type', 'user')
-      ->setDefaultValue(0);
+      ->setSetting('handler', 'default')
+      ->setDefaultValueCallback('Drupal\comment\Entity\Comment::getCurrentUserId')
+      ->setDisplayOptions('form', array(
+        'type' => 'entity_reference_autocomplete',
+        'weight' => 5,
+        'settings' => array(
+          'match_operator' => 'CONTAINS',
+          'size' => '60',
+          'autocomplete_type' => 'tags',
+          'placeholder' => '',
+        ),
+      ))
+      ->setDisplayConfigurable('form', TRUE);
 
     $fields['name'] = BaseFieldDefinition::create('string')
       ->setLabel(t('Name'))
@@ -256,20 +268,39 @@ public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
       ->setTranslatable(TRUE)
       ->setSetting('max_length', 60)
       ->setDefaultValue('')
-      ->addConstraint('CommentName', array());
+      ->addConstraint('CommentName', array())
+      ->setDisplayOptions('form', array(
+        'type' => 'string_textfield',
+        'weight' => -15,
+        'settings' => array(
+          'size' => 30,
+        ),
+      ))
+      ->setDisplayConfigurable('form', TRUE);
 
     $fields['mail'] = BaseFieldDefinition::create('email')
       ->setLabel(t('Email'))
-      ->setDescription(t("The comment author's email address."))
-      ->setTranslatable(TRUE);
+      ->setDescription(t('The content of this field is kept private and will not be shown publicly.'))
+      ->setTranslatable(TRUE)
+      ->setDisplayOptions('form', array(
+        'type' => 'email_default',
+        'weight' => -10,
+        'settings' => array(
+          'size' => 30,
+        ),
+      ));
 
     $fields['homepage'] = BaseFieldDefinition::create('uri')
       ->setLabel(t('Homepage'))
-      ->setDescription(t("The comment author's home page address."))
       ->setTranslatable(TRUE)
       // URIs are not length limited by RFC 2616, but we can only store 255
       // characters in our comment DB schema.
-      ->setSetting('max_length', 255);
+      ->setSetting('max_length', 255)
+      ->setDisplayOptions('form', array(
+        'type' => 'uri',
+        'size' => 30,
+        'weight' => -5,
+      ));
 
     $fields['hostname'] = BaseFieldDefinition::create('string')
       ->setLabel(t('Hostname'))
@@ -278,9 +309,14 @@ public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
       ->setSetting('max_length', 128);
 
     $fields['created'] = BaseFieldDefinition::create('created')
-      ->setLabel(t('Created'))
+      ->setLabel(t('Authored on'))
       ->setDescription(t('The time that the comment was created.'))
-      ->setTranslatable(TRUE);
+      ->setTranslatable(TRUE)
+      ->setDisplayOptions('form', array(
+        'type' => 'datetime_timestamp',
+        'weight' => 10,
+      ))
+      ->setDisplayConfigurable('form', TRUE);
 
     $fields['changed'] = BaseFieldDefinition::create('changed')
       ->setLabel(t('Changed'))
@@ -329,6 +365,18 @@ public static function bundleFieldDefinitions(EntityTypeInterface $entity_type,
   }
 
   /**
+   * Default value callback for 'uid' base field definition.
+   *
+   * @see ::baseFieldDefinitions()
+   *
+   * @return array
+   *   An array of default values.
+   */
+  public static function getCurrentUserId() {
+    return array(\Drupal::currentUser()->id());
+  }
+
+  /**
    * {@inheritdoc}
    */
   public function hasParentComment() {
diff --git a/core/modules/comment/src/Plugin/Field/FieldFormatter/CommentDefaultFormatter.php b/core/modules/comment/src/Plugin/Field/FieldFormatter/CommentDefaultFormatter.php
index 02c3107..e657ce3 100644
--- a/core/modules/comment/src/Plugin/Field/FieldFormatter/CommentDefaultFormatter.php
+++ b/core/modules/comment/src/Plugin/Field/FieldFormatter/CommentDefaultFormatter.php
@@ -192,6 +192,7 @@ public function viewElements(FieldItemListInterface $items) {
               'field_name' => $field_name,
               'comment_type' => $this->getFieldSetting('comment_type'),
               'pid' => NULL,
+              'uid' => $this->currentUser->id(),
             ));
             $output['comment_form'] = $this->entityFormBuilder->getForm($comment);
           }
diff --git a/core/modules/comment/src/Tests/CommentAnonymousTest.php b/core/modules/comment/src/Tests/CommentAnonymousTest.php
index 19fc6fa..8868a12 100644
--- a/core/modules/comment/src/Tests/CommentAnonymousTest.php
+++ b/core/modules/comment/src/Tests/CommentAnonymousTest.php
@@ -61,8 +61,8 @@ function testAnonymous() {
 
     // Ensure anonymous users cannot post in the name of registered users.
     $edit = array(
-      'name' => $this->adminUser->getUsername(),
-      'mail' => $this->randomMachineName() . '@example.com',
+      'name[0][value]' => $this->adminUser->getUsername(),
+      'mail[0][value]' => $this->randomMachineName() . '@example.com',
       'subject[0][value]' => $this->randomMachineName(),
       'comment_body[0][value]' => $this->randomMachineName(),
     );
@@ -86,7 +86,7 @@ function testAnonymous() {
     // Post comment with contact info (required).
     $author_name = $this->randomMachineName();
     $author_mail = $this->randomMachineName() . '@example.com';
-    $anonymous_comment3 = $this->postComment($this->node, $this->randomMachineName(), $this->randomMachineName(), array('name' => $author_name, 'mail' => $author_mail));
+    $anonymous_comment3 = $this->postComment($this->node, $this->randomMachineName(), $this->randomMachineName(), array('name[0][value]' => $author_name, 'mail[0][value]' => $author_mail));
     $this->assertTrue($this->commentExists($anonymous_comment3), 'Anonymous comment with contact info (required) found.');
 
     // Make sure the user data appears correctly when editing the comment.
diff --git a/core/modules/comment/src/Tests/CommentFieldAccessTest.php b/core/modules/comment/src/Tests/CommentFieldAccessTest.php
index 2d895e3..916c559 100644
--- a/core/modules/comment/src/Tests/CommentFieldAccessTest.php
+++ b/core/modules/comment/src/Tests/CommentFieldAccessTest.php
@@ -138,6 +138,10 @@ public function testAccessToAdministrativeFields() {
     $instance->settings['anonymous'] = COMMENT_ANONYMOUS_MAYNOT_CONTACT;
     $instance->save();
 
+    $instance = FieldConfig::loadByName('entity_test', 'entity_test', 'comment');
+    $instance->settings['anonymous'] = COMMENT_ANONYMOUS_MAY_CONTACT;
+    $instance->save();
+
     // Create three "Comments". One is owned by our edit-enabled user.
     $comment1 = Comment::create([
       'entity_type' => 'entity_test',
diff --git a/core/modules/comment/src/Tests/CommentInterfaceTest.php b/core/modules/comment/src/Tests/CommentInterfaceTest.php
index 98eee30..dfcc114 100644
--- a/core/modules/comment/src/Tests/CommentInterfaceTest.php
+++ b/core/modules/comment/src/Tests/CommentInterfaceTest.php
@@ -75,19 +75,19 @@ function testCommentInterface() {
     )));
 
     // Test changing the comment author to "Anonymous".
-    $comment = $this->postComment(NULL, $comment->comment_body->value, $comment->getSubject(), array('name' => ''));
+    $comment = $this->postComment(NULL, $comment->comment_body->value, $comment->getSubject(), array('name[0][value]' => ''));
     $this->assertTrue($comment->getAuthorName() == t('Anonymous') && $comment->getOwnerId() == 0, 'Comment author successfully changed to anonymous.');
 
     // Test changing the comment author to an unverified user.
     $random_name = $this->randomMachineName();
     $this->drupalGet('comment/' . $comment->id() . '/edit');
-    $comment = $this->postComment(NULL, $comment->comment_body->value, $comment->getSubject(), array('name' => $random_name));
+    $comment = $this->postComment(NULL, $comment->comment_body->value, $comment->getSubject(), array('name[0][value]' => $random_name));
     $this->drupalGet('node/' . $this->node->id());
     $this->assertText($random_name . ' (' . t('not verified') . ')', 'Comment author successfully changed to an unverified user.');
 
     // Test changing the comment author to a verified user.
     $this->drupalGet('comment/' . $comment->id() . '/edit');
-    $comment = $this->postComment(NULL, $comment->comment_body->value, $comment->getSubject(), array('name' => $this->webUser->getUsername()));
+    $comment = $this->postComment(NULL, $comment->comment_body->value, $comment->getSubject(), array('name[0][value]' => $this->webUser->getUsername()));
     $this->assertTrue($comment->getAuthorName() == $this->webUser->getUsername() && $comment->getOwnerId() == $this->webUser->id(), 'Comment author successfully changed to a registered user.');
 
     $this->drupalLogout();
diff --git a/core/modules/comment/src/Tests/CommentPreviewTest.php b/core/modules/comment/src/Tests/CommentPreviewTest.php
index ae65f88..315f7a0 100644
--- a/core/modules/comment/src/Tests/CommentPreviewTest.php
+++ b/core/modules/comment/src/Tests/CommentPreviewTest.php
@@ -85,9 +85,9 @@ function testCommentEditPreviewSave() {
     $date = new DrupalDateTime('2008-03-02 17:23');
     $edit['subject[0][value]'] = $this->randomMachineName(8);
     $edit['comment_body[0][value]'] = $this->randomMachineName(16);
-    $edit['name'] = $web_user->getUsername();
-    $edit['date[date]'] = $date->format('Y-m-d');
-    $edit['date[time]'] = $date->format('H:i:s');
+    $edit['name[0][value]'] = $web_user->getUsername();
+    $edit['created[0][value][date]'] = $date->format('Y-m-d');
+    $edit['created[0][value][time]'] = $date->format('H:i:s');
     $raw_date = $date->getTimestamp();
     $expected_text_date = format_date($raw_date);
     $expected_form_date = $date->format('Y-m-d');
@@ -99,15 +99,15 @@ function testCommentEditPreviewSave() {
     $this->assertTitle(t('Preview comment | Drupal'), 'Page title is "Preview comment".');
     $this->assertText($edit['subject[0][value]'], 'Subject displayed.');
     $this->assertText($edit['comment_body[0][value]'], 'Comment displayed.');
-    $this->assertText($edit['name'], 'Author displayed.');
+    $this->assertText($edit['name[0][value]'], 'Author displayed.');
     $this->assertText($expected_text_date, 'Date displayed.');
 
     // Check that the subject, comment, author and date fields are displayed with the correct values.
     $this->assertFieldByName('subject[0][value]', $edit['subject[0][value]'], 'Subject field displayed.');
     $this->assertFieldByName('comment_body[0][value]', $edit['comment_body[0][value]'], 'Comment field displayed.');
-    $this->assertFieldByName('name', $edit['name'], 'Author field displayed.');
-    $this->assertFieldByName('date[date]', $edit['date[date]'], 'Date field displayed.');
-    $this->assertFieldByName('date[time]', $edit['date[time]'], 'Time field displayed.');
+    $this->assertFieldByName('name[0][value]', $edit['name[0][value]'], 'Author field displayed.');
+    $this->assertFieldByName('created[0][value][date]', $edit['created[0][value][date]'], 'Date field displayed.');
+    $this->assertFieldByName('created[0][value][time]', $edit['created[0][value][time]'], 'Time field displayed.');
 
     // Check that saving a comment produces a success message.
     $this->drupalPostForm('comment/' . $comment->id() . '/edit', $edit, t('Save'));
@@ -117,17 +117,17 @@ function testCommentEditPreviewSave() {
     $this->drupalGet('comment/' . $comment->id() . '/edit');
     $this->assertFieldByName('subject[0][value]', $edit['subject[0][value]'], 'Subject field displayed.');
     $this->assertFieldByName('comment_body[0][value]', $edit['comment_body[0][value]'], 'Comment field displayed.');
-    $this->assertFieldByName('name', $edit['name'], 'Author field displayed.');
-    $this->assertFieldByName('date[date]', $expected_form_date, 'Date field displayed.');
-    $this->assertFieldByName('date[time]', $expected_form_time, 'Time field displayed.');
+    $this->assertFieldByName('name[0][value]', $edit['name[0][value]'], 'Author field displayed.');
+    $this->assertFieldByName('created[0][value][date]', $expected_form_date, 'Date field displayed.');
+    $this->assertFieldByName('created[0][value][time]', $expected_form_time, 'Time field displayed.');
 
     // Submit the form using the displayed values.
     $displayed = array();
     $displayed['subject[0][value]'] = (string) current($this->xpath("//input[@id='edit-subject-0-value']/@value"));
     $displayed['comment_body[0][value]'] = (string) current($this->xpath("//textarea[@id='edit-comment-body-0-value']"));
-    $displayed['name'] = (string) current($this->xpath("//input[@id='edit-name']/@value"));
-    $displayed['date[date]'] = (string) current($this->xpath("//input[@id='edit-date-date']/@value"));
-    $displayed['date[time]'] = (string) current($this->xpath("//input[@id='edit-date-time']/@value"));
+    $displayed['name[0][value]'] = (string) current($this->xpath("//input[@id='edit-name-0-value']/@value"));
+    $displayed['created[0][value][date]'] = (string) current($this->xpath("//input[@id='edit-created-0-value-date']/@value"));
+    $displayed['created[0][value][time]'] = (string) current($this->xpath("//input[@id='edit-created-0-value-time']/@value"));
     $this->drupalPostForm('comment/' . $comment->id() . '/edit', $displayed, t('Save'));
 
     // Check that the saved comment is still correct.
@@ -136,7 +136,7 @@ function testCommentEditPreviewSave() {
     $comment_loaded = Comment::load($comment->id());
     $this->assertEqual($comment_loaded->getSubject(), $edit['subject[0][value]'], 'Subject loaded.');
     $this->assertEqual($comment_loaded->comment_body->value, $edit['comment_body[0][value]'], 'Comment body loaded.');
-    $this->assertEqual($comment_loaded->getAuthorName(), $edit['name'], 'Name loaded.');
+    $this->assertEqual($comment_loaded->getAuthorName(), $edit['name[0][value]'], 'Name loaded.');
     $this->assertEqual($comment_loaded->getCreatedTime(), $raw_date, 'Date loaded.');
     $this->drupalLogout();
 
diff --git a/core/modules/comment/src/Tests/CommentStatisticsTest.php b/core/modules/comment/src/Tests/CommentStatisticsTest.php
index d1894ab..3b31901 100644
--- a/core/modules/comment/src/Tests/CommentStatisticsTest.php
+++ b/core/modules/comment/src/Tests/CommentStatisticsTest.php
@@ -107,7 +107,7 @@ function testCommentNodeCommentStatistics() {
 
     // Post comment #3 as anonymous.
     $this->drupalGet('comment/reply/node/' . $this->node->id() . '/comment');
-    $anonymous_comment = $this->postComment($this->node, $this->randomMachineName(), '', array('name' => $this->randomMachineName()));
+    $anonymous_comment = $this->postComment($this->node, $this->randomMachineName(), '', array('name[0][value]' => $this->randomMachineName()));
     $comment_loaded = Comment::load($anonymous_comment->id());
 
     // Checks the new values of node comment statistics with comment #3.
diff --git a/core/modules/comment/src/Tests/CommentStringIdEntitiesTest.php b/core/modules/comment/src/Tests/CommentStringIdEntitiesTest.php
index 3cb8ab0..a496b90 100644
--- a/core/modules/comment/src/Tests/CommentStringIdEntitiesTest.php
+++ b/core/modules/comment/src/Tests/CommentStringIdEntitiesTest.php
@@ -28,6 +28,7 @@ class CommentStringIdEntitiesTest extends KernelTestBase {
     'field',
     'field_ui',
     'entity',
+    'entity_reference',
     'entity_test',
     'text',
   );
diff --git a/core/modules/comment/src/Tests/CommentTestBase.php b/core/modules/comment/src/Tests/CommentTestBase.php
index 5acb24a..ed20f5b 100644
--- a/core/modules/comment/src/Tests/CommentTestBase.php
+++ b/core/modules/comment/src/Tests/CommentTestBase.php
@@ -324,7 +324,7 @@ public function setCommentSettings($name, $value, $message, $field_name = 'comme
    *   Contact info is available.
    */
   function commentContactInfoAvailable() {
-    return preg_match('/(input).*?(name="name").*?(input).*?(name="mail").*?(input).*?(name="homepage")/s', $this->drupalGetContent());
+    return preg_match('/(input).*?(name="name\[0\]\[value\]").*?(input).*?(name="mail\[0\]\[value\]").*?(input).*?(name="homepage\[0\]\[value\]")/s', $this->drupalGetContent());
   }
 
   /**
diff --git a/core/modules/content_translation/content_translation.module b/core/modules/content_translation/content_translation.module
index 89a6cbb..7ca20d4 100644
--- a/core/modules/content_translation/content_translation.module
+++ b/core/modules/content_translation/content_translation.module
@@ -242,7 +242,10 @@ function content_translation_translate_access(EntityInterface $entity) {
  * @todo Move to \Drupal\content_translation\ContentTranslationManager.
  */
 function content_translation_controller($entity_type_id) {
-  return \Drupal::entityManager()->getHandler($entity_type_id, 'translation');
+  $entity_type = \Drupal::entityManager()->getDefinition($entity_type_id);
+  // @todo Throw an exception if the key is missing.
+  $class = $entity_type->getHandlerClass('translation');
+  return new $class($entity_type);
 }
 
 /**
diff --git a/core/modules/content_translation/src/ContentTranslationHandler.php b/core/modules/content_translation/src/ContentTranslationHandler.php
index eb80547..88f57ae 100644
--- a/core/modules/content_translation/src/ContentTranslationHandler.php
+++ b/core/modules/content_translation/src/ContentTranslationHandler.php
@@ -8,21 +8,18 @@
 namespace Drupal\content_translation;
 
 use Drupal\Core\Access\AccessResult;
-use Drupal\Core\Entity\EntityHandlerInterface;
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Entity\EntityTypeInterface;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Language\LanguageInterface;
-use Drupal\Core\Language\LanguageManagerInterface;
 use Drupal\Core\Render\Element;
-use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
  * Base class for content translation handlers.
  *
  * @ingroup entity_api
  */
-class ContentTranslationHandler implements ContentTranslationHandlerInterface, EntityHandlerInterface {
+class ContentTranslationHandler implements ContentTranslationHandlerInterface {
 
   /**
    * The type of the entity being translated.
@@ -39,34 +36,14 @@ class ContentTranslationHandler implements ContentTranslationHandlerInterface, E
   protected $entityType;
 
   /**
-   * The language manager.
-   *
-   * @var \Drupal\Core\Language\LanguageManagerInterface
-   */
-  protected $languageManager;
-
-  /**
-   * {@inheritdoc}
-   */
-  public static function createInstance(ContainerInterface $container, EntityTypeInterface $entity_type) {
-    return new static(
-      $entity_type,
-      $container->get('language_manager')
-    );
-  }
-
-  /**
    * Initializes an instance of the content translation controller.
    *
    * @param \Drupal\Core\Entity\EntityTypeInterface $entity_type
    *   The info array of the given entity type.
-   * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager
-   *   The language manager.
    */
-  public function __construct(EntityTypeInterface $entity_type, LanguageManagerInterface $language_manager) {
+  public function __construct(EntityTypeInterface $entity_type) {
     $this->entityTypeId = $entity_type->id();
     $this->entityType = $entity_type;
-    $this->languageManager = $language_manager;
   }
 
   /**
@@ -127,7 +104,7 @@ public function entityFormAlter(array &$form, FormStateInterface $form_state, En
 
     // Adjust page title to specify the current language being edited, if we
     // have at least one translation.
-    $languages = $this->languageManager->getLanguages();
+    $languages = language_list();
     if (isset($languages[$form_langcode]) && ($has_translations || $new_translation)) {
       $title = $this->entityFormTitle($entity);
       // When editing the original values display just the entity label.
@@ -160,7 +137,7 @@ public function entityFormAlter(array &$form, FormStateInterface $form_state, En
           '#submit' => array(array($this, 'entityFormSourceChange')),
         ),
       );
-      foreach ($this->languageManager->getLanguages() as $language) {
+      foreach (language_list(LanguageInterface::STATE_CONFIGURABLE) as $language) {
         if (isset($translations[$language->getId()])) {
           $form['source_langcode']['source']['#options'][$language->getId()] = $language->getName();
         }
@@ -181,7 +158,7 @@ public function entityFormAlter(array &$form, FormStateInterface $form_state, En
       $language_select = &$language_widget['widget'][0]['value'];
       if ($language_select['#type'] == 'language_select') {
         $options = array();
-        foreach ($this->languageManager->getLanguages() as $language) {
+        foreach (\Drupal::languageManager()->getLanguages() as $language) {
           // Show the current language, and the languages for which no
           // translation already exists.
           if (empty($translations[$language->getId()]) || $language->getId() == $entity_langcode) {
@@ -484,7 +461,7 @@ public function entityFormSourceChange($form, FormStateInterface $form_state) {
       'source' => $source,
       'target' => $form_object->getFormLangcode($form_state),
     ));
-    $languages = $this->languageManager->getLanguages();
+    $languages = language_list();
     drupal_set_message(t('Source language set to: %language', array('%language' => $languages[$source]->getName())));
   }
 
diff --git a/core/modules/field/src/Tests/Views/ApiDataTest.php b/core/modules/field/src/Tests/Views/ApiDataTest.php
index 8ae71e3..b9b1ad5 100644
--- a/core/modules/field/src/Tests/Views/ApiDataTest.php
+++ b/core/modules/field/src/Tests/Views/ApiDataTest.php
@@ -83,11 +83,6 @@ function testViewsData() {
       ),
     );
     $this->assertEqual($expected_join, $data[$revision_table]['table']['join']['node_revision']);
-
-    // Test click sortable.
-    $this->assertTrue($data[$current_table][$field_storage->getName()]['field']['click sortable'], 'String field is click sortable.');
-    // Click sort should only be on the primary field.
-    $this->assertTrue(empty($data[$revision_table][$field_storage->getName()]['field']['click sortable']), 'Non-primary fields are not click sortable');
   }
 
 }
diff --git a/core/modules/language/src/Form/LanguageDeleteForm.php b/core/modules/language/src/Form/LanguageDeleteForm.php
index 9f96673..32fb889 100644
--- a/core/modules/language/src/Form/LanguageDeleteForm.php
+++ b/core/modules/language/src/Form/LanguageDeleteForm.php
@@ -11,7 +11,6 @@
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Routing\UrlGeneratorInterface;
 use Drupal\Core\Url;
-use Drupal\Core\Language\LanguageManagerInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 use Symfony\Component\HttpFoundation\RedirectResponse;
 use Symfony\Component\HttpFoundation\Request;
@@ -30,23 +29,13 @@ class LanguageDeleteForm extends EntityConfirmFormBase {
   protected $urlGenerator;
 
   /**
-   * The language manager.
-   *
-   * @var \Drupal\Core\Language\LanguageManagerInterface
-   */
-  protected $languageManager;
-
-  /**
    * Constructs a new LanguageDeleteForm object.
    *
    * @param \Drupal\Core\Routing\UrlGeneratorInterface $url_generator
    *   The url generator service.
-   * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager
-   *   The language manager.
    */
-  public function __construct(UrlGeneratorInterface $url_generator, LanguageManagerInterface $language_manager) {
+  public function __construct(UrlGeneratorInterface $url_generator) {
     $this->urlGenerator = $url_generator;
-    $this->languageManager = $language_manager;
   }
 
   /**
@@ -54,8 +43,7 @@ public function __construct(UrlGeneratorInterface $url_generator, LanguageManage
    */
   public static function create(ContainerInterface $container) {
     return new static(
-      $container->get('url_generator'),
-      $container->get('language_manager')
+      $container->get('url_generator')
     );
   }
 
@@ -108,7 +96,7 @@ public function buildForm(array $form, FormStateInterface $form_state) {
     }
 
     // Throw a 404 when attempting to delete a non-existing language.
-    $languages = $this->languageManager->getLanguages();
+    $languages = language_list();
     if (!isset($languages[$langcode])) {
       throw new NotFoundHttpException();
     }
diff --git a/core/modules/language/src/Form/NegotiationBrowserForm.php b/core/modules/language/src/Form/NegotiationBrowserForm.php
index d772214..8cbac11 100644
--- a/core/modules/language/src/Form/NegotiationBrowserForm.php
+++ b/core/modules/language/src/Form/NegotiationBrowserForm.php
@@ -60,7 +60,7 @@ public function buildForm(array $form, FormStateInterface $form_state) {
     $form = array();
 
     // Initialize a language list to the ones available, including English.
-    $languages = $this->languageManager->getLanguages();
+    $languages = language_list();
 
     $existing_languages = array();
     foreach ($languages as $langcode => $language) {
diff --git a/core/modules/language/src/Form/NegotiationUrlForm.php b/core/modules/language/src/Form/NegotiationUrlForm.php
index 979cca9..dcb721a 100644
--- a/core/modules/language/src/Form/NegotiationUrlForm.php
+++ b/core/modules/language/src/Form/NegotiationUrlForm.php
@@ -9,9 +9,6 @@
 
 use Drupal\Core\Form\ConfigFormBase;
 use Drupal\Core\Form\FormStateInterface;
-use Drupal\Core\Language\LanguageManagerInterface;
-use Drupal\Core\Config\ConfigFactoryInterface;
-use Symfony\Component\DependencyInjection\ContainerInterface;
 use Drupal\language\Plugin\LanguageNegotiation\LanguageNegotiationUrl;
 
 /**
@@ -20,36 +17,6 @@
 class NegotiationUrlForm extends ConfigFormBase {
 
   /**
-   * The language manager.
-   *
-   * @var \Drupal\Core\Language\LanguageManagerInterface
-   */
-  protected $languageManager;
-
-  /**
-   * Constructs a new LanguageDeleteForm object.
-   *
-   * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
-   *   The factory for configuration objects.
-   * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager
-   *   The language manager.
-   */
-  public function __construct(ConfigFactoryInterface $config_factory, LanguageManagerInterface $language_manager) {
-    parent::__construct($config_factory);
-    $this->languageManager = $language_manager;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public static function create(ContainerInterface $container) {
-    return new static(
-      $container->get('config.factory'),
-      $container->get('language_manager')
-    );
-  }
-
-  /**
    * {@inheritdoc}
    */
   public function getFormId() {
@@ -102,7 +69,7 @@ public function buildForm(array $form, FormStateInterface $form_state) {
       ),
     );
 
-    $languages = $this->languageManager->getLanguages();
+    $languages = language_list();
     $prefixes = language_negotiation_url_prefixes();
     $domains = language_negotiation_url_domains();
     foreach ($languages as $langcode => $language) {
@@ -131,7 +98,7 @@ public function buildForm(array $form, FormStateInterface $form_state) {
    * Implements \Drupal\Core\Form\FormInterface::validateForm().
    */
   public function validateForm(array &$form, FormStateInterface $form_state) {
-    $languages = $this->languageManager->getLanguages();
+    $languages = language_list();
 
     // Count repeated values for uniqueness check.
     $count = array_count_values($form_state->getValue('prefix'));
diff --git a/core/modules/language/src/Plugin/Condition/Language.php b/core/modules/language/src/Plugin/Condition/Language.php
index 77fdc08..fa09f3b 100644
--- a/core/modules/language/src/Plugin/Condition/Language.php
+++ b/core/modules/language/src/Plugin/Condition/Language.php
@@ -10,9 +10,6 @@
 use Drupal\Core\Condition\ConditionPluginBase;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Language\LanguageInterface;
-use Drupal\Core\Language\LanguageManagerInterface;
-use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
-use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
  * Provides a 'Language' condition.
@@ -26,54 +23,15 @@
  * )
  *
  */
-class Language extends ConditionPluginBase implements ContainerFactoryPluginInterface {
-
-  /**
-   * The Language manager.
-   *
-   * @var \Drupal\Core\Language\LanguageManagerInterface
-   */
-  protected $languageManager;
-
-  /**
-   * Creates a new Language instance.
-   *
-   * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager
-   *   The language manager.
-   * @param array $configuration
-   *   The plugin configuration, i.e. an array with configuration values keyed
-   *   by configuration option name. The special key 'context' may be used to
-   *   initialize the defined contexts by setting it to an array of context
-   *   values keyed by context names.
-   * @param string $plugin_id
-   *   The plugin_id for the plugin instance.
-   * @param mixed $plugin_definition
-   *   The plugin implementation definition.
-   */
-  public function __construct(LanguageManagerInterface $language_manager, array $configuration, $plugin_id, $plugin_definition) {
-    parent::__construct($configuration, $plugin_id, $plugin_definition);
-    $this->languageManager = $language_manager;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
-    return new static(
-      $container->get('language_manager'),
-      $configuration,
-      $plugin_id,
-      $plugin_definition
-    );
-  }
+class Language extends ConditionPluginBase {
 
   /**
    * {@inheritdoc}
    */
   public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
-    if ($this->languageManager->isMultilingual()) {
+    if (\Drupal::languageManager()->isMultilingual()) {
       // Fetch languages.
-      $languages = $this->languageManager->getLanguages();
+      $languages = \Drupal::languageManager()->getLanguages(LanguageInterface::STATE_CONFIGURABLE);
       $langcodes_options = array();
       foreach ($languages as $language) {
         $langcodes_options[$language->getId()] = $language->getName();
@@ -107,7 +65,7 @@ public function submitConfigurationForm(array &$form, FormStateInterface $form_s
    * {@inheritdoc}
    */
   public function summary() {
-    $language_list = $this->languageManager->getLanguages(LanguageInterface::STATE_ALL);
+    $language_list = language_list(LanguageInterface::STATE_ALL);
     $selected = $this->configuration['langcodes'];
     // Reduce the language list to an array of language names.
     $language_names = array_reduce($language_list, function(&$result, $item) use ($selected) {
diff --git a/core/modules/language/src/Tests/LanguageListModuleInstallTest.php b/core/modules/language/src/Tests/LanguageListModuleInstallTest.php
index eae3f1a..891ddf8 100644
--- a/core/modules/language/src/Tests/LanguageListModuleInstallTest.php
+++ b/core/modules/language/src/Tests/LanguageListModuleInstallTest.php
@@ -10,8 +10,8 @@
 use Drupal\simpletest\WebTestBase;
 
 /**
- * Tests enabling Language if a module exists that calls
- * LanguageManager::getLanguages() during installation.
+ * Tests enabling Language if a module exists that calls language_list during
+ * installation.
  *
  * @group language
  */
@@ -28,8 +28,8 @@ class LanguageListModuleInstallTest extends WebTestBase {
    * Tests enabling Language.
    */
   function testModuleInstallLanguageList() {
-    // Since LanguageManager::getLanguages() uses static caches we need to do
-    // this by enabling the module using the UI.
+    // Since language_list uses static caches we need to do this by enabling
+    // the module using the UI.
     $admin_user = $this->drupalCreateUser(array('access administration pages', 'administer modules'));
     $this->drupalLogin($admin_user);
     $edit = array();
diff --git a/core/modules/locale/src/Form/TranslateEditForm.php b/core/modules/locale/src/Form/TranslateEditForm.php
index 454a65b..1e3239a 100644
--- a/core/modules/locale/src/Form/TranslateEditForm.php
+++ b/core/modules/locale/src/Form/TranslateEditForm.php
@@ -32,7 +32,7 @@ public function buildForm(array $form, FormStateInterface $form_state) {
     $langcode = $filter_values['langcode'];
 
     $this->languageManager->reset();
-    $languages = $this->languageManager->getLanguages();
+    $languages = language_list();
 
     $langname = isset($langcode) ? $languages[$langcode]->getName() : "- None -";
 
diff --git a/core/modules/locale/src/Form/TranslateFormBase.php b/core/modules/locale/src/Form/TranslateFormBase.php
index b894f17..f2dbc82 100644
--- a/core/modules/locale/src/Form/TranslateFormBase.php
+++ b/core/modules/locale/src/Form/TranslateFormBase.php
@@ -161,7 +161,7 @@ protected function translateFilters() {
 
     // Get all languages, except English.
     $this->languageManager->reset();
-    $languages = $this->languageManager->getLanguages();
+    $languages = language_list();
     $language_options = array();
     foreach ($languages as $langcode => $language) {
       if ($langcode != 'en' || locale_translate_english()) {
diff --git a/core/modules/migrate_drupal/src/Plugin/migrate/process/d6/FieldInstanceWidgetSettings.php b/core/modules/migrate_drupal/src/Plugin/migrate/process/d6/FieldInstanceWidgetSettings.php
index d32d336..52feeef 100644
--- a/core/modules/migrate_drupal/src/Plugin/migrate/process/d6/FieldInstanceWidgetSettings.php
+++ b/core/modules/migrate_drupal/src/Plugin/migrate/process/d6/FieldInstanceWidgetSettings.php
@@ -59,6 +59,7 @@ public function getSettings($widget_type, $widget_settings) {
         'placeholder' => '',
       ),
       'email_textfield' => array(
+        'size' => $size,
         'placeholder' => '',
       ),
       'link' => array(
diff --git a/core/modules/migrate_drupal/src/Tests/d6/MigrateFieldWidgetSettingsTest.php b/core/modules/migrate_drupal/src/Tests/d6/MigrateFieldWidgetSettingsTest.php
index 09b922c..da2076d 100644
--- a/core/modules/migrate_drupal/src/Tests/d6/MigrateFieldWidgetSettingsTest.php
+++ b/core/modules/migrate_drupal/src/Tests/d6/MigrateFieldWidgetSettingsTest.php
@@ -102,6 +102,7 @@ public function testWidgetSettings() {
     $component = $form_display->getComponent('field_test_email');
     $expected['type'] = 'email_default';
     $expected['weight'] = 4;
+    $expected['settings'] = array('size' => 60, 'placeholder' => '');
     $this->assertEqual($component, $expected, 'Email field settings are correct.');
 
     // Link field.
diff --git a/core/modules/node/src/Plugin/views/field/Node.php b/core/modules/node/src/Plugin/views/field/Node.php
index a62e0f2..0c4065a 100644
--- a/core/modules/node/src/Plugin/views/field/Node.php
+++ b/core/modules/node/src/Plugin/views/field/Node.php
@@ -73,7 +73,7 @@ protected function renderLink($data, ResultRow $values) {
         $this->options['alter']['make_link'] = TRUE;
         $this->options['alter']['path'] = "node/" . $this->getValue($values, 'nid');
         if (isset($this->aliases['langcode'])) {
-          $languages = \Drupal::languageManager()->getLanguages();
+          $languages = language_list();
           $langcode = $this->getValue($values, 'langcode');
           if (isset($languages[$langcode])) {
             $this->options['alter']['language'] = $languages[$langcode];
diff --git a/core/modules/system/core.api.php b/core/modules/system/core.api.php
index 32800de..e9c4859 100644
--- a/core/modules/system/core.api.php
+++ b/core/modules/system/core.api.php
@@ -461,15 +461,14 @@
  *
  * @section tags Cache Tags
  *
- * The fourth argument of the @code set() @endcode method can be used to specify
- * cache tags, which are used to identify which data is included in each cache
- * item. A cache item can have multiple cache tags (an array of cache tags), and
- * each cache tag is a string. The convention is to generate cache tags of the
- * form @code <prefix>:<suffix> @endcode. Usually, you'll want to associate the
- * cache tags of entities, or entity listings. You won't have to manually
- * construct cache tags for them — just get their cache tags via
- * \Drupal\Core\Entity\EntityInterface::getCacheTags() and
- * \Drupal\Core\Entity\EntityTypeInterface::getListCacheTags().
+ * The fourth argument of the set() method can be used to specify cache tags,
+ * which are used to identify what type of data is included in each cache item.
+ * Each cache item can have multiple cache tags, and each cache tag has a string
+ * key and a value. The value can be:
+ * - TRUE, to indicate that this type of data is present in the cache item.
+ * - An array of values. For example, the "node" tag indicates that particular
+ *   node's data is present in the cache item, so its value is an array of node
+ *   IDs.
  * Data that has been tagged can be invalidated as a group: no matter
  * the Cache ID (cid) of the cache item, no matter in which cache bin a cache
  * item lives; as long as it is tagged with a certain cache tag, it will be
@@ -491,10 +490,9 @@
  * @code
  * // A cache item with nodes, users, and some custom module data.
  * $tags = array(
- *   'my_custom_tag',
- *   'node:1',
- *   'node:3',
- *   'user:7',
+ *   'my_custom_tag' => TRUE,
+ *   'node' => array(1, 3),
+ *   'user' => array(7),
  * );
  * \Drupal::cache()->set($cid, $data, CacheBackendInterface::CACHE_PERMANENT, $tags);
  *
diff --git a/core/modules/user/src/Entity/User.php b/core/modules/user/src/Entity/User.php
index 99c91db..a32298e 100644
--- a/core/modules/user/src/Entity/User.php
+++ b/core/modules/user/src/Entity/User.php
@@ -372,7 +372,7 @@ public function getTimeZone() {
    * {@inheritdoc}
    */
   function getPreferredLangcode($fallback_to_default = TRUE) {
-    $language_list = \Drupal::languageManager()->getLanguages();
+    $language_list = language_list();
     $preferred_langcode = $this->get('preferred_langcode')->value;
     if (!empty($preferred_langcode) && isset($language_list[$preferred_langcode])) {
       return $language_list[$preferred_langcode]->getId();
@@ -386,7 +386,7 @@ function getPreferredLangcode($fallback_to_default = TRUE) {
    * {@inheritdoc}
    */
   function getPreferredAdminLangcode($fallback_to_default = TRUE) {
-    $language_list = \Drupal::languageManager()->getLanguages();
+    $language_list = language_list();
     $preferred_langcode = $this->get('preferred_admin_langcode')->value;
     if (!empty($preferred_langcode) && isset($language_list[$preferred_langcode])) {
       return $language_list[$preferred_langcode]->getId();
diff --git a/core/modules/user/src/Plugin/views/field/Language.php b/core/modules/user/src/Plugin/views/field/Language.php
index 7e7c0ed..59f74cc 100644
--- a/core/modules/user/src/Plugin/views/field/Language.php
+++ b/core/modules/user/src/Plugin/views/field/Language.php
@@ -33,7 +33,7 @@ protected function renderLink($data, ResultRow $values) {
       $lang = language_default();
     }
     else {
-      $lang = \Drupal::languageManager()->getLanguages();
+      $lang = language_list();
       $lang = $lang[$data];
     }
 
diff --git a/core/modules/user/src/UserStorage.php b/core/modules/user/src/UserStorage.php
index b51b1ee..638dfc7 100644
--- a/core/modules/user/src/UserStorage.php
+++ b/core/modules/user/src/UserStorage.php
@@ -15,7 +15,6 @@
 use Drupal\Core\Entity\Sql\SqlContentEntityStorage;
 use Drupal\Core\Password\PasswordInterface;
 use Drupal\Core\Session\AccountInterface;
-use Drupal\Core\Language\LanguageManagerInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
@@ -46,11 +45,9 @@ class UserStorage extends SqlContentEntityStorage implements UserStorageInterfac
    *   Cache backend instance to use.
    * @param \Drupal\Core\Password\PasswordInterface $password
    *   The password hashing service.
-   * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager
-   *   The language manager.
    */
-  public function __construct(EntityTypeInterface $entity_type, Connection $database, EntityManagerInterface $entity_manager, CacheBackendInterface $cache, PasswordInterface $password, LanguageManagerInterface $language_manager) {
-    parent::__construct($entity_type, $database, $entity_manager, $cache, $language_manager);
+  public function __construct(EntityTypeInterface $entity_type, Connection $database, EntityManagerInterface $entity_manager, CacheBackendInterface $cache, PasswordInterface $password) {
+    parent::__construct($entity_type, $database, $entity_manager, $cache);
 
     $this->password = $password;
   }
@@ -64,8 +61,7 @@ public static function createInstance(ContainerInterface $container, EntityTypeI
       $container->get('database'),
       $container->get('entity.manager'),
       $container->get('cache.entity'),
-      $container->get('password'),
-      $container->get('language_manager')
+      $container->get('password')
     );
   }
 
diff --git a/core/modules/views/src/Plugin/ViewsPluginManager.php b/core/modules/views/src/Plugin/ViewsPluginManager.php
index 924cc35..c340ca2 100644
--- a/core/modules/views/src/Plugin/ViewsPluginManager.php
+++ b/core/modules/views/src/Plugin/ViewsPluginManager.php
@@ -43,7 +43,7 @@ public function __construct($type, \Traversable $namespaces, CacheBackendInterfa
     );
 
     $this->alterInfo('views_plugins_' . $type);
-    $this->setCacheBackend($cache_backend, "views:$type", array('extension', 'extension:views'));
+    $this->setCacheBackend($cache_backend, "views:{$type}_plugins", array('extension', 'extension:views'));
   }
 
 }
diff --git a/core/modules/views/src/Plugin/views/field/Field.php b/core/modules/views/src/Plugin/views/field/Field.php
index 621dcac..6788677 100644
--- a/core/modules/views/src/Plugin/views/field/Field.php
+++ b/core/modules/views/src/Plugin/views/field/Field.php
@@ -341,22 +341,19 @@ function add_field_table($use_groupby) {
   }
 
   /**
-   * {@inheritdoc}
+   * Determine if this field is click sortable.
    */
   public function clickSortable() {
+    // Not click sortable in any case.
+    if (empty($this->definition['click sortable'])) {
+      return FALSE;
+    }
     // A field is not click sortable if it's a multiple field with
     // "group multiple values" checked, since a click sort in that case would
     // add a join to the field table, which would produce unwanted duplicates.
     if ($this->multiple && $this->options['group_rows']) {
       return FALSE;
     }
-
-    // If field definition is set, use that.
-    if (isset($this->definition['click sortable'])) {
-      return (bool) $this->definition['click sortable'];
-    }
-
-    // Default to true.
     return TRUE;
   }
 
diff --git a/core/modules/views/src/Plugin/views/filter/Combine.php b/core/modules/views/src/Plugin/views/filter/Combine.php
index cad7eb9..20486db 100644
--- a/core/modules/views/src/Plugin/views/filter/Combine.php
+++ b/core/modules/views/src/Plugin/views/filter/Combine.php
@@ -61,14 +61,6 @@ public function query() {
     $fields = array();
     // Only add the fields if they have a proper field and table alias.
     foreach ($this->options['fields'] as $id) {
-      // Overridden fields can lead to fields missing from a display that are
-      // still set in the non-overridden combined filter.
-      if (!isset($this->view->field[$id])) {
-        // If fields are no longer available that are needed to filter by, make
-        // sure no results are shown to prevent displaying more then intended.
-        $this->view->build_info['fail'] = TRUE;
-        continue;
-      }
       $field = $this->view->field[$id];
       // Always add the table of the selected fields to be sure a table alias exists.
       $field->ensureMyTable();
@@ -95,23 +87,6 @@ public function query() {
     }
   }
 
-  /**
-   * {@inheritdoc}
-   */
-  public function validate() {
-    $errors = parent::validate();
-    $fields = $this->view->display_handler->getHandlers('field');
-    foreach ($this->options['fields'] as $id) {
-      if (!isset($fields[$id])) {
-        // Combined field filter only works with fields that are in the field
-        // settings.
-        $errors[] = $this->t('Field %field set in %filter is not set in this display.', array('%field' => $id, '%filter' => $this->adminLabel()));
-        break;
-      }
-    }
-    return $errors;
-  }
-
   // By default things like opEqual uses add_where, that doesn't support
   // complex expressions, so override all operators.
 
diff --git a/core/modules/views/src/Tests/Handler/FilterCombineTest.php b/core/modules/views/src/Tests/Handler/FilterCombineTest.php
index 516c773..53320f7 100644
--- a/core/modules/views/src/Tests/Handler/FilterCombineTest.php
+++ b/core/modules/views/src/Tests/Handler/FilterCombineTest.php
@@ -82,54 +82,6 @@ public function testFilterCombineContains() {
   }
 
   /**
-   * Tests if the filter can handle removed fields.
-   *
-   * Tests the combined filter handler when a field overwrite is done
-   * and fields set in the combine filter are removed from the display
-   * but not from the combined filter settings.
-   */
-  public function testFilterCombineContainsFieldsOverwritten() {
-    $view = Views::getView('test_view');
-    $view->setDisplay();
-
-    $fields = $view->displayHandlers->get('default')->getOption('fields');
-    $view->displayHandlers->get('default')->overrideOption('fields', $fields + array(
-      'job' => array(
-        'id' => 'job',
-        'table' => 'views_test_data',
-        'field' => 'job',
-        'relationship' => 'none',
-      ),
-    ));
-
-    // Change the filtering.
-    $view->displayHandlers->get('default')->overrideOption('filters', array(
-      'age' => array(
-        'id' => 'combine',
-        'table' => 'views',
-        'field' => 'combine',
-        'relationship' => 'none',
-        'operator' => 'contains',
-        'fields' => array(
-          'name',
-          'job',
-          // Add a dummy field to the combined fields to simulate
-          // a removed or deleted field.
-          'dummy',
-        ),
-        'value' => 'ing',
-      ),
-    ));
-
-    $this->executeView($view);
-    // Make sure this view will not get displayed.
-    $this->assertTrue($view->build_info['fail'], "View build has been marked as failed.");
-    // Make sure this view does not pass validation with the right error.
-    $errors = $view->validate();
-    $this->assertEqual(reset($errors['default']), t('Field %field set in %filter is not set in this display.', array('%field' => 'dummy', '%filter' => 'Global: Combine fields filter')));
-  }
-
-  /**
    * Additional data to test the NULL issue.
    */
   protected function dataSet() {
diff --git a/core/modules/views/views.views.inc b/core/modules/views/views.views.inc
index 5f86626..4c9971a 100644
--- a/core/modules/views/views.views.inc
+++ b/core/modules/views/views.views.inc
@@ -583,11 +583,6 @@ function views_field_default_views_data(FieldStorageConfigInterface $field_stora
         );
       }
 
-      // Set click sortable if there is a field definition.
-      if (isset($data[$table_alias][$field_name]['field'])) {
-        $data[$table_alias][$field_name]['field']['click sortable'] = $allow_sort;
-      }
-
       // Expose additional delta column for multiple value fields.
       if ($field_storage->isMultiple()) {
         $title_delta = t('@label (!name:delta)', array('@label' => $label, '!name' => $field_name));
diff --git a/core/tests/Drupal/Tests/Core/Entity/Sql/SqlContentEntityStorageTest.php b/core/tests/Drupal/Tests/Core/Entity/Sql/SqlContentEntityStorageTest.php
index 2629414..2f0bd10 100644
--- a/core/tests/Drupal/Tests/Core/Entity/Sql/SqlContentEntityStorageTest.php
+++ b/core/tests/Drupal/Tests/Core/Entity/Sql/SqlContentEntityStorageTest.php
@@ -14,7 +14,6 @@
 use Drupal\Core\Entity\Sql\SqlContentEntityStorageSchema;
 use Drupal\Core\Field\BaseFieldDefinition;
 use Drupal\Core\Language\Language;
-use Drupal\Core\Language\LanguageManagerInterface;
 use Drupal\Tests\UnitTestCase;
 use Symfony\Component\DependencyInjection\ContainerBuilder;
 
@@ -81,13 +80,6 @@ class SqlContentEntityStorageTest extends UnitTestCase {
   protected $cache;
 
   /**
-   * The language manager.
-   *
-   * @var \Drupal\Core\Language\LanguageManagerInterface|\PHPUnit_Framework_MockObject_MockObject
-   */
-  protected $languageManager;
-
-  /**
    * The database connection to use.
    *
    * @var \Drupal\Core\Database\Connection|\PHPUnit_Framework_MockObject_MockObject
@@ -109,10 +101,6 @@ protected function setUp() {
     $this->entityManager = $this->getMock('Drupal\Core\Entity\EntityManagerInterface');
     $this->moduleHandler = $this->getMock('Drupal\Core\Extension\ModuleHandlerInterface');
     $this->cache = $this->getMock('Drupal\Core\Cache\CacheBackendInterface');
-    $this->languageManager = $this->getMock('Drupal\Core\Language\LanguageManagerInterface');
-    $this->languageManager->expects($this->any())
-      ->method('getDefaultLanguage')
-      ->will($this->returnValue(new Language(array('langcode' => 'en'))));
     $this->connection = $this->getMockBuilder('Drupal\Core\Database\Connection')
       ->disableOriginalConstructor()
       ->getMock();
@@ -346,7 +334,7 @@ public function testOnEntityTypeCreate() {
       ->will($this->returnValue($schema_handler));
 
     $storage = $this->getMockBuilder('Drupal\Core\Entity\Sql\SqlContentEntityStorage')
-      ->setConstructorArgs(array($this->entityType, $this->connection, $this->entityManager, $this->cache, $this->languageManager))
+      ->setConstructorArgs(array($this->entityType, $this->connection, $this->entityManager, $this->cache))
       ->setMethods(array('getStorageSchema'))
       ->getMock();
 
@@ -1057,7 +1045,7 @@ protected function setUpEntityStorage() {
       ->method('getBaseFieldDefinitions')
       ->will($this->returnValue($this->fieldDefinitions));
 
-    $this->entityStorage = new SqlContentEntityStorage($this->entityType, $this->connection, $this->entityManager, $this->cache, $this->languageManager);
+    $this->entityStorage = new SqlContentEntityStorage($this->entityType, $this->connection, $this->entityManager, $this->cache);
   }
 
   /**
@@ -1134,7 +1122,7 @@ public function testLoadMultipleNoPersistentCache() {
       ->method('set');
 
     $entity_storage = $this->getMockBuilder('Drupal\Core\Entity\Sql\SqlContentEntityStorage')
-      ->setConstructorArgs(array($this->entityType, $this->connection, $this->entityManager, $this->cache, $this->languageManager))
+      ->setConstructorArgs(array($this->entityType, $this->connection, $this->entityManager, $this->cache))
       ->setMethods(array('getFromStorage'))
       ->getMock();
     $entity_storage->expects($this->once())
@@ -1184,7 +1172,7 @@ public function testLoadMultiplePersistentCacheMiss() {
       ->with($key, $entity, CacheBackendInterface::CACHE_PERMANENT, array($this->entityTypeId . '_values', 'entity_field_info'));
 
     $entity_storage = $this->getMockBuilder('Drupal\Core\Entity\Sql\SqlContentEntityStorage')
-      ->setConstructorArgs(array($this->entityType, $this->connection, $this->entityManager, $this->cache, $this->languageManager))
+      ->setConstructorArgs(array($this->entityType, $this->connection, $this->entityManager, $this->cache))
       ->setMethods(array('getFromStorage'))
       ->getMock();
     $entity_storage->expects($this->once())
@@ -1239,7 +1227,7 @@ public function testHasData() {
       ->method('getBaseFieldDefinitions')
       ->will($this->returnValue($this->fieldDefinitions));
 
-    $this->entityStorage = new SqlContentEntityStorage($this->entityType, $database, $this->entityManager, $this->cache, $this->languageManager);
+    $this->entityStorage = new SqlContentEntityStorage($this->entityType, $database, $this->entityManager, $this->cache);
 
     $result = $this->entityStorage->hasData();
 
diff --git a/core/themes/bartik/css/components/breadcrumb.css b/core/themes/bartik/css/components/breadcrumb.css
index 607d3fc..6c81a96 100644
--- a/core/themes/bartik/css/components/breadcrumb.css
+++ b/core/themes/bartik/css/components/breadcrumb.css
@@ -1,9 +1,5 @@
-/**
- * @file
- * Styles for Bartik's breadcrumbs.
- */
+/* -------------- Breadcrumbs   -------------- */
 
 .breadcrumb {
   font-size: 0.929em;
-  margin: 0 15px;
 }
diff --git a/core/themes/bartik/css/layout.css b/core/themes/bartik/css/layout.css
index 8a603b6..b8896e9 100644
--- a/core/themes/bartik/css/layout.css
+++ b/core/themes/bartik/css/layout.css
@@ -42,6 +42,9 @@ body,
 .sidebar .section {
   padding: 0 15px;
 }
+.breadcrumb {
+  margin: 0 15px;
+}
 #footer-wrapper {
   padding: 35px 0 30px;
 }
diff --git a/core/themes/seven/css/layout/node-add.css b/core/themes/seven/css/layout/node-add.css
index 22faf33..7f5274a 100644
--- a/core/themes/seven/css/layout/node-add.css
+++ b/core/themes/seven/css/layout/node-add.css
@@ -15,3 +15,16 @@
     margin-bottom: 1em;
   }
 }
+@media
+  screen and (max-width: 1020px),
+  (orientation: landscape) and (max-device-height: 1020px) {
+  .toolbar-vertical .block-list-secondary,
+  .toolbar-vertical .layout-region-node-secondary {
+    margin-bottom: 0;
+    padding-bottom: 0;
+    display: block;
+  }
+  .toolbar-vertical .layout-node-form:after {
+    display: none;
+  }
+}
