diff --git a/core/lib/Drupal/Core/Entity/Entity.php b/core/lib/Drupal/Core/Entity/Entity.php
index 1ad4741..254a9f6 100644
--- a/core/lib/Drupal/Core/Entity/Entity.php
+++ b/core/lib/Drupal/Core/Entity/Entity.php
@@ -298,7 +298,7 @@ public function language() {
    *
    * @return \Drupal\Core\Entity\EntityInterface
    */
-  public function getTranslation($langcode, $strict = TRUE) {
+  public function getTranslation($langcode) {
     // @todo: Replace by EntityNG implementation once all entity types have been
     // converted to use the entity field API.
     return $this;
diff --git a/core/lib/Drupal/Core/Entity/EntityBCDecorator.php b/core/lib/Drupal/Core/Entity/EntityBCDecorator.php
index a538c05..b2e453f 100644
--- a/core/lib/Drupal/Core/Entity/EntityBCDecorator.php
+++ b/core/lib/Drupal/Core/Entity/EntityBCDecorator.php
@@ -425,8 +425,8 @@ public function getTranslationLanguages($include_default = TRUE, $include_remove
   /**
    * Forwards the call to the decorated entity.
    */
-  public function getTranslation($langcode, $strict = TRUE) {
-    return $this->decorated->getTranslation($langcode, $strict);
+  public function getTranslation($langcode) {
+    return $this->decorated->getTranslation($langcode);
   }
 
   /**
diff --git a/core/lib/Drupal/Core/Entity/EntityNG.php b/core/lib/Drupal/Core/Entity/EntityNG.php
index f0670b6..ee501fd 100644
--- a/core/lib/Drupal/Core/Entity/EntityNG.php
+++ b/core/lib/Drupal/Core/Entity/EntityNG.php
@@ -7,12 +7,13 @@
 
 namespace Drupal\Core\Entity;
 
+use Drupal\Component\Uuid\Uuid;
 use Drupal\Core\Language\Language;
+use Drupal\Core\Session\AccountInterface;
+use Drupal\Core\TypedData\TranslatableInterface;
 use Drupal\Core\TypedData\TypedDataInterface;
-use Drupal\Component\Uuid\Uuid;
 use ArrayIterator;
 use InvalidArgumentException;
-use Drupal\Core\TypedData\TranslatableInterface;
 
 /**
  * Implements Entity Field API specific enhancements to the Entity class.
@@ -102,7 +103,7 @@ class EntityNG extends Entity {
    *
    * @var array
    */
-  protected $translations;
+  protected $translations = array();
 
   /**
    * A flag indicating whether a translation object is being initialized.
@@ -130,7 +131,7 @@ public function __construct(array $values, $entity_type, $bundle = FALSE, $trans
     // Initialize translations. Ensure we have at least an entry for the entity
     // original language.
     $data = array('status' => TranslatableInterface::TRANSLATION_EXISTING);
-    $this->translations = array(Language::LANGCODE_DEFAULT => $data);
+    $this->translations[Language::LANGCODE_DEFAULT] = $data;
     if ($translations) {
       $default_langcode = $this->language()->langcode;
       foreach ($translations as $langcode) {
@@ -384,6 +385,15 @@ public function isEmpty() {
   }
 
   /**
+   * @inheritdoc
+   */
+  public function access($operation = 'view', AccountInterface $account = NULL) {
+    return \Drupal::entityManager()
+      ->getAccessController($this->entityType)
+      ->access($this, $operation, $this->activeLangcode, $account);
+  }
+
+  /**
    * Implements \Drupal\Core\TypedData\TranslatableInterface::language().
    */
   public function language() {
@@ -420,7 +430,7 @@ protected function getOriginalLanguage() {
    *
    * @return \Drupal\Core\Entity\EntityInterface
    */
-  public function getTranslation($langcode, $strict = TRUE) {
+  public function getTranslation($langcode) {
     // Ensure we always use the default language code when dealing with the
     // original entity language.
     if ($langcode != Language::LANGCODE_DEFAULT && $langcode == $this->getOriginalLanguage()->langcode) {
@@ -466,7 +476,9 @@ public function getTranslation($langcode, $strict = TRUE) {
     // return a new one.
     $languages = language_list();
     if (isset($languages[$langcode])) {
-      return $this->addTranslation($langcode);
+      // If the entity language is not a configured language we fall back to the
+      // entity itself, since in this case it cannot have translations.
+      return isset($languages[$this->getOriginalLanguage()->langcode]) ? $this->addTranslation($langcode) : $this;
     }
 
     // TODO Do we want to return $this instead?
@@ -572,7 +584,6 @@ public function getTranslationLanguages($include_default = TRUE, $include_remove
       $translations = $this->translations;
     }
 
-    $translations = array_flip(array_keys($translations));
     unset($translations[Language::LANGCODE_DEFAULT]);
 
     if ($include_default) {
diff --git a/core/lib/Drupal/Core/TypedData/TranslatableInterface.php b/core/lib/Drupal/Core/TypedData/TranslatableInterface.php
index ebe6b22..d3da690 100644
--- a/core/lib/Drupal/Core/TypedData/TranslatableInterface.php
+++ b/core/lib/Drupal/Core/TypedData/TranslatableInterface.php
@@ -61,16 +61,11 @@ public function getTranslationLanguages($include_default = TRUE, $include_remove
    * @param $langcode
    *   The language code of the translation to get or Language::LANGCODE_DEFAULT
    *   to get the data in default language.
-   * @param $strict
-   *   (optional) If the data is complex, whether the translation should include
-   *   only translatable properties. If set to FALSE, untranslatable properties
-   *   are included (in default language) as well as translatable properties in
-   *   the specified language. Defaults to TRUE.
    *
    * @return \Drupal\Core\TypedData\TypedDataInterface
    *   A typed data object for the translated data.
    */
-  public function getTranslation($langcode, $strict = TRUE);
+  public function getTranslation($langcode);
 
 
   /**
diff --git a/core/modules/edit/lib/Drupal/edit/MetadataGenerator.php b/core/modules/edit/lib/Drupal/edit/MetadataGenerator.php
index cecc676..65a50c2 100644
--- a/core/modules/edit/lib/Drupal/edit/MetadataGenerator.php
+++ b/core/modules/edit/lib/Drupal/edit/MetadataGenerator.php
@@ -69,7 +69,7 @@ public function generate(EntityInterface $entity, FieldInstance $instance, $lang
 
     // Early-return if no editor is available.
     $formatter_id = entity_get_render_display($entity, $view_mode)->getFormatter($instance['field_name'])->getPluginId();
-    $items = $entity->getTranslation($langcode, FALSE)->get($field_name)->getValue();
+    $items = $entity->getTranslation($langcode)->get($field_name)->getValue();
     $editor_id = $this->editorSelector->getEditor($formatter_id, $instance, $items);
     if (!isset($editor_id)) {
       return array('access' => FALSE);
diff --git a/core/modules/editor/lib/Drupal/editor/EditorController.php b/core/modules/editor/lib/Drupal/editor/EditorController.php
index 2968454..22164b6 100644
--- a/core/modules/editor/lib/Drupal/editor/EditorController.php
+++ b/core/modules/editor/lib/Drupal/editor/EditorController.php
@@ -37,7 +37,7 @@ public function getUntransformedText(EntityInterface $entity, $field_name, $lang
     $response = new AjaxResponse();
 
     // Direct text editing is only supported for single-valued fields.
-    $field = $entity->getTranslation($langcode, FALSE)->$field_name;
+    $field = $entity->getTranslation($langcode)->$field_name;
     $editable_text = check_markup($field->value, $field->format, $langcode, FALSE, array(FILTER_TYPE_TRANSFORM_REVERSIBLE, FILTER_TYPE_TRANSFORM_IRREVERSIBLE));
     $response->addCommand(new GetUntransformedTextCommand($editable_text));
 
diff --git a/core/modules/field/lib/Drupal/field/Tests/FieldTestBase.php b/core/modules/field/lib/Drupal/field/Tests/FieldTestBase.php
index 949a108..1287cb0 100644
--- a/core/modules/field/lib/Drupal/field/Tests/FieldTestBase.php
+++ b/core/modules/field/lib/Drupal/field/Tests/FieldTestBase.php
@@ -52,7 +52,7 @@ function assertFieldValues(EntityInterface $entity, $field_name, $langcode, $exp
     // Re-load the entity to make sure we have the latest changes.
     entity_get_controller($entity->entityType())->resetCache(array($entity->id()));
     $e = entity_load($entity->entityType(), $entity->id());
-    $field = $values = $e->getTranslation($langcode, FALSE)->$field_name;
+    $field = $values = $e->getTranslation($langcode)->$field_name;
     // Filter out empty values so that they don't mess with the assertions.
     $field->filterEmptyValues();
     $values = $field->getValue();
diff --git a/core/modules/forum/forum.module b/core/modules/forum/forum.module
index 7cc950f..3772864 100644
--- a/core/modules/forum/forum.module
+++ b/core/modules/forum/forum.module
@@ -534,7 +534,7 @@ function forum_field_storage_pre_insert(EntityInterface $entity, &$skip_fields)
   if ($entity->entityType() == 'node' && $entity->status && _forum_node_check_node_type($entity)) {
     $query = db_insert('forum_index')->fields(array('nid', 'title', 'tid', 'sticky', 'created', 'comment_count', 'last_comment_timestamp'));
     foreach ($entity->getTranslationLanguages() as $langcode => $language) {
-      $translation = $entity->getTranslation($langcode, FALSE);
+      $translation = $entity->getTranslation($langcode);
       $query->values(array(
         'nid' => $entity->id(),
         'title' => $translation->title->value,
diff --git a/core/modules/node/lib/Drupal/node/NodeAccessController.php b/core/modules/node/lib/Drupal/node/NodeAccessController.php
index d7cfd2c..e36743e 100644
--- a/core/modules/node/lib/Drupal/node/NodeAccessController.php
+++ b/core/modules/node/lib/Drupal/node/NodeAccessController.php
@@ -40,8 +40,8 @@ protected function checkAccess(EntityInterface $node, $operation, $langcode, Acc
     $uid = isset($node->uid) ? $node->uid : NULL;
     // If it is a proper EntityNG object, use the proper methods.
     if ($node instanceof EntityNG) {
-      $status = $node->getTranslation($langcode, FALSE)->status->value;
-      $uid = $node->getTranslation($langcode, FALSE)->uid->value;
+      $status = $node->getTranslation($langcode)->status->value;
+      $uid = $node->getTranslation($langcode)->uid->value;
     }
 
     // Check if authors can view their own unpublished nodes.
diff --git a/core/modules/node/node.admin.inc b/core/modules/node/node.admin.inc
index 821f41a..fb9593e 100644
--- a/core/modules/node/node.admin.inc
+++ b/core/modules/node/node.admin.inc
@@ -103,7 +103,7 @@ function _node_mass_update_helper(NodeInterface $node, array $updates, $langcode
   $node->original = clone $node;
   foreach ($langcodes as $langcode) {
     foreach ($updates as $name => $value) {
-      $node->getTranslation($langcode, FALSE)->$name = $value;
+      $node->getTranslation($langcode)->$name = $value;
     }
   }
   $node->save();
diff --git a/core/modules/system/lib/Drupal/system/Tests/Entity/EntityTranslationFormTest.php b/core/modules/system/lib/Drupal/system/Tests/Entity/EntityTranslationFormTest.php
index 2a6e833..20822d7 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Entity/EntityTranslationFormTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Entity/EntityTranslationFormTest.php
@@ -20,7 +20,7 @@ class EntityTranslationFormTest extends WebTestBase {
    *
    * @var array
    */
-  public static $modules = array('entity_test', 'locale', 'node');
+  public static $modules = array('entity_test', 'language', 'node');
 
   protected $langcodes;
 
@@ -112,7 +112,7 @@ function testEntityFormLanguage() {
 
     // Create a body translation and check the form language.
     $langcode2 = $this->langcodes[1];
-    $node->body[$langcode2][0]['value'] = $this->randomName(16);
+    $node->getTranslation($langcode2)->body->value = $this->randomName(16);
     $node->save();
     $this->drupalGet($langcode2 . '/node/' . $node->nid . '/edit');
     $form_langcode = \Drupal::state()->get('entity_test.form_langcode') ?: FALSE;
diff --git a/core/modules/system/lib/Drupal/system/Tests/Entity/EntityTranslationTest.php b/core/modules/system/lib/Drupal/system/Tests/Entity/EntityTranslationTest.php
index 919565c..d712fc9 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Entity/EntityTranslationTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Entity/EntityTranslationTest.php
@@ -163,22 +163,6 @@ protected function assertEntityLanguageMethods($entity_type) {
       $this->pass('A translation for an invalid language is NULL.');
     }
 
-    // Try to get an untranslatable value from a translation in strict mode.
-    try {
-      $field_name = 'field_test_text';
-      $value = $entity->getTranslation($this->langcodes[1])->get($field_name);
-      $this->fail(format_string('%entity_type: Getting an untranslatable value from a translation in strict mode throws an exception.', array('%entity_type' => $entity_type)));
-    }
-    catch (InvalidArgumentException $e) {
-      $this->pass(format_string('%entity_type: Getting an untranslatable value from a translation in strict mode throws an exception.', array('%entity_type' => $entity_type)));
-    }
-
-    // Try to get an untranslatable value from a translation in non-strict
-    // mode.
-    $entity->set($field_name, array(0 => array('value' => 'default value')));
-    $value = $entity->getTranslation($this->langcodes[1], FALSE)->get($field_name)->value;
-    $this->assertEqual($value, 'default value', format_string('%entity_type: Untranslated value retrieved from translation in non-strict mode.', array('%entity_type' => $entity_type)));
-
     // Try to set a value using an invalid language code.
     try {
       $entity->getTranslation('invalid')->set($this->field_name, NULL);
@@ -188,17 +172,9 @@ protected function assertEntityLanguageMethods($entity_type) {
       $this->pass(format_string('%entity_type: Setting a translation for an invalid language throws an exception.', array('%entity_type' => $entity_type)));
     }
 
-    // Try to set an untranslatable value into a translation in strict mode.
-    try {
-      $entity->getTranslation($this->langcodes[1])->set($field_name, NULL);
-      $this->fail(format_string('%entity_type: Setting an untranslatable value into a translation in strict mode throws an exception.', array('%entity_type' => $entity_type)));
-    }
-    catch (InvalidArgumentException $e) {
-      $this->pass(format_string('%entity_type: Setting an untranslatable value into a translation in strict mode throws an exception.', array('%entity_type' => $entity_type)));
-    }
-
     // Set the value in default language.
-    $entity->getTranslation($this->langcodes[1], FALSE)->set($field_name, array(0 => array('value' => 'default value2')));
+    $field_name = 'field_test_text';
+    $entity->getTranslation($this->langcodes[1])->set($field_name, array(0 => array('value' => 'default value2')));
     // Get the value.
     $this->assertEqual($entity->get($field_name)->value, 'default value2', format_string('%entity_type: Untranslated value set into a translation in non-strict mode.', array('%entity_type' => $entity_type)));
   }
diff --git a/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/EntityTestFormController.php b/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/EntityTestFormController.php
index ea72819..7d27c48 100644
--- a/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/EntityTestFormController.php
+++ b/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/EntityTestFormController.php
@@ -19,15 +19,12 @@ class EntityTestFormController extends EntityFormControllerNG {
    */
   public function form(array $form, array &$form_state) {
     $form = parent::form($form, $form_state);
-
     $entity = $this->entity;
-    $langcode = $this->getFormLangcode($form_state);
-    $translation = $entity->getTranslation($langcode);
 
     $form['name'] = array(
       '#type' => 'textfield',
       '#title' => t('Name'),
-      '#default_value' => $translation->name->value,
+      '#default_value' => $entity->name->value,
       '#size' => 60,
       '#maxlength' => 128,
       '#required' => TRUE,
@@ -37,7 +34,7 @@ public function form(array $form, array &$form_state) {
     $form['user_id'] = array(
       '#type' => 'textfield',
       '#title' => 'UID',
-      '#default_value' => $translation->user_id->target_id,
+      '#default_value' => $entity->user_id->target_id,
       '#size' => 60,
       '#maxlength' => 128,
       '#required' => TRUE,
diff --git a/core/modules/translation_entity/lib/Drupal/translation_entity/FieldTranslationSynchronizer.php b/core/modules/translation_entity/lib/Drupal/translation_entity/FieldTranslationSynchronizer.php
index 757cdff..632124f 100644
--- a/core/modules/translation_entity/lib/Drupal/translation_entity/FieldTranslationSynchronizer.php
+++ b/core/modules/translation_entity/lib/Drupal/translation_entity/FieldTranslationSynchronizer.php
@@ -48,7 +48,7 @@ public function synchronizeFields(EntityInterface $entity, $sync_langcode, $orig
     // If we have no information about what to sync to, if we are creating a new
     // entity, if we have no translations for the current entity and we are not
     // creating one, then there is nothing to synchronize.
-    if (empty($sync_langcode) || $entity->isNew() || (count($translations) < 2 && !$original_langcode)) {
+    if (empty($sync_langcode) || $entity->isNew() || count($translations) < 2) {
       return;
     }
 
diff --git a/core/modules/translation_entity/lib/Drupal/translation_entity/Tests/EntityTranslationUITest.php b/core/modules/translation_entity/lib/Drupal/translation_entity/Tests/EntityTranslationUITest.php
index e18c454..57c39ce 100644
--- a/core/modules/translation_entity/lib/Drupal/translation_entity/Tests/EntityTranslationUITest.php
+++ b/core/modules/translation_entity/lib/Drupal/translation_entity/Tests/EntityTranslationUITest.php
@@ -260,7 +260,7 @@ protected function getFormSubmitAction(EntityInterface $entity) {
   protected function getTranslation(EntityInterface $entity, $langcode) {
     // @todo remove once EntityBCDecorator is gone.
     $entity = $entity->getNGEntity();
-    return $entity instanceof EntityNG ? $entity->getTranslation($langcode, FALSE) : $entity;
+    return $entity instanceof EntityNG ? $entity->getTranslation($langcode) : $entity;
   }
 
   /**
diff --git a/core/modules/views_ui/lib/Drupal/views_ui/ViewUI.php b/core/modules/views_ui/lib/Drupal/views_ui/ViewUI.php
index b95c75b..91d48ff 100644
--- a/core/modules/views_ui/lib/Drupal/views_ui/ViewUI.php
+++ b/core/modules/views_ui/lib/Drupal/views_ui/ViewUI.php
@@ -923,7 +923,7 @@ public function getExportProperties() {
   /**
    * Implements \Drupal\Core\TypedData\TranslatableInterface::getTranslation().
    */
-  public function getTranslation($langcode, $strict = TRUE) {
+  public function getTranslation($langcode) {
     // @todo Revisit this once config entities are converted to NG.
     return $this;
   }
