diff --git a/core/lib/Drupal/Core/Entity/DatabaseStorageControllerNG.php b/core/lib/Drupal/Core/Entity/DatabaseStorageControllerNG.php
index ab4a350..f40b93e 100644
--- a/core/lib/Drupal/Core/Entity/DatabaseStorageControllerNG.php
+++ b/core/lib/Drupal/Core/Entity/DatabaseStorageControllerNG.php
@@ -300,7 +300,12 @@ protected function attachPropertyData(array &$entities, $revision_id = FALSE) {
       $data = $query->execute();
 
       $field_definition = $this->getFieldDefinitions(array());
-      $data_fields = array_flip($this->entityInfo['schema_fields_sql'][$this->revisionTable ? 'revision_table' : 'data_table']);
+      if ($this->revisionTable) {
+        $data_fields = array_flip(array_diff($this->entityInfo['schema_fields_sql']['revision_table'], $this->entityInfo['schema_fields_sql']['base_table']));
+      }
+      else {
+        $data_fields = array_flip($this->entityInfo['schema_fields_sql']['data_table']);
+      }
 
       foreach ($data as $values) {
         $id = $values[$this->idKey];
@@ -314,18 +319,19 @@ protected function attachPropertyData(array &$entities, $revision_id = FALSE) {
         // 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, FALSE);
+        $translation = $entities[$id]->getTranslation($langcode);
 
         foreach ($field_definition as $name => $definition) {
           // Set only translatable properties, unless we are dealing with a
           // revisable entity, in which case we did not load the untranslatable
-          // data before. We must also skip the 'langcode' property as it would
-          // overwrite the actual 'langcode' property value.
-          if ($name != 'langcode' && isset($data_fields[$name]) && ($this->revisionTable || !empty($definition['translatable']))) {
+          // 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!
-            $property_definition = $translation->{$name}->getPropertyDefinitions();
-            $translation->{$name}->{key($property_definition)} = $values[$name];
+            $object = $translatable ? $translation : $entity;
+            $property_definition = $object->{$name}->getPropertyDefinitions();
+            $object->{$name}->{key($property_definition)} = $values[$name];
           }
           // Avoid initializing configurable fields before loading them.
           elseif (!empty($definition['configurable'])) {
diff --git a/core/lib/Drupal/Core/Entity/EntityNG.php b/core/lib/Drupal/Core/Entity/EntityNG.php
index 70ac362..e7b629a 100644
--- a/core/lib/Drupal/Core/Entity/EntityNG.php
+++ b/core/lib/Drupal/Core/Entity/EntityNG.php
@@ -389,7 +389,8 @@ public function updateOriginalValues() {
     foreach ($this->getPropertyDefinitions() as $name => $definition) {
       if (empty($definition['computed']) && !empty($this->fields[$name])) {
         foreach ($this->fields[$name] as $langcode => $field) {
-          $this->values[$name][$langcode] = $field->getValue();
+          $value = $field->getValue();
+          $this->values[$name][$langcode] = is_array($value) ? array_filter($value) : $value;
         }
       }
     }
