diff --git a/core/lib/Drupal/Core/Entity/ContentEntityFormController.php b/core/lib/Drupal/Core/Entity/ContentEntityFormController.php
index 7f613bc..f0bd358 100644
--- a/core/lib/Drupal/Core/Entity/ContentEntityFormController.php
+++ b/core/lib/Drupal/Core/Entity/ContentEntityFormController.php
@@ -15,7 +15,7 @@
  *
  * @see \Drupal\Core\ContentEntityBase
  */
-class ContentEntityFormController extends EntityFormController {
+class ContentEntityFormController extends EntityFormController implements ContentEntityFormControllerInterface {
 
   /**
    * The entity manager.
@@ -161,4 +161,18 @@ public function buildEntity(array $form, array &$form_state) {
     return $entity;
   }
 
+  /**
+   * Updates the form language to reflect any change to the entity language.
+   *
+   * @param array $form_state
+   *   A reference to a keyed array containing the current state of the form.
+   */
+  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'];
+    }
+  }
+
+
 }
diff --git a/core/lib/Drupal/Core/Entity/EntityFormController.php b/core/lib/Drupal/Core/Entity/EntityFormController.php
index 54ee489..901c705 100644
--- a/core/lib/Drupal/Core/Entity/EntityFormController.php
+++ b/core/lib/Drupal/Core/Entity/EntityFormController.php
@@ -8,10 +8,8 @@
 namespace Drupal\Core\Entity;
 
 use Drupal\Core\Form\FormBase;
-use Drupal\Core\TypedData\TranslatableInterface;
 use Drupal\entity\EntityFormDisplayInterface;
 use Drupal\Core\Extension\ModuleHandlerInterface;
-use Drupal\Core\Language\Language;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
@@ -152,21 +150,12 @@ public function form(array $form, array &$form_state) {
     // entity properties.
     $info = $entity->entityInfo();
     if (!empty($info['fieldable'])) {
-      field_attach_form($entity, $form, $form_state, $this->getFormLangcode($form_state));
+      field_attach_form($entity, $form, $form_state);
     }
 
     // Add a process callback so we can assign weights and hide extra fields.
     $form['#process'][] = array($this, 'processForm');
 
-    if (!isset($form['langcode'])) {
-      // If the form did not specify otherwise, default to keeping the existing
-      // language of the entity or defaulting to the site default language for
-      // new entities.
-      $form['langcode'] = array(
-        '#type' => 'value',
-        '#value' => !$entity->isNew() ? $entity->language()->id : language_default()->id,
-      );
-    }
     return $form;
   }
 
@@ -269,7 +258,6 @@ protected function actions(array $form, array &$form_state) {
    * {@inheritdoc}
    */
   public function validate(array $form, array &$form_state) {
-    $this->updateFormLangcode($form_state);
     // @todo Remove this.
     // Execute legacy global validation handlers.
     unset($form_state['validate_handlers']);
@@ -324,34 +312,6 @@ public function delete(array $form, array &$form_state) {
   /**
    * {@inheritdoc}
    */
-  public function getFormLangcode(array &$form_state) {
-    return $this->entity->language()->id;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function isDefaultFormLangcode(array $form_state) {
-    // The entity is not translatable, this is always the default language.
-    return TRUE;
-  }
-
-  /**
-   * Updates the form language to reflect any change to the entity language.
-   *
-   * @param array $form_state
-   *   A reference to a keyed array containing the current state of the form.
-   */
-  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'];
-    }
-  }
-
-  /**
-   * {@inheritdoc}
-   */
   public function buildEntity(array $form, array &$form_state) {
     $entity = clone $this->entity;
     // If you submit a form, the form state comes from caching, which forces
diff --git a/core/lib/Drupal/Core/Entity/EntityFormControllerInterface.php b/core/lib/Drupal/Core/Entity/EntityFormControllerInterface.php
index 6ad106b..8cc3be9 100644
--- a/core/lib/Drupal/Core/Entity/EntityFormControllerInterface.php
+++ b/core/lib/Drupal/Core/Entity/EntityFormControllerInterface.php
@@ -18,28 +18,6 @@
 interface EntityFormControllerInterface extends BaseFormIdInterface {
 
   /**
-   * Returns the code identifying the active form language.
-   *
-   * @param array $form_state
-   *   An associative array containing the current state of the form.
-   *
-   * @return string
-   *   The form language code.
-   */
-  public function getFormLangcode(array &$form_state);
-
-  /**
-   * Checks whether the current form language matches the entity one.
-   *
-   * @param array $form_state
-   *   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(array $form_state);
-
-  /**
    * Sets the operation for this form.
    *
    * @param string $operation
diff --git a/core/modules/content_translation/content_translation.module b/core/modules/content_translation/content_translation.module
index ae4a86e..836b2d3 100644
--- a/core/modules/content_translation/content_translation.module
+++ b/core/modules/content_translation/content_translation.module
@@ -7,11 +7,10 @@
 
 use Drupal\content_translation\Plugin\Derivative\ContentTranslationLocalTasks;
 use Drupal\Core\Entity\ContentEntityInterface;
-use Drupal\Core\Entity\EntityFormControllerInterface;
+use Drupal\Core\Entity\ContentEntityFormControllerInterface;
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Language\Language;
 use Drupal\Core\Session\AccountInterface;
-use Drupal\Core\TypedData\TranslatableInterface;
 
 /**
  * Implements hook_help().
@@ -553,7 +552,7 @@ function content_translation_controller($entity_type) {
  *   entity form.
  */
 function content_translation_form_controller(array $form_state) {
-  return isset($form_state['controller']) && $form_state['controller'] instanceof EntityFormControllerInterface ? $form_state['controller'] : FALSE;
+  return isset($form_state['controller']) && $form_state['controller'] instanceof ContentEntityFormControllerInterface ? $form_state['controller'] : FALSE;
 }
 
 /**
diff --git a/core/modules/user/tests/Drupal/user/Tests/Plugin/Core/Entity/ContentEntityFormControllerInterface.php b/core/modules/user/tests/Drupal/user/Tests/Plugin/Core/Entity/ContentEntityFormControllerInterface.php
new file mode 100644
index 0000000..4578119
--- /dev/null
+++ b/core/modules/user/tests/Drupal/user/Tests/Plugin/Core/Entity/ContentEntityFormControllerInterface.php
@@ -0,0 +1,37 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Core\Entity\ContentEntityFormControllerInterface.
+ */
+
+namespace Drupal\Core\Entity;
+
+/**
+ * Defines a common interface for content entity form controller classes.
+ */
+interface ContentEntityFormControllerInterface extends EntityFormControllerInterface {
+
+  /**
+   * Returns the code identifying the active form language.
+   *
+   * @param array $form_state
+   *   An associative array containing the current state of the form.
+   *
+   * @return string
+   *   The form language code.
+   */
+  public function getFormLangcode(array $form_state);
+
+  /**
+   * Checks whether the current form language matches the entity one.
+   *
+   * @param array $form_state
+   *   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(array $form_state);
+
+}
