diff --git a/includes/entity.inc b/includes/entity.inc
index fbc4f02..c48f4e7 100644
--- a/includes/entity.inc
+++ b/includes/entity.inc
@@ -131,9 +131,16 @@ class DrupalDefaultEntityController implements DrupalEntityControllerInterface {
     if (!empty($this->entityInfo['entity keys']['revision'])) {
       $this->revisionKey = $this->entityInfo['entity keys']['revision'];
       $this->revisionTable = $this->entityInfo['revision table'];
+      if (!empty($this->entityInfo['entity keys']['base revision'])) {
+        $this->baseRevisionKey = $this->entityInfo['entity keys']['base revision'];
+      }
+      else {
+        $this->baseRevisionKey = $this->revisionKey;
+      }
     }
     else {
       $this->revisionKey = FALSE;
+      $this->baseRevisionKey = FALSE;
     }
 
     // Check if the entity type supports static caching of loaded entities.
@@ -258,7 +265,7 @@ class DrupalDefaultEntityController implements DrupalEntityControllerInterface {
       $query->join($this->revisionTable, 'revision', "revision.{$this->idKey} = base.{$this->idKey} AND revision.{$this->revisionKey} = :revisionId", array(':revisionId' => $revision_id));
     }
     elseif ($this->revisionKey) {
-      $query->join($this->revisionTable, 'revision', "revision.{$this->revisionKey} = base.{$this->revisionKey}");
+      $query->join($this->revisionTable, 'revision', "revision.{$this->revisionKey} = base.{$this->baseRevisionKey}");
     }
 
     // Add fields from the {entity} table.
@@ -313,7 +320,9 @@ class DrupalDefaultEntityController implements DrupalEntityControllerInterface {
   protected function attachLoad(&$queried_entities, $revision_id = FALSE) {
     // Attach fields.
     if ($this->entityInfo['fieldable']) {
-      if ($revision_id) {
+      if ($revision_id || ($this->revisionKey != $this->baseRevisionKey)) {
+        // When loading a given revision, or when loading a revision that is not
+        // necessarily the latest one, load in the slower revision mode.
         field_attach_load_revision($this->entityType, $queried_entities);
       }
       else {
