diff --git a/core/lib/Drupal/Core/Entity/DatabaseStorageController.php b/core/lib/Drupal/Core/Entity/DatabaseStorageController.php
index dbbed8c..721f54c 100644
--- a/core/lib/Drupal/Core/Entity/DatabaseStorageController.php
+++ b/core/lib/Drupal/Core/Entity/DatabaseStorageController.php
@@ -389,10 +389,7 @@ public function create(array $values) {
     $entity_class::preCreate($this, $values);
 
     $bundle = (isset($this->entityInfo['entity_keys']['bundle']) && $values[$this->entityInfo['entity_keys']['bundle']]) ? $values[$this->entityInfo['entity_keys']['bundle']] : FALSE;
-    $entity = \Drupal::entityManager()->createInstance($this->entityType, array(
-      'bundle' => $bundle,
-      'values' => $values,
-    ));
+    $entity = \Drupal::entityManager()->createInstance($this->entityType, $values, $bundle);
 
     // Assign a new UUID if there is none yet.
     if ($this->uuidKey && !isset($entity->{$this->uuidKey})) {
diff --git a/core/lib/Drupal/Core/Entity/DatabaseStorageControllerNG.php b/core/lib/Drupal/Core/Entity/DatabaseStorageControllerNG.php
index cf13dc1..9753d57 100644
--- a/core/lib/Drupal/Core/Entity/DatabaseStorageControllerNG.php
+++ b/core/lib/Drupal/Core/Entity/DatabaseStorageControllerNG.php
@@ -104,10 +104,7 @@ public function create(array $values) {
     if ($this->bundleKey && isset($values[$this->bundleKey])) {
       $bundle = $values[$this->bundleKey];
     }
-    $entity = \Drupal::entityManager()->createInstance($this->entityType, array(
-      'bundle' => $bundle,
-      'values' => $values,
-    ));
+    $entity = \Drupal::entityManager()->createInstance($this->entityType, $values, $bundle);
 
     // Apply default values.
     foreach ($entity as $name => $field) {
@@ -238,10 +235,7 @@ protected function mapFromStorageRecords(array $records, $load_revision = FALSE)
       if (!$this->dataTable) {
         $bundle = $this->bundleKey ? $record->{$this->bundleKey} : FALSE;
         // Turn the record into an entity object.
-        $entities[$id] = \Drupal::entityManager()->createInstance($this->entityType, array(
-          'bundle' => $bundle,
-          'values' => $entities[$id],
-        ));
+        $entities[$id] = \Drupal::entityManager()->createInstance($this->entityType, $entities[$id], $bundle);
       }
     }
     $this->attachPropertyData($entities, $load_revision);
@@ -312,11 +306,7 @@ protected function attachPropertyData(array &$entities, $revision_id = FALSE) {
       foreach ($entities as $id => $values) {
         $bundle = $this->bundleKey ? $values[$this->bundleKey][Language::LANGCODE_DEFAULT] : FALSE;
         // Turn the record into an entity class.
-        $entities[$id] = \Drupal::entityManager()->createInstance($this->entityType, array(
-          'bundle' => $bundle,
-          'values' => $values,
-          'translations' => array_keys($translations[$id]),
-        ));
+        $entities[$id] = \Drupal::entityManager()->createInstance($this->entityType, $values, $bundle, array_keys($translations[$id]));
       }
     }
   }
diff --git a/core/lib/Drupal/Core/Entity/Entity.php b/core/lib/Drupal/Core/Entity/Entity.php
index 9d95e03..160e83a 100644
--- a/core/lib/Drupal/Core/Entity/Entity.php
+++ b/core/lib/Drupal/Core/Entity/Entity.php
@@ -12,6 +12,7 @@
 use Drupal\Core\TypedData\TranslatableInterface;
 use Drupal\Core\TypedData\TypedDataInterface;
 use Drupal\Core\Session\AccountInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
  * Defines a base entity class.
@@ -78,7 +79,7 @@ public function __construct(array $values, $entity_type) {
   /**
    * Implements \Drupal\Core\Entity\EntityInterface::createInstance().
    */
-  public static function createInstance(array $values, $entity_type, $bundle = FALSE, $translations = array()) {
+  public static function createInstance(ContainerInterface $container, array $values, $entity_type, $bundle = FALSE, $translations = array()) {
     return new static($values, $entity_type, $bundle, $translations);
   }
 
diff --git a/core/lib/Drupal/Core/Entity/EntityInterface.php b/core/lib/Drupal/Core/Entity/EntityInterface.php
index 24a1819..051a363 100644
--- a/core/lib/Drupal/Core/Entity/EntityInterface.php
+++ b/core/lib/Drupal/Core/Entity/EntityInterface.php
@@ -10,6 +10,7 @@
 use Drupal\Core\TypedData\AccessibleInterface;
 use Drupal\Core\TypedData\ComplexDataInterface;
 use Drupal\Core\TypedData\TranslatableInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
  * Defines a common interface for all entity objects.
@@ -44,7 +45,7 @@
    * @return \Drupal\Core\Entity\EntityInterface
    *   An empty new entity object.
    */
-  public static function createInstance(array $values, $entity_type, $bundle = FALSE, $translations = array());
+  public static function createInstance(ContainerInterface $container, array $values, $entity_type, $bundle = FALSE, $translations = array());
 
   /**
    * Returns the entity UUID (Universally Unique Identifier).
diff --git a/core/lib/Drupal/Core/Entity/EntityManager.php b/core/lib/Drupal/Core/Entity/EntityManager.php
index d65c009..197ba50 100644
--- a/core/lib/Drupal/Core/Entity/EntityManager.php
+++ b/core/lib/Drupal/Core/Entity/EntityManager.php
@@ -214,24 +214,19 @@ public function hasController($entity_type, $controller_type) {
    * @return \Drupal\Core\Entity\EntityInterface
    *   An empty new entity object.
    */
-  public function createInstance($plugin_id, array $configuration) {
-    $configuration += array(
-      'bundle' => FALSE,
-      'values' => array(),
-      'translations' => array()
-    );
-    $definition = $this->getDefinition($plugin_id);
+  public function createInstance($entity_type, array $values = array(), $bundle = FALSE, array $translations = array()) {
+    $definition = $this->getDefinition($entity_type);
     if (!$definition) {
-      throw new \InvalidArgumentException(sprintf('The %s entity type does not exist.', $plugin_id));
+      throw new \InvalidArgumentException(sprintf('The %s entity type does not exist.', $entity_type));
     }
     // Check if this entity type has bundles and if so if a bundle is defined.
     $bundle_key = !empty($definition['entity_keys']['bundle']) ? $definition['entity_keys']['bundle'] : FALSE;
     if ($bundle_key) {
-      if (empty($configuration['bundle'])) {
-        throw new EntityStorageException(format_string('Missing bundle for entity type @type', array('@type' => $plugin_id)));
+      if (empty($bundle)) {
+        throw new EntityStorageException(format_string('Missing bundle for entity type @type', array('@type' => $entity_type)));
       }
     }
-    return $definition['class']::createInstance($configuration['values'], $plugin_id, $configuration['bundle'], $configuration['translations']);
+    return $definition['class']::createInstance(\Drupal::getContainer(), $values, $entity_type, $bundle, $translations);
   }
 
   /**
diff --git a/core/lib/Drupal/Core/Entity/EntityNG.php b/core/lib/Drupal/Core/Entity/EntityNG.php
index e337b0b..be91e88 100644
--- a/core/lib/Drupal/Core/Entity/EntityNG.php
+++ b/core/lib/Drupal/Core/Entity/EntityNG.php
@@ -150,7 +150,31 @@ public function __construct(array $values, $entity_type, $bundle = FALSE, $trans
     // Ensure we hit the magic setter when setting properties.
     $this->init();
 
-    // Ensure the language property isn't overwritten.
+//    $entity_langcode = Language::LANGCODE_DEFAULT;
+//    if (!empty($values['langcode'])) {
+//      $entity_langcode = (is_array($values['langcode'])) ? reset($values['langcode']) : $values['langcode'];
+//    }
+//
+//    // Currently each stored value has it's own internal language structure,
+//    // ensure the passed in values meet the required structure and set them to
+//    // the raw values array of the entity.
+//    // The raw values array will be used whenever properties accessed.
+//    // @todo Change the raw values array structure to hold field values per
+//    // language instead languages per field.
+//    foreach ($values as $field => $value) {
+//      $field_definition = $this->getPropertyDefinition($field);
+//      $field_langcode = Language::LANGCODE_DEFAULT;
+//      if (!empty($field_definition['translatable'])) {
+//        $field_langcode = $entity_langcode;
+//      }
+//      // If the value doesn't meet the required raw values structure wrap it.
+//      if (!is_array($value) || !isset($value[$field_langcode])) {
+//        $value = array($field_langcode => $value);
+//      }
+//      $this->values[$field] = $value;
+//    }
+
+    // Ensure the protected entity language cache isn't overwritten.
     unset($values['language']);
 
     // Set the data.
diff --git a/core/modules/system/lib/Drupal/system/Tests/Entity/EntityCrudHookTest.php b/core/modules/system/lib/Drupal/system/Tests/Entity/EntityCrudHookTest.php
index c92cf2c..0ab605f 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Entity/EntityCrudHookTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Entity/EntityCrudHookTest.php
@@ -472,7 +472,7 @@ public function testUserHooks() {
       'mail' => 'test@example.com',
       'created' => REQUEST_TIME,
       'status' => 1,
-      'language' => 'en',
+      'langcode' => 'en',
     ));
 
     $this->assertHookMessageOrder(array(
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 6a19810..eff5d4f 100644
--- a/core/modules/views_ui/lib/Drupal/views_ui/ViewUI.php
+++ b/core/modules/views_ui/lib/Drupal/views_ui/ViewUI.php
@@ -16,6 +16,7 @@
 use Drupal\views\Plugin\views\query\Sql;
 use Drupal\views\Entity\View;
 use Drupal\views\ViewStorageInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
  * Stores UI related temporary settings.
@@ -156,7 +157,7 @@ public function __construct(ViewStorageInterface $storage, ViewExecutable $execu
   /**
    * Implements \Drupal\Core\Entity\EntityInterface::createInstance().
    */
-  public static function createInstance(array $values, $entity_type, $bundle = FALSE, $translations = array()) {
+  public static function createInstance(ContainerInterface $container, array $values, $entity_type, $bundle = FALSE, $translations = array()) {
     // This class shouldn't be used like an entity and thus shouldn't be
     // instantiated using this helper function. Therefore we break with the
     // interface and just throw an error.
