diff --git a/core/lib/Drupal/Core/Entity/DatabaseStorageControllerNG.php b/core/lib/Drupal/Core/Entity/DatabaseStorageControllerNG.php
index cc03735..685bd4f 100644
--- a/core/lib/Drupal/Core/Entity/DatabaseStorageControllerNG.php
+++ b/core/lib/Drupal/Core/Entity/DatabaseStorageControllerNG.php
@@ -247,6 +247,8 @@ protected function attachLoad(&$queried_entities, $load_revision = FALSE) {
   protected function mapFromStorageRecords(array $records, $load_revision = FALSE) {
     $entities = array();
     foreach ($records as $id => $record) {
+      // If we have no multilingual values we can instantiate entity objecs
+      // right now.
       $values = array();
       foreach ($record as $name => $value) {
         // Skip the item delta and item value levels but let the field assign
@@ -254,9 +256,14 @@ protected function mapFromStorageRecords(array $records, $load_revision = FALSE)
         // saves memory here.
         $values[$name][LANGUAGE_DEFAULT] = $value;
       }
-      $bundle = $this->bundleKey ? $record->{$this->bundleKey} : FALSE;
-      // Turn the record into an entity class.
-      $entities[$id] = new $this->entityClass($values, $this->entityType, $bundle);
+      if (!$this->dataTable) {
+        $bundle = $this->bundleKey ? $record->{$this->bundleKey} : FALSE;
+        // Turn the record into an entity class.
+        $entities[$id] = new $this->entityClass($values, $this->entityType, $bundle);
+      }
+      else {
+        $entities[$id] = &$values;
+      }
     }
     $this->attachPropertyData($entities, $load_revision);
     return $entities;
@@ -287,8 +294,8 @@ protected function attachPropertyData(array &$entities, $revision_id = FALSE) {
         else {
           // Get the revision IDs.
           $revision_ids = array();
-          foreach ($entities as $id => $entity) {
-            $revision_ids[] = $entity->get($this->revisionKey)->value;
+          foreach ($entities as $id => $values) {
+            $revision_ids[] = $values[$this->revisionKey];
           }
           $query->condition($this->revisionKey, $revision_ids);
         }
@@ -306,16 +313,9 @@ protected function attachPropertyData(array &$entities, $revision_id = FALSE) {
       foreach ($data as $values) {
         $id = $values[$this->idKey];
 
-        if ($this->revisionTable) {
-          // Unless a revision ID was specified we are dealing with the default
-          // revision.
-          $entities[$id]->isDefaultRevision(empty($revision_id));
-        }
-
         // Field values in default language are stored with LANGUAGE_DEFAULT as
         // key.
         $langcode = empty($values['default_langcode']) ? $values['langcode'] : LANGUAGE_DEFAULT;
-        $translation = $entities[$id]->getTranslation($langcode);
 
         foreach ($field_definition as $name => $definition) {
           // Set only translatable properties, unless we are dealing with a
@@ -323,19 +323,16 @@ protected function attachPropertyData(array &$entities, $revision_id = FALSE) {
           // data before.
           $translatable = !empty($definition['translatable']);
           if (isset($data_fields[$name]) && ($this->revisionTable || $translatable)) {
-            // @todo Figure out how to determine which property has to be set.
-            // Currently it's guessing, and guessing is evil!
-            $object = $translatable ? $translation : $entities[$id];
-            $property_definition = $object->{$name}->getPropertyDefinitions();
-            // Avoid going through __get() and __set() to make this faster.
-            $object->get($name)->offsetGet(0)->set(key($property_definition), $values[$name]);
-          }
-          // Avoid initializing configurable fields before loading them.
-          elseif (!empty($definition['configurable'])) {
-            unset($entities[$id]->fields[$name]);
+            $entities[$id][$name][$langcode] = $values[$name];
           }
         }
       }
+
+      foreach ($entities as $id => $values) {
+        $bundle = $this->bundleKey ? $values[$this->bundleKey][LANGUAGE_DEFAULT] : FALSE;
+        // Turn the record into an entity class.
+        $entities[$id] = new $this->entityClass($values, $this->entityType, $bundle);
+      }
     }
   }
 
