diff --git a/core/lib/Drupal/Core/Entity/EntityBCDecorator.php b/core/lib/Drupal/Core/Entity/EntityBCDecorator.php
index 7e941a9..57215cb 100644
--- a/core/lib/Drupal/Core/Entity/EntityBCDecorator.php
+++ b/core/lib/Drupal/Core/Entity/EntityBCDecorator.php
@@ -156,6 +156,13 @@ public function __unset($name) {
   }
 
   /**
+   * Implements the magic method for clone().
+   */
+  function __clone() {
+    $this->decorated = clone $this->decorated;
+  }
+
+  /**
    * Forwards the call to the decorated entity.
    */
   public function access($operation = 'view', \Drupal\user\Plugin\Core\Entity\User $account = NULL) {
diff --git a/core/modules/translation_entity/translation_entity.module b/core/modules/translation_entity/translation_entity.module
index 6e681fa..18fdbf3 100644
--- a/core/modules/translation_entity/translation_entity.module
+++ b/core/modules/translation_entity/translation_entity.module
@@ -558,7 +558,9 @@ function translation_entity_field_language_alter(&$display_language, $context) {
 
   if (isset($entity->translation[$context['langcode']]) && translation_entity_enabled($entity_type, $entity->bundle()) && !translation_entity_view_access($entity, $context['langcode'])) {
     $instances = field_info_instances($entity_type, $entity->bundle());
+    // Avoid altering the real entity.
     $entity = clone($entity);
+    $entity_langcode = $entity->language()->langcode;
 
     foreach ($entity->translation as $langcode => $translation) {
       if ($langcode == $context['langcode'] || !translation_entity_view_access($entity, $langcode)) {
@@ -566,6 +568,12 @@ function translation_entity_field_language_alter(&$display_language, $context) {
         // unsetting a language different from LANGUAGE_NOT_SPECIFIED has no
         // effect.
         foreach ($instances as $instance) {
+          // @todo BC entities have the same value accessibile both with the
+          //   entity language and with LANGUAGE_DEFAULT. We need need to unset
+          //   both until we remove the BC layer.
+          if ($langcode == $entity_langcode) {
+            unset($entity->{$instance['field_name']}[LANGUAGE_DEFAULT]);
+          }
           unset($entity->{$instance['field_name']}[$langcode]);
         }
       }
