diff --git a/includes/entity.controller.inc b/includes/entity.controller.inc
index 25730d3..982b209 100644
--- a/includes/entity.controller.inc
+++ b/includes/entity.controller.inc
@@ -427,6 +427,13 @@ class EntityAPIController extends DrupalDefaultEntityController implements Entit
     $langcode = isset($langcode) ? $langcode : $GLOBALS['language_content']->language;
 
     // Add in fields.
+    $key = isset($entity->{$this->idKey}) ? $entity->{$this->idKey} : NULL;
+    if (!empty($this->entityInfo['fieldable'])) {
+      field_attach_prepare_view($this->entityType, array($key => $entity), $view_mode);
+    }
+
+    entity_prepare_view($this->entityType, array($key => $entity), $langcode);
+
     if (!empty($this->entityInfo['fieldable'])) {
       $entity->content += field_attach_view($this->entityType, $entity, $view_mode, $langcode);
     }
@@ -450,10 +457,7 @@ class EntityAPIController extends DrupalDefaultEntityController implements Entit
     // For Field API and entity_prepare_view, the entities have to be keyed by
     // (numeric) id.
     $entities = entity_key_array_by_property($entities, $this->idKey);
-    if (!empty($this->entityInfo['fieldable'])) {
-      field_attach_prepare_view($this->entityType, $entities, $view_mode);
-    }
-    entity_prepare_view($this->entityType, $entities);
+
     $langcode = isset($langcode) ? $langcode : $GLOBALS['language_content']->language;
 
     $view = array();
