diff --git a/core/config/schema/core.entity.schema.yml b/core/config/schema/core.entity.schema.yml
index 9e8ecd3..df8c9af 100644
--- a/core/config/schema/core.entity.schema.yml
+++ b/core/config/schema/core.entity.schema.yml
@@ -167,6 +167,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/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/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/src/CommentForm.php b/core/modules/comment/src/CommentForm.php
index 95629b2..c3c9677 100644
--- a/core/modules/comment/src/CommentForm.php
+++ b/core/modules/comment/src/CommentForm.php
@@ -16,6 +16,7 @@
 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;
@@ -58,25 +59,11 @@ 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()];
@@ -89,14 +76,14 @@ public function form(array $form, FormStateInterface $form_state) {
     $anonymous_contact = $field_definition->getSetting('anonymous');
     $is_admin = $comment->id() && $this->currentUser->hasPermission('administer comments');
 
-    if (!$this->currentUser->isAuthenticated() && $anonymous_contact != COMMENT_ANONYMOUS_MAYNOT_CONTACT) {
+    if ($this->currentUser->isAnonymous() && $anonymous_contact != COMMENT_ANONYMOUS_MAYNOT_CONTACT) {
       $form['#attached']['library'][] = 'core/drupal.form';
       $form['#attributes']['data-user-info-from-browser'] = TRUE;
     }
 
     // If not replying to a comment, use our dedicated page callback for new
     // Comments on entities.
-    if (!$comment->id() && !$comment->hasParentComment()) {
+    if ($comment->isNew() && !$comment->hasParentComment()) {
       $form['#action'] = $this->url('comment.reply', array('entity_type' => $entity->getEntityTypeId(), 'entity' => $entity->id(), 'field_name' => $field_name));
     }
 
@@ -114,9 +101,33 @@ public function form(array $form, FormStateInterface $form_state) {
       );
     }
 
-    // Prepare default values for form elements.
+    // Add the author name field depending on the current user.
+    $form['uid']['widget'][0]['target_id']['#required'] = ($this->currentUser->isAnonymous() && $anonymous_contact == COMMENT_ANONYMOUS_MUST_CONTACT);
+    if ($this->currentUser->isAuthenticated() && !$is_admin) {
+      $form['uid']['widget'][0]['target_id']['#type'] = 'item';
+      $form['uid']['widget'][0]['target_id']['#value'] = $this->currentUser->id();
+      $form['uid']['widget'][0]['target_id']['#theme'] = 'username';
+      $form['uid']['widget'][0]['target_id']['#account'] = $this->currentUser;
+    }
+    $form['uid']['#group'] = 'author';
+
+    // Add author email and homepage fields depending on the current user.
+    $form['mail']['widget'][0]['value']['#required'] = ($this->currentUser->isAnonymous() && $anonymous_contact == COMMENT_ANONYMOUS_MUST_CONTACT);
+    $form['mail']['#access'] = $is_admin || $this->currentUser->isAnonymous();
+    $form['mail']['#group'] = 'author';
+    $form['mail']['#access'] = $is_admin || ($this->currentUser->isAnonymous() && $anonymous_contact != COMMENT_ANONYMOUS_MAYNOT_CONTACT);
+
+    $form['homepage']['#group'] = 'author';
+    $form['homepage']['#access'] = $is_admin || ($this->currentUser->isAnonymous() && $anonymous_contact != COMMENT_ANONYMOUS_MAYNOT_CONTACT);
+
+    $form['created']['#group'] = 'author';
+    $form['created']['#access'] = $is_admin;
+
+    $form['name']['#group'] = 'author';
+    $form['name']['#access'] = $is_admin || $this->currentUser->isAnonymous();
+
+    // Prepare default value for status form element.
     if ($is_admin) {
-      $author = $comment->getAuthorName();
       $status = $comment->getStatus();
       if (empty($comment_preview)) {
         $form['#title'] = $this->t('Edit comment %title', array(
@@ -125,12 +136,6 @@ 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);
     }
 
@@ -216,7 +221,7 @@ public function form(array $form, FormStateInterface $form_state) {
   }
 
   /**
-   * Overrides Drupal\Core\Entity\EntityForm::actions().
+   * {@inheritdoc}
    */
   protected function actions(array $form, FormStateInterface $form_state) {
     $element = parent::actions($form, $form_state);
@@ -253,12 +258,7 @@ protected function actions(array $form, FormStateInterface $form_state) {
   public function buildEntity(array $form, FormStateInterface $form_state) {
     /** @var \Drupal\comment\CommentInterface $comment */
     $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);
-    }
+
     $author_name = $form_state->getValue('name');
 
     if (!$this->currentUser->isAnonymous()) {
@@ -330,7 +330,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 0348cc3..cfa4c4b 100644
--- a/core/modules/comment/src/CommentPostRenderCache.php
+++ b/core/modules/comment/src/CommentPostRenderCache.php
@@ -113,6 +113,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/Controller/CommentController.php b/core/modules/comment/src/Controller/CommentController.php
index 05baad8..2d00773 100644
--- a/core/modules/comment/src/Controller/CommentController.php
+++ b/core/modules/comment/src/Controller/CommentController.php
@@ -282,6 +282,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 909abc3..b97dc5f 100644
--- a/core/modules/comment/src/Entity/Comment.php
+++ b/core/modules/comment/src/Entity/Comment.php
@@ -249,7 +249,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'))
@@ -257,20 +269,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'))
@@ -279,9 +310,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'))
@@ -330,6 +366,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() {
@@ -541,7 +589,7 @@ public function getOwner() {
    * {@inheritdoc}
    */
   public function getOwnerId() {
-    return $this->get('uid')->target_id;
+    return (int) $this->get('uid')->target_id;
   }
 
   /**
diff --git a/core/modules/comment/src/Plugin/Field/FieldFormatter/CommentDefaultFormatter.php b/core/modules/comment/src/Plugin/Field/FieldFormatter/CommentDefaultFormatter.php
index 75b85f0..2a32de3 100644
--- a/core/modules/comment/src/Plugin/Field/FieldFormatter/CommentDefaultFormatter.php
+++ b/core/modules/comment/src/Plugin/Field/FieldFormatter/CommentDefaultFormatter.php
@@ -194,6 +194,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 7b140c1..31b01a5 100644
--- a/core/modules/comment/src/Tests/CommentAnonymousTest.php
+++ b/core/modules/comment/src/Tests/CommentAnonymousTest.php
@@ -66,8 +66,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(),
     );
@@ -93,7 +93,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 d1be85d..7f484da 100644
--- a/core/modules/comment/src/Tests/CommentFieldAccessTest.php
+++ b/core/modules/comment/src/Tests/CommentFieldAccessTest.php
@@ -139,6 +139,10 @@ public function testAccessToAdministrativeFields() {
     $instance->settings['anonymous'] = COMMENT_ANONYMOUS_MAY_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 3911a18..a6cbac0 100644
--- a/core/modules/comment/src/Tests/CommentInterfaceTest.php
+++ b/core/modules/comment/src/Tests/CommentInterfaceTest.php
@@ -76,19 +76,23 @@ function testCommentInterface() {
     )));
 
     // Test changing the comment author to "Anonymous".
-    $comment = $this->postComment(NULL, $comment->comment_body->value, $comment->getSubject(), array('name' => ''));
-    $this->assertTrue($comment->getAuthorName() == t('Anonymous') && $comment->getOwnerId() == 0, 'Comment author successfully changed to anonymous.');
+    $anonymous_name = t('Anonymous');
+    $comment = $this->postComment(NULL, $comment->comment_body->value, $comment->getSubject(), array(
+      'name[0][value]' => '',
+      'uid[0][target_id]' => $anonymous_name . ' (0)',
+    ));
+    $this->assertTrue($comment->getAuthorName() == $anonymous_name && $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(), 'uid[0][target_id]' => $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..3d1861b 100644
--- a/core/modules/comment/src/Tests/CommentPreviewTest.php
+++ b/core/modules/comment/src/Tests/CommentPreviewTest.php
@@ -85,9 +85,10 @@ 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['uid[0][target_id]'] = $web_user->getUsername();
+    $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 +100,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 +118,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 +137,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 99c2955..5f2f91c 100644
--- a/core/modules/comment/src/Tests/CommentStatisticsTest.php
+++ b/core/modules/comment/src/Tests/CommentStatisticsTest.php
@@ -108,7 +108,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 12d17c6..b38dc58 100644
--- a/core/modules/comment/src/Tests/CommentTestBase.php
+++ b/core/modules/comment/src/Tests/CommentTestBase.php
@@ -27,7 +27,7 @@
    *
    * @var array
    */
-  public static $modules = array('comment', 'node', 'history', 'field_ui', 'datetime');
+  public static $modules = array('comment', 'node', 'history', 'field_ui', 'datetime', 'entity_reference');
 
   /**
    * An administrative user with permission to configure comment settings.
@@ -97,9 +97,8 @@ protected function setUp() {
    *   Comment body.
    * @param string $subject
    *   Comment subject.
-   * @param string $contact
-   *   Set to NULL for no contact info, TRUE to ignore success checking, and
-   *   array of values to set contact info.
+   * @param array $contact
+   *   Array of contact info.
    * @param string $field_name
    *   (optional) Field name through which the comment should be posted.
    *   Defaults to 'comment'.
@@ -107,7 +106,7 @@ protected function setUp() {
    * @return \Drupal\comment\CommentInterface|null
    *   The posted comment or NULL when posted comment was not found.
    */
-  public function postComment($entity, $comment, $subject = '', $contact = NULL, $field_name = 'comment') {
+  public function postComment($entity, $comment, $subject = '', $contact = array(), $field_name = 'comment') {
     $edit = array();
     $edit['comment_body[0][value]'] = $comment;
 
@@ -327,7 +326,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->getRawContent());
+    return preg_match('/(input).*?(name="name\[0\]\[value\]").*?(input).*?(name="mail\[0\]\[value\]").*?(input).*?(name="homepage\[0\]\[value\]")/s', $this->getRawContent());
   }
 
   /**
diff --git a/core/modules/comment/src/Tests/CommentTranslationUITest.php b/core/modules/comment/src/Tests/CommentTranslationUITest.php
index da0ab2c..6ee8525 100644
--- a/core/modules/comment/src/Tests/CommentTranslationUITest.php
+++ b/core/modules/comment/src/Tests/CommentTranslationUITest.php
@@ -150,9 +150,9 @@ protected function doTestAuthoringInfo() {
         'created' => REQUEST_TIME - mt_rand(0, 1000),
       );
       $edit = array(
-        'name' => $user->getUsername(),
-        'date[date]' => format_date($values[$langcode]['created'], 'custom', 'Y-m-d'),
-        'date[time]' => format_date($values[$langcode]['created'], 'custom', 'H:i:s'),
+        'name[0][value]' => $user->getUsername(),
+        'created[0][value][date]' => format_date($values[$langcode]['created'], 'custom', 'Y-m-d'),
+        'created[0][value][time]' => format_date($values[$langcode]['created'], 'custom', 'H:i:s'),
       );
       $this->drupalPostForm($path, $edit, $this->getFormSubmitAction($entity, $langcode), array('language' => $languages[$langcode]));
     }
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 fa6daa1..08922f1 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 bf2e51a..b05a828 100644
--- a/core/modules/migrate_drupal/src/Tests/d6/MigrateFieldWidgetSettingsTest.php
+++ b/core/modules/migrate_drupal/src/Tests/d6/MigrateFieldWidgetSettingsTest.php
@@ -106,6 +106,7 @@ public function testWidgetSettings() {
     $component = $form_display->getComponent('field_test_email');
     $expected['type'] = 'email_default';
     $expected['weight'] = 6;
+    $expected['settings'] = array('size' => 60, 'placeholder' => '');
     $this->assertIdentical($component, $expected);
 
     // Link field.
