diff --git a/core/modules/entity/lib/Drupal/entity/EntityFormController.php b/core/modules/entity/lib/Drupal/entity/EntityFormController.php
index e9601b7..dabb330 100644
--- a/core/modules/entity/lib/Drupal/entity/EntityFormController.php
+++ b/core/modules/entity/lib/Drupal/entity/EntityFormController.php
@@ -207,7 +207,7 @@ class EntityFormController implements EntityFormControllerInterface {
   /**
    * Implements Drupal\entity\EntityFormControllerInterface::getFormLangcode().
    */
-  public function getFormLangcode($form_state) {
+  public function getFormLangcode(array $form_state) {
     $entity = $this->getEntity($form_state);
     $translations = $entity->translations();
 
diff --git a/core/modules/entity/lib/Drupal/entity/EntityFormControllerInterface.php b/core/modules/entity/lib/Drupal/entity/EntityFormControllerInterface.php
index 6765d85..95fb2fc 100644
--- a/core/modules/entity/lib/Drupal/entity/EntityFormControllerInterface.php
+++ b/core/modules/entity/lib/Drupal/entity/EntityFormControllerInterface.php
@@ -49,7 +49,7 @@ interface EntityFormControllerInterface {
    * @return string
    *   The form language code.
    */
-  public function getFormLangcode($form_state);
+  public function getFormLangcode(array $form_state);
 
   /**
    * Returns the operation identifying the form controller.
diff --git a/core/modules/entity/lib/Drupal/entity/Tests/EntityTranslationTest.php b/core/modules/entity/lib/Drupal/entity/Tests/EntityTranslationTest.php
index 077cc45..6e52309 100644
--- a/core/modules/entity/lib/Drupal/entity/Tests/EntityTranslationTest.php
+++ b/core/modules/entity/lib/Drupal/entity/Tests/EntityTranslationTest.php
@@ -284,7 +284,7 @@ class EntityTranslationTest extends WebTestBase {
     // Check to make sure the node was created.
     $node = $this->drupalGetNodeByTitle($edit["title"]);
     $this->assertTrue($node, t('Node found in database.'));
-    
+
     // Make body translatable.
     $field = field_info_field('body');
     $field['translatable'] = TRUE;
diff --git a/core/modules/node/lib/Drupal/node/NodeFormController.php b/core/modules/node/lib/Drupal/node/NodeFormController.php
index ade0a4c..00d5017 100644
--- a/core/modules/node/lib/Drupal/node/NodeFormController.php
+++ b/core/modules/node/lib/Drupal/node/NodeFormController.php
@@ -337,7 +337,14 @@ class NodeFormController extends EntityFormController {
   protected function submitNodeLanguage(array $form, array &$form_state) {
     if (field_has_translation_handler('node', 'node')) {
       $bundle = $form_state['values']['type'];
-      $current_langcode = $this->getFormLangcode($form_state);
+      $entity = $this->getEntity($form_state);
+      $form_langcode = $this->getFormLangcode($form_state);
+
+      // If we are editing the default language values, we use the submitted
+      // entity language as the new language for fields to handle any language
+      // change. Otherwise the current form language is the proper value, since
+      // in this case it is not supposed to change.
+      $current_langcode = $entity->language()->langcode == $form_langcode ? $form_state['values']['langcode'] : $form_langcode;
 
       foreach (field_info_instances('node', $bundle) as $instance) {
         $field_name = $instance['field_name'];
