diff --git a/core/lib/Drupal/Core/Entity/Entity.php b/core/lib/Drupal/Core/Entity/Entity.php
index e76a7d0..a4add03 100644
--- a/core/lib/Drupal/Core/Entity/Entity.php
+++ b/core/lib/Drupal/Core/Entity/Entity.php
@@ -386,6 +386,39 @@ public function referencedEntities() {
   }
 
   /**
+   * {@inheritdoc}
+   */
+  public static function load($id) {
+    return \Drupal::entityManager()->getStorageController(static::getEntityTypeFromStaticClass())->load($id);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function loadMultiple(array $ids = NULL) {
+    return \Drupal::entityManager()->getStorageController(static::getEntityTypeFromStaticClass())->loadMultiple($ids);
+  }
+
+  /**
+   * Tries to guess an entity type ID based on the class that is called.
+   *
+   * @return string
+   *   The entity type ID.
+   *
+   * @throws \RuntimeException
+   */
+  protected static function getEntityTypeFromStaticClass() {
+    $called_class = get_called_class();
+    foreach (\Drupal::entityManager()->getDefinitions() as $entity_type) {
+      if ($entity_type->getClass() == $called_class || $entity_type->isSubclassOf($called_class)) {
+        return $entity_type->id();
+      }
+    }
+
+    throw new \RuntimeException(sprintf('The %s class does not correspond to an entity type.', $called_class));
+  }
+
+  /**
    * Acts on an entity after it was saved or deleted.
    */
   protected function onSaveOrDelete() {
diff --git a/core/lib/Drupal/Core/Entity/EntityInterface.php b/core/lib/Drupal/Core/Entity/EntityInterface.php
index d083aa5..6e312ab 100644
--- a/core/lib/Drupal/Core/Entity/EntityInterface.php
+++ b/core/lib/Drupal/Core/Entity/EntityInterface.php
@@ -175,6 +175,28 @@ public function hasLinkTemplate($key);
   public function uriRelationships();
 
   /**
+   * Loads an entity.
+   *
+   * @param mixed $id
+   *   The id of the entity to load.
+   *
+   * @return static
+   *   The entity object or NULL if there is no entity with the given ID.
+   */
+  public static function load($id);
+
+  /**
+   * Loads one or more entities.
+   *
+   * @param array $ids
+   *   An array of entity IDs, or NULL to load all entities.
+   *
+   * @return static[]
+   *   An array of entity objects indexed by their IDs.
+   */
+  public static function loadMultiple(array $ids = NULL);
+
+  /**
    * Saves an entity permanently.
    *
    * When saving existing entities, the entity is assumed to be complete,
diff --git a/core/modules/aggregator/aggregator.module b/core/modules/aggregator/aggregator.module
index 0bbbf28..407d3b6 100644
--- a/core/modules/aggregator/aggregator.module
+++ b/core/modules/aggregator/aggregator.module
@@ -5,6 +5,7 @@
  * Used to aggregate syndicated content (RSS, RDF, and Atom).
  */
 
+use Drupal\aggregator\Entity\Feed;
 use Drupal\aggregator\FeedInterface;
 use Drupal\Component\Plugin\Exception\PluginException;
 
@@ -265,9 +266,12 @@ function aggregator_refresh(FeedInterface $feed) {
  *
  * @return \Drupal\aggregator\FeedInterface
  *   An object describing the feed.
+ *
+ * @deprecated in Drupal 8.x, will be removed before Drupal 9.0.
+ *   Use \Drupal\aggregator\Entity\Feed::load().
  */
 function aggregator_feed_load($fid) {
-  return entity_load('aggregator_feed', $fid);
+  return Feed::load($fid);
 }
 
 /**
diff --git a/core/modules/block/block.module b/core/modules/block/block.module
index c217c9f..6529095 100644
--- a/core/modules/block/block.module
+++ b/core/modules/block/block.module
@@ -6,6 +6,7 @@
  */
 
 use Drupal\block\BlockInterface;
+use Drupal\block\Entity\Block;
 use Drupal\Component\Plugin\Exception\PluginException;
 use Drupal\language\Entity\Language;
 use Symfony\Cmf\Component\Routing\RouteObjectInterface;
@@ -322,9 +323,12 @@ function block_list($region) {
  *
  * @return \Drupal\block\Entity\Block
  *   The loaded block object.
+ *
+ * @deprecated in Drupal 8.x, will be removed before Drupal 9.0.
+ *   Use \Drupal\block\Entity\Block::load().
  */
 function block_load($entity_id) {
-  return entity_load('block', $entity_id);
+  return Block::load($entity_id);
 }
 
 /**
diff --git a/core/modules/block/custom_block/custom_block.module b/core/modules/block/custom_block/custom_block.module
index bfe5a39..a03bef8 100644
--- a/core/modules/block/custom_block/custom_block.module
+++ b/core/modules/block/custom_block/custom_block.module
@@ -58,9 +58,12 @@ function custom_block_theme($existing, $type, $theme, $path) {
  *
  * @return \Drupal\custom_block\Entity\CustomBlockType|null
  *   A CustomBlockType object or NULL if the requested $id does not exist.
+ *
+ * @deprecated in Drupal 8.x, will be removed before Drupal 9.0.
+ *   Use \Drupal\custom_block\Entity\CustomBlockType::load().
  */
 function custom_block_type_load($id) {
-  return entity_load('custom_block_type', $id);
+  return CustomBlockType::load($id);
 }
 
 /**
@@ -71,9 +74,12 @@ function custom_block_type_load($id) {
  *
  * @return \Drupal\custom_block\Entity\CustomBlock|null
  *   A CustomBlock object or NULL if the requested $id does not exist.
+ *
+ * @deprecated in Drupal 8.x, will be removed before Drupal 9.0.
+ *   Use \Drupal\custom_block\Entity\CustomBlock::load().
  */
 function custom_block_load($id) {
-  return entity_load('custom_block', $id);
+  return CustomBlock::load($id);
 }
 
 /**
diff --git a/core/modules/breakpoint/breakpoint.module b/core/modules/breakpoint/breakpoint.module
index be06abd..1652eb3 100644
--- a/core/modules/breakpoint/breakpoint.module
+++ b/core/modules/breakpoint/breakpoint.module
@@ -49,9 +49,12 @@ function breakpoint_help($path, $arg) {
  *
  * @todo Remove this in a follow-up issue.
  * @see http://drupal.org/node/1798214
+ *
+ * @deprecated in Drupal 8.x, will be removed before Drupal 9.0.
+ *   Use \Drupal\breakpoint\Entity\Breakpoint::load().
  */
 function breakpoint_load($id) {
-  return entity_load('breakpoint', $id);
+  return Breakpoint::load($id);
 }
 
 /**
@@ -62,7 +65,7 @@ function breakpoint_load($id) {
  */
 function breakpoint_group_select_options() {
   $options = array();
-  $breakpoint_groups = entity_load_multiple('breakpoint_group');
+  $breakpoint_groups = BreakpointGroup::loadMultiple();
   foreach ($breakpoint_groups as $breakpoint_group) {
     $options[$breakpoint_group->id()] = $breakpoint_group->label();
   }
@@ -78,7 +81,7 @@ function breakpoint_group_select_options() {
  */
 function breakpoint_select_options() {
   $options = array();
-  $breakpoints = entity_load_multiple('breakpoint');
+  $breakpoints = Breakpoint::loadMultiple();
   foreach ($breakpoints as $breakpoint) {
     $options[$breakpoint->id()] = $breakpoint->label() . ' (' . $breakpoint->source . ' - ' . $breakpoint->sourceType . ') [' . $breakpoint->mediaQuery . ']';
   }
diff --git a/core/modules/breakpoint/lib/Drupal/breakpoint/Entity/BreakpointGroup.php b/core/modules/breakpoint/lib/Drupal/breakpoint/Entity/BreakpointGroup.php
index 738f3b2..7ee4241 100644
--- a/core/modules/breakpoint/lib/Drupal/breakpoint/Entity/BreakpointGroup.php
+++ b/core/modules/breakpoint/lib/Drupal/breakpoint/Entity/BreakpointGroup.php
@@ -140,7 +140,7 @@ public function isValid() {
    */
   public function addBreakpointFromMediaQuery($name, $media_query) {
     // Use the existing breakpoint if it exists.
-    $breakpoint = entity_load('breakpoint', $this->sourceType . '.' . $this->name . '.' . $name);
+    $breakpoint = Breakpoint::load($this->sourceType . '.' . $this->name . '.' . $name);
     if (!$breakpoint) {
       // Build a new breakpoint.
       $breakpoint = entity_create('breakpoint', array(
@@ -174,7 +174,7 @@ public function addBreakpoints($breakpoints) {
   public function getBreakpoints() {
     if (empty($this->breakpoints)) {
       foreach ($this->breakpoint_ids as $breakpoint_id) {
-        $breakpoint = breakpoint_load($breakpoint_id);
+        $breakpoint = Breakpoint::load($breakpoint_id);
         if ($breakpoint) {
           $this->breakpoints[$breakpoint_id] = $breakpoint;
         }
diff --git a/core/modules/comment/comment.module b/core/modules/comment/comment.module
index 5445fb9..9821a9b 100644
--- a/core/modules/comment/comment.module
+++ b/core/modules/comment/comment.module
@@ -11,6 +11,7 @@
  */
 
 use Drupal\comment\CommentInterface;
+use Drupal\comment\Entity\Comment;
 use Drupal\comment\Plugin\Field\FieldType\CommentItemInterface;
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Entity\Display\EntityViewDisplayInterface;
@@ -1043,8 +1044,8 @@ function comment_user_predelete($account) {
 /**
  * Loads comment entities from the database.
  *
- * @deprecated in Drupal 8.x-dev, will be removed before Drupal 8.0.
- *   Use entity_load_multiple('comment', $cids).
+ * @deprecated in Drupal 8.x, will be removed before Drupal 9.0.
+ *   Use \Drupal\comment\Entity\Comment::loadMultiple().
  *
  * @param array $cids
  *   (optional) An array of entity IDs. If omitted, all entities are loaded.
@@ -1058,7 +1059,10 @@ function comment_user_predelete($account) {
  * @see \Drupal\Core\Entity\Query\QueryInterface
  */
 function comment_load_multiple(array $cids = NULL, $reset = FALSE) {
-  return entity_load_multiple('comment', $cids, $reset);
+  if ($reset) {
+    \Drupal::entityManager()->getStorageController('comment')->resetCache($cids);
+  }
+  return Comment::loadMultiple($cids);
 }
 
 /**
@@ -1071,9 +1075,15 @@ function comment_load_multiple(array $cids = NULL, $reset = FALSE) {
  *
  * @return \Drupal\comment\CommentInterface
  *   The comment object.
+ *
+ * @deprecated in Drupal 8.x, will be removed before Drupal 9.0.
+ *   Use \Drupal\comment\Entity\Comment::load().
  */
 function comment_load($cid, $reset = FALSE) {
-  return entity_load('comment', $cid, $reset);
+  if ($reset) {
+    \Drupal::entityManager()->getStorageController('comment')->resetCache(array($cid));
+  }
+  return Comment::load($cid);
 }
 
 /**
diff --git a/core/modules/contact/contact.module b/core/modules/contact/contact.module
index 3894e8f..ca8bea1 100644
--- a/core/modules/contact/contact.module
+++ b/core/modules/contact/contact.module
@@ -5,6 +5,8 @@
  * Enables the use of personal and site-wide contact forms.
  */
 
+use Drupal\contact\Entity\Category;
+
 /**
  * Implements hook_help().
  */
@@ -153,9 +155,12 @@ function contact_field_extra_fields() {
  *
  * @return \Drupal\contact\Entity\Category|null
  *   A Category object or NULL if the requested $id does not exist.
+ *
+ * @deprecated in Drupal 8.x, will be removed before Drupal 9.0.
+ *   Use \Drupal\contact\Entity\Category::load().
  */
 function contact_category_load($id) {
-  return entity_load('contact_category', $id);
+  return Category::load($id);
 }
 
 /**
diff --git a/core/modules/file/file.module b/core/modules/file/file.module
index 67e5452..71997f9 100644
--- a/core/modules/file/file.module
+++ b/core/modules/file/file.module
@@ -80,13 +80,19 @@ function file_element_info() {
  * @return array
  *   An array of file entities, indexed by fid.
  *
+ * @deprecated in Drupal 8.x, will be removed before Drupal 9.0.
+ *   Use \Drupal\file\Entity\File::loadMultiple().
+ *
  * @see hook_file_load()
  * @see file_load()
  * @see entity_load()
  * @see \Drupal\Core\Entity\Query\EntityQueryInterface
  */
 function file_load_multiple(array $fids = NULL, $reset = FALSE) {
-  return entity_load_multiple('file', $fids, $reset);
+  if ($reset) {
+    \Drupal::entityManager()->getStorageController('file')->resetCache($fids);
+  }
+  return File::loadMultiple($fids);
 }
 
 /**
@@ -100,11 +106,17 @@ function file_load_multiple(array $fids = NULL, $reset = FALSE) {
  * @return \Drupal\file\FileInterface
  *   A file entity or NULL if the file was not found.
  *
+ * @deprecated in Drupal 8.x, will be removed before Drupal 9.0.
+ *   Use \Drupal\file\Entity\File::load().
+ *
  * @see hook_file_load()
  * @see file_load_multiple()
  */
 function file_load($fid, $reset = FALSE) {
-  return entity_load('file', $fid, $reset);
+  if ($reset) {
+    \Drupal::entityManager()->getStorageController('file')->resetCache(array($fid));
+  }
+  return File::load($fid);
 }
 
 /**
diff --git a/core/modules/image/image.module b/core/modules/image/image.module
index 472cad4..b53578d 100644
--- a/core/modules/image/image.module
+++ b/core/modules/image/image.module
@@ -12,6 +12,7 @@
 use Drupal\file\Entity\File;
 use Drupal\field\FieldConfigInterface;
 use Drupal\field\FieldInstanceConfigInterface;
+use Drupal\image\Entity\ImageStyle;
 
 /**
  * Image style constant for user presets in the database.
@@ -265,9 +266,12 @@ function image_path_flush($path) {
  *
  * @param string $name
  *   The ID of the ImageStyle object to load.
+ *
+ * @deprecated in Drupal 8.x, will be removed before Drupal 9.0.
+ *   Use \Drupal\image\Entity\ImageStyle::load().
  */
 function image_style_load($name) {
-  return entity_load('image_style', $name);
+  return ImageStyle::load($name);
 }
 
 /**
diff --git a/core/modules/menu/menu.module b/core/modules/menu/menu.module
index bf90079..b12c9dc 100644
--- a/core/modules/menu/menu.module
+++ b/core/modules/menu/menu.module
@@ -130,9 +130,12 @@ function menu_theme() {
  *   The unique name of a custom menu to load.
  * @return
  *   Array defining the custom menu, or NULL if the menu doesn't exist.
+ *
+ * @deprecated in Drupal 8.x, will be removed before Drupal 9.0.
+ *   Use \Drupal\system\Entity\Menu::load().
  */
 function menu_load($menu_name) {
-  return entity_load('menu', $menu_name);
+  return Menu::load($menu_name);
 }
 
 /**
diff --git a/core/modules/menu_link/menu_link.module b/core/modules/menu_link/menu_link.module
index dc86f4c..2151343 100644
--- a/core/modules/menu_link/menu_link.module
+++ b/core/modules/menu_link/menu_link.module
@@ -46,9 +46,15 @@ function menu_link_uri(MenuLink $menu_link) {
  *
  * @return \Drupal\menu_link\Entity\MenuLink|null
  *   A menu link entity, or NULL if there is no entity with the given ID.
+ *
+ * @deprecated in Drupal 8.x, will be removed before Drupal 9.0.
+ *   Use \Drupal\menu_link\Entity\MenuLink::load().
  */
 function menu_link_load($mlid = NULL, $reset = FALSE) {
-  return entity_load('menu_link', $mlid, $reset);
+  if ($reset) {
+    \Drupal::entityManager()->getStorageController('menu_link')->resetCache(array($mlid));
+  }
+  return MenuLink::load($mlid);
 }
 
 /**
@@ -64,9 +70,15 @@ function menu_link_load($mlid = NULL, $reset = FALSE) {
  *
  * @see menu_link_load()
  * @see entity_load_multiple()
+ *
+ * @deprecated in Drupal 8.x, will be removed before Drupal 9.0.
+ *   Use \Drupal\menu_link\Entity\MenuLink::loadMultiple().
  */
 function menu_link_load_multiple(array $mlids = NULL, $reset = FALSE) {
-  return entity_load_multiple('menu_link', $mlids, $reset);
+  if ($reset) {
+    \Drupal::entityManager()->getStorageController('menu_link')->resetCache($mlids);
+  }
+  return MenuLink::loadMultiple($mlids);
 }
 
 /**
diff --git a/core/modules/node/node.module b/core/modules/node/node.module
index 0c0c99d..b25b7c9 100644
--- a/core/modules/node/node.module
+++ b/core/modules/node/node.module
@@ -14,6 +14,8 @@
 use Drupal\Core\Cache\Cache;
 use Drupal\Core\Database\Query\AlterableInterface;
 use Drupal\Core\Database\Query\SelectInterface;
+use Drupal\node\Entity\Node;
+use Drupal\node\Entity\NodeType;
 use Drupal\node\NodeTypeInterface;
 use Drupal\node\NodeInterface;
 use Drupal\Core\Entity\EntityInterface;
@@ -302,10 +304,13 @@ function node_mark($nid, $timestamp) {
  * @return array
  *   An array of node type entities, keyed by ID.
  *
+ * @deprecated in Drupal 8.x, will be removed before Drupal 9.0.
+ *   Use \Drupal\node\Entity\NodeType::loadMultiple().
+ *
  * @see node_type_load()
  */
 function node_type_get_types() {
-  return entity_load_multiple('node_type');
+  return NodeType::loadMultiple();
 }
 
 /**
@@ -375,9 +380,12 @@ function node_type_get_description(NodeTypeInterface $node_type) {
  *
  * @return \Drupal\node\NodeTypeInterface
  *   A node type object or NULL if $name does not exist.
+ *
+ * @deprecated in Drupal 8.x, will be removed before Drupal 9.0.
+ *   Use \Drupal\node\Entity\NodeType::load().
  */
 function node_type_load($name) {
-  return entity_load('node_type', $name);
+  return NodeType::load($name);
 }
 
 /**
@@ -512,11 +520,17 @@ function node_type_update_nodes($old_id, $new_id) {
  * @return \Drupal\node\NodeInterface[]
  *   An array of node entities indexed by nid.
  *
+ * @deprecated in Drupal 8.x, will be removed before Drupal 9.0.
+ *   Use \Drupal\node\Entity\Node::loadMultiple().
+ *
  * @see entity_load_multiple()
  * @see \Drupal\Core\Entity\Query\EntityQueryInterface
  */
 function node_load_multiple(array $nids = NULL, $reset = FALSE) {
-  return entity_load_multiple('node', $nids, $reset);
+  if ($reset) {
+    \Drupal::entityManager()->getStorageController('node')->resetCache($nids);
+  }
+  return Node::loadMultiple($nids);
 }
 
 /**
@@ -530,9 +544,15 @@ function node_load_multiple(array $nids = NULL, $reset = FALSE) {
  *
  * @return \Drupal\node\NodeInterface|null
  *   A fully-populated node entity, or NULL if the node is not found.
+ *
+ * @deprecated in Drupal 8.x, will be removed before Drupal 9.0.
+ *   Use \Drupal\node\Entity\Node::load().
  */
 function node_load($nid = NULL, $reset = FALSE) {
-  return entity_load('node', $nid, $reset);
+  if ($reset) {
+    \Drupal::entityManager()->getStorageController('node')->resetCache(array($nid));
+  }
+  return Node::load($nid);
 }
 
 /**
diff --git a/core/modules/responsive_image/responsive_image.module b/core/modules/responsive_image/responsive_image.module
index 6865a81..20750d7 100644
--- a/core/modules/responsive_image/responsive_image.module
+++ b/core/modules/responsive_image/responsive_image.module
@@ -5,6 +5,7 @@
  * Responsive image display formatter for image fields.
  */
 
+use Drupal\breakpoint\Entity\Breakpoint;
 use Drupal\responsive_image\Entity\ResponsiveImageMapping;
 use \Drupal\Core\Template\Attribute;
 
@@ -92,13 +93,15 @@ function responsive_image_menu_link_defaults() {
  * @return \Drupal\responsive_image\ResponsiveImageMappingInterface
  *   The entity object, or NULL if there is no entity with the given id.
  *
+ * @deprecated in Drupal 8.x, will be removed before Drupal 9.0.
+ *   Use \Drupal\responsive_image\Entity\ResponsiveImageMapping::load().
+ *
  * @todo Needed for menu_callback
  *
  * @see http://drupal.org/node/1798214
- *
  */
 function responsive_image_mapping_load($id) {
-  return entity_load('responsive_image_mapping', $id);
+  return ResponsiveImageMapping::load($id);
 }
 
 /**
@@ -230,7 +233,7 @@ function theme_responsive_image($variables) {
 
   // All breakpoints and multipliers.
   foreach ($variables['breakpoints'] as $breakpoint_name => $multipliers) {
-    $breakpoint = breakpoint_load($breakpoint_name);
+    $breakpoint = Breakpoint::load($breakpoint_name);
     if ($breakpoint) {
       $new_sources = array();
       foreach ($multipliers as $multiplier => $image_style) {
diff --git a/core/modules/shortcut/shortcut.module b/core/modules/shortcut/shortcut.module
index 8cd6333..19dd0fa 100644
--- a/core/modules/shortcut/shortcut.module
+++ b/core/modules/shortcut/shortcut.module
@@ -7,6 +7,7 @@
 
 use Drupal\Core\Routing\UrlMatcher;
 use Drupal\Core\Url;
+use Drupal\shortcut\Entity\ShortcutSet;
 use Drupal\shortcut\ShortcutSetInterface;
 use Symfony\Cmf\Component\Routing\RouteObjectInterface;
 use Symfony\Component\HttpFoundation\Request;
@@ -144,9 +145,12 @@ function shortcut_set_switch_access($account = NULL) {
  *   - 'id': The internal name of the shortcut set.
  *   - 'label': The title of the shortcut set.
  *   If the shortcut set does not exist, the function returns NULL.
+ *
+ * @deprecated in Drupal 8.x, will be removed before Drupal 9.0.
+ *   Use \Drupal\shortcut\Entity\ShortcutSet::load().
  */
 function shortcut_set_load($id) {
-  return entity_load('shortcut_set', $id);
+  return ShortcutSet::load($id);
 }
 
 /**
diff --git a/core/modules/taxonomy/taxonomy.module b/core/modules/taxonomy/taxonomy.module
index 62952af..cf053eb 100644
--- a/core/modules/taxonomy/taxonomy.module
+++ b/core/modules/taxonomy/taxonomy.module
@@ -650,8 +650,8 @@ function taxonomy_term_load_multiple_by_name($name, $vocabulary = NULL) {
  * @see entity_load_multiple()
  * @see \Drupal\Core\Entity\Query\EntityQueryInterface
  *
- * @deprecated in Drupal 8.x-dev, will be removed before Drupal 8.0.
- *   Use entity_load_multiple('taxonomy_term', $tids).
+ * @deprecated in Drupal 8.x, will be removed before Drupal 9.0.
+ *   Use \Drupal\taxonomy\Entity\Term::loadMultiple().
  *
  * @param array $tids
  *   (optional) An array of entity IDs. If omitted, all entities are loaded.
@@ -661,7 +661,7 @@ function taxonomy_term_load_multiple_by_name($name, $vocabulary = NULL) {
  *   found, an empty array is returned.
  */
 function taxonomy_term_load_multiple(array $tids = NULL) {
-  return entity_load_multiple('taxonomy_term', $tids);
+  return Term::loadMultiple($tids);
 }
 
 /**
@@ -673,8 +673,8 @@ function taxonomy_term_load_multiple(array $tids = NULL) {
  *
  * @see entity_load_multiple()
  *
- * @deprecated in Drupal 8.x-dev, will be removed before Drupal 8.0.
- *   Use entity_load_multiple('taxonomy_vocabulary', $vids).
+ * @deprecated in Drupal 8.x, will be removed before Drupal 9.0.
+ *   Use \Drupal\taxonomy\Entity\Vocabulary::loadMultiple().
  *
  * @param array $vids
  *   (optional) An array of entity IDs. If omitted, all entities are loaded.
@@ -683,14 +683,14 @@ function taxonomy_term_load_multiple(array $tids = NULL) {
  *  An array of vocabulary objects, indexed by vid.
  */
 function taxonomy_vocabulary_load_multiple(array $vids = NULL) {
-  return entity_load_multiple('taxonomy_vocabulary', $vids);
+  return Vocabulary::loadMultiple($vids);
 }
 
 /**
  * Return the taxonomy vocabulary entity matching a vocabulary ID.
  *
- * @deprecated in Drupal 8.x-dev, will be removed before Drupal 8.0.
- *   Use entity_load('taxonomy_vocabulary', $vid).
+ * @deprecated in Drupal 8.x, will be removed before Drupal 9.0.
+ *   Use \Drupal\taxonomy\Entity\Vocabulary::load().
  *
  * @param int $vid
  *   The vocabulary's ID.
@@ -700,14 +700,14 @@ function taxonomy_vocabulary_load_multiple(array $vids = NULL) {
  *   statically cached.
  */
 function taxonomy_vocabulary_load($vid) {
-  return entity_load('taxonomy_vocabulary', $vid);
+  return Vocabulary::load($vid);
 }
 
 /**
  * Return the taxonomy term entity matching a term ID.
  *
- * @deprecated in Drupal 8.x-dev, will be removed before Drupal 8.0.
- *   Use entity_load('taxonomy_term', $tid).
+ * @deprecated in Drupal 8.x, will be removed before Drupal 9.0.
+ *   Use \Drupal\taxonomy\Entity\Term::load().
  *
  * @param $tid
  *   A term's ID
@@ -720,7 +720,7 @@ function taxonomy_term_load($tid) {
   if (!is_numeric($tid)) {
     return NULL;
   }
-  return entity_load('taxonomy_term', $tid);
+  return Term::load($tid);
 }
 
 /**
diff --git a/core/modules/user/user.module b/core/modules/user/user.module
index a8322b8..198278d 100644
--- a/core/modules/user/user.module
+++ b/core/modules/user/user.module
@@ -7,6 +7,7 @@
 use Drupal\Core\Session\AnonymousUserSession;
 use \Drupal\Core\Entity\Display\EntityViewDisplayInterface;
 use Drupal\file\Entity\File;
+use Drupal\user\Entity\Role;
 use Drupal\user\Entity\User;
 use Drupal\user\UserInterface;
 use Drupal\user\RoleInterface;
@@ -263,9 +264,15 @@ function user_field_extra_fields() {
  * @see user_load_by_mail()
  * @see user_load_by_name()
  * @see \Drupal\Core\Entity\Query\QueryInterface
+ *
+ * @deprecated in Drupal 8.x, will be removed before Drupal 9.0.
+ *   Use \Drupal\user\Entity\User::loadMultiple().
  */
 function user_load_multiple(array $uids = NULL, $reset = FALSE) {
-  return entity_load_multiple('user', $uids, $reset);
+  if ($reset) {
+    \Drupal::entityManager()->getStorageController('user')->resetCache($uids);
+  }
+  return User::loadMultiple($uids);
 }
 
 /**
@@ -290,10 +297,16 @@ function user_load_multiple(array $uids = NULL, $reset = FALSE) {
  *   A fully-loaded user object upon successful user load, or NULL if the user
  *   cannot be loaded.
  *
+ * @deprecated in Drupal 8.x, will be removed before Drupal 9.0.
+ *   Use \Drupal\user\Entity\User::load().
+ *
  * @see user_load_multiple()
  */
 function user_load($uid, $reset = FALSE) {
-  return entity_load('user', $uid, $reset);
+  if ($reset) {
+    \Drupal::entityManager()->getStorageController('user')->resetCache(array($uid));
+  }
+  return User::load($uid);
 }
 
 /**
@@ -1344,9 +1357,12 @@ function user_roles($membersonly = FALSE, $permission = NULL) {
  * @return
  *   A fully-loaded role object if a role with the given ID exists, or NULL
  *   otherwise.
+ *
+ * @deprecated in Drupal 8.x, will be removed before Drupal 9.0.
+ *   Use \Drupal\user\Entity\Role::load().
  */
 function user_role_load($rid) {
-  return entity_load('user_role', $rid);
+  return Role::load($rid);
 }
 
 /**
diff --git a/core/modules/views_ui/lib/Drupal/views_ui/ViewUI.php b/core/modules/views_ui/lib/Drupal/views_ui/ViewUI.php
index 6466c30..1597665 100644
--- a/core/modules/views_ui/lib/Drupal/views_ui/ViewUI.php
+++ b/core/modules/views_ui/lib/Drupal/views_ui/ViewUI.php
@@ -10,6 +10,7 @@
 use Drupal\Component\Utility\String;
 use Drupal\Component\Utility\Timer;
 use Drupal\views\Views;
+use Drupal\Core\Entity\Entity;
 use Drupal\Core\Entity\EntityStorageControllerInterface;
 use Drupal\views\ViewExecutable;
 use Drupal\Core\Database\Database;
@@ -889,6 +890,20 @@ public function createDuplicate() {
   }
 
   /**
+   * {@inheritdoc}
+   */
+  public static function load($id) {
+    return Entity::load($id);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function loadMultiple(array $ids = NULL) {
+    return Entity::loadMultiple($ids);
+  }
+
+  /**
    * Implements \Drupal\Core\Entity\EntityInterface::delete().
    */
   public function delete() {
diff --git a/core/tests/Drupal/Tests/Core/Entity/EntityUnitTest.php b/core/tests/Drupal/Tests/Core/Entity/EntityUnitTest.php
index be09ad8..263c218 100644
--- a/core/tests/Drupal/Tests/Core/Entity/EntityUnitTest.php
+++ b/core/tests/Drupal/Tests/Core/Entity/EntityUnitTest.php
@@ -8,6 +8,7 @@
 namespace Drupal\Tests\Core\Entity;
 
 use Drupal\Core\DependencyInjection\ContainerBuilder;
+use Drupal\Core\Entity\Entity;
 use Drupal\Core\Language\Language;
 use Drupal\Tests\UnitTestCase;
 
@@ -230,6 +231,197 @@ public function testLanguage() {
   }
 
   /**
+   * @covers ::load
+   *
+   * Tests Entity::load() when called statically on the Entity base class.
+   */
+  public function testLoad() {
+    // Entity::load() is a wrapper for EntityStorageController::loadMultiple().
+    // Test that the same mock entity object that is returned by loadMultiple()
+    // on the storage controller will be returned by Entity::load().
+    $methods = get_class_methods('Drupal\Core\Entity\Entity');
+    unset($methods[array_search('load', $methods)]);
+    $test_entity = $this->getMockBuilder('Drupal\Core\Entity\Entity')
+      ->disableOriginalConstructor()
+      ->setMethods($methods)
+      ->getMock();
+
+    $test_entity->id = 1;
+    $test_entity->type = $this->randomName();
+
+    $storage = $this->getMock('\Drupal\Core\Entity\EntityStorageControllerInterface');
+    $storage->expects($this->once())
+      ->method('load')
+      ->with(1)
+      ->will($this->returnValue($test_entity));
+    $this->entityManager->expects($this->once())
+      ->method('getStorageController')
+      ->with($test_entity->type)
+      ->will($this->returnValue($storage));
+    $this->entityManager->expects($this->once())
+      ->method('getDefinitions')
+      ->will($this->returnValue(array($test_entity->type => $this->entityType)));
+    $this->entityType->expects($this->once())
+      ->method('getClass')
+      ->will($this->returnValue(get_class($test_entity)));
+    $this->entityType->expects($this->once())
+      ->method('isSubClassOf')
+      ->with('Drupal\Core\Entity\Entity')
+      ->will($this->returnValue(TRUE));
+    $this->entityType->expects($this->once())
+      ->method('id')
+      ->will($this->returnValue($test_entity->type));
+
+    // Call Entity::load statically and check that it returns the mock entity.
+    $this->assertSame($test_entity, Entity::load(1));
+  }
+
+  /**
+   * @covers ::load
+   *
+   * Tests Entity::load() when called statically on a subclass of Entity.
+   */
+  public function testLoadSubClass() {
+    // Entity::load() is a wrapper for EntityStorageController::loadMultiple().
+    // Test that the same mock entity object that is returned by loadMultiple()
+    // on the storage controller will be returned by Entity::load().
+    $methods = get_class_methods('Drupal\Core\Entity\Entity');
+    unset($methods[array_search('load', $methods)]);
+    $test_entity = $this->getMockBuilder('Drupal\Core\Entity\Entity')
+      ->disableOriginalConstructor()
+      ->setMethods($methods)
+      ->getMock();
+    $test_entity->id = 1;
+    $test_entity->type = $this->randomName();
+
+    // Mock the methods called by Entity::load() and
+    // Entity::getEntityTypeFromStaticClass().
+    $storage = $this->getMock('\Drupal\Core\Entity\EntityStorageControllerInterface');
+    $storage->expects($this->once())
+      ->method('load')
+      ->with(1)
+      ->will($this->returnValue($test_entity));
+    $this->entityManager->expects($this->once())
+      ->method('getStorageController')
+      ->with($test_entity->type)
+      ->will($this->returnValue($storage));
+    $this->entityManager->expects($this->once())
+      ->method('getDefinitions')
+      ->will($this->returnValue(array($test_entity->type => $this->entityType)));
+    $this->entityType->expects($this->once())
+      ->method('getClass')
+      ->will($this->returnValue(get_class($test_entity)));
+    $this->entityType->expects($this->exactly(0))
+      ->method('isSubClassOf');
+    $this->entityType->expects($this->once())
+      ->method('id')
+      ->will($this->returnValue($test_entity->type));
+
+    // Call Entity::load statically on the subclass and check that it returns
+    // the mock entity.
+    $class = get_class($test_entity);
+    $this->assertSame($test_entity, $class::load(1));
+  }
+
+  /**
+   * @covers ::loadMultiple
+   *
+   * Tests Entity::loadMultiple() when called statically on the Entity base
+   * class.
+   */
+  public function testLoadMultiple() {
+    // Entity::load() is a wrapper for EntityStorageController::loadMultiple().
+    // Test that the same mock entity object that is returned by loadMultiple()
+    // on the storage controller will be returned by Entity::load().
+    $methods = get_class_methods('Drupal\Core\Entity\Entity');
+    unset($methods[array_search('loadMultiple', $methods)]);
+    $test_entity = $this->getMockBuilder('Drupal\Core\Entity\Entity')
+      ->disableOriginalConstructor()
+      ->setMethods($methods)
+      ->getMock();
+    $test_entity->id = 1;
+    $test_entity->type = $this->randomName();
+
+    // Mock the methods called by Entity::loadMultiple() and
+    // Entity::getEntityTypeFromStaticClass().
+    $storage = $this->getMock('\Drupal\Core\Entity\EntityStorageControllerInterface');
+    $storage->expects($this->once())
+      ->method('loadMultiple')
+      ->with(array(1))
+      ->will($this->returnValue(array(1 => $test_entity)));
+    $this->entityManager->expects($this->once())
+      ->method('getStorageController')
+      ->with($test_entity->type)
+      ->will($this->returnValue($storage));
+    $this->entityManager->expects($this->once())
+      ->method('getDefinitions')
+      ->will($this->returnValue(array($test_entity->type => $this->entityType)));
+    $this->entityType->expects($this->once())
+      ->method('getClass')
+      ->will($this->returnValue(get_class($test_entity)));
+    $this->entityType->expects($this->once())
+      ->method('isSubClassOf')
+      ->with('Drupal\Core\Entity\Entity')
+      ->will($this->returnValue(TRUE));
+    $this->entityType->expects($this->once())
+      ->method('id')
+      ->will($this->returnValue($test_entity->type));
+
+    // Call Entity::loadMultiple statically and check that it returns the mock
+    // entity.
+    $class = get_class($test_entity);
+    $this->assertSame(array(1 => $test_entity), Entity::loadMultiple(array(1)));
+  }
+
+  /**
+   * @covers ::loadMultiple
+   *
+   * Tests Entity::loadMultiple() when called statically on a subclass of
+   * Entity.
+   */
+  public function testLoadMultipleSubClass() {
+    // Entity::load() is a wrapper for EntityStorageController::loadMultiple().
+    // Test that the same mock entity object that is returned by loadMultiple()
+    // on the storage controller will be returned by Entity::load().
+    $methods = get_class_methods('Drupal\Core\Entity\Entity');
+    unset($methods[array_search('loadMultiple', $methods)]);
+    $test_entity = $this->getMockBuilder('Drupal\Core\Entity\Entity')
+      ->disableOriginalConstructor()
+      ->setMethods($methods)
+      ->getMock();
+    $test_entity->id = 1;
+    $test_entity->type = $this->randomName();
+
+    // Mock the methods called by Entity::loadMultiple() and
+    // Entity::getEntityTypeFromStaticClass().
+    $storage = $this->getMock('\Drupal\Core\Entity\EntityStorageControllerInterface');
+    $storage->expects($this->once())
+      ->method('loadMultiple')
+      ->with(array(1))
+      ->will($this->returnValue(array(1 => $test_entity)));
+    $this->entityManager->expects($this->once())
+      ->method('getStorageController')
+      ->with($test_entity->type)
+      ->will($this->returnValue($storage));
+    $this->entityManager->expects($this->once())
+      ->method('getDefinitions')
+      ->will($this->returnValue(array($test_entity->type => $this->entityType)));
+    $this->entityType->expects($this->once())
+      ->method('getClass')
+      ->will($this->returnValue(get_class($test_entity)));
+    $this->entityType->expects($this->exactly(0))
+      ->method('isSubClassOf');
+    $this->entityType->expects($this->once())
+      ->method('id')
+      ->will($this->returnValue($test_entity->type));
+
+    // Call Entity::loadMultiple statically and check that it returns the mock
+    // entity.
+    $class = get_class($test_entity);
+    $this->assertSame(array(1 => $test_entity), $class::loadMultiple(array(1)));
+  }
+
+  /**
    * @covers ::save
    */
   public function testSave() {
