diff --git a/modules/field/field.attach.inc b/modules/field/field.attach.inc
index 868d7bd..52272a1 100644
--- a/modules/field/field.attach.inc
+++ b/modules/field/field.attach.inc
@@ -650,7 +650,7 @@ function field_attach_load($entity_type, $entities, $age = FIELD_LOAD_CURRENT, $
     // the list of entities to query.
     foreach ($entities as $id => $entity) {
       $cid = "field:$entity_type:$id";
-      if (isset($cache[$cid])) {
+      if (isset($cache[$cid]) && $cache[$cid]->data['vid'] === $entity->vid) {
         unset($queried_entities[$id]);
         foreach ($cache[$cid]->data as $field_name => $values) {
           $entity->$field_name = $values;
@@ -717,6 +717,7 @@ function field_attach_load($entity_type, $entities, $age = FIELD_LOAD_CURRENT, $
       foreach ($queried_entities as $id => $entity) {
         $data = array();
         list($id, $vid, $bundle) = entity_extract_ids($entity_type, $entity);
+        $data['vid'] = $vid;
         $instances = field_info_instances($entity_type, $bundle);
         foreach ($instances as $instance) {
           $data[$instance['field_name']] = $queried_entities[$id]->{$instance['field_name']};
