diff --git a/core/lib/Drupal/Core/Entity/EntityFormController.php b/core/lib/Drupal/Core/Entity/EntityFormController.php
index 4e0fc6a..ed25712 100644
--- a/core/lib/Drupal/Core/Entity/EntityFormController.php
+++ b/core/lib/Drupal/Core/Entity/EntityFormController.php
@@ -187,6 +187,7 @@ public function submit(array $form, array &$form_state) {
     // Remove button and internal Form API values from submitted values.
     form_state_values_clean($form_state);
 
+    $this->updateFormLangcode($form_state);
     $this->submitEntityLanguage($form, $form_state);
     $entity = $this->buildEntity($form, $form_state);
     $this->setEntity($entity, $form_state);
@@ -246,24 +247,32 @@ public function getFormLangcode(array $form_state) {
   /**
    * Implements EntityFormControllerInterface::isDefaultFormLangcode().
    */
-  public function isDefaultFormLangcode($form_state) {
+  public function isDefaultFormLangcode(array $form_state) {
     return $this->getFormLangcode($form_state) == $this->getEntity($form_state)->language()->langcode;
   }
 
   /**
-   * Handle possible entity language changes.
+   * Updates the form language to reflect any change to the entity language.
    *
-   * @param array $form
-   *   An associative array containing the structure of the form.
    * @param array $form_state
-   *   A reference to a keyed array containing the current state of the form.
+   *   A keyed array containing the current state of the form.
    */
-  protected function submitEntityLanguage(array $form, array &$form_state) {
+  protected function updateFormLangcode(array $form_state) {
     // Update the form language as it might have changed.
     if (isset($form_state['values']['langcode']) && $this->isDefaultFormLangcode($form_state)) {
       $form_state['langcode'] = $form_state['values']['langcode'];
     }
+  }
 
+  /**
+   * Handle possible entity language changes.
+   *
+   * @param array $form
+   *   An associative array containing the structure of the form.
+   * @param array $form_state
+   *   A reference to a keyed array containing the current state of the form.
+   */
+  protected function submitEntityLanguage(array $form, array &$form_state) {
     $entity = $this->getEntity($form_state);
     $entity_type = $entity->entityType();
 
diff --git a/core/lib/Drupal/Core/Entity/EntityFormControllerInterface.php b/core/lib/Drupal/Core/Entity/EntityFormControllerInterface.php
index fecb078..f2ddac2 100644
--- a/core/lib/Drupal/Core/Entity/EntityFormControllerInterface.php
+++ b/core/lib/Drupal/Core/Entity/EntityFormControllerInterface.php
@@ -47,12 +47,12 @@ public function getFormLangcode(array $form_state);
    * Checks whether the current form language matches the entity one.
    *
    * @param array $form_state
-   *   A reference to a keyed array containing the current state of the form.
+   *   A keyed array containing the current state of the form.
    *
    * @return boolean
    *   Returns TRUE if the entity form language matches the entity one.
    */
-  public function isDefaultFormLangcode($form_state);
+  public function isDefaultFormLangcode(array $form_state);
 
   /**
    * Returns the operation identifying the form controller.
diff --git a/core/lib/Drupal/Core/Entity/EntityFormControllerNG.php b/core/lib/Drupal/Core/Entity/EntityFormControllerNG.php
index 51bc911..d6f47e7 100644
--- a/core/lib/Drupal/Core/Entity/EntityFormControllerNG.php
+++ b/core/lib/Drupal/Core/Entity/EntityFormControllerNG.php
@@ -48,6 +48,16 @@ public function validate(array $form, array &$form_state) {
   }
 
   /**
+   * Overrides EntityFormController::submitEntityLanguage().
+   */
+  protected function submitEntityLanguage(array $form, array &$form_state) {
+    // Nothing to do here, as original field values are always stored with
+    // LANGUAGE_DEFAULT language.
+    // @todo Delete this method when merging EntityFormControllerNG with
+    //   EntityFormController.
+  }
+
+  /**
    * Overrides EntityFormController::buildEntity().
    */
   public function buildEntity(array $form, array &$form_state) {
