diff --git a/plugins/selection/EntityReference_SelectionHandler_Generic.class.php b/plugins/selection/EntityReference_SelectionHandler_Generic.class.php
index 57a3a37..141c637 100644
--- a/plugins/selection/EntityReference_SelectionHandler_Generic.class.php
+++ b/plugins/selection/EntityReference_SelectionHandler_Generic.class.php
@@ -338,7 +338,7 @@ class EntityReference_SelectionHandler_Generic implements EntityReference_Select
 
     // Join the known base-table.
     $target_type = $this->field['settings']['target_type'];
-    $entity_info = entity_get_info($target_type);
+    $entity_info = enti$results = db_query('SELECT nid, type, title FROM {node} WHERE nid IN (:nids)', array(':nids' => $nids))->fetchAllAssoc('nid');ty_get_info($target_type);
     $target_type_base_table = $entity_info['base table'];
     $id = $entity_info['entity keys']['id'];
 
@@ -364,6 +364,34 @@ class EntityReference_SelectionHandler_Generic_node extends EntityReference_Sele
       $query->condition("$base_table.status", NODE_PUBLISHED);
     }
   }
+
+  /**
+   * Implements EntityReferenceHandler::getReferencableEntities().
+   */
+  public function getReferencableEntities($match = NULL, $match_operator = 'CONTAINS', $limit = 0) {
+    $options = array();
+    $entity_type = $this->field['settings']['target_type'];
+
+    $query = $this->buildEntityFieldQuery($match, $match_operator);
+    if ($limit > 0) {
+      $query->range(0, $limit);
+    }
+
+    $results = $query->execute();
+
+    // Use a database lookup instead of the more expensive entity_load() used by the parent function.
+    if (!empty($results[$entity_type])) {
+      $nids = array_keys($results[$entity_type]);
+      $results = db_query('SELECT nid, type, title FROM {node} WHERE nid IN (:nids)', array(':nids' => $nids))->fetchAllAssoc('nid');
+      foreach ($nids as $nid) {
+        if (!empty($results[$nid])) {
+          $options[$results[$nid]->type][$nid] = check_plain($results[$nid]->title);
+        }
+      }
+    }
+
+    return $options;
+  }
 }
 
 /**
