diff --git a/includes/common.inc b/includes/common.inc
index fbad974..dd38708 100644
--- a/includes/common.inc
+++ b/includes/common.inc
@@ -7405,7 +7405,43 @@ function entity_create_stub_entity($entity_type, $ids) {
 }
 
 /**
- * Load entities from the database.
+ * Loads an entity from the database.
+ *
+ * The entity is stored in a static memory cache, and will not require
+ * database access if loaded again during the same page request.
+ *
+ * The actual loading is done through a class that has to implement the
+ * DrupalEntityControllerInterface interface. By default,
+ * DrupalDefaultEntityController is used. Entity types can specify that a
+ * different class should be used by setting the 'controller class' key in
+ * hook_entity_info(). These classes can either implement the
+ * DrupalEntityControllerInterface interface, or, most commonly, extend the
+ * DrupalDefaultEntityController class. See node_entity_info() and the
+ * NodeController in node.module as an example.
+ *
+ * @see hook_entity_info()
+ * @see entity_load_multiple()
+ * @see DrupalEntityControllerInterface
+ * @see DrupalDefaultEntityController
+ * @see EntityFieldQuery
+ *
+ * @param $entity_type
+ *   The entity type to load, e.g. node or user.
+ * @param $id
+ *   The id of the entity to load.
+ * @param $reset
+ *   Whether to reset the internal cache for the requested entity type.
+ *
+ * @return
+ *   The entity object, or FALSE if there is no entity with the given id.
+ */
+function entity_load($entity_type, $id, $reset = FALSE) {
+  $entities = entity_load_multiple($entity_type, array($id), array(), $reset);
+  return reset($entities);
+}
+
+/**
+ * Loads multiple entities from the database.
  *
  * The entities are stored in a static memory cache, and will not require
  * database access if loaded again during the same page request.
@@ -7441,7 +7477,7 @@ function entity_create_stub_entity($entity_type, $ids) {
  *
  * @todo Remove $conditions in Drupal 8.
  */
-function entity_load($entity_type, $ids = FALSE, $conditions = array(), $reset = FALSE) {
+function entity_load_multiple($entity_type, $ids = FALSE, array $conditions = array(), $reset = FALSE) {
   if ($reset) {
     entity_get_controller($entity_type)->resetCache();
   }
diff --git a/includes/entity.inc b/includes/entity.inc
index a3cdf74..40be52d 100644
--- a/includes/entity.inc
+++ b/includes/entity.inc
@@ -996,7 +996,7 @@ class EntityFieldQuery {
    *   the entities found:
    *   @code
    *     $result = $query->execute();
-   *     $entities = entity_load($my_type, array_keys($result[$my_type]));
+   *     $entities = entity_load_multiple($my_type, array_keys($result[$my_type]));
    *   @endcode
    */
   public function execute() {
diff --git a/includes/file.inc b/includes/file.inc
index b7a1204..e8c9e07 100644
--- a/includes/file.inc
+++ b/includes/file.inc
@@ -533,8 +533,8 @@ function file_create_htaccess($directory, $private = TRUE) {
  *
  * @todo Remove $conditions in Drupal 8.
  */
-function file_load_multiple($fids = array(), $conditions = array()) {
-  return entity_load('file', $fids, $conditions);
+function file_load_multiple($fids = array(), array $conditions = array()) {
+  return entity_load_multiple('file', $fids, $conditions);
 }
 
 /**
diff --git a/modules/comment/comment.module b/modules/comment/comment.module
index 60a9ca4..ac6098f 100644
--- a/modules/comment/comment.module
+++ b/modules/comment/comment.module
@@ -1620,7 +1620,7 @@ function comment_delete_multiple($cids) {
 }
 
 /**
- * Load comments from the database.
+ * Loads comments from the database.
  *
  * @param $cids
  *   An array of comment IDs.
@@ -1639,8 +1639,8 @@ function comment_delete_multiple($cids) {
  *
  * @todo Remove $conditions in Drupal 8.
  */
-function comment_load_multiple($cids = array(), $conditions = array()) {
-  return entity_load('comment', $cids, $conditions);
+function comment_load_multiple($cids = array(), array $conditions = array()) {
+  return entity_load_multiple('comment', $cids, $conditions);
 }
 
 /**
@@ -1652,8 +1652,7 @@ function comment_load_multiple($cids = array(), $conditions = array()) {
  *   The comment object.
  */
 function comment_load($cid) {
-  $comment = comment_load_multiple(array($cid));
-  return $comment ? $comment[$cid] : FALSE;
+  return entity_load('comment', $cid);
 }
 
 /**
diff --git a/modules/file/file.module b/modules/file/file.module
index 4002701..10cb4a1 100644
--- a/modules/file/file.module
+++ b/modules/file/file.module
@@ -160,8 +160,7 @@ function file_file_download($uri, $field_type = 'file') {
     foreach ($field_references as $entity_type => $type_references) {
       foreach ($type_references as $id => $reference) {
         // Try to load $entity and $field.
-        $entity = entity_load($entity_type, array($id));
-        $entity = reset($entity);
+        $entity = entity_load($entity_type, $id);
         $field = NULL;
         if ($entity) {
           // Load all fields for that entity.
diff --git a/modules/node/node.api.php b/modules/node/node.api.php
index 3e8029c..480036c 100644
--- a/modules/node/node.api.php
+++ b/modules/node/node.api.php
@@ -56,8 +56,8 @@
  *   - hook_entity_update() (all)
  *   - hook_node_access_records() (all)
  *   - hook_node_access_records_alter() (all)
- * - Loading a node (calling node_load(), node_load_multiple(), or
- *   entity_load() with $entity_type of 'node'):
+ * - Loading a node (calling node_load(), node_load_multiple(), entity_load()
+ *   or entity_load_multiple() with $entity_type of 'node'):
  *   - Node and revision information is read from database.
  *   - hook_load() (node-type-specific)
  *   - field_attach_load_revision() and field_attach_load()
diff --git a/modules/node/node.module b/modules/node/node.module
index 2dd1926..7855dea 100644
--- a/modules/node/node.module
+++ b/modules/node/node.module
@@ -880,13 +880,13 @@ function node_invoke($node, $hook, $a2 = NULL, $a3 = NULL, $a4 = NULL) {
 }
 
 /**
- * Load node entities from the database.
+ * Loads node entities from the database.
  *
  * This function should be used whenever you need to load more than one node
  * from the database. Nodes are loaded into memory and will not require
  * database access if loaded again during the same page request.
  *
- * @see entity_load()
+ * @see entity_load_multiple()
  * @see EntityFieldQuery
  *
  * @param $nids
@@ -905,8 +905,8 @@ function node_invoke($node, $hook, $a2 = NULL, $a3 = NULL, $a4 = NULL) {
  *
  * @todo Remove $conditions in Drupal 8.
  */
-function node_load_multiple($nids = array(), $conditions = array(), $reset = FALSE) {
-  return entity_load('node', $nids, $conditions, $reset);
+function node_load_multiple($nids = array(), array $conditions = array(), $reset = FALSE) {
+  return entity_load_multiple('node', $nids, $conditions, $reset);
 }
 
 /**
@@ -922,11 +922,10 @@ function node_load_multiple($nids = array(), $conditions = array(), $reset = FAL
  * @return
  *   A fully-populated node object.
  */
-function node_load($nid = NULL, $vid = NULL, $reset = FALSE) {
-  $nids = (isset($nid) ? array($nid) : array());
-  $conditions = (isset($vid) ? array('vid' => $vid) : array());
-  $node = node_load_multiple($nids, $conditions, $reset);
-  return $node ? reset($node) : FALSE;
+function node_load($nid, $vid = NULL, $reset = FALSE) {
+  $conditions = isset($vid) ? array('vid' => $vid) : array();
+  $result = entity_load_multiple('node', array($nid), $conditions, $reset);
+  return reset($result);
 }
 
 /**
diff --git a/modules/node/node.test b/modules/node/node.test
index 8a871c0..231e434 100644
--- a/modules/node/node.test
+++ b/modules/node/node.test
@@ -41,7 +41,7 @@ class NodeLoadMultipleUnitTest extends DrupalWebTestCase {
     $this->assertNoText($node4->title, t('Node title does not appear in the default listing.'));
 
     // Load nodes with only a condition. Nodes 3 and 4 will be loaded.
-    $nodes = node_load_multiple(NULL, array('promote' => 0));
+    $nodes = node_load_multiple(array(), array('promote' => 0));
     $this->assertEqual($node3->title, $nodes[$node3->nid]->title, t('Node was loaded.'));
     $this->assertEqual($node4->title, $nodes[$node4->nid]->title, t('Node was loaded.'));
     $count = count($nodes);
diff --git a/modules/simpletest/tests/menu.test b/modules/simpletest/tests/menu.test
index bb01265..88eaf62 100644
--- a/modules/simpletest/tests/menu.test
+++ b/modules/simpletest/tests/menu.test
@@ -1178,7 +1178,7 @@ class MenuBreadcrumbTestCase extends DrupalWebTestCase {
     // the breadcrumb based on taxonomy term hierarchy.
     $parent_tid = 0;
     foreach ($tags as $name => $null) {
-      $terms = taxonomy_term_load_multiple(NULL, array('name' => $name));
+      $terms = taxonomy_term_load_multiple(array(), array('name' => $name));
       $term = reset($terms);
       $tags[$name]['term'] = $term;
       if ($parent_tid) {
diff --git a/modules/system/system.api.php b/modules/system/system.api.php
index 18cd7fe..1e18307 100644
--- a/modules/system/system.api.php
+++ b/modules/system/system.api.php
@@ -177,6 +177,7 @@ function hook_hook_info_alter(&$hooks) {
  *       display settings specific to the view mode.
  *
  * @see entity_load()
+ * @see entity_load_multiple()
  * @see hook_entity_info_alter()
  */
 function hook_entity_info() {
@@ -495,8 +496,9 @@ function hook_admin_paths_alter(&$paths) {
  * Act on entities as they are being prepared for view.
  *
  * Allows you to operate on multiple entities as they are being prepared for
- * view. Only use this if attaching the data during the entity_load() phase
- * is not appropriate, for example when attaching other 'entity' style objects.
+ * view. Only use this if attaching the data during the entity_load() or
+ * entity_load_multiple() phase is not appropriate, for example when attaching
+ * other 'entity' style objects.
  *
  * @param $entities
  *   The entities keyed by entity ID.
diff --git a/modules/taxonomy/taxonomy.module b/modules/taxonomy/taxonomy.module
index 50d2fd6..72d1e07 100644
--- a/modules/taxonomy/taxonomy.module
+++ b/modules/taxonomy/taxonomy.module
@@ -1079,7 +1079,7 @@ class TaxonomyVocabularyController extends DrupalDefaultEntityController {
  * from the database. Terms are loaded into memory and will not require
  * database access if loaded again during the same page request.
  *
- * @see entity_load()
+ * @see entity_load_multiple()
  * @see EntityFieldQuery
  *
  * @param $tids
@@ -1096,18 +1096,18 @@ class TaxonomyVocabularyController extends DrupalDefaultEntityController {
  *
  * @todo Remove $conditions in Drupal 8.
  */
-function taxonomy_term_load_multiple($tids = array(), $conditions = array()) {
-  return entity_load('taxonomy_term', $tids, $conditions);
+function taxonomy_term_load_multiple($tids = array(), array $conditions = array()) {
+  return entity_load_multiple('taxonomy_term', $tids, $conditions);
 }
 
 /**
- * Load multiple taxonomy vocabularies based on certain conditions.
+ * Loads multiple taxonomy vocabularies based on certain conditions.
  *
  * This function should be used whenever you need to load more than one
  * vocabulary from the database. Terms are loaded into memory and will not
  * require database access if loaded again during the same page request.
  *
- * @see entity_load()
+ * @see entity_load_multiple()
  *
  * @param $vids
  *  An array of taxonomy vocabulary IDs, or FALSE to load all vocabularies.
@@ -1117,8 +1117,8 @@ function taxonomy_term_load_multiple($tids = array(), $conditions = array()) {
  * @return
  *  An array of vocabulary objects, indexed by vid.
  */
-function taxonomy_vocabulary_load_multiple($vids = array(), $conditions = array()) {
-  return entity_load('taxonomy_vocabulary', $vids, $conditions);
+function taxonomy_vocabulary_load_multiple($vids = array(), array $conditions = array()) {
+  return entity_load_multiple('taxonomy_vocabulary', $vids, $conditions);
 }
 
 /**
@@ -1132,8 +1132,7 @@ function taxonomy_vocabulary_load_multiple($vids = array(), $conditions = array(
  *   Results are statically cached.
  */
 function taxonomy_vocabulary_load($vid) {
-  $vocabularies = taxonomy_vocabulary_load_multiple(array($vid));
-  return reset($vocabularies);
+  return entity_load('taxonomy_vocabulary', $vid);
 }
 
 /**
@@ -1147,8 +1146,8 @@ function taxonomy_vocabulary_load($vid) {
  *   Results are statically cached.
  */
 function taxonomy_vocabulary_machine_name_load($name) {
-  $vocabularies = taxonomy_vocabulary_load_multiple(NULL, array('machine_name' => $name));
-  return reset($vocabularies);
+  $result = entity_load_multiple('taxonomy_vocabulary', FALSE, array('machine_name' => $name));
+  return reset($result);
 }
 
 /**
@@ -1164,8 +1163,7 @@ function taxonomy_term_load($tid) {
   if (!is_numeric($tid)) {
     return FALSE;
   }
-  $term = taxonomy_term_load_multiple(array($tid), array());
-  return $term ? $term[$tid] : FALSE;
+  return entity_load('taxonomy_term', $tid);
 }
 
 /**
diff --git a/modules/taxonomy/taxonomy.test b/modules/taxonomy/taxonomy.test
index 1fd47f5..1c56ab8 100644
--- a/modules/taxonomy/taxonomy.test
+++ b/modules/taxonomy/taxonomy.test
@@ -792,7 +792,7 @@ class TaxonomyLoadMultipleUnitTest extends TaxonomyWebTestCase {
       $this->createTerm($vocabulary);
     }
     // Load the terms from the vocabulary.
-    $terms = taxonomy_term_load_multiple(NULL, array('vid' => $vocabulary->vid));
+    $terms = taxonomy_term_load_multiple(array(), array('vid' => $vocabulary->vid));
     $count = count($terms);
     $this->assertTrue($count == 5, t('Correct number of terms were loaded. !count terms.', array('!count' => $count)));
 
@@ -812,7 +812,7 @@ class TaxonomyLoadMultipleUnitTest extends TaxonomyWebTestCase {
     $this->assertFalse($deleted_term);
 
     // Load terms from the vocabulary by vid.
-    $terms4 = taxonomy_term_load_multiple(NULL, array('vid' => $vocabulary->vid));
+    $terms4 = taxonomy_term_load_multiple(array(), array('vid' => $vocabulary->vid));
     $this->assertTrue(count($terms4 == 4), t('Correct number of terms were loaded.'));
     $this->assertFalse(isset($terms4[$deleted->tid]));
 
diff --git a/modules/user/user.module b/modules/user/user.module
index ffd170c..3994d9d 100644
--- a/modules/user/user.module
+++ b/modules/user/user.module
@@ -238,7 +238,7 @@ function user_external_load($authname) {
 }
 
 /**
- * Load multiple users based on certain conditions.
+ * Loads multiple users based on certain conditions.
  *
  * This function should be used whenever you need to load more than one user
  * from the database. Users are loaded into memory and will not require
@@ -259,7 +259,7 @@ function user_external_load($authname) {
  * @return
  *   An array of user objects, indexed by uid.
  *
- * @see entity_load()
+ * @see entity_load_multiple()
  * @see user_load()
  * @see user_load_by_mail()
  * @see user_load_by_name()
@@ -267,8 +267,8 @@ function user_external_load($authname) {
  *
  * @todo Remove $conditions in Drupal 8.
  */
-function user_load_multiple($uids = array(), $conditions = array(), $reset = FALSE) {
-  return entity_load('user', $uids, $conditions, $reset);
+function user_load_multiple($uids = array(), array $conditions = array(), $reset = FALSE) {
+  return entity_load_multiple('user', $uids, $conditions, $reset);
 }
 
 /**
@@ -343,15 +343,15 @@ class UserController extends DrupalDefaultEntityController {
  * @see user_load_multiple()
  */
 function user_load($uid, $reset = FALSE) {
-  $users = user_load_multiple(array($uid), array(), $reset);
-  return reset($users);
+  return entity_load('user', $uid, $reset);
 }
 
 /**
- * Fetch a user object by email address.
+ * Fetches a user object by email address.
  *
  * @param $mail
  *   String with the account's e-mail address.
+ *
  * @return
  *   A fully-loaded $user object upon successful user load or FALSE if user
  *   cannot be loaded.
@@ -359,12 +359,12 @@ function user_load($uid, $reset = FALSE) {
  * @see user_load_multiple()
  */
 function user_load_by_mail($mail) {
-  $users = user_load_multiple(array(), array('mail' => $mail));
+  $users = entity_load_multiple('user', FALSE, array('mail' => $mail));
   return reset($users);
 }
 
 /**
- * Fetch a user object by account name.
+ * Fetches a user object by account name.
  *
  * @param $name
  *   String with the account's user name.
@@ -375,7 +375,7 @@ function user_load_by_mail($mail) {
  * @see user_load_multiple()
  */
 function user_load_by_name($name) {
-  $users = user_load_multiple(array(), array('name' => $name));
+  $users = entity_load_multiple('user', FALSE, array('name' => $name));
   return reset($users);
 }
 
