diff --git a/node_reference/node_reference.module b/node_reference/node_reference.module
index e18e758..1e4797a 100644
--- a/node_reference/node_reference.module
+++ b/node_reference/node_reference.module
@@ -239,7 +239,7 @@ function node_reference_field_prepare_view($entity_type, $entities, $field, $ins
     $missing_ids = array_diff($ids, array_keys($fetched_nodes));
     if (!empty($missing_ids)) {
       $query = db_select('node', 'n')
-        ->fields('n')
+        ->fields('n', array('nid'))
         ->condition('n.nid', $missing_ids)
         ->addTag('node_access');
       // Take the 'view own unpublished content' permission into account to
@@ -255,7 +255,8 @@ function node_reference_field_prepare_view($entity_type, $entities, $field, $ins
           $query->condition('status', NODE_PUBLISHED);
         }
       }
-      $fetched_nodes += $query->execute()->fetchAllAssoc('nid');
+      $nids = $query->execute()->fetchCol();
+      $fetched_nodes = node_load_multiple($nids);
     }
 
     foreach ($items as $id => $entity_items) {
@@ -393,18 +394,19 @@ function node_reference_field_formatter_view($entity_type, $entity, $field, $ins
       foreach ($items as $delta => $item) {
         if ($item['access']) {
           $node = $item['node'];
+          $title = entity_label('node', $node);
           if ($display['type'] == 'node_reference_default') {
             $uri = entity_uri('node', $node);
             $result[$delta] = array(
               '#type' => 'link',
-              '#title' => $node->title,
+              '#title' => $title,
               '#href' => $uri['path'],
               '#options' => $uri['options'],
             );
           }
           else {
             $result[$delta] = array(
-              '#markup' => check_plain($node->title),
+              '#markup' => check_plain($title),
             );
           }
           if (!$node->status) {
@@ -465,7 +467,7 @@ function node_reference_field_formatter_view($entity_type, $entity, $field, $ins
             $uri = entity_uri('node', $node);
             $result[$delta] = array(
               '#type' => 'link',
-              '#title' => $node->title,
+              '#title' => entity_label('node', $node),
               '#href' => $uri['path'],
               '#options' => $uri['options'],
             );
@@ -570,16 +572,9 @@ function node_reference_autocomplete_value($element, $input = FALSE, $form_state
     // "node title [nid:n]".
     $nid = $element['#default_value'];
     if (!empty($nid)) {
-      $q = db_select('node', 'n');
-      $node_title_alias = $q->addField('n', 'title');
-      $q->addTag('node_access')
-        ->condition('n.nid', $nid)
-        ->range(0, 1);
-      $result = $q->execute();
       // @todo If no result (node doesn't exist or no access).
-      $value = $result->fetchField();
-      $value .= ' [nid:' . $nid . ']';
-      return $value;
+      $node = node_load($nid);
+      return entity_label('node', $node) . " [nid:$nid]";
     }
   }
 }
@@ -759,9 +754,7 @@ function _node_reference_potential_references_standard($field, $options) {
   }
 
   $query = db_select('node', 'n');
-  $node_nid_alias   = $query->addField('n', 'nid');
-  $node_title_alias = $query->addField('n', 'title', 'node_title');
-  $node_type_alias  = $query->addField('n', 'type',  'node_type');
+  $query->fields('n', array('nid', 'title', 'type'));
   $query->addTag('node_access');
   $query->addMetaData('id', ' _node_reference_potential_references_standard');
 
@@ -794,16 +787,18 @@ function _node_reference_potential_references_standard($field, $options) {
     $query->range(0, $options['limit']);
   }
 
-  $query
-    ->orderBy($node_title_alias)
-    ->orderBy($node_type_alias);
+  $query->orderBy('n.title');
+  $query->orderBy('n.type');
+
+  $nids = $query->execute()->fetchCol();
+  $nodes = node_load_multiple($nids);
 
-  $result = $query->execute()->fetchAll();
   $references = array();
-  foreach ($result as $node) {
+  foreach ($nodes as $node) {
+    $title = entity_label('node', $node);
     $references[$node->nid] = array(
-      'title'    => $node->node_title,
-      'rendered' => check_plain($node->node_title),
+      'title'    => $title,
+      'rendered' => check_plain($title),
     );
   }
   return $references;
diff --git a/user_reference/user_reference.module b/user_reference/user_reference.module
index e1b226f..7f48f62 100644
--- a/user_reference/user_reference.module
+++ b/user_reference/user_reference.module
@@ -254,27 +254,30 @@ function user_reference_field_formatter_view($entity_type, $entity, $field, $ins
   // @todo Optimisation: use hook_field_formatter_prepare_view() to load
   // user names or full user entities in 'multiple' mode.
 
-  // Collect the list of user ids.
+  // Collect the list of user ids and account objects.
   $uids = array();
   foreach ($items as $delta => $item) {
     $uids[$item['uid']] = $item['uid'];
   }
+  $accounts = user_load_multiple($uids);
 
   switch ($display['type']) {
     case 'user_reference_default':
     case 'user_reference_plain':
-      $titles = _user_reference_get_user_names($uids);
       foreach ($items as $delta => $item) {
         if ($display['type'] == 'user_reference_default') {
+          $uri = entity_uri('user', $accounts[$item['uid']]);
+          $title = entity_label('user', $accounts[$item['uid']]);
           $result[$delta] = array(
             '#type' => 'link',
-            '#title' => $titles[$item['uid']],
-            '#href' => 'user/' . $item['uid'],
+            '#title' => $title,
+            '#href' => $uri['path'],
+            '#options' => $uri['options'],
           );
         }
         else {
           $result[$delta] = array(
-            '#markup' => check_plain($titles[$item['uid']]),
+            '#markup' => check_plain($title),
           );
         }
       }
@@ -285,40 +288,6 @@ function user_reference_field_formatter_view($entity_type, $entity, $field, $ins
 }
 
 /**
- * Helper function for widgets and formatters.
- *
- * Store user names collected in the curent request.
- */
-function _user_reference_get_user_names($uids, $known_titles = array()) {
-  $titles = &drupal_static(__FUNCTION__, array());
-
-  // Save titles we receive.
-  $titles += $known_titles;
-
-  // Collect nids to retrieve from database.
-  $uids_query = array();
-  foreach ($uids as $uid) {
-    if (!isset($titles[$uid])) {
-      $uids_query[] = $uid;
-    }
-  }
-  if ($uids_query) {
-    $query = db_select('users', 'u')
-      ->fields('u', array('uid', 'name'))
-      ->condition('u.uid', $uids);
-    $titles += $query->execute()->fetchAllKeyed();
-  }
-
-  // Build the results array.
-  $return = array();
-  foreach ($uids as $uid) {
-    $return[$uid] = isset($titles[$uid]) ? $titles[$uid] : '';
-  }
-
-  return $return;
-}
-
-/**
  * Implements hook_field_widget_info().
  */
 function user_reference_field_widget_info() {
@@ -405,16 +374,9 @@ function user_reference_autocomplete_value($element, $input = FALSE, $form_state
     // "user name [uid:n]".
     $uid = $element['#default_value'];
     if (!empty($uid)) {
-      $q = db_select('users', 'u');
-      $q->addField('u', 'name');
-
-      $q->condition('u.uid', $uid)
-        ->range(0, 1);
-      $result = $q->execute();
       // @todo If no result (user doesn't exist).
-      $value = $result->fetchField();
-      $value .= ' [uid:' . $uid . ']';
-      return $value;
+      $account = user_load($uid);
+      return entity_label('user', $account) . " [uid:$uid]";
     }
   }
 }
@@ -437,8 +399,8 @@ function user_reference_autocomplete_validate($element, &$form_state, $form) {
       // the uid.
       list(, $name, $uid) = $matches;
       if (!empty($name)) {
-        $names = _user_reference_get_user_names(array($uid));
-        if ($name != $names[$uid]) {
+        $account = user_load($uid);
+        if ($name != format_username($account)) {
           form_error($element, t('%name: name mismatch. Please check your selection.', array('%name' => $instance['label'])));
         }
       }
@@ -589,11 +551,9 @@ function _user_reference_potential_references_standard($field, $options) {
     return array();
   }
 
-  $query = db_select('users', 'u')
-    ->addMetaData('id', ' _user_reference_potential_references_standard')
-    // Select the whole record, so that format_username() has enough
-    // information.
-    ->fields('u');
+  $query = db_select('users', 'u');
+  $query->fields('u', array('uid', 'name'));
+  $query->addMetaData('id', ' _user_reference_potential_references_standard');
 
   // Enable this filter only if any statuses checked (and not both).
   if (count($filter_status) == 1) {
@@ -635,12 +595,15 @@ function _user_reference_potential_references_standard($field, $options) {
   }
   $query->orderBy('u.name');
 
-  $result = $query->execute()->fetchAll();
+  $uids = $query->execute()->fetchCol();
+  $accounts = user_load_multiple($uids);
+
   $references = array();
-  foreach ($result as $account) {
+  foreach ($accounts as $account) {
+    $title = entity_label('user', $account);
     $references[$account->uid] = array(
-      'title'    => $account->name,
-      'rendered' => check_plain(format_username($account)),
+      'title'    => $title,
+      'rendered' => check_plain($title),
     );
   }
   return $references;
