diff --git a/core/includes/entity.inc b/core/includes/entity.inc
index d48aa4e..ac224ad 100644
--- a/core/includes/entity.inc
+++ b/core/includes/entity.inc
@@ -77,7 +77,7 @@ function entity_get_bundles($entity_type = NULL) {
  * @see \Drupal\Core\Entity\Query\QueryInterface
  */
 function entity_load($entity_type, $id, $reset = FALSE) {
-  $controller = \Drupal::entityManager()->getStorage($entity_type);
+  $controller = \Drupal::entityTypeManager()->getStorage($entity_type);
   if ($reset) {
     $controller->resetCache(array($id));
   }
@@ -181,7 +181,7 @@ function entity_revision_delete($entity_type, $revision_id) {
  * @see \Drupal\Core\Entity\Query\QueryInterface
  */
 function entity_load_multiple($entity_type, array $ids = NULL, $reset = FALSE) {
-  $controller = \Drupal::entityManager()->getStorage($entity_type);
+  $controller = \Drupal::entityTypeManager()->getStorage($entity_type);
   if ($reset) {
     $controller->resetCache($ids);
   }
@@ -220,7 +220,7 @@ function entity_load_multiple_by_properties($entity_type, array $values) {
 /**
  * Loads the unchanged, i.e. not modified, entity from the database.
  *
- * Unlike entity_load() this function ensures the entity is directly loaded from
+ * Unlike EntityStorageInterface::load(), this function ensures the entity is directly loaded from
  * the database, thus bypassing any static cache. In particular, this function
  * is useful to determine changes by comparing the entity being saved to the
  * stored entity.
@@ -462,7 +462,7 @@ function entity_view_multiple(array $entities, $view_mode, $langcode = NULL, $re
  */
 function entity_get_display($entity_type, $bundle, $view_mode) {
   // Try loading the display from configuration.
-  $display = entity_load('entity_view_display', $entity_type . '.' . $bundle . '.' . $view_mode);
+  $display = EntityViewDisplay::load($entity_type . '.' . $bundle . '.' . $view_mode);
 
   // If not found, create a fresh display object. We do not preemptively create
   // new entity_view_display configuration entries for each existing entity type
@@ -538,7 +538,7 @@ function entity_get_display($entity_type, $bundle, $view_mode) {
  */
 function entity_get_form_display($entity_type, $bundle, $form_mode) {
   // Try loading the entity from configuration.
-  $entity_form_display = entity_load('entity_form_display', $entity_type . '.' . $bundle . '.' . $form_mode);
+  $entity_form_display = EntityFormDisplay::load('entity_form_display', $entity_type . '.' . $bundle . '.' . $form_mode);
 
   // If not found, create a fresh entity object. We do not preemptively create
   // new entity form display configuration entries for each existing entity type
diff --git a/core/includes/install.core.inc b/core/includes/install.core.inc
index 1938ed6..9401e2d 100644
--- a/core/includes/install.core.inc
+++ b/core/includes/install.core.inc
@@ -1572,7 +1572,7 @@ function install_download_additional_translations_operations(&$install_state) {
   \Drupal::moduleHandler()->loadInclude('locale', 'bulk.inc');
 
   $langcode = $install_state['parameters']['langcode'];
-  if (!($language = entity_load('configurable_language', $langcode))) {
+  if (!($language = ConfigurableLanguage::load($langcode))) {
     // Create the language if not already shipped with a profile.
     $language = ConfigurableLanguage::createFromLangcode($langcode);
   }
diff --git a/core/includes/update.inc b/core/includes/update.inc
index 68401a9..4d97dcd 100644
--- a/core/includes/update.inc
+++ b/core/includes/update.inc
@@ -713,7 +713,7 @@ function update_language_list($flags = LanguageInterface::STATE_CONFIGURABLE) {
     $default = \Drupal::languageManager()->getDefaultLanguage();
     if (\Drupal::languageManager()->isMultilingual() || \Drupal::moduleHandler()->moduleExists('language')) {
       // Use language module configuration if available. We can not use
-      // entity_load_multiple() because this breaks during updates.
+      // EntityStorageInterface::loadMultiple() because this breaks during updates.
       $language_entities = \Drupal::configFactory()->listAll('language.entity.');
 
       // Initialize default property so callers have an easy reference and can
diff --git a/core/lib/Drupal/Core/Datetime/Element/Datetime.php b/core/lib/Drupal/Core/Datetime/Element/Datetime.php
index 7637ad1..44a3949 100644
--- a/core/lib/Drupal/Core/Datetime/Element/Datetime.php
+++ b/core/lib/Drupal/Core/Datetime/Element/Datetime.php
@@ -150,7 +150,7 @@ public static function valueCallback(&$element, $input, FormStateInterface $form
    *     list of the possible formats and HTML5 standards for the HTML5
    *     requirements. Defaults to the right HTML5 format for the chosen element
    *     if a HTML5 element is used, otherwise defaults to
-   *     entity_load('date_format', 'html_date')->getPattern().
+   *     DateFormat::load('html_date')->getPattern().
    *   - #date_date_element: The date element. Options are:
    *     - datetime: Use the HTML5 datetime element type.
    *     - datetime-local: Use the HTML5 datetime-local element type.
@@ -170,7 +170,7 @@ public static function valueCallback(&$element, $input, FormStateInterface $form
    *     a list of the possible formats and HTML5 standards for the HTML5
    *     requirements. Defaults to the right HTML5 format for the chosen element
    *     if a HTML5 element is used, otherwise defaults to
-   *     entity_load('date_format', 'html_time')->getPattern().
+   *     DateFormat::load('html_time')->getPattern().
    *   - #date_time_callbacks: An array of optional callbacks for the time
    *     element. Can be used to add a jQuery timepicker or an 'All day' checkbox.
    *   - #date_year_range: A description of the range of years to allow, like
diff --git a/core/lib/Drupal/Core/Entity/Plugin/DataType/EntityReference.php b/core/lib/Drupal/Core/Entity/Plugin/DataType/EntityReference.php
index e9ad11c..4ef32f6 100644
--- a/core/lib/Drupal/Core/Entity/Plugin/DataType/EntityReference.php
+++ b/core/lib/Drupal/Core/Entity/Plugin/DataType/EntityReference.php
@@ -67,7 +67,9 @@ public function isTargetNew() {
   public function getTarget() {
     if (!isset($this->target) && isset($this->id)) {
       // If we have a valid reference, return the entity's TypedData adapter.
-      $entity = entity_load($this->getTargetDefinition()->getEntityTypeId(), $this->id);
+      $entity = \Drupal::entityTypeManager()->getStorage(
+        $this->getTargetDefinition()->getEntityTypeId())
+        ->load($this->id);
       $this->target = isset($entity) ? $entity->getTypedData() : NULL;
     }
     return $this->target;
diff --git a/core/modules/action/src/Tests/ActionUninstallTest.php b/core/modules/action/src/Tests/ActionUninstallTest.php
index fd8faa5..95f0089 100644
--- a/core/modules/action/src/Tests/ActionUninstallTest.php
+++ b/core/modules/action/src/Tests/ActionUninstallTest.php
@@ -3,6 +3,7 @@
 namespace Drupal\action\Tests;
 
 use Drupal\simpletest\WebTestBase;
+use Drupal\system\Entity\Action;
 
 /**
  * Tests that uninstalling actions does not remove other module's actions.
@@ -25,7 +26,10 @@ class ActionUninstallTest extends WebTestBase {
   public function testActionUninstall() {
     \Drupal::service('module_installer')->uninstall(array('action'));
 
-    $this->assertTrue(entity_load('action', 'user_block_user_action', TRUE), 'Configuration entity \'user_block_user_action\' still exists after uninstalling action module.' );
+    $this->container->get('entity_type.manager')->getStorage('action')
+      ->resetCache(array('user_block_user_action'));
+    $this->assertTrue(Action::load('user_block_user_action'),
+      'Configuration entity \'user_block_user_action\' still exists after uninstalling action module.' );
 
     $admin_user = $this->drupalCreateUser(array('administer users'));
     $this->drupalLogin($admin_user);
diff --git a/core/modules/action/src/Tests/ConfigurationTest.php b/core/modules/action/src/Tests/ConfigurationTest.php
index 92e12d0..3c4f131 100644
--- a/core/modules/action/src/Tests/ConfigurationTest.php
+++ b/core/modules/action/src/Tests/ConfigurationTest.php
@@ -4,6 +4,7 @@
 
 use Drupal\Component\Utility\Crypt;
 use Drupal\simpletest\WebTestBase;
+use Drupal\system\Entity\Action;
 
 /**
  * Tests complex actions configuration by adding, editing, and deleting a
@@ -81,7 +82,7 @@ function testActionConfiguration() {
     $this->assertResponse(200);
     $this->assertNoText($new_action_label, "Make sure the action label does not appear on the overview page after we've deleted the action.");
 
-    $action = entity_load('action', $aid);
+    $action = Action::load($aid);
     $this->assertFalse($action, 'Make sure the action is gone after being deleted.');
   }
 }
diff --git a/core/modules/aggregator/src/Tests/AggregatorRenderingTest.php b/core/modules/aggregator/src/Tests/AggregatorRenderingTest.php
index dff5c9f..888f1da 100644
--- a/core/modules/aggregator/src/Tests/AggregatorRenderingTest.php
+++ b/core/modules/aggregator/src/Tests/AggregatorRenderingTest.php
@@ -3,6 +3,7 @@
 namespace Drupal\aggregator\Tests;
 
 use Drupal\Component\Utility\SafeMarkup;
+use Drupal\views\Entity\View;
 
 /**
  * Tests display of aggregator items on the page.
@@ -90,7 +91,7 @@ public function testBlockLinks() {
   public function testFeedPage() {
     // Increase the number of items published in the rss.xml feed so we have
     // enough articles to test paging.
-    $view = entity_load('view', 'frontpage');
+    $view = View::load('frontpage');
     $display = &$view->getDisplay('feed_1');
     $display['display_options']['pager']['options']['items_per_page'] = 30;
     $view->save();
diff --git a/core/modules/block/src/BlockViewBuilder.php b/core/modules/block/src/BlockViewBuilder.php
index 3996282..4b41393 100644
--- a/core/modules/block/src/BlockViewBuilder.php
+++ b/core/modules/block/src/BlockViewBuilder.php
@@ -186,7 +186,8 @@ protected static function buildPreRenderableBlock($entity, ModuleHandlerInterfac
    *   A render array with a #pre_render callback to render the block.
    */
   public static function lazyBuilder($entity_id, $view_mode) {
-    return static::buildPreRenderableBlock(entity_load('block', $entity_id), \Drupal::service('module_handler'));
+    return static::buildPreRenderableBlock(Block::load($entity_id),
+      \Drupal::service('module_handler'));
   }
 
   /**
diff --git a/core/modules/block_content/src/Tests/BlockContentTranslationUITest.php b/core/modules/block_content/src/Tests/BlockContentTranslationUITest.php
index 7748b37..1adcd05 100644
--- a/core/modules/block_content/src/Tests/BlockContentTranslationUITest.php
+++ b/core/modules/block_content/src/Tests/BlockContentTranslationUITest.php
@@ -179,7 +179,8 @@ public function testDisabledBundle() {
    * {@inheritdoc}
    */
   protected function doTestTranslationEdit() {
-    $entity = entity_load($this->entityTypeId, $this->entityId, TRUE);
+    $this->storage->resetCache(array($this->entityId));
+    $entity = $this->storage->load($this->entityId);
     $languages = $this->container->get('language_manager')->getLanguages();
 
     foreach ($this->langcodes as $langcode) {
diff --git a/core/modules/ckeditor/src/Tests/CKEditorAdminTest.php b/core/modules/ckeditor/src/Tests/CKEditorAdminTest.php
index 77115e6..65c739f 100644
--- a/core/modules/ckeditor/src/Tests/CKEditorAdminTest.php
+++ b/core/modules/ckeditor/src/Tests/CKEditorAdminTest.php
@@ -55,7 +55,7 @@ function testExistingFormat() {
     $this->drupalGet('admin/config/content/formats/manage/filtered_html');
 
     // Ensure no Editor config entity exists yet.
-    $editor = entity_load('editor', 'filtered_html');
+    $editor = Editor::load('filtered_html');
     $this->assertFalse($editor, 'No Editor config entity exists yet.');
 
     // Verify the "Text Editor" <select> when a text editor is available.
@@ -111,7 +111,7 @@ function testExistingFormat() {
 
     // Keep the "CKEditor" editor selected and click the "Configure" button.
     $this->drupalPostAjaxForm(NULL, $edit, 'editor_configure');
-    $editor = entity_load('editor', 'filtered_html');
+    $editor = Editor::load('filtered_html');
     $this->assertFalse($editor, 'No Editor config entity exists yet.');
 
     // Ensure that drupalSettings is correct.
@@ -142,7 +142,7 @@ function testExistingFormat() {
     // Ensure an Editor object exists now, with the proper settings.
     $expected_settings = $expected_default_settings;
     $expected_settings['plugins']['stylescombo']['styles'] = '';
-    $editor = entity_load('editor', 'filtered_html');
+    $editor = Editor::load('filtered_html');
     $this->assertTrue($editor instanceof Editor, 'An Editor config entity exists now.');
     $this->assertEqual($expected_settings, $editor->getSettings(), 'The Editor config entity has the correct settings.');
 
@@ -153,7 +153,7 @@ function testExistingFormat() {
     );
     $this->drupalPostForm(NULL, $edit, t('Save configuration'));
     $expected_settings['plugins']['stylescombo']['styles'] = "h1.title|Title\np.callout|Callout\n\n";
-    $editor = entity_load('editor', 'filtered_html');
+    $editor = Editor::load('filtered_html');
     $this->assertTrue($editor instanceof Editor, 'An Editor config entity exists.');
     $this->assertEqual($expected_settings, $editor->getSettings(), 'The Editor config entity has the correct settings.');
 
@@ -169,7 +169,7 @@ function testExistingFormat() {
       'editor[settings][toolbar][button_groups]' => json_encode($expected_settings['toolbar']['rows']),
     );
     $this->drupalPostForm(NULL, $edit, t('Save configuration'));
-    $editor = entity_load('editor', 'filtered_html');
+    $editor = Editor::load('filtered_html');
     $this->assertTrue($editor instanceof Editor, 'An Editor config entity exists.');
     $this->assertEqual($expected_settings, $editor->getSettings(), 'The Editor config entity has the correct settings.');
 
@@ -197,7 +197,7 @@ function testExistingFormat() {
     $this->drupalGet('admin/config/content/formats/manage/filtered_html');
     $ultra_llama_mode_checkbox = $this->xpath('//input[@type="checkbox" and @name="editor[settings][plugins][llama_contextual_and_button][ultra_llama_mode]" and not(@checked)]');
     $this->assertTrue(count($ultra_llama_mode_checkbox) === 1, 'The "Ultra llama mode" checkbox exists and is not checked.');
-    $editor = entity_load('editor', 'filtered_html');
+    $editor = Editor::load('filtered_html');
     $this->assertTrue($editor instanceof Editor, 'An Editor config entity exists.');
     $this->assertEqual($expected_settings, $editor->getSettings(), 'The Editor config entity has the correct settings.');
 
@@ -211,7 +211,7 @@ function testExistingFormat() {
     $ultra_llama_mode_checkbox = $this->xpath('//input[@type="checkbox" and @name="editor[settings][plugins][llama_contextual_and_button][ultra_llama_mode]" and @checked="checked"]');
     $this->assertTrue(count($ultra_llama_mode_checkbox) === 1, 'The "Ultra llama mode" checkbox exists and is checked.');
     $expected_settings['plugins']['llama_contextual_and_button']['ultra_llama_mode'] = TRUE;
-    $editor = entity_load('editor', 'filtered_html');
+    $editor = Editor::load('filtered_html');
     $this->assertTrue($editor instanceof Editor, 'An Editor config entity exists.');
     $this->assertEqual($expected_settings, $editor->getSettings());
   }
@@ -245,9 +245,9 @@ function testNewFormat() {
       'editor[editor]' => 'ckeditor',
     );
     $this->drupalPostAjaxForm(NULL, $edit, 'editor_configure');
-    $filter_format = entity_load('filter_format', 'amazing_format');
+    $filter_format = Editor::load('amazing_format');
     $this->assertFalse($filter_format, 'No FilterFormat config entity exists yet.');
-    $editor = entity_load('editor', 'amazing_format');
+    $editor = Editor::load('amazing_format');
     $this->assertFalse($editor, 'No Editor config entity exists yet.');
 
     // Ensure the toolbar buttons configuration value is initialized to the
@@ -270,13 +270,13 @@ function testNewFormat() {
     $this->drupalPostForm(NULL, $edit, t('Save configuration'));
 
     // Ensure a FilterFormat object exists now.
-    $filter_format = entity_load('filter_format', 'amazing_format');
+    $filter_format = Editor::load('amazing_format');
     $this->assertTrue($filter_format instanceof FilterFormatInterface, 'A FilterFormat config entity exists now.');
 
     // Ensure an Editor object exists now, with the proper settings.
     $expected_settings = $default_settings;
     $expected_settings['plugins']['stylescombo']['styles'] = '';
-    $editor = entity_load('editor', 'amazing_format');
+    $editor = Editor::load('amazing_format');
     $this->assertTrue($editor instanceof Editor, 'An Editor config entity exists now.');
     $this->assertEqual($this->castSafeStrings($expected_settings), $this->castSafeStrings($editor->getSettings()), 'The Editor config entity has the correct settings.');
   }
diff --git a/core/modules/ckeditor/src/Tests/CKEditorLoadingTest.php b/core/modules/ckeditor/src/Tests/CKEditorLoadingTest.php
index f50dc8b..78a4199 100644
--- a/core/modules/ckeditor/src/Tests/CKEditorLoadingTest.php
+++ b/core/modules/ckeditor/src/Tests/CKEditorLoadingTest.php
@@ -100,7 +100,7 @@ function testLoading() {
     $this->drupalGet('node/add/article');
     list($settings, $editor_settings_present, $editor_js_present, $body, $format_selector) = $this->getThingsToCheck();
     $ckeditor_plugin = $this->container->get('plugin.manager.editor')->createInstance('ckeditor');
-    $editor = entity_load('editor', 'filtered_html');
+    $editor = Editor::load('filtered_html');
     $expected = array('formats' => array('filtered_html' => array(
       'format' => 'filtered_html',
       'editor' => 'ckeditor',
diff --git a/core/modules/ckeditor/tests/modules/src/Kernel/CKEditorTest.php b/core/modules/ckeditor/tests/modules/src/Kernel/CKEditorTest.php
index 15e56b0..2bbd1e6 100644
--- a/core/modules/ckeditor/tests/modules/src/Kernel/CKEditorTest.php
+++ b/core/modules/ckeditor/tests/modules/src/Kernel/CKEditorTest.php
@@ -69,7 +69,7 @@ protected function setUp() {
    * Tests CKEditor::getJSSettings().
    */
   function testGetJSSettings() {
-    $editor = entity_load('editor', 'filtered_html');
+    $editor = Editor::load('filtered_html');
 
     // Default toolbar.
     $expected_config = $this->getDefaultInternalConfig() + array(
@@ -217,7 +217,7 @@ function testGetJSSettings() {
    * Tests CKEditor::buildToolbarJSSetting().
    */
   function testBuildToolbarJSSetting() {
-    $editor = entity_load('editor', 'filtered_html');
+    $editor = Editor::load('filtered_html');
 
     // Default toolbar.
     $expected = $this->getDefaultToolbarConfig();
@@ -248,7 +248,7 @@ function testBuildToolbarJSSetting() {
    * Tests CKEditor::buildContentsCssJSSetting().
    */
   function testBuildContentsCssJSSetting() {
-    $editor = entity_load('editor', 'filtered_html');
+    $editor = Editor::load('filtered_html');
 
     // Default toolbar.
     $expected = $this->getDefaultContentsCssConfig();
@@ -285,7 +285,7 @@ function testBuildContentsCssJSSetting() {
    * Tests Internal::getConfig().
    */
   function testInternalGetConfig() {
-    $editor = entity_load('editor', 'filtered_html');
+    $editor = Editor::load('filtered_html');
     $internal_plugin = $this->container->get('plugin.manager.ckeditor.plugin')->createInstance('internal');
 
     // Default toolbar.
@@ -306,7 +306,7 @@ function testInternalGetConfig() {
    * Tests StylesCombo::getConfig().
    */
   function testStylesComboGetConfig() {
-    $editor = entity_load('editor', 'filtered_html');
+    $editor = Editor::load('filtered_html');
     $stylescombo_plugin = $this->container->get('plugin.manager.ckeditor.plugin')->createInstance('stylescombo');
 
     // Styles dropdown/button enabled: new setting should be present.
diff --git a/core/modules/comment/comment.module b/core/modules/comment/comment.module
index 40b4e40..c6845b3 100644
--- a/core/modules/comment/comment.module
+++ b/core/modules/comment/comment.module
@@ -265,7 +265,7 @@ function comment_view(CommentInterface $comment, $view_mode = 'full', $langcode
  * Constructs render array from an array of loaded comments.
  *
  * @param \Drupal\comment\CommentInterface[] $comments
- *   An array of comments as returned by entity_load_multiple().
+ *   An array of comments as returned by CommentInterface::loadMultiple().
  * @param string $view_mode
  *   (optional) View mode; for instance, 'full', 'teaser', etc. Defaults to
  *   'full'.
diff --git a/core/modules/comment/src/Tests/CommentActionsTest.php b/core/modules/comment/src/Tests/CommentActionsTest.php
index 2c5e863..220be20 100644
--- a/core/modules/comment/src/Tests/CommentActionsTest.php
+++ b/core/modules/comment/src/Tests/CommentActionsTest.php
@@ -29,12 +29,12 @@ function testCommentPublishUnpublishActions() {
     $comment = $this->postComment($this->node, $comment_text, $subject);
 
     // Unpublish a comment.
-    $action = entity_load('action', 'comment_unpublish_action');
+    $action = Action::load('comment_unpublish_action');
     $action->execute(array($comment));
     $this->assertTrue($comment->isPublished() === FALSE, 'Comment was unpublished');
 
     // Publish a comment.
-    $action = entity_load('action', 'comment_publish_action');
+    $action = Action::load('comment_publish_action');
     $action->execute(array($comment));
     $this->assertTrue($comment->isPublished() === TRUE, 'Comment was published');
   }
diff --git a/core/modules/comment/src/Tests/CommentTranslationUITest.php b/core/modules/comment/src/Tests/CommentTranslationUITest.php
index b6fc4b9..e021fc6 100644
--- a/core/modules/comment/src/Tests/CommentTranslationUITest.php
+++ b/core/modules/comment/src/Tests/CommentTranslationUITest.php
@@ -146,7 +146,8 @@ protected function doTestPublishedStatus() {
    * {@inheritdoc}
    */
   protected function doTestAuthoringInfo() {
-    $entity = entity_load($this->entityTypeId, $this->entityId, TRUE);
+    $this->storage->resetCache(array($this->entityId));
+    $entity = $this->storage->load($this->entityId);
     $languages = $this->container->get('language_manager')->getLanguages();
     $values = array();
 
@@ -166,7 +167,8 @@ protected function doTestAuthoringInfo() {
       $this->drupalPostForm($url, $edit, $this->getFormSubmitAction($entity, $langcode));
     }
 
-    $entity = entity_load($this->entityTypeId, $this->entityId, TRUE);
+    $this->storage->resetCache(array($this->entityId));
+    $entity = $this->storage->load($this->entityId);
     foreach ($this->langcodes as $langcode) {
       $metadata = $this->manager->getTranslationMetadata($entity->getTranslation($langcode));
       $this->assertEqual($metadata->getAuthor()->id(), $values[$langcode]['uid'], 'Translation author correctly stored.');
@@ -195,7 +197,8 @@ function testTranslateLinkCommentAdminPage() {
    * {@inheritdoc}
    */
   protected function doTestTranslationEdit() {
-    $entity = entity_load($this->entityTypeId, $this->entityId, TRUE);
+    $this->storage->resetCache(array($this->entityId));
+    $entity = $this->storage->load($this->entityId);
     $languages = $this->container->get('language_manager')->getLanguages();
 
     foreach ($this->langcodes as $langcode) {
diff --git a/core/modules/comment/tests/src/Kernel/CommentDefaultFormatterCacheTagsTest.php b/core/modules/comment/tests/src/Kernel/CommentDefaultFormatterCacheTagsTest.php
index ff67559..8618d14 100644
--- a/core/modules/comment/tests/src/Kernel/CommentDefaultFormatterCacheTagsTest.php
+++ b/core/modules/comment/tests/src/Kernel/CommentDefaultFormatterCacheTagsTest.php
@@ -110,9 +110,7 @@ public function testCacheTags() {
     $comment->save();
 
     // Load commented entity so comment_count gets computed.
-    // @todo Remove the $reset = TRUE parameter after
-    //   https://www.drupal.org/node/597236 lands. It's a temporary work-around.
-    $commented_entity = entity_load('entity_test', $commented_entity->id(), TRUE);
+    $commented_entity = EntityTest::load($commented_entity->id());
 
     // Verify cache tags on the rendered entity when it has comments.
     $build = \Drupal::entityManager()
diff --git a/core/modules/comment/tests/src/Kernel/CommentItemTest.php b/core/modules/comment/tests/src/Kernel/CommentItemTest.php
index d0c4813..b668966 100644
--- a/core/modules/comment/tests/src/Kernel/CommentItemTest.php
+++ b/core/modules/comment/tests/src/Kernel/CommentItemTest.php
@@ -43,7 +43,10 @@ public function testCommentItem() {
 
     // Verify entity has been created properly.
     $id = $entity->id();
-    $entity = entity_load('entity_test', $id, TRUE);
+    $this->container->get('entity_type.manager')->getStorage('entity_test')
+      ->resetCache(array($id));
+    $entity = EntityTest::load($id);
+
     $this->assertTrue($entity->comment instanceof FieldItemListInterface, 'Field implements interface.');
     $this->assertTrue($entity->comment[0] instanceof CommentItemInterface, 'Field item implements interface.');
 
diff --git a/core/modules/config/src/Tests/ConfigEntityStatusUITest.php b/core/modules/config/src/Tests/ConfigEntityStatusUITest.php
index 95dd9da..fb50990 100644
--- a/core/modules/config/src/Tests/ConfigEntityStatusUITest.php
+++ b/core/modules/config/src/Tests/ConfigEntityStatusUITest.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\config\Tests;
 
+use Drupal\config_test\Entity\ConfigTest;
 use Drupal\simpletest\WebTestBase;
 
 /**
@@ -31,7 +32,7 @@ function testCRUD() {
     );
     $this->drupalPostForm('admin/structure/config_test/add', $edit, 'Save');
 
-    $entity = entity_load('config_test', $id);
+    $entity = ConfigTest::load($id);
 
     // Disable an entity.
     $disable_url = $entity->urlInfo('disable');
diff --git a/core/modules/config/src/Tests/ConfigEntityTest.php b/core/modules/config/src/Tests/ConfigEntityTest.php
index 5a61382..1095c38 100644
--- a/core/modules/config/src/Tests/ConfigEntityTest.php
+++ b/core/modules/config/src/Tests/ConfigEntityTest.php
@@ -3,6 +3,7 @@
 namespace Drupal\config\Tests;
 
 use Drupal\Component\Utility\SafeMarkup;
+use Drupal\config_test\Entity\ConfigTest;
 use Drupal\Core\Entity\EntityMalformedException;
 use Drupal\Core\Entity\EntityStorageException;
 use Drupal\Core\Config\Entity\ConfigEntityStorage;
@@ -314,7 +315,7 @@ function testCRUDUI() {
     $this->assertLinkByHref('admin/structure/config_test/manage/0');
     $this->assertLinkByHref('admin/structure/config_test/manage/0/delete');
     $this->drupalPostForm('admin/structure/config_test/manage/0/delete', array(), 'Delete');
-    $this->assertFalse(entity_load('config_test', '0'), 'Test entity deleted');
+    $this->assertFalse(ConfigTest::load('0'), 'Test entity deleted');
 
     // Create a configuration entity with a property that uses AJAX to show
     // extra form elements.
@@ -351,7 +352,7 @@ function testCRUDUI() {
     $edit += ['size_value' => 'medium'];
     $this->drupalPostForm(NULL, $edit, 'Save');
 
-    $entity = entity_load('config_test', $id);
+    $entity = ConfigTest::load($id);
     $this->assertEqual($entity->get('size'), 'custom');
     $this->assertEqual($entity->get('size_value'), 'medium');
   }
diff --git a/core/modules/config/src/Tests/ConfigInstallWebTest.php b/core/modules/config/src/Tests/ConfigInstallWebTest.php
index 0867f4b..8ea6dd7 100644
--- a/core/modules/config/src/Tests/ConfigInstallWebTest.php
+++ b/core/modules/config/src/Tests/ConfigInstallWebTest.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\config\Tests;
 
+use Drupal\config_test\Entity\ConfigTest;
 use Drupal\Core\Config\PreExistingConfigException;
 use Drupal\Core\Config\StorageInterface;
 use Drupal\language\Entity\ConfigurableLanguage;
@@ -185,6 +186,7 @@ public function testUnmetDependenciesInstall() {
     $this->drupalPostForm('admin/modules', array('modules[Testing][config_other_module_config_test][enable]' => TRUE), t('Install'));
     $this->drupalPostForm('admin/modules', array('modules[Testing][config_install_dependency_test][enable]' => TRUE), t('Install'));
     $this->rebuildContainer();
-    $this->assertTrue(entity_load('config_test', 'other_module_test_with_dependency'), 'The config_test.dynamic.other_module_test_with_dependency configuration has been created during install.');
+    $this->assertTrue(ConfigTest::load('other_module_test_with_dependency'),
+      'The config_test.dynamic.other_module_test_with_dependency configuration has been created during install.');
   }
 }
diff --git a/core/modules/config/src/Tests/ConfigOtherModuleTest.php b/core/modules/config/src/Tests/ConfigOtherModuleTest.php
index 8ad1e19..8a5ae0a 100644
--- a/core/modules/config/src/Tests/ConfigOtherModuleTest.php
+++ b/core/modules/config/src/Tests/ConfigOtherModuleTest.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\config\Tests;
 
+use Drupal\config_test\Entity\ConfigTest;
 use Drupal\simpletest\WebTestBase;
 
 /**
@@ -26,7 +27,9 @@ public function testInstallOtherModuleFirst() {
     // Install the module that provides the entity type. This installs the
     // default configuration.
     $this->installModule('config_test');
-    $this->assertTrue(entity_load('config_test', 'other_module_test', TRUE), 'Default configuration has been installed.');
+    $storage = $this->container->get('entity_type.manager')->getStorage('config_test');
+    $storage->resetCache(array('other_module_test'));
+    $this->assertTrue($storage->load('other_module_test'), 'Default configuration has been installed.');
 
     // Uninstall the module that provides the entity type. This will remove the
     // default configuration.
@@ -37,7 +40,8 @@ public function testInstallOtherModuleFirst() {
     // Install the module that provides the entity type again. This installs the
     // default configuration.
     $this->installModule('config_test');
-    $other_module_config_entity = entity_load('config_test', 'other_module_test', TRUE);
+    $storage->resetCache(array('other_module_test'));
+    $other_module_config_entity = $storage->load('other_module_test');
     $this->assertTrue($other_module_config_entity, "Default configuration has been recreated.");
 
     // Update the default configuration to test that the changes are preserved
@@ -47,10 +51,12 @@ public function testInstallOtherModuleFirst() {
 
     // Uninstall the module that provides the default configuration.
     $this->uninstallModule('config_other_module_config_test');
-    $this->assertTrue(entity_load('config_test', 'other_module_test', TRUE), 'Default configuration for other modules is not removed when the module that provides it is uninstalled.');
+    $storage->resetCache(array('other_module_test'));
+    $this->assertTrue($storage->load('other_module_test'), 'Default configuration for other modules is not removed when the module that provides it is uninstalled.');
 
     // Default configuration provided by config_test should still exist.
-    $this->assertTrue(entity_load('config_test', 'dotted.default', TRUE), 'The configuration is not deleted.');
+    $storage->resetCache(array('dotted.default'));
+    $this->assertTrue($storage->load('dotted.default', TRUE), 'The configuration is not deleted.');
 
     // Re-enable module to test that pre-existing optional configuration does
     // not throw an error.
@@ -59,14 +65,26 @@ public function testInstallOtherModuleFirst() {
 
     // Ensure that optional configuration with unmet dependencies is only
     // installed once all the dependencies are met.
-    $this->assertNull(entity_load('config_test', 'other_module_test_unmet', TRUE), 'The optional configuration config_test.dynamic.other_module_test_unmet whose dependencies are not met is not created.');
-    $this->assertNull(entity_load('config_test', 'other_module_test_optional_entity_unmet', TRUE), 'The optional configuration config_test.dynamic.other_module_test_optional_entity_unmet whose dependencies are not met is not created.');
+    $storage->resetCache(array(
+      'other_module_test_unmet',
+      'other_module_test_optional_entity_unmet',
+    ));
+    $this->assertNull($storage->load('other_module_test_unmet'),
+      'The optional configuration config_test.dynamic.other_module_test_unmet whose dependencies are not met is not created.');
+    $this->assertNull($storage->load('other_module_test_optional_entity_unmet'),
+      'The optional configuration config_test.dynamic.other_module_test_optional_entity_unmet whose dependencies are not met is not created.');
     $this->installModule('config_install_dependency_test');
-    $this->assertTrue(entity_load('config_test', 'other_module_test_unmet', TRUE), 'The optional configuration config_test.dynamic.other_module_test_unmet whose dependencies are met is now created.');
+    $storage->resetCache(array(
+      'other_module_test_unmet',
+      'other_module_test_optional_entity_unmet',
+    ));
+    $this->assertTrue($storage->load('other_module_test_unmet'),
+      'The optional configuration config_test.dynamic.other_module_test_unmet whose dependencies are met is now created.');
     // Although the following configuration entity's are now met it is not
     // installed because it does not have a direct dependency on the
     // config_install_dependency_test module.
-    $this->assertNull(entity_load('config_test', 'other_module_test_optional_entity_unmet', TRUE), 'The optional configuration config_test.dynamic.other_module_test_optional_entity_unmet whose dependencies are met is not created.');
+    $this->assertNull($storage->load('other_module_test_optional_entity_unmet'),
+      'The optional configuration config_test.dynamic.other_module_test_optional_entity_unmet whose dependencies are met is not created.');
   }
 
   /**
@@ -74,10 +92,14 @@ public function testInstallOtherModuleFirst() {
    */
   public function testInstallConfigEntityModuleFirst() {
     $this->installModule('config_test');
-    $this->assertFalse(entity_load('config_test', 'other_module_test', TRUE), 'Default configuration provided by config_other_module_config_test does not exist.');
+    $storage = $this->container->get('entity_type.manager')->getStorage('config_test');
+    $storage->resetCache(array('other_module_test'));
+    $this->assertFalse($storage->load('other_module_test'),
+      'Default configuration provided by config_other_module_config_test does not exist.');
 
+    $storage->resetCache(array('other_module_test'));
     $this->installModule('config_other_module_config_test');
-    $this->assertTrue(entity_load('config_test', 'other_module_test', TRUE), 'Default configuration provided by config_other_module_config_test has been installed.');
+    $this->assertTrue($storage->load('other_module_test'), 'Default configuration provided by config_other_module_config_test has been installed.');
   }
 
   /**
@@ -85,11 +107,16 @@ public function testInstallConfigEntityModuleFirst() {
    */
   public function testUninstall() {
     $this->installModule('views');
-    $this->assertTrue(entity_load('view', 'frontpage', TRUE) === NULL, 'After installing Views, frontpage view which is dependant on the Node and Views modules does not exist.');
+    $storage = $this->container->get('entity_type.manager')->getStorage('view');
+    $storage->resetCache(array('frontpage'));
+
+    $this->assertTrue($storage->load('frontpage') === NULL, 'After installing Views, frontpage view which is dependant on the Node and Views modules does not exist.');
     $this->installModule('node');
-    $this->assertTrue(entity_load('view', 'frontpage', TRUE) !== NULL, 'After installing Node, frontpage view which is dependant on the Node and Views modules exists.');
+    $storage->resetCache(array('frontpage'));
+    $this->assertTrue($storage->load('frontpage') !== NULL, 'After installing Node, frontpage view which is dependant on the Node and Views modules exists.');
     $this->uninstallModule('node');
-    $this->assertTrue(entity_load('view', 'frontpage', TRUE) === NULL, 'After uninstalling Node, frontpage view which is dependant on the Node and Views modules does not exist.');
+    $storage->resetCache(array('frontpage'));
+    $this->assertTrue($storage->load('frontpage') === NULL, 'After uninstalling Node, frontpage view which is dependant on the Node and Views modules does not exist.');
   }
 
   /**
diff --git a/core/modules/config_translation/src/Tests/ConfigTranslationUiTest.php b/core/modules/config_translation/src/Tests/ConfigTranslationUiTest.php
index 908b925..8f82d85 100644
--- a/core/modules/config_translation/src/Tests/ConfigTranslationUiTest.php
+++ b/core/modules/config_translation/src/Tests/ConfigTranslationUiTest.php
@@ -10,6 +10,7 @@
 use Drupal\Core\Language\LanguageInterface;
 use Drupal\field\Entity\FieldConfig;
 use Drupal\field\Entity\FieldStorageConfig;
+use Drupal\filter\Entity\FilterFormat;
 use Drupal\language\Entity\ConfigurableLanguage;
 use Drupal\simpletest\WebTestBase;
 
@@ -77,11 +78,11 @@ protected function setUp() {
     ];
 
     /** @var \Drupal\filter\FilterFormatInterface $filter_test_format */
-    $filter_test_format = entity_load('filter_format', 'filter_test');
+    $filter_test_format = FilterFormat::load('filter_test');
     /** @var \Drupal\filter\FilterFormatInterface $filtered_html_format */
-    $filtered_html_format = entity_load('filter_format', 'filtered_html');
+    $filtered_html_format = FilterFormat::load('filtered_html');
     /** @var \Drupal\filter\FilterFormatInterface $full_html_format */
-    $full_html_format = entity_load('filter_format', 'full_html');
+    $full_html_format = FilterFormat::load('full_html');
 
     $admin_permissions = array_merge(
       $translator_permissions,
diff --git a/core/modules/content_translation/src/Tests/ContentTranslationTestBase.php b/core/modules/content_translation/src/Tests/ContentTranslationTestBase.php
index 5d9a8d0..bedd9c8 100644
--- a/core/modules/content_translation/src/Tests/ContentTranslationTestBase.php
+++ b/core/modules/content_translation/src/Tests/ContentTranslationTestBase.php
@@ -81,6 +81,13 @@
    */
   protected $manager;
 
+  /**
+   * The entity storage used for the current entity type.
+   *
+   * @var \Drupal\core\Entity\EntityStorageInterface
+   */
+  protected $storage;
+
   protected function setUp() {
     parent::setUp();
 
@@ -93,6 +100,9 @@ protected function setUp() {
     $this->manager = $this->container->get('content_translation.manager');
     $this->controller = $this->manager->getTranslationHandler($this->entityTypeId);
 
+    $this->storage = $this->container->get('entity_type.manager')
+      ->getStorage($this->entityTypeId);
+
     // Rebuild the container so that the new languages are picked up by services
     // that hold a list of languages.
     $this->rebuildContainer();
diff --git a/core/modules/content_translation/src/Tests/ContentTranslationUITestBase.php b/core/modules/content_translation/src/Tests/ContentTranslationUITestBase.php
index e9fff8d..78dd185 100644
--- a/core/modules/content_translation/src/Tests/ContentTranslationUITestBase.php
+++ b/core/modules/content_translation/src/Tests/ContentTranslationUITestBase.php
@@ -77,7 +77,8 @@ protected function doTestBasicTranslation() {
     $this->drupalLogin($this->editor);
     $this->entityId = $this->createEntity($values[$default_langcode], $default_langcode);
     $this->drupalLogin($this->translator);
-    $entity = entity_load($this->entityTypeId, $this->entityId, TRUE);
+    $this->storage->resetCache(array($this->entityId));
+    $entity = $this->storage->load($this->entityId);
     $this->assertTrue($entity, 'Entity found in the database.');
     $this->drupalGet($entity->urlInfo());
     $this->assertResponse(200, 'Entity URL is valid.');
@@ -119,7 +120,8 @@ protected function doTestBasicTranslation() {
 
     // Ensure that the content language cache context is not yet added to the
     // page.
-    $entity = entity_load($this->entityTypeId, $this->entityId, TRUE);
+    $this->storage->resetCache(array($this->entityId));
+    $entity = $this->storage->load($this->entityId);
     $this->drupalGet($entity->urlInfo());
     $this->assertCacheContexts(Cache::mergeContexts(['languages:language_content'], $this->defaultCacheContexts));
 
@@ -154,7 +156,8 @@ protected function doTestBasicTranslation() {
     if ($this->testLanguageSelector) {
       $this->assertNoFieldByXPath('//select[@id="edit-langcode-0-value"]', NULL, 'Language selector correctly disabled on translations.');
     }
-    $entity = entity_load($this->entityTypeId, $this->entityId, TRUE);
+    $this->storage->resetCache(array($this->entityId));
+    $entity = $this->storage->load($this->entityId);
     $this->drupalGet($entity->urlInfo('drupal:content-translation-overview'));
     $this->assertNoText('Source language', 'Source language column correctly hidden.');
 
@@ -184,7 +187,8 @@ protected function doTestBasicTranslation() {
       'target' => $langcode
     ], array('language' => $language));
     $this->drupalPostForm($add_url, $edit, $this->getFormSubmitActionForNewTranslation($entity, $langcode));
-    $entity = entity_load($this->entityTypeId, $this->entityId, TRUE);
+    $this->storage->resetCache(array($this->entityId));
+    $entity = $this->storage->load($this->entityId);
     $this->drupalGet($entity->urlInfo('drupal:content-translation-overview'));
     $this->assertText('Source language', 'Source language column correctly shown.');
 
@@ -204,7 +208,8 @@ protected function doTestBasicTranslation() {
    * Tests that the translation overview shows the correct values.
    */
   protected function doTestTranslationOverview() {
-    $entity = entity_load($this->entityTypeId, $this->entityId, TRUE);
+    $this->storage->resetCache(array($this->entityId));
+    $entity = $this->storage->load($this->entityId);
     $translate_url = $entity->urlInfo('drupal:content-translation-overview');
     $this->drupalGet($translate_url);
     $translate_url->setAbsolute(FALSE);
@@ -226,7 +231,8 @@ protected function doTestTranslationOverview() {
    * Tests up-to-date status tracking.
    */
   protected function doTestOutdatedStatus() {
-    $entity = entity_load($this->entityTypeId, $this->entityId, TRUE);
+    $this->storage->resetCache(array($this->entityId));
+    $entity = $this->storage->load($this->entityId);
     $langcode = 'fr';
     $languages = \Drupal::languageManager()->getLanguages();
 
@@ -234,7 +240,8 @@ protected function doTestOutdatedStatus() {
     $edit = array('content_translation[retranslate]' => TRUE);
     $edit_path = $entity->urlInfo('edit-form', array('language' => $languages[$langcode]));
     $this->drupalPostForm($edit_path, $edit, $this->getFormSubmitAction($entity, $langcode));
-    $entity = entity_load($this->entityTypeId, $this->entityId, TRUE);
+    $this->storage->resetCache(array($this->entityId));
+    $entity = $this->storage->load($this->entityId);
 
     // Check that every translation has the correct "outdated" status, and that
     // the Translation fieldset is open if the translation is "outdated".
@@ -252,7 +259,8 @@ protected function doTestOutdatedStatus() {
         $this->drupalPostForm($url, $edit, $this->getFormSubmitAction($entity, $added_langcode));
         $this->drupalGet($url);
         $this->assertFieldByXPath('//input[@name="content_translation[retranslate]"]', FALSE, 'The retranslate flag is now shown.');
-        $entity = entity_load($this->entityTypeId, $this->entityId, TRUE);
+        $this->storage->resetCache(array($this->entityId));
+        $entity = $this->storage->load($this->entityId);
         $this->assertFalse($this->manager->getTranslationMetadata($entity->getTranslation($added_langcode))->isOutdated(), 'The "outdated" status has been correctly stored.');
       }
     }
@@ -262,7 +270,8 @@ protected function doTestOutdatedStatus() {
    * Tests the translation publishing status.
    */
   protected function doTestPublishedStatus() {
-    $entity = entity_load($this->entityTypeId, $this->entityId, TRUE);
+    $this->storage->resetCache(array($this->entityId));
+    $entity = $this->storage->load($this->entityId);
 
     // Unpublish translations.
     foreach ($this->langcodes as $index => $langcode) {
@@ -270,7 +279,8 @@ protected function doTestPublishedStatus() {
         $url = $entity->urlInfo('edit-form', array('language' => ConfigurableLanguage::load($langcode)));
         $edit = array('content_translation[status]' => FALSE);
         $this->drupalPostForm($url, $edit, $this->getFormSubmitAction($entity, $langcode));
-        $entity = entity_load($this->entityTypeId, $this->entityId, TRUE);
+        $this->storage->resetCache(array($this->entityId));
+        $entity = $this->storage->load($this->entityId);
         $this->assertFalse($this->manager->getTranslationMetadata($entity->getTranslation($langcode))->isPublished(), 'The translation has been correctly unpublished.');
       }
     }
@@ -284,7 +294,8 @@ protected function doTestPublishedStatus() {
    * Tests the translation authoring information.
    */
   protected function doTestAuthoringInfo() {
-    $entity = entity_load($this->entityTypeId, $this->entityId, TRUE);
+    $this->storage->resetCache(array($this->entityId));
+    $entity = $this->storage->load($this->entityId);
     $values = array();
 
     // Post different authoring information for each translation.
@@ -302,7 +313,8 @@ protected function doTestAuthoringInfo() {
       $this->drupalPostForm($url, $edit, $this->getFormSubmitAction($entity, $langcode));
     }
 
-    $entity = entity_load($this->entityTypeId, $this->entityId, TRUE);
+    $this->storage->resetCache(array($this->entityId));
+    $entity = $this->storage->load($this->entityId);
     foreach ($this->langcodes as $langcode) {
       $metadata = $this->manager->getTranslationMetadata($entity->getTranslation($langcode));
       $this->assertEqual($metadata->getAuthor()->id(), $values[$langcode]['uid'], 'Translation author correctly stored.');
@@ -330,12 +342,14 @@ protected function doTestTranslationDeletion() {
     // Confirm and delete a translation.
     $this->drupalLogin($this->translator);
     $langcode = 'fr';
-    $entity = entity_load($this->entityTypeId, $this->entityId, TRUE);
+    $this->storage->resetCache(array($this->entityId));
+    $entity = $this->storage->load($this->entityId);
     $language = ConfigurableLanguage::load($langcode);
     $url = $entity->urlInfo('edit-form', array('language' => $language));
     $this->drupalPostForm($url, array(), t('Delete translation'));
     $this->drupalPostForm(NULL, array(), t('Delete @language translation', array('@language' => $language->getName())));
-    $entity = entity_load($this->entityTypeId, $this->entityId, TRUE);
+    $this->storage->resetCache(array($this->entityId));
+    $entity = $this->storage->load($this->entityId);
     if ($this->assertTrue(is_object($entity), 'Entity found')) {
       $translations = $entity->getTranslationLanguages();
       $this->assertTrue(count($translations) == 2 && empty($translations[$langcode]), 'Translation successfully deleted.');
@@ -465,7 +479,8 @@ protected function getChangedFieldName($entity) {
    * Tests edit content translation.
    */
   protected function doTestTranslationEdit() {
-    $entity = entity_load($this->entityTypeId, $this->entityId, TRUE);
+    $this->storage->resetCache(array($this->entityId));
+    $entity = $this->storage->load($this->entityId);
     $languages = $this->container->get('language_manager')->getLanguages();
 
     foreach ($this->langcodes as $langcode) {
@@ -484,7 +499,8 @@ protected function doTestTranslationEdit() {
    * Tests the basic translation workflow.
    */
   protected function doTestTranslationChanged() {
-    $entity = entity_load($this->entityTypeId, $this->entityId, TRUE);
+    $this->storage->resetCache(array($this->entityId));
+    $entity = $this->storage->load($this->entityId);
     $changed_field_name = $this->getChangedFieldName($entity);
     $definition = $entity->getFieldDefinition($changed_field_name);
     $config = $definition->getConfig($entity->bundle());
@@ -517,7 +533,8 @@ protected function doTestTranslationChanged() {
         $edit_path = $entity->urlInfo('edit-form', array('language' => $language));
         $this->drupalPostForm($edit_path, $edit, $this->getFormSubmitAction($entity, $langcode));
 
-        $entity = entity_load($this->entityTypeId, $this->entityId, TRUE);
+        $this->storage->resetCache(array($this->entityId));
+        $entity = $this->storage->load($this->entityId);
         $this->assertEqual(
           $entity->getChangedTimeAcrossTranslations(), $entity->getTranslation($langcode)->getChangedTime(),
           format_string('Changed time for language %language is the latest change over all languages.', array('%language' => $language->getName()))
@@ -551,13 +568,15 @@ protected function doTestTranslationChanged() {
    * Test the changed time after API and FORM save without changes.
    */
   public function doTestChangedTimeAfterSaveWithoutChanges() {
-    $entity = entity_load($this->entityTypeId, $this->entityId, TRUE);
+    $this->storage->resetCache(array($this->entityId));
+    $entity = $this->storage->load($this->entityId);
     // Test only entities, which implement the EntityChangedInterface.
     if ($entity->getEntityType()->isSubclassOf('Drupal\Core\Entity\EntityChangedInterface')) {
       $changed_timestamp = $entity->getChangedTime();
 
       $entity->save();
-      $entity = entity_load($this->entityTypeId, $this->entityId, TRUE);
+      $this->storage->resetCache(array($this->entityId));
+      $entity = $this->storage->load($this->entityId);
       $this->assertEqual($changed_timestamp, $entity->getChangedTime(), 'The entity\'s changed time wasn\'t updated after API save without changes.');
 
       // Ensure different save timestamps.
@@ -568,7 +587,8 @@ public function doTestChangedTimeAfterSaveWithoutChanges() {
       $edit_path = $entity->urlInfo('edit-form', array('language' => $language));
       $this->drupalPostForm($edit_path, [], $this->getFormSubmitAction($entity, $language->getId()));
 
-      $entity = entity_load($this->entityTypeId, $this->entityId, TRUE);
+      $this->storage->resetCache(array($this->entityId));
+      $entity = $this->storage->load($this->entityId);
       $this->assertNotEqual($changed_timestamp, $entity->getChangedTime(), 'The entity\'s changed time was updated after form save without changes.');
     }
   }
diff --git a/core/modules/content_translation/src/Tests/ContentTranslationWorkflowsTest.php b/core/modules/content_translation/src/Tests/ContentTranslationWorkflowsTest.php
index f3c4c53..162734a 100644
--- a/core/modules/content_translation/src/Tests/ContentTranslationWorkflowsTest.php
+++ b/core/modules/content_translation/src/Tests/ContentTranslationWorkflowsTest.php
@@ -64,7 +64,8 @@ protected function setupEntity() {
       $this->fieldName => array(array('value' => $this->randomMachineName(16))),
     );
     $id = $this->createEntity($values, $default_langcode);
-    $this->entity = entity_load($this->entityTypeId, $id, TRUE);
+    
+    $this->entity = $this->storage->load($id);
 
     // Create a translation.
     $this->drupalLogin($this->translator);
diff --git a/core/modules/datetime/src/Tests/DateTimeFieldTest.php b/core/modules/datetime/src/Tests/DateTimeFieldTest.php
index 1fc1d60..62d7612 100644
--- a/core/modules/datetime/src/Tests/DateTimeFieldTest.php
+++ b/core/modules/datetime/src/Tests/DateTimeFieldTest.php
@@ -5,7 +5,9 @@
 use Drupal\Component\Utility\SafeMarkup;
 use Drupal\Component\Utility\Unicode;
 use Drupal\Core\Datetime\DrupalDateTime;
+use Drupal\Core\Datetime\Entity\DateFormat;
 use Drupal\Core\Entity\Entity\EntityViewDisplay;
+use Drupal\entity_test\Entity\EntityTest;
 use Drupal\field\Entity\FieldConfig;
 use Drupal\field\Entity\FieldStorageConfig;
 use Drupal\node\Entity\Node;
@@ -132,8 +134,8 @@ function testDateField() {
     $date->setTimezone(timezone_open(drupal_get_user_timezone()));
 
     // Submit a valid date and ensure it is accepted.
-    $date_format = entity_load('date_format', 'html_date')->getPattern();
-    $time_format = entity_load('date_format', 'html_time')->getPattern();
+    $date_format = DateFormat::load('html_date')->getPattern();
+    $time_format = DateFormat::load('html_time')->getPattern();
 
     $edit = array(
       "{$field_name}[0][value][date]" => $date->format($date_format),
@@ -195,7 +197,7 @@ function testDateField() {
     // interval will use this, force the test date to use UTC and not the local
     // or user timezome.
     $timestamp = REQUEST_TIME - 87654321;
-    $entity = entity_load('entity_test', $id);
+    $entity = EntityTest::load($id);
     $field_name = $this->fieldStorage->getName();
     $date = DrupalDateTime::createFromTimestamp($timestamp, 'UTC');
     $entity->{$field_name}->value = $date->format($date_format);
@@ -222,7 +224,7 @@ function testDateField() {
     // interval will use this, force the test date to use UTC and not the local
     // or user timezome.
     $timestamp = REQUEST_TIME + 87654321;
-    $entity = entity_load('entity_test', $id);
+    $entity = EntityTest::load($id);
     $field_name = $this->fieldStorage->getName();
     $date = DrupalDateTime::createFromTimestamp($timestamp, 'UTC');
     $entity->{$field_name}->value = $date->format($date_format);
@@ -260,8 +262,8 @@ function testDatetimeField() {
     $date->setTimezone(timezone_open(drupal_get_user_timezone()));
 
     // Submit a valid date and ensure it is accepted.
-    $date_format = entity_load('date_format', 'html_date')->getPattern();
-    $time_format = entity_load('date_format', 'html_time')->getPattern();
+    $date_format = DateFormat::load('html_date')->getPattern();
+    $time_format = DateFormat::load('html_time')->getPattern();
 
     $edit = array(
       "{$field_name}[0][value][date]" => $date->format($date_format),
@@ -334,7 +336,7 @@ function testDatetimeField() {
     // interval will use this, force the test date to use UTC and not the local
     // or user timezome.
     $timestamp = REQUEST_TIME - 87654321;
-    $entity = entity_load('entity_test', $id);
+    $entity = EntityTest::load($id);
     $field_name = $this->fieldStorage->getName();
     $date = DrupalDateTime::createFromTimestamp($timestamp, 'UTC');
     $entity->{$field_name}->value = $date->format(DATETIME_DATETIME_STORAGE_FORMAT);
@@ -361,7 +363,7 @@ function testDatetimeField() {
     // interval will use this, force the test date to use UTC and not the local
     // or user timezome.
     $timestamp = REQUEST_TIME + 87654321;
-    $entity = entity_load('entity_test', $id);
+    $entity = EntityTest::load($id);
     $field_name = $this->fieldStorage->getName();
     $date = DrupalDateTime::createFromTimestamp($timestamp, 'UTC');
     $entity->{$field_name}->value = $date->format(DATETIME_DATETIME_STORAGE_FORMAT);
@@ -856,7 +858,7 @@ protected function renderTestEntity($id, $view_mode = 'full', $reset = TRUE) {
     if ($reset) {
       \Drupal::entityManager()->getStorage('entity_test')->resetCache(array($id));
     }
-    $entity = entity_load('entity_test', $id);
+    $entity = EntityTest::load($id);
     $display = EntityViewDisplay::collectRenderDisplay($entity, $view_mode);
     $build = $display->build($entity);
     $output = \Drupal::service('renderer')->renderRoot($build);
diff --git a/core/modules/datetime/tests/src/Kernel/DateTimeItemTest.php b/core/modules/datetime/tests/src/Kernel/DateTimeItemTest.php
index bba2c33..d26434b 100644
--- a/core/modules/datetime/tests/src/Kernel/DateTimeItemTest.php
+++ b/core/modules/datetime/tests/src/Kernel/DateTimeItemTest.php
@@ -57,7 +57,7 @@ public function testDateTimeItem() {
 
     // Verify entity has been created properly.
     $id = $entity->id();
-    $entity = entity_load('entity_test', $id);
+    $entity = EntityTest::load($id);
     $this->assertTrue($entity->field_datetime instanceof FieldItemListInterface, 'Field implements interface.');
     $this->assertTrue($entity->field_datetime[0] instanceof FieldItemInterface, 'Field item implements interface.');
     $this->assertEqual($entity->field_datetime->value, $value);
@@ -70,7 +70,7 @@ public function testDateTimeItem() {
 
     // Read changed entity and assert changed values.
     $entity->save();
-    $entity = entity_load('entity_test', $id);
+    $entity = EntityTest::load($id);
     $this->assertEqual($entity->field_datetime->value, $new_value);
 
     // Test the generateSampleValue() method.
@@ -90,7 +90,7 @@ public function testSetValue() {
     $entity->save();
     // Load the entity and ensure the field was saved correctly.
     $id = $entity->id();
-    $entity = entity_load('entity_test', $id);
+    $entity = EntityTest::load($id);
     $this->assertEqual($entity->field_datetime[0]->value, $value, 'DateTimeItem::setValue() works with string value.');
 
     // Test DateTimeItem::setValue() using property array.
@@ -100,7 +100,7 @@ public function testSetValue() {
     $entity->save();
     // Load the entity and ensure the field was saved correctly.
     $id = $entity->id();
-    $entity = entity_load('entity_test', $id);
+    $entity = EntityTest::load($id);
     $this->assertEqual($entity->field_datetime[0]->value, $value, 'DateTimeItem::setValue() works with array value.');
   }
 
@@ -116,7 +116,7 @@ public function testSetValueProperty() {
     $entity->save();
     // Load the entity and ensure the field was saved correctly.
     $id = $entity->id();
-    $entity = entity_load('entity_test', $id);
+    $entity = EntityTest::load($id);
     $this->assertEqual($entity->field_datetime[0]->value, $value, '"Value" property can be set directly.');
   }
 
diff --git a/core/modules/editor/editor.module b/core/modules/editor/editor.module
index 01d5c5e..a0348f0 100644
--- a/core/modules/editor/editor.module
+++ b/core/modules/editor/editor.module
@@ -249,7 +249,7 @@ function editor_load($format_id) {
   // than one editor will be needed on a page (such as having multiple text
   // formats for administrators). Loading a small number of editors all at once
   // is more efficient than loading multiple editors individually.
-  $editors = entity_load_multiple('editor');
+  $editors = Editor::loadMultiple();
   return isset($editors[$format_id]) ? $editors[$format_id] : NULL;
 }
 
diff --git a/core/modules/editor/src/Plugin/InPlaceEditor/Editor.php b/core/modules/editor/src/Plugin/InPlaceEditor/Editor.php
index 24b43ea..56158f5 100644
--- a/core/modules/editor/src/Plugin/InPlaceEditor/Editor.php
+++ b/core/modules/editor/src/Plugin/InPlaceEditor/Editor.php
@@ -4,6 +4,7 @@
 
 use Drupal\Component\Plugin\PluginBase;
 use Drupal\Core\Field\FieldItemListInterface;
+use Drupal\filter\Entity\FilterFormat;
 use Drupal\quickedit\Plugin\InPlaceEditorInterface;
 use Drupal\filter\Plugin\FilterInterface;
 
@@ -61,7 +62,7 @@ function getMetadata(FieldItemListInterface $items) {
    * @return bool
    */
   protected function textFormatHasTransformationFilters($format_id) {
-    $format = entity_load('filter_format', $format_id);
+    $format = FilterFormat::load($format_id);
     return (bool) count(array_intersect(array(FilterInterface::TYPE_TRANSFORM_REVERSIBLE, FilterInterface::TYPE_TRANSFORM_IRREVERSIBLE), $format->getFiltertypes()));
   }
 
diff --git a/core/modules/editor/tests/src/Kernel/QuickEditIntegrationTest.php b/core/modules/editor/tests/src/Kernel/QuickEditIntegrationTest.php
index 5e47c36..8c32fe9 100644
--- a/core/modules/editor/tests/src/Kernel/QuickEditIntegrationTest.php
+++ b/core/modules/editor/tests/src/Kernel/QuickEditIntegrationTest.php
@@ -3,6 +3,7 @@
 namespace Drupal\Tests\editor\Kernel;
 
 use Drupal\Component\Serialization\Json;
+use Drupal\Core\Entity\EntityStorageInterface;
 use Drupal\Core\EventSubscriber\AjaxResponseSubscriber;
 use Drupal\Core\Language\LanguageInterface;
 use Drupal\editor\Entity\Editor;
@@ -121,7 +122,11 @@ protected function setUp() {
    *   Returns the selected in-place editor.
    */
   protected function getSelectedEditor($entity_id, $field_name, $view_mode = 'default') {
-    $entity = entity_load('entity_test', $entity_id, TRUE);
+    /** @var EntityStorageInterface $storage */
+    $storage = $this->container->get('entity_type.manager')
+      ->getStorage('entity_test');
+    $storage->resetCache(array($entity_id));
+    $entity = $storage->load($entity_id);
     $items = $entity->get($field_name);
     $options = entity_get_display('entity_test', 'entity_test', $view_mode)->getComponent($field_name);
     return $this->editorSelector->getEditor($options['type'], $items);
@@ -172,7 +177,7 @@ public function testMetadata() {
     $entity->{$this->fieldName}->value = 'Test';
     $entity->{$this->fieldName}->format = 'full_html';
     $entity->save();
-    $entity = entity_load('entity_test', $entity->id());
+    $entity = EntityTest::load($entity->id());
 
     // Verify metadata.
     $items = $entity->get($this->fieldName);
@@ -209,7 +214,7 @@ public function testGetUntransformedTextCommand() {
     $entity->{$this->fieldName}->value = 'Test';
     $entity->{$this->fieldName}->format = 'full_html';
     $entity->save();
-    $entity = entity_load('entity_test', $entity->id());
+    $entity = EntityTest::load($entity->id());
 
     // Verify AJAX response.
     $controller = new EditorController();
diff --git a/core/modules/field/src/Tests/Boolean/BooleanFieldTest.php b/core/modules/field/src/Tests/Boolean/BooleanFieldTest.php
index 1f37f0d..ee93c6e 100644
--- a/core/modules/field/src/Tests/Boolean/BooleanFieldTest.php
+++ b/core/modules/field/src/Tests/Boolean/BooleanFieldTest.php
@@ -3,6 +3,7 @@
 namespace Drupal\field\Tests\Boolean;
 
 use Drupal\Component\Utility\Unicode;
+use Drupal\entity_test\Entity\EntityTest;
 use Drupal\field\Entity\FieldStorageConfig;
 use Drupal\field\Entity\FieldConfig;
 use Drupal\simpletest\WebTestBase;
@@ -106,7 +107,7 @@ function testBooleanField() {
     $this->assertText(t('entity_test @id has been created.', array('@id' => $id)));
 
     // Verify that boolean value is displayed.
-    $entity = entity_load('entity_test', $id);
+    $entity = EntityTest::load($id);
     $display = entity_get_display($entity->getEntityTypeId(), $entity->bundle(), 'full');
     $content = $display->build($entity);
     $this->setRawContent(\Drupal::service('renderer')->renderRoot($content));
diff --git a/core/modules/field/src/Tests/Email/EmailFieldTest.php b/core/modules/field/src/Tests/Email/EmailFieldTest.php
index b8401fb..7c22861 100644
--- a/core/modules/field/src/Tests/Email/EmailFieldTest.php
+++ b/core/modules/field/src/Tests/Email/EmailFieldTest.php
@@ -3,6 +3,7 @@
 namespace Drupal\field\Tests\Email;
 
 use Drupal\Component\Utility\Unicode;
+use Drupal\entity_test\Entity\EntityTest;
 use Drupal\field\Entity\FieldConfig;
 use Drupal\simpletest\WebTestBase;
 use Drupal\field\Entity\FieldStorageConfig;
@@ -96,7 +97,7 @@ function testEmailField() {
     $this->assertRaw($value);
 
     // Verify that a mailto link is displayed.
-    $entity = entity_load('entity_test', $id);
+    $entity = EntityTest::load($id);
     $display = entity_get_display($entity->getEntityTypeId(), $entity->bundle(), 'full');
     $content = $display->build($entity);
     $this->setRawContent(\Drupal::service('renderer')->renderRoot($content));
diff --git a/core/modules/field/src/Tests/FieldImportDeleteUninstallUiTest.php b/core/modules/field/src/Tests/FieldImportDeleteUninstallUiTest.php
index bfc135e..4a73a1b 100644
--- a/core/modules/field/src/Tests/FieldImportDeleteUninstallUiTest.php
+++ b/core/modules/field/src/Tests/FieldImportDeleteUninstallUiTest.php
@@ -3,6 +3,7 @@
 namespace Drupal\field\Tests;
 
 use Drupal\entity_test\Entity\EntityTest;
+use Drupal\entity_test\Entity\EntityTestNew;
 use Drupal\field\Entity\FieldConfig;
 use Drupal\field\Entity\FieldStorageConfig;
 
@@ -73,7 +74,7 @@ public function testImportDeleteUninstall() {
 
     // Verify entity has been created properly.
     $id = $entity->id();
-    $entity = entity_load('entity_test', $id);
+    $entity = EntityTest::load($id);
     $this->assertEqual($entity->field_tel->value, $value);
     $this->assertEqual($entity->field_tel[0]->value, $value);
 
diff --git a/core/modules/field/src/Tests/FieldTestBase.php b/core/modules/field/src/Tests/FieldTestBase.php
index ca23d03..23f0206 100644
--- a/core/modules/field/src/Tests/FieldTestBase.php
+++ b/core/modules/field/src/Tests/FieldTestBase.php
@@ -47,8 +47,9 @@ function _generateTestFieldValues($cardinality) {
    */
   function assertFieldValues(EntityInterface $entity, $field_name, $expected_values, $langcode = LanguageInterface::LANGCODE_DEFAULT, $column = 'value') {
     // Re-load the entity to make sure we have the latest changes.
-    \Drupal::entityManager()->getStorage($entity->getEntityTypeId())->resetCache(array($entity->id()));
-    $e = entity_load($entity->getEntityTypeId(), $entity->id());
+    $storage = $this->container->get('entity_type.manager')->getStorage($entity->getEntityTypeId());
+    $storage->resetCache(array($entity->id()));
+    $e = $storage->load($entity->id());
     $field = $values = $e->getTranslation($langcode)->$field_name;
     // Filter out empty values so that they don't mess with the assertions.
     $field->filterEmptyItems();
diff --git a/core/modules/field/src/Tests/FormTest.php b/core/modules/field/src/Tests/FormTest.php
index 51c80b3..c0f9934 100644
--- a/core/modules/field/src/Tests/FormTest.php
+++ b/core/modules/field/src/Tests/FormTest.php
@@ -6,6 +6,7 @@
 use Drupal\Core\Entity\Entity\EntityFormDisplay;
 use Drupal\Core\Field\FieldStorageDefinitionInterface;
 use Drupal\Core\Form\FormState;
+use Drupal\entity_test\Entity\EntityTest;
 use Drupal\entity_test\Entity\EntityTestBaseFieldDisplay;
 use Drupal\field\Entity\FieldConfig;
 use Drupal\field\Entity\FieldStorageConfig;
@@ -130,7 +131,7 @@ function testFieldFormSingle() {
     preg_match('|entity_test/manage/(\d+)|', $this->url, $match);
     $id = $match[1];
     $this->assertText(t('entity_test @id has been created.', array('@id' => $id)), 'Entity was created');
-    $entity = entity_load('entity_test', $id);
+    $entity = EntityTest::load($id);
     $this->assertEqual($entity->{$field_name}->value, $value, 'Field value was saved');
 
     // Display edit form.
@@ -146,7 +147,7 @@ function testFieldFormSingle() {
     $this->drupalPostForm(NULL, $edit, t('Save'));
     $this->assertText(t('entity_test @id has been updated.', array('@id' => $id)), 'Entity was updated');
     $this->container->get('entity.manager')->getStorage('entity_test')->resetCache(array($id));
-    $entity = entity_load('entity_test', $id);
+    $entity = EntityTest::load($id);
     $this->assertEqual($entity->{$field_name}->value, $value, 'Field value was updated');
 
     // Empty the field.
@@ -157,7 +158,7 @@ function testFieldFormSingle() {
     $this->drupalPostForm('entity_test/manage/' . $id . '/edit', $edit, t('Save'));
     $this->assertText(t('entity_test @id has been updated.', array('@id' => $id)), 'Entity was updated');
     $this->container->get('entity.manager')->getStorage('entity_test')->resetCache(array($id));
-    $entity = entity_load('entity_test', $id);
+    $entity = EntityTest::load($id);
     $this->assertTrue($entity->{$field_name}->isEmpty(), 'Field was emptied');
   }
 
@@ -189,7 +190,7 @@ function testFieldFormDefaultValue() {
     preg_match('|entity_test/manage/(\d+)|', $this->url, $match);
     $id = $match[1];
     $this->assertText(t('entity_test @id has been created.', array('@id' => $id)), 'Entity was created.');
-    $entity = entity_load('entity_test', $id);
+    $entity = EntityTest::load($id);
     $this->assertTrue($entity->{$field_name}->isEmpty(), 'Field is now empty.');
   }
 
@@ -218,7 +219,7 @@ function testFieldFormSingleRequired() {
     preg_match('|entity_test/manage/(\d+)|', $this->url, $match);
     $id = $match[1];
     $this->assertText(t('entity_test @id has been created.', array('@id' => $id)), 'Entity was created');
-    $entity = entity_load('entity_test', $id);
+    $entity = EntityTest::load($id);
     $this->assertEqual($entity->{$field_name}->value, $value, 'Field value was saved');
 
     // Edit with missing required value.
@@ -307,7 +308,7 @@ function testFieldFormUnlimited() {
     preg_match('|entity_test/manage/(\d+)|', $this->url, $match);
     $id = $match[1];
     $this->assertText(t('entity_test @id has been created.', array('@id' => $id)), 'Entity was created');
-    $entity = entity_load('entity_test', $id);
+    $entity = EntityTest::load($id);
     ksort($field_values);
     $field_values = array_values($field_values);
     $this->assertIdentical($entity->{$field_name}->getValue(), $field_values, 'Field values were saved in the correct order');
@@ -482,7 +483,8 @@ function testFieldFormMultipleWidget() {
     $id = $match[1];
 
     // Check that the values were saved.
-    $entity_init = entity_load('entity_test', $id);
+    $entity_init = EntityTest::load($id);
+
     $this->assertFieldValues($entity_init, $field_name, array(1, 2, 3));
 
     // Display the form, check that the values are correctly filled in.
@@ -562,7 +564,7 @@ function testFieldFormAccess() {
     $id = $match[1];
 
     // Check that the default value was saved.
-    $entity = entity_load($entity_type, $id);
+    $entity = EntityTest::load($id);
     $this->assertEqual($entity->$field_name_no_access->value, 99, 'Default value was saved for the field with no edit access.');
     $this->assertEqual($entity->$field_name->value, 1, 'Entered value vas saved for the field with edit access.');
 
@@ -575,7 +577,7 @@ function testFieldFormAccess() {
 
     // Check that the new revision has the expected values.
     $this->container->get('entity.manager')->getStorage($entity_type)->resetCache(array($id));
-    $entity = entity_load($entity_type, $id);
+    $entity = EntityTest::load($id);
     $this->assertEqual($entity->$field_name_no_access->value, 99, 'New revision has the expected value for the field with no edit access.');
     $this->assertEqual($entity->$field_name->value, 2, 'New revision has the expected value for the field with edit access.');
 
@@ -613,7 +615,7 @@ function testHiddenField() {
     preg_match('|' . $entity_type . '/manage/(\d+)|', $this->url, $match);
     $id = $match[1];
     $this->assertText(t('entity_test_rev @id has been created.', array('@id' => $id)), 'Entity was created');
-    $entity = entity_load($entity_type, $id);
+    $entity = EntityTest::load($id);
     $this->assertEqual($entity->{$field_name}->value, 99, 'Default value was saved');
 
     // Update the field to remove the default value, and switch to the default
@@ -635,8 +637,9 @@ function testHiddenField() {
     $edit = array("{$field_name}[0][value]" => $value);
     $this->drupalPostForm(NULL, $edit, t('Save'));
     $this->assertText(t('entity_test_rev @id has been updated.', array('@id' => $id)), 'Entity was updated');
-    \Drupal::entityManager()->getStorage($entity_type)->resetCache(array($id));
-    $entity = entity_load($entity_type, $id);
+    $storage = $this->container->get('entity_type.manager')->getStorage($entity_type);
+    $storage->resetCache(array($id));
+    $entity = $storage->load($id);
     $this->assertEqual($entity->{$field_name}->value, $value, 'Field value was updated');
 
     // Set the field back to hidden.
@@ -649,8 +652,9 @@ function testHiddenField() {
     $this->drupalPostForm($entity_type . '/manage/' . $id . '/edit', $edit, t('Save'));
 
     // Check that the expected value has been carried over to the new revision.
-    \Drupal::entityManager()->getStorage($entity_type)->resetCache(array($id));
-    $entity = entity_load($entity_type, $id);
+    $storage = $this->container->get('entity_type.manager')->getStorage($entity_type);
+    $storage->resetCache(array($id));
+    $entity = $storage->load($id);
     $this->assertEqual($entity->{$field_name}->value, $value, 'New revision has the expected value for the field with the Hidden widget');
   }
 
diff --git a/core/modules/field/src/Tests/NestedFormTest.php b/core/modules/field/src/Tests/NestedFormTest.php
index 94ec485..8104a91 100644
--- a/core/modules/field/src/Tests/NestedFormTest.php
+++ b/core/modules/field/src/Tests/NestedFormTest.php
@@ -71,17 +71,14 @@ function testNestedFieldForm() {
 
     // Create two entities.
     $entity_type = 'entity_test';
-    $entity_1 = $this->container->get('entity_type.manager')
-      ->getStorage($entity_type)
-      ->create(array('id' => 1));
+    $storage = $this->container->get('entity_type.manager')->getStorage($entity_type);
+    $entity_1 = $storage->create(array('id' => 1));
     $entity_1->enforceIsNew();
     $entity_1->field_single->value = 0;
     $entity_1->field_unlimited->value = 1;
     $entity_1->save();
 
-    $entity_2 = $this->container->get('entity_type.manager')
-      ->getStorage($entity_type)
-      ->create(array('id' => 2));
+    $entity_2 = $storage->create(array('id' => 2));
     $entity_2->enforceIsNew();
     $entity_2->field_single->value = 10;
     $entity_2->field_unlimited->value = 11;
@@ -104,8 +101,8 @@ function testNestedFieldForm() {
       'entity_2[field_unlimited][1][value]' => 13,
     );
     $this->drupalPostForm(NULL, $edit, t('Save'));
-    $entity_1 = entity_load($entity_type, 1);
-    $entity_2 = entity_load($entity_type, 2);
+    $entity_1 = $storage->load(1);
+    $entity_2 = $storage->load(2);
     $this->assertFieldValues($entity_1, 'field_single', array(1));
     $this->assertFieldValues($entity_1, 'field_unlimited', array(2, 3));
     $this->assertFieldValues($entity_2, 'field_single', array(11));
diff --git a/core/modules/field/src/Tests/String/StringFieldTest.php b/core/modules/field/src/Tests/String/StringFieldTest.php
index 9284426..3459259 100644
--- a/core/modules/field/src/Tests/String/StringFieldTest.php
+++ b/core/modules/field/src/Tests/String/StringFieldTest.php
@@ -91,7 +91,7 @@ function _testTextfieldWidgets($field_type, $widget_type) {
     $this->assertText(t('entity_test @id has been created.', array('@id' => $id)), 'Entity was created');
 
     // Display the entity.
-    $entity = entity_load('entity_test', $id);
+    $entity = EntityTest::load($id);
     $display = entity_get_display($entity->getEntityTypeId(), $entity->bundle(), 'full');
     $content = $display->build($entity);
     $this->setRawContent(\Drupal::service('renderer')->renderRoot($content));
diff --git a/core/modules/field/tests/src/Kernel/Boolean/BooleanItemTest.php b/core/modules/field/tests/src/Kernel/Boolean/BooleanItemTest.php
index 80f9d11..cb8b501 100644
--- a/core/modules/field/tests/src/Kernel/Boolean/BooleanItemTest.php
+++ b/core/modules/field/tests/src/Kernel/Boolean/BooleanItemTest.php
@@ -55,7 +55,7 @@ public function testBooleanItem() {
 
     // Verify entity has been created properly.
     $id = $entity->id();
-    $entity = entity_load('entity_test', $id);
+    $entity = EntityTest::load($id);
     $this->assertTrue($entity->field_boolean instanceof FieldItemListInterface, 'Field implements interface.');
     $this->assertTrue($entity->field_boolean[0] instanceof FieldItemInterface, 'Field item implements interface.');
     $this->assertEqual($entity->field_boolean->value, $value);
@@ -68,7 +68,7 @@ public function testBooleanItem() {
 
     // Read changed entity and assert changed values.
     $entity->save();
-    $entity = entity_load('entity_test', $id);
+    $entity = EntityTest::load($id);
     $this->assertEqual($entity->field_boolean->value, $new_value);
 
     // Test sample item generation.
diff --git a/core/modules/field/tests/src/Kernel/BulkDeleteTest.php b/core/modules/field/tests/src/Kernel/BulkDeleteTest.php
index 41fedfc..5a81dc7 100644
--- a/core/modules/field/tests/src/Kernel/BulkDeleteTest.php
+++ b/core/modules/field/tests/src/Kernel/BulkDeleteTest.php
@@ -137,7 +137,9 @@ protected function setUp() {
         $entity->save();
       }
     }
-    $this->entities = entity_load_multiple($this->entityTypeId);
+
+    $this->entities = $this->container->get('entity_type.manager')
+      ->getStorage($this->entityTypeId)->loadMultiple();
     foreach ($this->entities as $entity) {
       // This test relies on the entities having stale field definitions
       // so that the deleted field can be accessed on them. Access the field
diff --git a/core/modules/field/tests/src/Kernel/Email/EmailItemTest.php b/core/modules/field/tests/src/Kernel/Email/EmailItemTest.php
index 8b1d145..cd8b7ac 100644
--- a/core/modules/field/tests/src/Kernel/Email/EmailItemTest.php
+++ b/core/modules/field/tests/src/Kernel/Email/EmailItemTest.php
@@ -52,7 +52,7 @@ public function testEmailItem() {
 
     // Verify entity has been created properly.
     $id = $entity->id();
-    $entity = entity_load('entity_test', $id);
+    $entity = EntityTest::load($id);
     $this->assertTrue($entity->field_email instanceof FieldItemListInterface, 'Field implements interface.');
     $this->assertTrue($entity->field_email[0] instanceof FieldItemInterface, 'Field item implements interface.');
     $this->assertEqual($entity->field_email->value, $value);
@@ -65,7 +65,7 @@ public function testEmailItem() {
 
     // Read changed entity and assert changed values.
     $entity->save();
-    $entity = entity_load('entity_test', $id);
+    $entity = EntityTest::load($id);
     $this->assertEqual($entity->field_email->value, $new_value);
 
     // Test sample item generation.
diff --git a/core/modules/field/tests/src/Kernel/EntityReference/EntityReferenceItemTest.php b/core/modules/field/tests/src/Kernel/EntityReference/EntityReferenceItemTest.php
index edb3029..e00848c 100644
--- a/core/modules/field/tests/src/Kernel/EntityReference/EntityReferenceItemTest.php
+++ b/core/modules/field/tests/src/Kernel/EntityReference/EntityReferenceItemTest.php
@@ -116,7 +116,7 @@ public function testContentEntityReferenceItem() {
     $entity->name->value = $this->randomMachineName();
     $entity->save();
 
-    $entity = entity_load('entity_test', $entity->id());
+    $entity = EntityTest::load($entity->id());
     $this->assertTrue($entity->field_test_taxonomy_term instanceof FieldItemListInterface, 'Field implements interface.');
     $this->assertTrue($entity->field_test_taxonomy_term[0] instanceof FieldItemInterface, 'Field item implements interface.');
     $this->assertEqual($entity->field_test_taxonomy_term->target_id, $tid);
@@ -212,7 +212,7 @@ public function testConfigEntityReferenceItem() {
     $entity->name->value = $this->randomMachineName();
     $entity->save();
 
-    $entity = entity_load('entity_test', $entity->id());
+    $entity = EntityTest::load($entity->id());
     $this->assertTrue($entity->field_test_taxonomy_vocabulary instanceof FieldItemListInterface, 'Field implements interface.');
     $this->assertTrue($entity->field_test_taxonomy_vocabulary[0] instanceof FieldItemInterface, 'Field item implements interface.');
     $this->assertEqual($entity->field_test_taxonomy_vocabulary->target_id, $referenced_entity_id);
diff --git a/core/modules/field/tests/src/Kernel/FieldImportDeleteUninstallTest.php b/core/modules/field/tests/src/Kernel/FieldImportDeleteUninstallTest.php
index 3e7f6ce..dab6e0d 100644
--- a/core/modules/field/tests/src/Kernel/FieldImportDeleteUninstallTest.php
+++ b/core/modules/field/tests/src/Kernel/FieldImportDeleteUninstallTest.php
@@ -70,7 +70,7 @@ public function testImportDeleteUninstall() {
 
     // Verify entity has been created properly.
     $id = $entity->id();
-    $entity = entity_load('entity_test', $id);
+    $entity = EntityTest::load($id);
     $this->assertEqual($entity->field_test->value, $value);
     $this->assertEqual($entity->field_test[0]->value, $value);
     $this->assertEqual($entity->field_int->value, '99');
@@ -134,7 +134,7 @@ public function testImportAlreadyDeletedUninstall() {
 
       // Verify entity has been created properly.
       $id = $entity->id();
-      $entity = entity_load('entity_test', $id);
+      $entity = EntityTest::load($id);
       $this->assertEqual($entity->field_test->value, $value);
     }
 
diff --git a/core/modules/field/tests/src/Kernel/FieldKernelTestBase.php b/core/modules/field/tests/src/Kernel/FieldKernelTestBase.php
index c864de8..4bd2e0c 100644
--- a/core/modules/field/tests/src/Kernel/FieldKernelTestBase.php
+++ b/core/modules/field/tests/src/Kernel/FieldKernelTestBase.php
@@ -188,8 +188,9 @@ protected function _generateTestFieldValues($cardinality) {
    */
   protected function assertFieldValues(EntityInterface $entity, $field_name, $expected_values, $langcode = LanguageInterface::LANGCODE_NOT_SPECIFIED, $column = 'value') {
     // Re-load the entity to make sure we have the latest changes.
-    \Drupal::entityManager()->getStorage($entity->getEntityTypeId())->resetCache(array($entity->id()));
-    $e = entity_load($entity->getEntityTypeId(), $entity->id());
+    $storage = $this->container->getStorage($entity->getEntityTypeId());
+    $storage->resetCache(array($entity->id()));
+    $e = $storage->load($entity->id());
     $field = $values = $e->getTranslation($langcode)->$field_name;
     // Filter out empty values so that they don't mess with the assertions.
     $field->filterEmptyItems();
diff --git a/core/modules/field/tests/src/Kernel/Number/NumberItemTest.php b/core/modules/field/tests/src/Kernel/Number/NumberItemTest.php
index 7b66aa3..25b99bb 100644
--- a/core/modules/field/tests/src/Kernel/Number/NumberItemTest.php
+++ b/core/modules/field/tests/src/Kernel/Number/NumberItemTest.php
@@ -61,7 +61,7 @@ public function testNumberItem() {
 
     // Verify entity has been created properly.
     $id = $entity->id();
-    $entity = entity_load('entity_test', $id);
+    $entity = EntityTest::load($id);
     $this->assertTrue($entity->field_integer instanceof FieldItemListInterface, 'Field implements interface.');
     $this->assertTrue($entity->field_integer[0] instanceof FieldItemInterface, 'Field item implements interface.');
     $this->assertEqual($entity->field_integer->value, $integer);
@@ -88,7 +88,7 @@ public function testNumberItem() {
 
     // Read changed entity and assert changed values.
     $entity->save();
-    $entity = entity_load('entity_test', $id);
+    $entity = EntityTest::load($id);
     $this->assertEqual($entity->field_integer->value, $new_integer);
     $this->assertEqual($entity->field_float->value, $new_float);
     $this->assertEqual($entity->field_decimal->value, $new_decimal);
diff --git a/core/modules/field/tests/src/Kernel/ShapeItemTest.php b/core/modules/field/tests/src/Kernel/ShapeItemTest.php
index a792124..644a15f 100644
--- a/core/modules/field/tests/src/Kernel/ShapeItemTest.php
+++ b/core/modules/field/tests/src/Kernel/ShapeItemTest.php
@@ -60,7 +60,7 @@ public function testShapeItem() {
 
     // Verify entity has been created properly.
     $id = $entity->id();
-    $entity = entity_load('entity_test', $id);
+    $entity = EntityTest::load($id);
     $this->assertTrue($entity->{$this->fieldName} instanceof FieldItemListInterface, 'Field implements interface.');
     $this->assertTrue($entity->{$this->fieldName}[0] instanceof FieldItemInterface, 'Field item implements interface.');
     $this->assertEqual($entity->{$this->fieldName}->shape, $shape);
@@ -78,7 +78,7 @@ public function testShapeItem() {
 
     // Read changed entity and assert changed values.
     $entity->save();
-    $entity = entity_load('entity_test', $id);
+    $entity = EntityTest::load($id);
     $this->assertEqual($entity->{$this->fieldName}->shape, $new_shape);
     $this->assertEqual($entity->{$this->fieldName}->color, $new_color);
   }
diff --git a/core/modules/field/tests/src/Kernel/TestItemTest.php b/core/modules/field/tests/src/Kernel/TestItemTest.php
index c53b42a..6766b40 100644
--- a/core/modules/field/tests/src/Kernel/TestItemTest.php
+++ b/core/modules/field/tests/src/Kernel/TestItemTest.php
@@ -59,7 +59,7 @@ public function testTestItem() {
 
     // Verify entity has been created properly.
     $id = $entity->id();
-    $entity = entity_load('entity_test', $id);
+    $entity = EntityTest::load($id);
     $this->assertTrue($entity->{$this->fieldName} instanceof FieldItemListInterface, 'Field implements interface.');
     $this->assertTrue($entity->{$this->fieldName}[0] instanceof FieldItemInterface, 'Field item implements interface.');
     $this->assertEqual($entity->{$this->fieldName}->value, $value);
@@ -72,7 +72,7 @@ public function testTestItem() {
 
     // Read changed entity and assert changed values.
     $entity->save();
-    $entity = entity_load('entity_test', $id);
+    $entity = EntityTest::load($id);
     $this->assertEqual($entity->{$this->fieldName}->value, $new_value);
 
     // Test the schema for this field type.
diff --git a/core/modules/field_ui/src/Tests/ManageDisplayTest.php b/core/modules/field_ui/src/Tests/ManageDisplayTest.php
index 35ceb3c..bc19282 100644
--- a/core/modules/field_ui/src/Tests/ManageDisplayTest.php
+++ b/core/modules/field_ui/src/Tests/ManageDisplayTest.php
@@ -3,6 +3,7 @@
 namespace Drupal\field_ui\Tests;
 
 use Drupal\Component\Utility\Unicode;
+use Drupal\Core\Entity\Entity\EntityFormDisplay;
 use Drupal\Core\Entity\Entity\EntityViewDisplay;
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Language\LanguageInterface;
@@ -135,7 +136,9 @@ function testFormatterUI() {
     $this->drupalPostForm(NULL, array(), t('Save'));
 
     \Drupal::entityManager()->clearCachedFieldDefinitions();
-    $display = entity_load('entity_view_display', 'node.' . $this->type . '.default', TRUE);
+    $this->container->get('entity_type.manager')->getStorage('entity_view_display')
+      ->resetCache(array('node.' . $this->type . '.default'));
+    $display = EntityViewDisplay::load('node.' . $this->type . '.default');
     $this->assertEqual($display->getRenderer('field_test')->getThirdPartySetting('field_third_party_test', 'field_test_field_formatter_third_party_settings_form'), 'foo');
     $this->assertTrue(in_array('field_third_party_test', $display->calculateDependencies()->getDependencies()['module']), 'The display has a dependency on field_third_party_test module.');
 
@@ -261,7 +264,9 @@ public function testWidgetUI() {
     // Save the form to save the third party settings.
     $this->drupalPostForm(NULL, array(), t('Save'));
     \Drupal::entityManager()->clearCachedFieldDefinitions();
-    $display = entity_load('entity_form_display', 'node.' . $this->type . '.default', TRUE);
+    $this->container->get('entity_type.manager')->getStorage('entity_form_display')
+      ->resetCache(array('node.' . $this->type . '.default'));
+    $display = EntityFormDisplay::load('node.' . $this->type . '.default');
     $this->assertEqual($display->getRenderer('field_test')->getThirdPartySetting('field_third_party_test', 'field_test_widget_third_party_settings_form'), 'foo');
     $this->assertTrue(in_array('field_third_party_test', $display->calculateDependencies()->getDependencies()['module']), 'Form display does not have a dependency on field_third_party_test module.');
 
diff --git a/core/modules/field_ui/tests/src/Kernel/EntityDisplayTest.php b/core/modules/field_ui/tests/src/Kernel/EntityDisplayTest.php
index 3aa8e68..feba631 100644
--- a/core/modules/field_ui/tests/src/Kernel/EntityDisplayTest.php
+++ b/core/modules/field_ui/tests/src/Kernel/EntityDisplayTest.php
@@ -67,7 +67,7 @@ public function testEntityDisplayCRUD() {
 
     // Check that the display can be properly saved and read back.
     $display->save();
-    $display = entity_load('entity_view_display', $display->id());
+    $display = EntityViewDisplay::load($display->id());
     foreach (array('component_1', 'component_2', 'component_3') as $name) {
       $this->assertEqual($display->getComponent($name), $expected[$name]);
     }
@@ -95,7 +95,7 @@ public function testEntityDisplayCRUD() {
 
     // Check that the removal is correctly persisted.
     $display->save();
-    $display = entity_load('entity_view_display', $display->id());
+    $display = EntityViewDisplay::load($display->id());
     $this->assertNULL($display->getComponent('component_3'));
 
     // Check that createCopy() creates a new component that can be correctly
@@ -103,7 +103,7 @@ public function testEntityDisplayCRUD() {
     EntityViewMode::create(array('id' => $display->getTargetEntityTypeId() . '.other_view_mode', 'targetEntityType' => $display->getTargetEntityTypeId()))->save();
     $new_display = $display->createCopy('other_view_mode');
     $new_display->save();
-    $new_display = entity_load('entity_view_display', $new_display->id());
+    $new_display = EntityViewDisplay::load($new_display->id());
     $dependencies = $new_display->calculateDependencies()->getDependencies();
     $this->assertEqual(array('config' => array('core.entity_view_mode.entity_test.other_view_mode'), 'module' => array('entity_test')), $dependencies);
     $this->assertEqual($new_display->getTargetEntityTypeId(), $display->getTargetEntityTypeId());
@@ -283,7 +283,7 @@ public function testBaseFieldComponent() {
     $this->assertFalse(isset($data['hidden']['test_display_non_configurable']));
 
     // Check that defaults are correctly filled when loading the display.
-    $display = entity_load('entity_view_display', $display->id());
+    $display = EntityViewDisplay::load($display->id());
     foreach ($expected as $field_name => $options) {
       $this->assertEqual($display->getComponent($field_name), $options);
     }
@@ -293,7 +293,7 @@ public function testBaseFieldComponent() {
     $data['content']['test_display_non_configurable'] = $expected['test_display_non_configurable'];
     $data['content']['test_display_non_configurable']['weight']++;
     $config->setData($data)->save();
-    $display = entity_load('entity_view_display', $display->id());
+    $display = EntityViewDisplay::load($display->id());
     foreach ($expected as $field_name => $options) {
       $this->assertEqual($display->getComponent($field_name), $options);
     }
@@ -312,9 +312,9 @@ public function testDeleteBundle() {
 
     // Delete the bundle.
     $type->delete();
-    $display = entity_load('entity_view_display', 'node.article.default');
+    $display = EntityViewDisplay::load('node.article.default');
     $this->assertFalse((bool) $display);
-    $form_display = entity_load('entity_form_display', 'node.article.default');
+    $form_display = EntityFormDisplay::load('node.article.default');
     $this->assertFalse((bool) $form_display);
   }
 
diff --git a/core/modules/field_ui/tests/src/Kernel/EntityFormDisplayTest.php b/core/modules/field_ui/tests/src/Kernel/EntityFormDisplayTest.php
index b66d29c..e38db7c 100644
--- a/core/modules/field_ui/tests/src/Kernel/EntityFormDisplayTest.php
+++ b/core/modules/field_ui/tests/src/Kernel/EntityFormDisplayTest.php
@@ -158,7 +158,7 @@ public function testBaseFieldComponent() {
     $this->assertFalse(isset($data['hidden']['test_display_non_configurable']));
 
     // Check that defaults are correctly filled when loading the display.
-    $display = entity_load('entity_form_display', $display->id());
+    $display = EntityFormDisplay::load($display->id());
     foreach ($expected as $field_name => $options) {
       $this->assertEqual($display->getComponent($field_name), $options);
     }
@@ -168,7 +168,7 @@ public function testBaseFieldComponent() {
     $data['content']['test_display_non_configurable'] = $expected['test_display_non_configurable'];
     $data['content']['test_display_non_configurable']['weight']++;
     $config->setData($data)->save();
-    $display = entity_load('entity_form_display', $display->id());
+    $display = EntityFormDisplay::load($display->id());
     foreach ($expected as $field_name => $options) {
       $this->assertEqual($display->getComponent($field_name), $options);
     }
diff --git a/core/modules/file/file.module b/core/modules/file/file.module
index 0e5b057..580e10a 100644
--- a/core/modules/file/file.module
+++ b/core/modules/file/file.module
@@ -66,12 +66,11 @@ function file_help($route_name, RouteMatchInterface $route_match) {
  *
  * @see hook_ENTITY_TYPE_load()
  * @see file_load()
- * @see entity_load()
+ * @see \Drupal\Core\Entity\EntityStorageInterface::load()
  * @see \Drupal\Core\Entity\Query\EntityQueryInterface
  */
 function file_load_multiple(array $fids = NULL, $reset = FALSE) {
-  if ($reset) {
-    \Drupal::entityManager()->getStorage('file')->resetCache($fids);
+  if ($reset) {\Drupal::entityManager()->getStorage('file')->resetCache($fids);
   }
   return File::loadMultiple($fids);
 }
@@ -1474,7 +1473,8 @@ function file_get_file_references(FileInterface $file, FieldDefinitionInterface
     $usage_list = \Drupal::service('file.usage')->listUsage($file);
     $file_usage_list = isset($usage_list['file']) ? $usage_list['file'] : array();
     foreach ($file_usage_list as $entity_type_id => $entity_ids) {
-      $entities = entity_load_multiple($entity_type_id, array_keys($entity_ids));
+      $entities = \Drupal::entityTypeManager()->getStorage($entity_type_id)
+        ->loadMultiple(array_keys($entity_ids));
       foreach ($entities as $entity) {
         $bundle = $entity->bundle();
         // We need to find file fields for this entity type and bundle.
diff --git a/core/modules/file/tests/src/Kernel/FileItemTest.php b/core/modules/file/tests/src/Kernel/FileItemTest.php
index 8827fb0..747d5da 100644
--- a/core/modules/file/tests/src/Kernel/FileItemTest.php
+++ b/core/modules/file/tests/src/Kernel/FileItemTest.php
@@ -83,7 +83,7 @@ public function testFileItem() {
     $entity->name->value = $this->randomMachineName();
     $entity->save();
 
-    $entity = entity_load('entity_test', $entity->id());
+    $entity = EntityTest::load($entity->id());
     $this->assertTrue($entity->file_test instanceof FieldItemListInterface, 'Field implements interface.');
     $this->assertTrue($entity->file_test[0] instanceof FieldItemInterface, 'Field item implements interface.');
     $this->assertEqual($entity->file_test->target_id, $this->file->id());
diff --git a/core/modules/filter/src/Tests/FilterAdminTest.php b/core/modules/filter/src/Tests/FilterAdminTest.php
index 86d5ce7..8d28465 100644
--- a/core/modules/filter/src/Tests/FilterAdminTest.php
+++ b/core/modules/filter/src/Tests/FilterAdminTest.php
@@ -202,7 +202,7 @@ function testFilterAdmin() {
     $this->assertResponse(403, 'The fallback format cannot be disabled.');
 
     // Verify access permissions to Full HTML format.
-    $full_format = entity_load('filter_format', $full);
+    $full_format = FilterFormat::load($full);
     $this->assertTrue($full_format->access('use', $this->adminUser), 'Admin user may use Full HTML.');
     $this->assertFalse($full_format->access('use', $this->webUser), 'Web user may not use Full HTML.');
 
@@ -236,7 +236,7 @@ function testFilterAdmin() {
     ));
     $this->assertTrue(!empty($elements), 'Reorder confirmed in admin interface.');
 
-    $filter_format = entity_load('filter_format', $restricted);
+    $filter_format = FilterFormat::load($restricted);
     foreach ($filter_format->filters() as $filter_name => $filter) {
       if ($filter_name == $second_filter || $filter_name == $first_filter) {
         $filters[] = $filter_name;
@@ -257,7 +257,7 @@ function testFilterAdmin() {
     $this->assertRaw(t('Added text format %format.', array('%format' => $edit['name'])), 'New filter created.');
 
     filter_formats_reset();
-    $format = entity_load('filter_format', $edit['format']);
+    $format = FilterFormat::load($edit['format']);
     $this->assertNotNull($format, 'Format found in database.');
     $this->drupalGet('admin/config/content/formats/manage/' . $format->id());
     $this->assertFieldByName('roles[' . RoleInterface::AUTHENTICATED_ID . ']', '', 'Role found.');
@@ -270,7 +270,7 @@ function testFilterAdmin() {
     $this->assertRaw(t('Disabled text format %format.', array('%format' => $edit['name'])), 'Format successfully disabled.');
 
     // Allow authenticated users on full HTML.
-    $format = entity_load('filter_format', $full);
+    $format = FilterFormat::load($full);
     $edit = array();
     $edit['roles[' . RoleInterface::ANONYMOUS_ID . ']'] = 0;
     $edit['roles[' . RoleInterface::AUTHENTICATED_ID . ']'] = 1;
diff --git a/core/modules/filter/src/Tests/FilterDefaultFormatTest.php b/core/modules/filter/src/Tests/FilterDefaultFormatTest.php
index 96bae80..ea3692c 100644
--- a/core/modules/filter/src/Tests/FilterDefaultFormatTest.php
+++ b/core/modules/filter/src/Tests/FilterDefaultFormatTest.php
@@ -3,6 +3,7 @@
 namespace Drupal\filter\Tests;
 
 use Drupal\Component\Utility\Unicode;
+use Drupal\filter\Entity\FilterFormat;
 use Drupal\simpletest\WebTestBase;
 
 /**
@@ -35,7 +36,7 @@ function testDefaultTextFormats() {
       );
       $this->drupalPostForm('admin/config/content/formats/add', $edit, t('Save configuration'));
       $this->resetFilterCaches();
-      $formats[] = entity_load('filter_format', $edit['format']);
+      $formats[] = FilterFormat::load($edit['format']);
     }
     list($first_format, $second_format) = $formats;
     $second_format_permission = $second_format->getPermissionName();
diff --git a/core/modules/filter/src/Tests/FilterFormTest.php b/core/modules/filter/src/Tests/FilterFormTest.php
index 022d2bf..1a9895d 100644
--- a/core/modules/filter/src/Tests/FilterFormTest.php
+++ b/core/modules/filter/src/Tests/FilterFormTest.php
@@ -4,6 +4,7 @@
 
 use Drupal\Component\Utility\SafeMarkup;
 use Drupal\simpletest\WebTestBase;
+use Drupal\filter\Entity\FilterFormat;
 
 /**
  * Tests form elements with associated text formats.
@@ -40,11 +41,11 @@ protected function setUp() {
     parent::setUp();
 
     /** @var \Drupal\filter\FilterFormatInterface $filter_test_format */
-    $filter_test_format = entity_load('filter_format', 'filter_test');
+    $filter_test_format = FilterFormat::load('filter_test');
     /** @var \Drupal\filter\FilterFormatInterface $filtered_html_format */
-    $filtered_html_format = entity_load('filter_format', 'filtered_html');
+    $filtered_html_format = FilterFormat::load('filtered_html');
     /** @var \Drupal\filter\FilterFormatInterface $full_html_format */
-    $full_html_format = entity_load('filter_format', 'full_html');
+    $full_html_format = FilterFormat::load('full_html');
 
     // Create users.
     $this->adminUser = $this->drupalCreateUser(array(
diff --git a/core/modules/filter/src/Tests/FilterFormatAccessTest.php b/core/modules/filter/src/Tests/FilterFormatAccessTest.php
index 4d2da61..edab21b 100644
--- a/core/modules/filter/src/Tests/FilterFormatAccessTest.php
+++ b/core/modules/filter/src/Tests/FilterFormatAccessTest.php
@@ -4,6 +4,7 @@
 
 use Drupal\Component\Utility\Unicode;
 use Drupal\Core\Access\AccessResult;
+use Drupal\filter\Entity\FilterFormat;
 use Drupal\simpletest\WebTestBase;
 
 /**
@@ -89,7 +90,7 @@ protected function setUp() {
       );
       $this->drupalPostForm('admin/config/content/formats/add', $edit, t('Save configuration'));
       $this->resetFilterCaches();
-      $formats[] = entity_load('filter_format', $edit['format']);
+      $formats[] = FilterFormat::load($edit['format']);
     }
     list($this->allowedFormat, $this->secondAllowedFormat, $this->disallowedFormat) = $formats;
     $this->drupalLogout();
@@ -120,7 +121,7 @@ protected function setUp() {
   function testFormatPermissions() {
     // Make sure that a regular user only has access to the text formats for
     // which they were granted access.
-    $fallback_format = entity_load('filter_format', filter_fallback_format());
+    $fallback_format = FilterFormat::load(filter_fallback_format());
     $this->assertTrue($this->allowedFormat->access('use', $this->webUser), 'A regular user has access to use a text format they were granted access to.');
     $this->assertEqual(AccessResult::allowed()->addCacheContexts(['user.permissions']), $this->allowedFormat->access('use', $this->webUser, TRUE), 'A regular user has access to use a text format they were granted access to.');
     $this->assertFalse($this->disallowedFormat->access('use', $this->webUser), 'A regular user does not have access to use a text format they were not granted access to.');
@@ -197,7 +198,9 @@ function testFormatRoles() {
     $this->assertFalse(in_array($this->disallowedFormat->id(), array_keys(filter_get_formats_by_role($rid))), 'A text format which a role does not have access to does not appear in the list of formats available to that role.');
 
     // Check that the fallback format is always allowed.
-    $this->assertEqual(filter_get_roles_by_format(entity_load('filter_format', filter_fallback_format())), user_role_names(), 'All roles have access to the fallback format.');
+    $this->assertEqual(filter_get_roles_by_format(
+      FilterFormat::load(filter_fallback_format())), user_role_names(),
+      'All roles have access to the fallback format.');
     $this->assertTrue(in_array(filter_fallback_format(), array_keys(filter_get_formats_by_role($rid))), 'The fallback format appears in the list of allowed formats for any role.');
   }
 
diff --git a/core/modules/filter/src/Tests/FilterSecurityTest.php b/core/modules/filter/src/Tests/FilterSecurityTest.php
index 4ea141c..f23363a 100644
--- a/core/modules/filter/src/Tests/FilterSecurityTest.php
+++ b/core/modules/filter/src/Tests/FilterSecurityTest.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\filter\Tests;
 
+use Drupal\filter\Entity\FilterFormat;
 use Drupal\simpletest\WebTestBase;
 use Drupal\filter\Plugin\FilterInterface;
 use Drupal\user\RoleInterface;
@@ -36,7 +37,7 @@ protected function setUp() {
     $this->drupalCreateContentType(array('type' => 'page', 'name' => 'Basic page'));
 
     /** @var \Drupal\filter\Entity\FilterFormat $filtered_html_format */
-    $filtered_html_format = entity_load('filter_format', 'filtered_html');
+    $filtered_html_format = FilterFormat::load('filtered_html');
     $filtered_html_permission = $filtered_html_format->getPermissionName();
     user_role_grant_permissions(RoleInterface::ANONYMOUS_ID, array($filtered_html_permission));
 
diff --git a/core/modules/filter/tests/src/Kernel/FilterAPITest.php b/core/modules/filter/tests/src/Kernel/FilterAPITest.php
index 0f9feff..50189a6 100644
--- a/core/modules/filter/tests/src/Kernel/FilterAPITest.php
+++ b/core/modules/filter/tests/src/Kernel/FilterAPITest.php
@@ -100,7 +100,7 @@ function testCheckMarkupFilterSubset() {
    */
   function testFilterFormatAPI() {
     // Test on filtered_html.
-    $filtered_html_format = entity_load('filter_format', 'filtered_html');
+    $filtered_html_format = FilterFormat::load('filtered_html');
     $this->assertIdentical(
       $filtered_html_format->getHtmlRestrictions(),
       array(
@@ -121,7 +121,7 @@ function testFilterFormatAPI() {
     );
 
     // Test on full_html.
-    $full_html_format = entity_load('filter_format', 'full_html');
+    $full_html_format = FilterFormat::load('full_html');
     $this->assertIdentical(
       $full_html_format->getHtmlRestrictions(),
       FALSE, // Every tag is allowed.
@@ -334,7 +334,7 @@ function testTypedDataAPI() {
     $this->assertTrue($data instanceof OptionsProviderInterface, 'Typed data object implements \Drupal\Core\TypedData\OptionsProviderInterface');
 
     $filtered_html_user = $this->createUser(array('uid' => 2), array(
-      entity_load('filter_format', 'filtered_html')->getPermissionName(),
+      FilterFormat::load('filtered_html')->getPermissionName(),
     ));
 
     // Test with anonymous user.
diff --git a/core/modules/filter/tests/src/Kernel/FilterCrudTest.php b/core/modules/filter/tests/src/Kernel/FilterCrudTest.php
index 35e181c..0a9be18 100644
--- a/core/modules/filter/tests/src/Kernel/FilterCrudTest.php
+++ b/core/modules/filter/tests/src/Kernel/FilterCrudTest.php
@@ -93,7 +93,7 @@ function verifyTextFormat($format) {
     $default_langcode = \Drupal::languageManager()->getDefaultLanguage()->getId();
 
     // Verify the loaded filter has all properties.
-    $filter_format = entity_load('filter_format', $format->id());
+    $filter_format = FilterFormat::load($format->id());
     $this->assertEqual($filter_format->id(), $format->id(), format_string('filter_format_load: Proper format id for text format %format.', $t_args));
     $this->assertEqual($filter_format->label(), $format->label(), format_string('filter_format_load: Proper title for text format %format.', $t_args));
     $this->assertEqual($filter_format->get('weight'), $format->get('weight'), format_string('filter_format_load: Proper weight for text format %format.', $t_args));
diff --git a/core/modules/filter/tests/src/Kernel/FilterDefaultConfigTest.php b/core/modules/filter/tests/src/Kernel/FilterDefaultConfigTest.php
index 4b3684b..30988bf 100644
--- a/core/modules/filter/tests/src/Kernel/FilterDefaultConfigTest.php
+++ b/core/modules/filter/tests/src/Kernel/FilterDefaultConfigTest.php
@@ -31,7 +31,7 @@ protected function setUp() {
    */
   function testInstallation() {
     // Verify that the format was installed correctly.
-    $format = entity_load('filter_format', 'filter_test');
+    $format = FilterFormat::load('filter_test');
     $this->assertTrue((bool) $format);
     $this->assertEqual($format->id(), 'filter_test');
     $this->assertEqual($format->label(), 'Test format');
@@ -71,7 +71,7 @@ function testInstallation() {
    */
   function testUpdateRoles() {
     // Verify role permissions declared in default config.
-    $format = entity_load('filter_format', 'filter_test');
+    $format = FilterFormat::load('filter_test');
     $this->assertEqual(array_keys(filter_get_roles_by_format($format)), array(
       RoleInterface::ANONYMOUS_ID,
       RoleInterface::AUTHENTICATED_ID,
@@ -84,7 +84,7 @@ function testUpdateRoles() {
     $format->save();
 
     // Verify that roles have not been updated.
-    $format = entity_load('filter_format', 'filter_test');
+    $format = FilterFormat::load('filter_test');
     $this->assertEqual(array_keys(filter_get_roles_by_format($format)), array(
       RoleInterface::ANONYMOUS_ID,
       RoleInterface::AUTHENTICATED_ID,
diff --git a/core/modules/image/src/Entity/ImageStyle.php b/core/modules/image/src/Entity/ImageStyle.php
index 7314435..88bd16f 100644
--- a/core/modules/image/src/Entity/ImageStyle.php
+++ b/core/modules/image/src/Entity/ImageStyle.php
@@ -4,6 +4,8 @@
 
 use Drupal\Core\Cache\Cache;
 use Drupal\Core\Config\Entity\ConfigEntityBase;
+use Drupal\Core\Entity\Entity\EntityFormDisplay;
+use Drupal\Core\Entity\Entity\EntityViewDisplay;
 use Drupal\Core\Entity\EntityStorageInterface;
 use Drupal\Core\Entity\EntityWithPluginCollectionInterface;
 use Drupal\Core\Routing\RequestHelper;
@@ -137,7 +139,7 @@ protected static function replaceImageStyle(ImageStyleInterface $style) {
     if ($style->id() != $style->getOriginalId()) {
       // Loop through all entity displays looking for formatters / widgets using
       // the image style.
-      foreach (entity_load_multiple('entity_view_display') as $display) {
+      foreach (EntityViewDisplay::loadMultiple() as $display) {
         foreach ($display->getComponents() as $name => $options) {
           if (isset($options['type']) && $options['type'] == 'image' && $options['settings']['image_style'] == $style->getOriginalId()) {
             $options['settings']['image_style'] = $style->id();
@@ -146,7 +148,7 @@ protected static function replaceImageStyle(ImageStyleInterface $style) {
           }
         }
       }
-      foreach (entity_load_multiple('entity_form_display') as $display) {
+      foreach (EntityFormDisplay::loadMultiple() as $display) {
         foreach ($display->getComponents() as $name => $options) {
           if (isset($options['type']) && $options['type'] == 'image_image' && $options['settings']['preview_image_style'] == $style->getOriginalId()) {
             $options['settings']['preview_image_style'] = $style->id();
diff --git a/core/modules/image/tests/src/Kernel/ImageItemTest.php b/core/modules/image/tests/src/Kernel/ImageItemTest.php
index 3321b20..1c63a22 100644
--- a/core/modules/image/tests/src/Kernel/ImageItemTest.php
+++ b/core/modules/image/tests/src/Kernel/ImageItemTest.php
@@ -74,7 +74,7 @@ public function testImageItem() {
     $entity->name->value = $this->randomMachineName();
     $entity->save();
 
-    $entity = entity_load('entity_test', $entity->id());
+    $entity = EntityTest::load($entity->id());
     $this->assertTrue($entity->image_test instanceof FieldItemListInterface, 'Field implements interface.');
     $this->assertTrue($entity->image_test[0] instanceof FieldItemInterface, 'Field item implements interface.');
     $this->assertEqual($entity->image_test->target_id, $this->image->id());
diff --git a/core/modules/language/src/Tests/LanguageConfigurationElementTest.php b/core/modules/language/src/Tests/LanguageConfigurationElementTest.php
index 21288a2..93b821d 100644
--- a/core/modules/language/src/Tests/LanguageConfigurationElementTest.php
+++ b/core/modules/language/src/Tests/LanguageConfigurationElementTest.php
@@ -109,7 +109,7 @@ public function testDefaultLangcode() {
     // Site's default.
     $old_default = \Drupal::languageManager()->getDefaultLanguage();
     // Ensure the language entity default value is correct.
-    $configurable_language = entity_load('configurable_language', $old_default->getId());
+    $configurable_language = ConfigurableLanguage::load($old_default->getId());
     $this->assertTrue($configurable_language->isDefault(), 'The en language entity is flagged as the default language.');
 
     $this->config('system.site')->set('default_langcode', 'cc')->save();
@@ -121,9 +121,9 @@ public function testDefaultLangcode() {
     $this->assertEqual($langcode, 'cc');
 
     // Ensure the language entity default value is correct.
-    $configurable_language = entity_load('configurable_language', $old_default->getId());
+    $configurable_language = ConfigurableLanguage::load($old_default->getId());
     $this->assertFalse($configurable_language->isDefault(), 'The en language entity is not flagged as the default language.');
-    $configurable_language = entity_load('configurable_language', 'cc');
+    $configurable_language = ConfigurableLanguage::load('cc');
     // Check calling the
     // \Drupal\language\ConfigurableLanguageInterface::isDefault() method
     // directly.
diff --git a/core/modules/language/src/Tests/LanguageConfigurationTest.php b/core/modules/language/src/Tests/LanguageConfigurationTest.php
index c83cc61..cf049f1 100644
--- a/core/modules/language/src/Tests/LanguageConfigurationTest.php
+++ b/core/modules/language/src/Tests/LanguageConfigurationTest.php
@@ -204,8 +204,11 @@ protected function checkConfigurableLanguageWeight($state = 'by default') {
   protected function getHighestConfigurableLanguageWeight(){
     $max_weight = 0;
 
+    $storage = $this->container->get('entity_type.manager')
+      ->getStorage('configurable_language');
+    $storage->resetCache();
     /* @var $languages \Drupal\Core\Language\LanguageInterface[] */
-    $languages = entity_load_multiple('configurable_language', NULL, TRUE);
+    $languages = $storage->loadMultiple();
     foreach ($languages as $language) {
       if (!$language->isLocked()) {
         $max_weight = max($max_weight, $language->getWeight());
diff --git a/core/modules/link/src/Tests/LinkFieldTest.php b/core/modules/link/src/Tests/LinkFieldTest.php
index 05148d9..47289ae 100644
--- a/core/modules/link/src/Tests/LinkFieldTest.php
+++ b/core/modules/link/src/Tests/LinkFieldTest.php
@@ -593,7 +593,7 @@ protected function renderTestEntity($id, $view_mode = 'full', $reset = TRUE) {
     if ($reset) {
       $this->container->get('entity.manager')->getStorage('entity_test')->resetCache(array($id));
     }
-    $entity = entity_load('entity_test', $id);
+    $entity = EntityTest::load($id);
     $display = entity_get_display($entity->getEntityTypeId(), $entity->bundle(), $view_mode);
     $content = $display->build($entity);
     $output = \Drupal::service('renderer')->renderRoot($content);
diff --git a/core/modules/link/tests/src/Kernel/LinkItemTest.php b/core/modules/link/tests/src/Kernel/LinkItemTest.php
index 617c025..4d19ad0 100644
--- a/core/modules/link/tests/src/Kernel/LinkItemTest.php
+++ b/core/modules/link/tests/src/Kernel/LinkItemTest.php
@@ -83,7 +83,7 @@ public function testLinkItem() {
 
     // Verify that the field value is changed.
     $id = $entity->id();
-    $entity = entity_load('entity_test', $id);
+    $entity = EntityTest::load($id);
     $this->assertTrue($entity->field_test instanceof FieldItemListInterface, 'Field implements interface.');
     $this->assertTrue($entity->field_test[0] instanceof FieldItemInterface, 'Field item implements interface.');
     $this->assertEqual($entity->field_test->uri, $parsed_url['path']);
@@ -98,7 +98,7 @@ public function testLinkItem() {
     $entity->name->value = $this->randomMachineName();
     $entity->save();
     $id = $entity->id();
-    $entity = entity_load('entity_test', $id);
+    $entity = EntityTest::load($id);
     $this->assertEqual($entity->field_test->uri, $parsed_url['path']);
     $this->assertEqual($entity->field_test->options['attributes']['class'], $class);
     $this->assertEqual($entity->field_test->options['query'], $parsed_url['query']);
@@ -118,7 +118,7 @@ public function testLinkItem() {
 
     // Read changed entity and assert changed values.
     $entity->save();
-    $entity = entity_load('entity_test', $id);
+    $entity = EntityTest::load($id);
     $this->assertEqual($entity->field_test->uri, $new_url);
     $this->assertEqual($entity->field_test->title, $new_title);
     $this->assertEqual($entity->field_test->options['attributes']['class'], $new_class);
diff --git a/core/modules/menu_link_content/src/Tests/MenuLinkContentTranslationUITest.php b/core/modules/menu_link_content/src/Tests/MenuLinkContentTranslationUITest.php
index 31df4ad..846c69a 100644
--- a/core/modules/menu_link_content/src/Tests/MenuLinkContentTranslationUITest.php
+++ b/core/modules/menu_link_content/src/Tests/MenuLinkContentTranslationUITest.php
@@ -98,7 +98,8 @@ function testTranslationLinkTheme() {
    * {@inheritdoc}
    */
   protected function doTestTranslationEdit() {
-    $entity = entity_load($this->entityTypeId, $this->entityId, TRUE);
+    $this->storage->resetCache(array($this->entityId));
+    $entity = $this->storage->load($this->entityId);
     $languages = $this->container->get('language_manager')->getLanguages();
 
     foreach ($this->langcodes as $langcode) {
diff --git a/core/modules/node/node.module b/core/modules/node/node.module
index fa9d3e9..3bce700 100644
--- a/core/modules/node/node.module
+++ b/core/modules/node/node.module
@@ -415,7 +415,7 @@ function node_type_update_nodes($old_id, $new_id) {
  * @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\EntityStorageInterface::loadMultiple()
  * @see \Drupal\Core\Entity\Query\EntityQueryInterface
  */
 function node_load_multiple(array $nids = NULL, $reset = FALSE) {
diff --git a/core/modules/node/src/Tests/NodeFormSaveChangedTimeTest.php b/core/modules/node/src/Tests/NodeFormSaveChangedTimeTest.php
index 69f3963..545367c 100644
--- a/core/modules/node/src/Tests/NodeFormSaveChangedTimeTest.php
+++ b/core/modules/node/src/Tests/NodeFormSaveChangedTimeTest.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\node\Tests;
 
+use Drupal\node\Entity\Node;
 use Drupal\simpletest\WebTestBase;
 
 /**
@@ -52,11 +53,13 @@ protected function setUp() {
    * Test the changed time after API and FORM save without changes.
    */
   public function testChangedTimeAfterSaveWithoutChanges() {
-    $node = entity_load('node', 1);
+    $node = Node::load(1);
     $changed_timestamp = $node->getChangedTime();
 
     $node->save();
-    $node = entity_load('node', 1, TRUE);
+    $this->container->get('entity_type.manager')->getStorage('node')
+      ->resetCache(array(1));
+    $node = Node::load(1);
     $this->assertEqual($changed_timestamp, $node->getChangedTime(), "The entity's changed time wasn't updated after API save without changes.");
 
     // Ensure different save timestamps.
@@ -65,7 +68,9 @@ public function testChangedTimeAfterSaveWithoutChanges() {
     // Save the node on the regular node edit form.
     $this->drupalPostForm('node/1/edit', array(), t('Save'));
 
-    $node = entity_load('node', 1, TRUE);
+    $this->container->get('entity_type.manager')->getStorage('node')
+      ->resetCache(array(1));
+    $node = Node::load(1);
     $this->assertNotEqual($changed_timestamp, $node->getChangedTime(), "The entity's changed time was updated after form save without changes.");
   }
 }
diff --git a/core/modules/node/src/Tests/NodeTranslationUITest.php b/core/modules/node/src/Tests/NodeTranslationUITest.php
index b4dce56..76422cb 100644
--- a/core/modules/node/src/Tests/NodeTranslationUITest.php
+++ b/core/modules/node/src/Tests/NodeTranslationUITest.php
@@ -83,7 +83,8 @@ public function testPublishedStatusNoFields() {
     $default_langcode = $this->langcodes[0];
     $values[$default_langcode] = array('title' => array(array('value' => $this->randomMachineName())));
     $entity_id = $this->createEntity($values[$default_langcode], $default_langcode);
-    $entity = entity_load($this->entityTypeId, $entity_id, TRUE);
+    $this->storage->resetCache(array($entity_id));
+    $entity = $this->storage->load($entity_id);
 
     // Add a content translation.
     $langcode = 'fr';
@@ -98,7 +99,8 @@ public function testPublishedStatusNoFields() {
     ], array('language' => $language));
     $this->drupalPostForm($add_url, $this->getEditValues($values, $langcode), t('Save and unpublish (this translation)'));
 
-    $entity = entity_load($this->entityTypeId, $this->entityId, TRUE);
+    $this->storage->resetCache(array($entity_id));
+    $entity = $this->storage->load($entity_id);
     $translation = $entity->getTranslation($langcode);
     // Make sure we unpublished the node correctly.
     $this->assertFalse($this->manager->getTranslationMetadata($translation)->isPublished(), 'The translation has been correctly unpublished.');
@@ -148,7 +150,8 @@ protected function getFormSubmitAction(EntityInterface $entity, $langcode) {
    * {@inheritdoc}
    */
   protected function doTestPublishedStatus() {
-    $entity = entity_load($this->entityTypeId, $this->entityId, TRUE);
+    $this->storage->resetCache(array($entity_id));
+    $entity = $this->storage->load($entity_id);
     $languages = $this->container->get('language_manager')->getLanguages();
 
     $actions = array(
@@ -164,7 +167,8 @@ protected function doTestPublishedStatus() {
         $url = $entity->urlInfo('edit-form', $options);
         $this->drupalPostForm($url, array(), $action . $this->getFormSubmitSuffix($entity, $langcode), $options);
       }
-      $entity = entity_load($this->entityTypeId, $this->entityId, TRUE);
+      $this->storage->resetCache(array($entity_id));
+      $entity = $this->storage->load($entity_id);
       foreach ($this->langcodes as $langcode) {
         // The node is created as unpublished thus we switch to the published
         // status first.
@@ -179,7 +183,8 @@ protected function doTestPublishedStatus() {
    * {@inheritdoc}
    */
   protected function doTestAuthoringInfo() {
-    $entity = entity_load($this->entityTypeId, $this->entityId, TRUE);
+    $this->storage->resetCache(array($entity_id));
+    $entity = $this->storage->load($entity_id);
     $languages = $this->container->get('language_manager')->getLanguages();
     $values = array();
 
@@ -204,7 +209,8 @@ protected function doTestAuthoringInfo() {
       $this->drupalPostForm($url, $edit, $this->getFormSubmitAction($entity, $langcode), $options);
     }
 
-    $entity = entity_load($this->entityTypeId, $this->entityId, TRUE);
+    $this->storage->resetCache(array($entity_id));
+    $entity = $this->storage->load($entity_id);
     foreach ($this->langcodes as $langcode) {
       $translation = $entity->getTranslation($langcode);
       $metadata = $this->manager->getTranslationMetadata($translation);
@@ -424,7 +430,8 @@ protected function doUninstallTest() {
    * {@inheritdoc}
    */
   protected function doTestTranslationEdit() {
-    $entity = entity_load($this->entityTypeId, $this->entityId, TRUE);
+    $this->storage->resetCache(array($entity_id));
+    $entity = $this->storage->load($entity_id);
     $languages = $this->container->get('language_manager')->getLanguages();
     $type_name = node_get_type_label($entity);
 
diff --git a/core/modules/quickedit/tests/src/Kernel/EditorSelectionTest.php b/core/modules/quickedit/tests/src/Kernel/EditorSelectionTest.php
index 18a86f8..eeecc97 100644
--- a/core/modules/quickedit/tests/src/Kernel/EditorSelectionTest.php
+++ b/core/modules/quickedit/tests/src/Kernel/EditorSelectionTest.php
@@ -37,7 +37,9 @@ protected function setUp() {
    * Returns the in-place editor that Quick Edit selects.
    */
   protected function getSelectedEditor($entity_id, $field_name, $view_mode = 'default') {
-    $entity = entity_load('entity_test', $entity_id, TRUE);
+    $this->container->get('entity_type.manager')->getStorage('entity_test')
+      ->resetCache(array($entity_id));
+    $entity = EntityTest::load($entity_id);
     $items = $entity->get($field_name);
     $options = entity_get_display('entity_test', 'entity_test', $view_mode)->getComponent($field_name);
     return $this->editorSelector->getEditor($options['type'], $items);
diff --git a/core/modules/quickedit/tests/src/Kernel/MetadataGeneratorTest.php b/core/modules/quickedit/tests/src/Kernel/MetadataGeneratorTest.php
index ce9a977..7fdc8fb 100644
--- a/core/modules/quickedit/tests/src/Kernel/MetadataGeneratorTest.php
+++ b/core/modules/quickedit/tests/src/Kernel/MetadataGeneratorTest.php
@@ -93,7 +93,7 @@ public function testSimpleEntityType() {
     $entity->{$field_1_name}->value = 'Test';
     $entity->{$field_2_name}->value = 42;
     $entity->save();
-    $entity = entity_load('entity_test', $entity->id());
+    $entity = EntityTest::load($entity->id());
 
     // Verify metadata for field 1.
     $items_1 = $entity->get($field_1_name);
@@ -159,7 +159,7 @@ public function testEditorWithCustomMetadata() {
     $entity->{$field_name}->value = 'Test';
     $entity->{$field_name}->format = 'full_html';
     $entity->save();
-    $entity = entity_load('entity_test', $entity->id());
+    $entity = EntityTest::load($entity->id());
 
     // Verify metadata.
     $items = $entity->get($field_name);
diff --git a/core/modules/rdf/rdf.module b/core/modules/rdf/rdf.module
index 5bf296d..f93743c 100644
--- a/core/modules/rdf/rdf.module
+++ b/core/modules/rdf/rdf.module
@@ -70,7 +70,7 @@ function rdf_help($route_name, RouteMatchInterface $route_match) {
  */
 function rdf_get_mapping($entity_type, $bundle) {
   // Try loading the mapping from configuration.
-  $mapping = entity_load('rdf_mapping', $entity_type . '.' . $bundle);
+  $mapping = RdfMapping::load($entity_type . '.' . $bundle);
 
   // If not found, create a fresh mapping object.
   if (!$mapping) {
diff --git a/core/modules/rest/src/Tests/CsrfTest.php b/core/modules/rest/src/Tests/CsrfTest.php
index 3835ab8..b4ef453 100644
--- a/core/modules/rest/src/Tests/CsrfTest.php
+++ b/core/modules/rest/src/Tests/CsrfTest.php
@@ -84,7 +84,10 @@ public function testCookieAuth() {
     $this->curlExec($curl_options);
     $this->assertResponse(403);
     // Ensure that the entity was not created.
-    $this->assertFalse(entity_load_multiple($this->testEntityType, NULL, TRUE), 'No entity has been created in the database.');
+    $storage = $this->container->get('entity_type.manager')
+      ->getStorage($this->testEntityType);
+    $storage->resetCache();
+    $this->assertFalse($storage->loadMultiple(), 'No entity has been created in the database.');
 
     // Create an entity with the CSRF token.
     $token = $this->drupalGet('rest/session/token');
diff --git a/core/modules/rest/src/Tests/DeleteTest.php b/core/modules/rest/src/Tests/DeleteTest.php
index 3d97540..35ea975 100644
--- a/core/modules/rest/src/Tests/DeleteTest.php
+++ b/core/modules/rest/src/Tests/DeleteTest.php
@@ -40,9 +40,11 @@ public function testDelete() {
       $entity->save();
       // Delete it over the REST API.
       $response = $this->httpRequest($entity->urlInfo(), 'DELETE');
-      // Clear the static cache with entity_load(), otherwise we won't see the
-      // update.
-      $entity = entity_load($entity_type, $entity->id(), TRUE);
+      // Clear the static cache, otherwise we won't see the update.
+      $storage = $this->container->get('entity_type.manager')
+        ->getStorage($entity_type);
+      $storage->resetCache(array($entity->id()));
+      $entity = $storage->load($entity->id());
       $this->assertFalse($entity, $entity_type . ' entity is not in the DB anymore.');
       $this->assertResponse('204', 'HTTP response code is correct.');
       $this->assertEqual($response, '', 'Response body is empty.');
@@ -59,7 +61,9 @@ public function testDelete() {
       $entity->save();
       $this->httpRequest($entity->urlInfo(), 'DELETE');
       $this->assertResponse(403);
-      $this->assertNotIdentical(FALSE, entity_load($entity_type, $entity->id(), TRUE), 'The ' . $entity_type . ' entity is still in the database.');
+      $storage->resetCache(array($entity->id()));
+      $this->assertNotIdentical(FALSE, $storage->load($entity->id()),
+        'The ' . $entity_type . ' entity is still in the database.');
     }
     // Try to delete a resource which is not REST API enabled.
     $this->enableService(FALSE);
diff --git a/core/modules/rest/src/Tests/RESTTestBase.php b/core/modules/rest/src/Tests/RESTTestBase.php
index 099957e..60da712 100644
--- a/core/modules/rest/src/Tests/RESTTestBase.php
+++ b/core/modules/rest/src/Tests/RESTTestBase.php
@@ -377,7 +377,8 @@ protected function entityPermissions($entity_type, $operation) {
   protected function loadEntityFromLocationHeader($location_url) {
     $url_parts = explode('/', $location_url);
     $id = end($url_parts);
-    return entity_load($this->testEntityType, $id);
+    return $this->container->get('entity_type.manager')
+      ->getStorage($this->testEntityType)->load($id);
   }
 
   /**
diff --git a/core/modules/rest/src/Tests/UpdateTest.php b/core/modules/rest/src/Tests/UpdateTest.php
index 7cb5fc6..da80989 100644
--- a/core/modules/rest/src/Tests/UpdateTest.php
+++ b/core/modules/rest/src/Tests/UpdateTest.php
@@ -3,6 +3,7 @@
 namespace Drupal\rest\Tests;
 
 use Drupal\Component\Serialization\Json;
+use Drupal\Core\Entity\EntityStorageInterface;
 
 /**
  * Tests the update of resources.
@@ -36,6 +37,10 @@ public function testPatchUpdate() {
 
     $context = ['account' => $account];
 
+    /** @var EntityStorageInterface $storage */
+    $storage = $this->container->get('entity_type.manager')
+      ->getStorage($entity_type);
+
     // Create an entity and save it to the database.
     $entity = $this->entityCreate($entity_type);
     $entity->save();
@@ -45,9 +50,8 @@ public function testPatchUpdate() {
       'value' => $this->randomString(),
       'format' => 'plain_text',
     ));
-    $patch_entity = $this->container->get('entity_type.manager')
-      ->getStorage($entity_type)
-      ->create($patch_values);
+
+    $patch_entity = $storage->create($patch_values);
     // We don't want to overwrite the UUID.
     $patch_entity->set('uuid', NULL);
     $serialized = $serializer->serialize($patch_entity, $this->defaultFormat, $context);
@@ -57,7 +61,8 @@ public function testPatchUpdate() {
     $this->assertResponse(204);
 
     // Re-load updated entity from the database.
-    $entity = entity_load($entity_type, $entity->id(), TRUE);
+    $storage->resetCache(array($entity->id()));
+    $entity = $storage->load($entity->id());
     $this->assertEqual($entity->field_test_text->value, $patch_entity->field_test_text->value, 'Field was successfully updated.');
 
     // Make sure that the field does not get deleted if it is not present in the
@@ -68,7 +73,8 @@ public function testPatchUpdate() {
     $this->httpRequest($entity->urlInfo(), 'PATCH', $serialized, $this->defaultMimeType);
     $this->assertResponse(204);
 
-    $entity = entity_load($entity_type, $entity->id(), TRUE);
+    $storage->resetCache(array($entity->id()));
+    $entity = $storage->load($entity->id());
     $this->assertNotNull($entity->field_test_text->value. 'Test field has not been deleted.');
 
     // Try to empty a field.
@@ -80,7 +86,8 @@ public function testPatchUpdate() {
     $this->assertResponse(204);
 
     // Re-load updated entity from the database.
-    $entity = entity_load($entity_type, $entity->id(), TRUE);
+    $storage->resetCache(array($entity->id()));
+    $entity = $storage->load($entity->id());
     $this->assertNull($entity->field_test_text->value, 'Test field has been cleared.');
 
     // Enable access protection for the text field.
@@ -94,7 +101,8 @@ public function testPatchUpdate() {
     $this->assertResponse(403);
 
     // Re-load the entity from the database.
-    $entity = entity_load($entity_type, $entity->id(), TRUE);
+    $storage->resetCache(array($entity->id()));
+    $entity = $storage->load($entity->id());
     $this->assertEqual($entity->field_test_text->value, 'no edit access value', 'Text field was not deleted.');
 
     // Try to update an access protected field.
@@ -105,7 +113,8 @@ public function testPatchUpdate() {
     $this->assertResponse(403);
 
     // Re-load the entity from the database.
-    $entity = entity_load($entity_type, $entity->id(), TRUE);
+    $storage->resetCache(array($entity->id()));
+    $entity = $storage->load($entity->id());
     $this->assertEqual($entity->field_test_text->value, 'no edit access value', 'Text field was not updated.');
 
     // Try to update the field with a text format this user has no access to.
@@ -121,7 +130,8 @@ public function testPatchUpdate() {
     $this->assertResponse(422);
 
     // Re-load the entity from the database.
-    $entity = entity_load($entity_type, $entity->id(), TRUE);
+    $storage->resetCache(array($entity->id()));
+    $entity = $storage->load($entity->id());
     $this->assertEqual($entity->field_test_text->format, 'plain_text', 'Text format was not updated.');
 
     // Restore the valid test value.
@@ -135,7 +145,8 @@ public function testPatchUpdate() {
     // Try to update a non-existing entity with ID 9999.
     $this->httpRequest($entity_type . '/9999', 'PATCH', $serialized, $this->defaultMimeType);
     $this->assertResponse(404);
-    $loaded_entity = entity_load($entity_type, 9999, TRUE);
+    $storage->resetCache(array(9999));
+    $loaded_entity = $storage->load(9999);
     $this->assertFalse($loaded_entity, 'Entity 9999 was not created.');
 
     // Try to send invalid data to trigger the entity validation constraints.
diff --git a/core/modules/search/src/Tests/SearchConfigSettingsFormTest.php b/core/modules/search/src/Tests/SearchConfigSettingsFormTest.php
index 7279ade..c458b16 100644
--- a/core/modules/search/src/Tests/SearchConfigSettingsFormTest.php
+++ b/core/modules/search/src/Tests/SearchConfigSettingsFormTest.php
@@ -3,6 +3,7 @@
 namespace Drupal\search\Tests;
 
 use Drupal\Core\Url;
+use Drupal\search\Entity\SearchPage;
 
 /**
  * Verify the search config settings form.
@@ -145,7 +146,7 @@ function testSearchModuleDisabling() {
     );
     $plugins = array_keys($plugin_info);
     /** @var $entities \Drupal\search\SearchPageInterface[] */
-    $entities = entity_load_multiple('search_page');
+    $entities = SearchPage::loadMultiple();
     // Disable all of the search pages.
     foreach ($entities as $entity) {
       $entity->disable()->save();
diff --git a/core/modules/search/src/Tests/SearchRankingTest.php b/core/modules/search/src/Tests/SearchRankingTest.php
index ff8299c..d1a00d9 100644
--- a/core/modules/search/src/Tests/SearchRankingTest.php
+++ b/core/modules/search/src/Tests/SearchRankingTest.php
@@ -6,6 +6,7 @@
 use Drupal\comment\Tests\CommentTestTrait;
 use Drupal\Core\Url;
 use Drupal\filter\Entity\FilterFormat;
+use Drupal\search\Entity\SearchPage;
 
 /**
  * Indexes content and tests ranking factors.
@@ -34,7 +35,7 @@ protected function setUp() {
     parent::setUp();
 
     // Create a plugin instance.
-    $this->nodeSearch = entity_load('search_page', 'node_search');
+    $this->nodeSearch = SearchPage::load('node_search');
 
     // Log in with sufficient privileges.
     $this->drupalLogin($this->drupalCreateUser(array('post comments', 'skip comment approval', 'create page content', 'administer search')));
@@ -126,7 +127,7 @@ public function testRankings() {
       $this->assertTrue($this->xpath('//select[@id="edit-rankings-' . $node_rank . '-value"]//option[@value="10"]'), 'Select list to prioritize ' . $node_rank . ' for node ranks is visible and set to 10.');
 
       // Reload the plugin to get the up-to-date values.
-      $this->nodeSearch = entity_load('search_page', 'node_search');
+      $this->nodeSearch = SearchPage::load('node_search');
       // Do the search and assert the results.
       $this->nodeSearch->getPlugin()->setSearch('rocks', array(), array());
       $set = $this->nodeSearch->getPlugin()->execute();
diff --git a/core/modules/shortcut/src/Tests/ShortcutLinksTest.php b/core/modules/shortcut/src/Tests/ShortcutLinksTest.php
index b0e887e..a91e334 100644
--- a/core/modules/shortcut/src/Tests/ShortcutLinksTest.php
+++ b/core/modules/shortcut/src/Tests/ShortcutLinksTest.php
@@ -6,6 +6,7 @@
 use Drupal\Core\Url;
 use Drupal\shortcut\Entity\Shortcut;
 use Drupal\shortcut\Entity\ShortcutSet;
+use Drupal\views\Entity\View;
 
 /**
  * Create, view, edit, delete, and change shortcut links.
@@ -233,7 +234,7 @@ public function testShortcutLinkChangeRoute() {
     $this->drupalGet('admin/content');
     $this->assertResponse(200);
     // Disable the view.
-    entity_load('view', 'content')->disable()->save();
+    View::load('content')->disable()->save();
     /** @var \Drupal\Core\Routing\RouteBuilderInterface $router_builder */
     $router_builder = \Drupal::service('router.builder');
     $router_builder->rebuildIfNeeded();
diff --git a/core/modules/shortcut/src/Tests/ShortcutTranslationUITest.php b/core/modules/shortcut/src/Tests/ShortcutTranslationUITest.php
index 5458217..e6c34f4 100644
--- a/core/modules/shortcut/src/Tests/ShortcutTranslationUITest.php
+++ b/core/modules/shortcut/src/Tests/ShortcutTranslationUITest.php
@@ -4,6 +4,7 @@
 
 use Drupal\content_translation\Tests\ContentTranslationUITestBase;
 use Drupal\Core\Entity\EntityChangedInterface;
+use Drupal\Core\Entity\EntityStorageInterface;
 use Drupal\Core\Language\Language;
 
 /**
@@ -65,7 +66,8 @@ protected function getNewEntityValues($langcode) {
   protected function doTestBasicTranslation() {
     parent::doTestBasicTranslation();
 
-    $entity = entity_load($this->entityTypeId, $this->entityId, TRUE);
+    $this->storage->resetCache(array($this->entityId));
+    $entity = $this->storage->load($this->entityId, TRUE);
     foreach ($this->langcodes as $langcode) {
       if ($entity->hasTranslation($langcode)) {
         $language = new Language(array('id' => $langcode));
@@ -84,7 +86,8 @@ protected function doTestBasicTranslation() {
    * {@inheritdoc}
    */
   protected function doTestTranslationEdit() {
-    $entity = entity_load($this->entityTypeId, $this->entityId, TRUE);
+    $this->storage->resetCache(array($this->entityId));
+    $entity = $this->storage->load($this->entityId);
     $languages = $this->container->get('language_manager')->getLanguages();
 
     foreach ($this->langcodes as $langcode) {
@@ -107,7 +110,8 @@ protected function doTestTranslationEdit() {
    * Tests the basic translation workflow.
    */
   protected function doTestTranslationChanged() {
-    $entity = entity_load($this->entityTypeId, $this->entityId, TRUE);
+    $this->storage->resetCache(array($this->entityId));
+    $entity = $this->storage->load($this->entityId);
 
     $this->assertFalse(
       $entity instanceof EntityChangedInterface,
diff --git a/core/modules/simpletest/src/Tests/SimpleTestInstallBatchTest.php b/core/modules/simpletest/src/Tests/SimpleTestInstallBatchTest.php
index eef9760..72cb74c 100644
--- a/core/modules/simpletest/src/Tests/SimpleTestInstallBatchTest.php
+++ b/core/modules/simpletest/src/Tests/SimpleTestInstallBatchTest.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\simpletest\Tests;
 
+use Drupal\entity_test\Entity\EntityTest;
 use Drupal\simpletest\WebTestBase;
 
 /**
@@ -25,9 +26,9 @@ class SimpleTestInstallBatchTest extends WebTestBase {
    * Tests loading entities created in a batch in simpletest_test_install().
    */
   public function testLoadingEntitiesCreatedInBatch() {
-    $entity1 = entity_load('entity_test', 1);
+    $entity1 = EntityTest::load(1);
     $this->assertNotNull($entity1, 'Successfully loaded entity 1.');
-    $entity2 = entity_load('entity_test', 2);
+    $entity2 = EntityTest::load(2);
     $this->assertNotNull($entity2, 'Successfully loaded entity 2.');
   }
 
diff --git a/core/modules/system/src/Tests/Entity/ConfigEntityImportTest.php b/core/modules/system/src/Tests/Entity/ConfigEntityImportTest.php
index d62b9d0..0f731be 100644
--- a/core/modules/system/src/Tests/Entity/ConfigEntityImportTest.php
+++ b/core/modules/system/src/Tests/Entity/ConfigEntityImportTest.php
@@ -3,6 +3,7 @@
 namespace Drupal\system\Tests\Entity;
 
 use Drupal\Core\Entity\EntityWithPluginCollectionInterface;
+use Drupal\filter\Entity\FilterFormat;
 use Drupal\image\Entity\ImageStyle;
 use Drupal\search\Entity\SearchPage;
 use Drupal\simpletest\WebTestBase;
@@ -89,7 +90,7 @@ protected function doFilterFormatUpdate() {
     $name = 'filter.format.plain_text';
 
     /** @var $entity \Drupal\filter\Entity\FilterFormat */
-    $entity = entity_load('filter_format', 'plain_text');
+    $entity = FilterFormat::load('plain_text');
     $plugin_collection = $entity->getPluginCollections()['filters'];
 
     $filters = $entity->get('filters');
diff --git a/core/modules/system/src/Tests/Entity/EntityCacheTagsTestBase.php b/core/modules/system/src/Tests/Entity/EntityCacheTagsTestBase.php
index e02917d..30487f7 100644
--- a/core/modules/system/src/Tests/Entity/EntityCacheTagsTestBase.php
+++ b/core/modules/system/src/Tests/Entity/EntityCacheTagsTestBase.php
@@ -515,7 +515,8 @@ public function testReferencedEntity() {
       // cache miss for both the referencing entity, and the listing of
       // referencing entities, but not for any other routes.
       $this->pass("Test modification of referenced entity's bundle entity.", 'Debug');
-      $bundle_entity = entity_load($bundle_entity_type_id, $this->entity->bundle());
+      $bundle_entity = $this->container->get('entity_type.manager')
+        ->getStorage($bundle_entity_type_id)->load($this->entity->bundle());
       $bundle_entity->save();
       $this->verifyPageCache($referencing_entity_url, 'MISS');
       $this->verifyPageCache($listing_url, 'MISS');
diff --git a/core/modules/system/src/Tests/Entity/EntityRevisionsTest.php b/core/modules/system/src/Tests/Entity/EntityRevisionsTest.php
index f7420b4..99ee15b 100644
--- a/core/modules/system/src/Tests/Entity/EntityRevisionsTest.php
+++ b/core/modules/system/src/Tests/Entity/EntityRevisionsTest.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\system\Tests\Entity;
 
+use Drupal\Core\Entity\EntityStorageInterface;
 use Drupal\simpletest\WebTestBase;
 
 /**
@@ -56,13 +57,15 @@ public function testRevisions() {
    */
   protected function runRevisionsTests($entity_type) {
 
+    /** @var EntityStorageInterface $storage */
+    $storage = $this->container->get('entity_type.manager')
+      ->getStorage($entity_type);
+
     // Create initial entity.
-    $entity = $this->container->get('entity_type.manager')
-      ->getStorage($entity_type)
-      ->create(array(
-        'name' => 'foo',
-        'user_id' => $this->webUser->id(),
-      ));
+    $entity = $storage->create(array(
+      'name' => 'foo',
+      'user_id' => $this->webUser->id(),
+    ));
     $entity->field_test_text->value = 'bar';
     $entity->save();
 
@@ -78,7 +81,7 @@ protected function runRevisionsTests($entity_type) {
       $legacy_name = $entity->name->value;
       $legacy_text = $entity->field_test_text->value;
 
-      $entity = entity_load($entity_type, $entity->id->value);
+      $entity = $storage->load($entity->id->value);
       $entity->setNewRevision(TRUE);
       $names[] = $entity->name->value = $this->randomMachineName(32);
       $texts[] = $entity->field_test_text->value = $this->randomMachineName(32);
@@ -107,7 +110,7 @@ protected function runRevisionsTests($entity_type) {
     }
 
     // Confirm the correct revision text appears in the edit form.
-    $entity = entity_load($entity_type, $entity->id->value);
+    $entity = $storage->load($entity->id->value);
     $this->drupalGet($entity_type . '/manage/' . $entity->id->value . '/edit');
     $this->assertFieldById('edit-name-0-value', $entity->name->value, format_string('%entity_type: Name matches in UI.', array('%entity_type' => $entity_type)));
     $this->assertFieldById('edit-field-test-text-0-value', $entity->field_test_text->value, format_string('%entity_type: Text matches in UI.', array('%entity_type' => $entity_type)));
diff --git a/core/modules/system/src/Tests/Entity/EntityWithUriCacheTagsTestBase.php b/core/modules/system/src/Tests/Entity/EntityWithUriCacheTagsTestBase.php
index 363fa92..7744c11 100644
--- a/core/modules/system/src/Tests/Entity/EntityWithUriCacheTagsTestBase.php
+++ b/core/modules/system/src/Tests/Entity/EntityWithUriCacheTagsTestBase.php
@@ -80,7 +80,8 @@ public function testEntityUri() {
       // Verify that after modifying the corresponding bundle entity, there is a
       // cache miss.
       $this->pass("Test modification of entity's bundle entity.", 'Debug');
-      $bundle_entity = entity_load($bundle_entity_type_id, $this->entity->bundle());
+      $bundle_entity = $this->container->get('entity_type.manager')
+        ->getStorage($bundle_entity_type_id)->load($this->entity->bundle());
       $bundle_entity->save();
       $this->verifyPageCache($entity_url, 'MISS');
 
diff --git a/core/modules/system/src/Tests/System/DateTimeTest.php b/core/modules/system/src/Tests/System/DateTimeTest.php
index ca998fe..1907c66 100644
--- a/core/modules/system/src/Tests/System/DateTimeTest.php
+++ b/core/modules/system/src/Tests/System/DateTimeTest.php
@@ -38,7 +38,7 @@ function testTimeZoneHandling() {
       ->set('timezone.default', 'Pacific/Honolulu')
       ->set('timezone.user.configurable', 0)
       ->save();
-    entity_load('date_format', 'medium')
+    DateFormat::load('medium')
       ->setPattern('Y-m-d H:i:s O')
       ->save();
 
@@ -113,7 +113,7 @@ function testDateFormatConfiguration() {
     $this->assertRaw(t('The date format %format has been deleted.', array('%format' => $name)), 'Custom date format removed.');
 
     // Make sure the date does not exist in config.
-    $date_format = entity_load('date_format', $date_format_id);
+    $date_format = DateFormat::load($date_format_id);
     $this->assertFalse($date_format);
 
     // Add a new date format with an existing format.
diff --git a/core/modules/system/tests/modules/entity_test/entity_test.module b/core/modules/system/tests/modules/entity_test/entity_test.module
index 9d9d63c..ae90242 100644
--- a/core/modules/system/tests/modules/entity_test/entity_test.module
+++ b/core/modules/system/tests/modules/entity_test/entity_test.module
@@ -17,6 +17,10 @@
 use Drupal\Core\Session\AccountInterface;
 use Drupal\Core\Entity\Entity\EntityFormDisplay;
 use Drupal\Core\Url;
+use Drupal\entity_test\Entity\EntityTest;
+use Drupal\entity_test\Entity\EntityTestRev;
+use Drupal\entity_test\Entity\EntityTestMul;
+use Drupal\entity_test\Entity\EntityTestMulRev;
 
 /**
  * Filter that limits test entity list to revisable ones.
@@ -320,7 +324,11 @@ function entity_test_form_node_form_alter(&$form, FormStateInterface $form_state
  *   The loaded entity object, or NULL if the entity cannot be loaded.
  */
 function entity_test_load($id, $reset = FALSE) {
-  return entity_load('entity_test', $id, $reset);
+  if ($reset) {
+    \Drupal::entityTypeManager()->getStorage('entity_test')
+      ->resetCache(array($id));
+  }
+  return EntityTest::load($id);
 }
 
 /**
@@ -335,7 +343,11 @@ function entity_test_load($id, $reset = FALSE) {
  *   The loaded entity object, or NULL if the entity cannot be loaded.
  */
 function entity_test_rev_load($id, $reset = FALSE) {
-  return entity_load('entity_test_rev', $id, $reset);
+  if ($reset) {
+    \Drupal::entityTypeManager()->getStorage('entity_test_rev')
+      ->resetCache(array($id));
+  }
+  return EntityTestRev::load($id);
 }
 
 /**
@@ -350,7 +362,11 @@ function entity_test_rev_load($id, $reset = FALSE) {
  *   The loaded entity object, or FALSE if the entity cannot be loaded.
  */
 function entity_test_mul_load($id, $reset = FALSE) {
-  return entity_load('entity_test_mul', $id, $reset);
+  if ($reset) {
+    \Drupal::entityTypeManager()->getStorage('entity_test_mul')
+      ->resetCache(array($id));
+  }
+  return EntityTestMul::load($id);
 }
 
 /**
@@ -365,7 +381,12 @@ function entity_test_mul_load($id, $reset = FALSE) {
  *   The loaded entity object, or NULL if the entity cannot be loaded.
  */
 function entity_test_mulrev_load($id, $reset = FALSE) {
-  return entity_load('entity_test_mulrev', $id, $reset);
+  if ($reset) {
+    \Drupal::entityTypeManager()->getStorage('entity_test_mul_rev')
+      ->resetCache(array($id));
+  }
+
+  return EntityTestMulRev::load($id);
 }
 
 /**
diff --git a/core/modules/taxonomy/src/Tests/LoadMultipleTest.php b/core/modules/taxonomy/src/Tests/LoadMultipleTest.php
index 1076f41..88d361f 100644
--- a/core/modules/taxonomy/src/Tests/LoadMultipleTest.php
+++ b/core/modules/taxonomy/src/Tests/LoadMultipleTest.php
@@ -18,7 +18,7 @@ protected function setUp() {
 
   /**
    * Create a vocabulary and some taxonomy terms, ensuring they're loaded
-   * correctly using entity_load_multiple().
+   * correctly using EntityStorageInterface::loadMultiple().
    */
   function testTaxonomyTermMultipleLoad() {
     // Create a vocabulary.
diff --git a/core/modules/taxonomy/src/Tests/TermTranslationUITest.php b/core/modules/taxonomy/src/Tests/TermTranslationUITest.php
index e59f7ac..5e37a72 100644
--- a/core/modules/taxonomy/src/Tests/TermTranslationUITest.php
+++ b/core/modules/taxonomy/src/Tests/TermTranslationUITest.php
@@ -139,7 +139,8 @@ function testTranslateLinkVocabularyAdminPage() {
    * {@inheritdoc}
    */
   protected function doTestTranslationEdit() {
-    $entity = entity_load($this->entityTypeId, $this->entityId, TRUE);
+    $this->storage->resetCache(array($this->entityId));
+    $entity = $this->storage->load($this->entityId);
     $languages = $this->container->get('language_manager')->getLanguages();
 
     foreach ($this->langcodes as $langcode) {
diff --git a/core/modules/taxonomy/src/Tests/Views/TaxonomyIndexTidUiTest.php b/core/modules/taxonomy/src/Tests/Views/TaxonomyIndexTidUiTest.php
index b37a717..4e0665f 100644
--- a/core/modules/taxonomy/src/Tests/Views/TaxonomyIndexTidUiTest.php
+++ b/core/modules/taxonomy/src/Tests/Views/TaxonomyIndexTidUiTest.php
@@ -5,6 +5,7 @@
 use Drupal\field\Tests\EntityReference\EntityReferenceTestTrait;
 use Drupal\taxonomy\Entity\Term;
 use Drupal\taxonomy\Entity\Vocabulary;
+use Drupal\views\Entity\View;
 use Drupal\views\Tests\ViewTestData;
 use Drupal\views_ui\Tests\UITestBase;
 
@@ -102,7 +103,7 @@ public function testFilterUI() {
 
     // Ensure the autocomplete input element appears when using the 'textfield'
     // type.
-    $view = entity_load('view', 'test_filter_taxonomy_index_tid');
+    $view = View::load('test_filter_taxonomy_index_tid');
     $display =& $view->getDisplay('default');
     $display['display_options']['filters']['tid']['type'] = 'textfield';
     $view->save();
diff --git a/core/modules/taxonomy/src/Tests/VocabularyCrudTest.php b/core/modules/taxonomy/src/Tests/VocabularyCrudTest.php
index c8d33a3..cd15b4c 100644
--- a/core/modules/taxonomy/src/Tests/VocabularyCrudTest.php
+++ b/core/modules/taxonomy/src/Tests/VocabularyCrudTest.php
@@ -117,7 +117,7 @@ function testTaxonomyVocabularyLoadMultiple() {
     $names = taxonomy_vocabulary_get_names();
     $this->assertEqual($names[$vocabulary1->id()], $vocabulary1->id(), 'Vocabulary 1 name found.');
 
-    // Fetch the vocabularies with entity_load_multiple(), specifying IDs.
+    // Fetch the vocabularies with loadMultiple(), specifying IDs.
     // Ensure they are returned in the same order as the original array.
     $vocabularies = Vocabulary::loadMultiple(array($vocabulary3->id(), $vocabulary2->id(), $vocabulary1->id()));
     $loaded_order = array_keys($vocabularies);
diff --git a/core/modules/taxonomy/taxonomy.module b/core/modules/taxonomy/taxonomy.module
index be4f7fa..69780bd 100644
--- a/core/modules/taxonomy/taxonomy.module
+++ b/core/modules/taxonomy/taxonomy.module
@@ -344,7 +344,7 @@ function taxonomy_term_load_multiple_by_name($name, $vocabulary = NULL) {
  * 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_multiple()
+ * @see \Drupal\Core\Entity\EntityStorageInterface::loadMultiple()
  * @see \Drupal\Core\Entity\Query\EntityQueryInterface
  *
  * @deprecated in Drupal 8.x, will be removed before Drupal 9.0.
@@ -368,7 +368,7 @@ function taxonomy_term_load_multiple(array $tids = NULL) {
  * 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_multiple()
+ * @see \Drupal\Core\Entity\EntityStorageInterface::loadMultiple()
  *
  * @deprecated in Drupal 8.x, will be removed before Drupal 9.0.
  *   Use \Drupal\taxonomy\Entity\Vocabulary::loadMultiple().
diff --git a/core/modules/telephone/tests/src/Kernel/TelephoneItemTest.php b/core/modules/telephone/tests/src/Kernel/TelephoneItemTest.php
index 2187c36..7f94ba3 100644
--- a/core/modules/telephone/tests/src/Kernel/TelephoneItemTest.php
+++ b/core/modules/telephone/tests/src/Kernel/TelephoneItemTest.php
@@ -52,7 +52,7 @@ public function testTestItem() {
 
     // Verify entity has been created properly.
     $id = $entity->id();
-    $entity = entity_load('entity_test', $id);
+    $entity = EntityTest::load($id);
     $this->assertTrue($entity->field_test instanceof FieldItemListInterface, 'Field implements interface.');
     $this->assertTrue($entity->field_test[0] instanceof FieldItemInterface, 'Field item implements interface.');
     $this->assertEqual($entity->field_test->value, $value);
@@ -65,7 +65,7 @@ public function testTestItem() {
 
     // Read changed entity and assert changed values.
     $entity->save();
-    $entity = entity_load('entity_test', $id);
+    $entity = EntityTest::load($id);
     $this->assertEqual($entity->field_test->value, $new_value);
 
     // Test sample item generation.
diff --git a/core/modules/text/src/Tests/TextFieldTest.php b/core/modules/text/src/Tests/TextFieldTest.php
index fcec361..993346a 100644
--- a/core/modules/text/src/Tests/TextFieldTest.php
+++ b/core/modules/text/src/Tests/TextFieldTest.php
@@ -7,6 +7,7 @@
 use Drupal\field\Entity\FieldConfig;
 use Drupal\field\Tests\String\StringFieldTest;
 use Drupal\field\Entity\FieldStorageConfig;
+use Drupal\filter\Entity\FilterFormat;
 
 /**
  * Tests the creation of text fields.
@@ -195,7 +196,7 @@ function _testTextfieldWidgetsFormatted($field_type, $widget_type) {
     $this->assertText(t('entity_test @id has been created.', array('@id' => $id)), 'Entity was created');
 
     // Display the entity.
-    $entity = entity_load('entity_test', $id);
+    $entity = EntityTest::load($id);
     $display = entity_get_display($entity->getEntityTypeId(), $entity->bundle(), 'full');
     $content = $display->build($entity);
     $this->setRawContent($renderer->renderRoot($content));
@@ -211,7 +212,7 @@ function _testTextfieldWidgetsFormatted($field_type, $widget_type) {
     );
     $this->drupalPostForm('admin/config/content/formats/add', $edit, t('Save configuration'));
     filter_formats_reset();
-    $format = entity_load('filter_format', $edit['format']);
+    $format = FilterFormat::load($edit['format']);
     $format_id = $format->id();
     $permission = $format->getPermissionName();
     $roles = $this->webUser->getRoles();
@@ -234,7 +235,7 @@ function _testTextfieldWidgetsFormatted($field_type, $widget_type) {
 
     // Display the entity.
     $this->container->get('entity.manager')->getStorage('entity_test')->resetCache(array($id));
-    $entity = entity_load('entity_test', $id);
+    $entity = EntityTest::load($id);
     $display = entity_get_display($entity->getEntityTypeId(), $entity->bundle(), 'full');
     $content = $display->build($entity);
     $this->setRawContent($renderer->renderRoot($content));
diff --git a/core/modules/text/tests/src/Kernel/TextWithSummaryItemTest.php b/core/modules/text/tests/src/Kernel/TextWithSummaryItemTest.php
index 4ee40d6..0e78a55 100644
--- a/core/modules/text/tests/src/Kernel/TextWithSummaryItemTest.php
+++ b/core/modules/text/tests/src/Kernel/TextWithSummaryItemTest.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\Tests\text\Kernel;
 
+use Drupal\Core\Entity\EntityStorageInterface;
 use Drupal\Core\Field\FieldItemListInterface;
 use Drupal\Core\Field\FieldItemInterface;
 use Drupal\field\Entity\FieldConfig;
@@ -58,17 +59,19 @@ public function testCrudAndUpdate() {
     $entity_type = 'entity_test';
     $this->createField($entity_type);
 
+    /** @var EntityStorageInterface $storage */
+    $storage = $this->container->get('entity_type.manager')
+      ->getStorage($entity_type);
+
     // Create an entity with a summary and no text format.
-    $entity = $this->container->get('entity_type.manager')
-      ->getStorage($entity_type)
-      ->create();
+    $entity = $storage->create();
     $entity->summary_field->value = $value = $this->randomMachineName();
     $entity->summary_field->summary = $summary = $this->randomMachineName();
     $entity->summary_field->format = NULL;
     $entity->name->value = $this->randomMachineName();
     $entity->save();
 
-    $entity = entity_load($entity_type, $entity->id());
+    $entity = $storage->load($entity->id());
     $this->assertTrue($entity->summary_field instanceof FieldItemListInterface, 'Field implements interface.');
     $this->assertTrue($entity->summary_field[0] instanceof FieldItemInterface, 'Field item implements interface.');
     $this->assertEqual($entity->summary_field->value, $value);
diff --git a/core/modules/text/text.module b/core/modules/text/text.module
index a3dbcec..1ab1729 100644
--- a/core/modules/text/text.module
+++ b/core/modules/text/text.module
@@ -80,7 +80,7 @@ function text_summary($text, $format = NULL, $size = NULL) {
 
   // Retrieve the filters of the specified text format, if any.
   if (isset($format)) {
-    $filters = entity_load('filter_format', $format)->filters();
+    $filters = \Drupal\filter\Entity\FilterFormat::load($format)->filters();
     // If the specified format does not exist, return nothing. $text is already
     // filtered text, but the remainder of this function will not be able to
     // ensure a sane and secure summary.
diff --git a/core/modules/tour/src/Tests/TourTest.php b/core/modules/tour/src/Tests/TourTest.php
index 910eb6e..420120d 100644
--- a/core/modules/tour/src/Tests/TourTest.php
+++ b/core/modules/tour/src/Tests/TourTest.php
@@ -145,7 +145,7 @@ public function testTourFunctionality() {
     $this->drupalGet('tour-test-1');
 
     // Load it back from the database and verify storage worked.
-    $entity_save_tip = entity_load('tour', 'tour-entity-create-test-en');
+    $entity_save_tip = Tour::load('tour-entity-create-test-en');
     // Verify that hook_ENTITY_TYPE_load() integration worked.
     $this->assertEqual($entity_save_tip->loaded, 'Load hooks work');
     // Verify that hook_ENTITY_TYPE_presave() integration worked.
diff --git a/core/modules/tour/tour.module b/core/modules/tour/tour.module
index ed53f25..050eaa7 100644
--- a/core/modules/tour/tour.module
+++ b/core/modules/tour/tour.module
@@ -6,6 +6,7 @@
  */
 
 use Drupal\Core\Routing\RouteMatchInterface;
+use Drupal\tour\Entity\Tour;
 
 /**
  * Implements hook_help().
@@ -85,7 +86,7 @@ function tour_page_bottom(array &$page_bottom) {
   $results = \Drupal::entityQuery('tour')
     ->condition('routes.*.route_name', $route_name)
     ->execute();
-  if (!empty($results) && $tours = entity_load_multiple('tour', array_keys($results))) {
+  if (!empty($results) && $tours = Tour::loadMultiple(array_keys($results))) {
     foreach ($tours as $id => $tour) {
       // Match on params.
       if (!$tour->hasMatchingRoute($route_name, $route_match->getRawParameters()->all())) {
diff --git a/core/modules/user/src/Tests/UserTimeZoneTest.php b/core/modules/user/src/Tests/UserTimeZoneTest.php
index 944fca8..b0590b8 100644
--- a/core/modules/user/src/Tests/UserTimeZoneTest.php
+++ b/core/modules/user/src/Tests/UserTimeZoneTest.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\user\Tests;
 
+use Drupal\Core\Datetime\Entity\DateFormat;
 use Drupal\simpletest\WebTestBase;
 
 /**
@@ -27,7 +28,7 @@ function testUserTimeZone() {
       ->set('timezone.user.configurable', 1)
       ->set('timezone.default', 'America/Los_Angeles')
       ->save();
-    entity_load('date_format', 'medium')
+    DateFormat::load('medium')
       ->setPattern('Y-m-d H:i T')
       ->save();
 
diff --git a/core/modules/user/src/Tests/UserTranslationUITest.php b/core/modules/user/src/Tests/UserTranslationUITest.php
index ec38cb3..01e31ec 100644
--- a/core/modules/user/src/Tests/UserTranslationUITest.php
+++ b/core/modules/user/src/Tests/UserTranslationUITest.php
@@ -53,7 +53,8 @@ protected function getNewEntityValues($langcode) {
    * {@inheritdoc}
    */
   protected function doTestTranslationEdit() {
-    $entity = entity_load($this->entityTypeId, $this->entityId, TRUE);
+    $this->storage->resetCache(array($this->entityId));
+    $entity = $this->storage->load($this->entityId);
     $languages = $this->container->get('language_manager')->getLanguages();
 
     foreach ($this->langcodes as $langcode) {
diff --git a/core/modules/user/src/Tests/Views/BulkFormTest.php b/core/modules/user/src/Tests/Views/BulkFormTest.php
index e80b31a..47c3e50 100644
--- a/core/modules/user/src/Tests/Views/BulkFormTest.php
+++ b/core/modules/user/src/Tests/Views/BulkFormTest.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\user\Tests\Views;
 
+use Drupal\user\Entity\User;
 use Drupal\user\RoleInterface;
 use Drupal\views\Views;
 
@@ -130,7 +131,7 @@ public function testBulkForm() {
    */
   public function testBulkFormCombineFilter() {
     // Add a user.
-    $account = entity_load('user', $this->users[0]->id());
+    $account = User::load($this->users[0]->id());
     $view = Views::getView('test_user_bulk_form_combine_filter');
     $errors = $view->validate();
     $this->assertEqual(reset($errors['default']), t('Field %field set in %filter is not usable for this filter type. Combined field filter only works for simple fields.', array('%field' => 'User: Bulk update', '%filter' => 'Global: Combine fields filter')));
diff --git a/core/modules/user/user.module b/core/modules/user/user.module
index 1366dce..b6accb8 100644
--- a/core/modules/user/user.module
+++ b/core/modules/user/user.module
@@ -179,7 +179,7 @@ function user_entity_extra_field_info() {
  * @return array
  *   An array of user objects, indexed by uid.
  *
- * @see entity_load_multiple()
+ * @see \Drupal\Core\Entity\EntityStorageInterface::loadMultiple()
  * @see \Drupal\user\Entity\User::load()
  * @see user_load_by_mail()
  * @see user_load_by_name()
@@ -985,7 +985,7 @@ function user_user_role_insert(RoleInterface $role) {
   }
 
   $add_id = 'user_add_role_action.' . $role->id();
-  if (!entity_load('action', $add_id)) {
+  if (!Action::load($add_id)) {
     $action = Action::create(array(
       'id' => $add_id,
       'type' => 'user',
@@ -998,7 +998,7 @@ function user_user_role_insert(RoleInterface $role) {
     $action->trustData()->save();
   }
   $remove_id = 'user_remove_role_action.' . $role->id();
-  if (!entity_load('action', $remove_id)) {
+  if (!Action::load($remove_id)) {
     $action = Action::create(array(
       'id' => $remove_id,
       'type' => 'user',
@@ -1025,7 +1025,7 @@ function user_user_role_delete(RoleInterface $role) {
     return;
   }
 
-  $actions = entity_load_multiple('action', array(
+  $actions = Action::loadMultiple(array(
     'user_add_role_action.' . $role->id(),
     'user_remove_role_action.' . $role->id(),
   ));
diff --git a/core/modules/views/src/Plugin/views/query/Sql.php b/core/modules/views/src/Plugin/views/query/Sql.php
index 54bb981..8dce1c0 100644
--- a/core/modules/views/src/Plugin/views/query/Sql.php
+++ b/core/modules/views/src/Plugin/views/query/Sql.php
@@ -1518,7 +1518,8 @@ public function loadEntities(&$results) {
         }
       }
       else {
-        $entities = entity_load_multiple($entity_type, $flat_ids);
+        $entities = \Drupal::entityTypeManager()->getStorage($entity_type)
+          ->loadMultiple($flat_ids);
       }
 
       foreach ($ids as $index => $relationships) {
diff --git a/core/modules/views/src/Tests/Plugin/ExposedFormTest.php b/core/modules/views/src/Tests/Plugin/ExposedFormTest.php
index 719d4da..71ef175 100644
--- a/core/modules/views/src/Tests/Plugin/ExposedFormTest.php
+++ b/core/modules/views/src/Tests/Plugin/ExposedFormTest.php
@@ -5,6 +5,7 @@
 use Drupal\Component\Utility\Html;
 use Drupal\entity_test\Entity\EntityTest;
 use Drupal\system\Tests\Cache\AssertPageCacheContextsAndTagsTrait;
+use Drupal\views\Entity\View;
 use Drupal\views\Tests\ViewTestBase;
 use Drupal\views\ViewExecutable;
 use Drupal\views\Views;
@@ -241,7 +242,7 @@ public function testExposedBlock() {
    * Test the input required exposed form type.
    */
   public function testInputRequired() {
-    $view = entity_load('view', 'test_exposed_form_buttons');
+    $view = View::load('test_exposed_form_buttons');
     $display = &$view->getDisplay('default');
     $display['display_options']['exposed_form']['type'] = 'input_required';
     $view->save();
diff --git a/core/modules/views/src/Tests/Plugin/StyleTableTest.php b/core/modules/views/src/Tests/Plugin/StyleTableTest.php
index ade5ebe..5e78fcb 100644
--- a/core/modules/views/src/Tests/Plugin/StyleTableTest.php
+++ b/core/modules/views/src/Tests/Plugin/StyleTableTest.php
@@ -1,6 +1,7 @@
 <?php
 
 namespace Drupal\views\Tests\Plugin;
+use Drupal\views\Entity\View;
 
 /**
  * Tests the table style views plugin.
@@ -44,7 +45,7 @@ public function testAccessibilitySettings() {
     $this->assertEqual(trim((string) $result[0]), 'description-text');
 
     // Remove the caption and ensure the caption is not displayed anymore.
-    $view = entity_load('view', 'test_table');
+    $view = View::load('test_table');
     $display = &$view->getDisplay('default');
     $display['display_options']['style']['options']['caption'] = '';
     $view->save();
@@ -88,7 +89,7 @@ public function testFieldInColumns() {
     $this->assertTrue(count($result), 'Ensure there is a td with the class views-field-job-1');
 
     // Combine the second job-column with the first one, with ', ' as separator.
-    $view = entity_load('view', 'test_table');
+    $view = View::load('test_table');
     $display = &$view->getDisplay('default');
     $display['display_options']['style']['options']['columns']['job_1'] = 'job';
     $display['display_options']['style']['options']['info']['job']['separator'] = ', ';
diff --git a/core/modules/views/tests/src/Kernel/ViewExecutableTest.php b/core/modules/views/tests/src/Kernel/ViewExecutableTest.php
index 0ca5587..01057b4 100644
--- a/core/modules/views/tests/src/Kernel/ViewExecutableTest.php
+++ b/core/modules/views/tests/src/Kernel/ViewExecutableTest.php
@@ -99,7 +99,7 @@ protected function setUpFixtures() {
   public function testFactoryService() {
     $factory = $this->container->get('views.executable');
     $this->assertTrue($factory instanceof ViewExecutableFactory, 'A ViewExecutableFactory instance was returned from the container.');
-    $view = entity_load('view', 'test_executable_displays');
+    $view = View::load('test_executable_displays');
     $this->assertTrue($factory->get($view) instanceof ViewExecutable, 'A ViewExecutable instance was returned from the factory.');
   }
 
diff --git a/core/modules/views/tests/src/Kernel/ViewStorageTest.php b/core/modules/views/tests/src/Kernel/ViewStorageTest.php
index 5e999e0..fa264bd 100644
--- a/core/modules/views/tests/src/Kernel/ViewStorageTest.php
+++ b/core/modules/views/tests/src/Kernel/ViewStorageTest.php
@@ -78,7 +78,7 @@ function testConfigurationEntityCRUD() {
    * Tests loading configuration entities.
    */
   protected function loadTests() {
-    $view = entity_load('view', 'test_view_storage');
+    $view = View::load('test_view_storage');
     $data = $this->config('views.view.test_view_storage')->get();
 
     // Confirm that an actual view object is loaded and that it returns all of
@@ -143,7 +143,7 @@ protected function createTests() {
 
     // Check the UUID of the loaded View.
     $created->save();
-    $created_loaded = entity_load('view', 'test_view_storage_new');
+    $created_loaded = View::load('test_view_storage_new');
     $this->assertIdentical($created->uuid(), $created_loaded->uuid(), 'The created UUID has been saved correctly.');
   }
 
@@ -152,7 +152,7 @@ protected function createTests() {
    */
   protected function displayTests() {
     // Check whether a display can be added and saved to a View.
-    $view = entity_load('view', 'test_view_storage_new');
+    $view = View::load('test_view_storage_new');
 
     $new_id = $view->addDisplay('page', 'Test', 'test');
     $display = $view->get('display');
diff --git a/core/modules/views_ui/src/Tests/DisplayTest.php b/core/modules/views_ui/src/Tests/DisplayTest.php
index 63c45d3..dd7ec79 100644
--- a/core/modules/views_ui/src/Tests/DisplayTest.php
+++ b/core/modules/views_ui/src/Tests/DisplayTest.php
@@ -191,7 +191,7 @@ public function testLinkDisplay() {
    */
   public function testPageContextualLinks() {
     $this->drupalLogin($this->drupalCreateUser(array('administer views', 'access contextual links')));
-    $view = entity_load('view', 'test_display');
+    $view = View::load('test_display');
     $view->enable()->save();
     $this->container->get('router.builder')->rebuildIfNeeded();
 
diff --git a/core/scripts/generate-d7-content.sh b/core/scripts/generate-d7-content.sh
index 8b591f4..dfda02e 100644
--- a/core/scripts/generate-d7-content.sh
+++ b/core/scripts/generate-d7-content.sh
@@ -94,7 +94,7 @@
     ),
   );
   field_create_field($field);
-  $node_types = $i > 11 ? array('page') : array_keys(node_type_get_types());
+  $node_types = $i > 11 ? array('page') : array_keys(NodeType::loadMultiple());
   foreach ($node_types as $bundle) {
     $instance = array(
       'label' => $vocabulary->name,
diff --git a/core/tests/Drupal/KernelTests/Core/Config/ConfigEntityNormalizeTest.php b/core/tests/Drupal/KernelTests/Core/Config/ConfigEntityNormalizeTest.php
index bfa8233..980d094 100644
--- a/core/tests/Drupal/KernelTests/Core/Config/ConfigEntityNormalizeTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Config/ConfigEntityNormalizeTest.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\KernelTests\Core\Config;
 
+use Drupal\config_test\Entity\ConfigTest;
 use Drupal\KernelTests\KernelTestBase;
 
 /**
@@ -36,7 +37,9 @@ public function testNormalize() {
     $config->setData($data)->save();
     $this->assertNotIdentical($config_entity->toArray(), $config->getRawData(), 'Stored config entity is not is equivalent to config schema.');
 
-    $config_entity = entity_load('config_test', 'system', TRUE);
+    $this->container->get('entity_type.manager')
+      ->getStorage('config_test')->resetCache(array('system'));
+    $config_entity = ConfigTest::load('system');
     $config_entity->save();
 
     $config = $this->config('config_test.dynamic.system');
diff --git a/core/tests/Drupal/KernelTests/Core/Config/ConfigEntityStaticCacheTest.php b/core/tests/Drupal/KernelTests/Core/Config/ConfigEntityStaticCacheTest.php
index 37acbf0..0b85ad9 100644
--- a/core/tests/Drupal/KernelTests/Core/Config/ConfigEntityStaticCacheTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Config/ConfigEntityStaticCacheTest.php
@@ -50,8 +50,10 @@ protected function setUp() {
    * Tests that the static cache is working.
    */
   public function testCacheHit() {
-    $entity_1 = entity_load($this->entityTypeId, $this->entityId);
-    $entity_2 = entity_load($this->entityTypeId, $this->entityId);
+    $entity_1 = $this->container->get('entity_type.manager')
+      ->getStorage($this->entityTypeId)->load($this->entityId);
+    $entity_2 = $this->container->get('entity_type.manager')
+      ->getStorage($this->entityTypeId)->load($this->entityId);
     // config_entity_static_cache_test_config_test_load() sets _loadStamp to a
     // random string. If they match, it means $entity_2 was retrieved from the
     // static cache rather than going through a separate load sequence.
@@ -62,19 +64,23 @@ public function testCacheHit() {
    * Tests that the static cache is reset on entity save and delete.
    */
   public function testReset() {
-    $entity = entity_load($this->entityTypeId, $this->entityId);
+    $entity = $this->container->get('entity_type.manager')
+      ->getStorage($this->entityTypeId)->load($this->entityId);
 
     // Ensure loading after a save retrieves the updated entity rather than an
     // obsolete cached one.
     $entity->label = 'New label';
     $entity->save();
-    $entity = entity_load($this->entityTypeId, $this->entityId);
+    $entity = $this->container->get('entity_type.manager')
+      ->getStorage($this->entityTypeId)->load($this->entityId);
     $this->assertIdentical($entity->label, 'New label');
 
     // Ensure loading after a delete retrieves NULL rather than an obsolete
     // cached one.
     $entity->delete();
-    $this->assertNull(entity_load($this->entityTypeId, $this->entityId));
+    $this->assertNull($this->container->get('entity_type.manager')
+      ->getStorage($this->entityTypeId)->load($this->entityId));
+  );
   }
 
   /**
diff --git a/core/tests/Drupal/KernelTests/Core/Config/ConfigEntityStatusTest.php b/core/tests/Drupal/KernelTests/Core/Config/ConfigEntityStatusTest.php
index 14765ef..2b863e0 100644
--- a/core/tests/Drupal/KernelTests/Core/Config/ConfigEntityStatusTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Config/ConfigEntityStatusTest.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\KernelTests\Core\Config;
 
+use Drupal\config_test\Entity\ConfigTest;
 use Drupal\KernelTests\KernelTestBase;
 
 /**
@@ -35,7 +36,7 @@ function testCRUD() {
     $entity->enable()->save();
     $this->assertTrue($entity->status(), 'Entity is enabled after enabling.');
 
-    $entity = entity_load('config_test', $entity->id());
+    $entity = ConfigTest::load($entity->id());
     $this->assertTrue($entity->status(), 'Status is enabled after reload.');
   }
 
diff --git a/core/tests/Drupal/KernelTests/Core/Config/ConfigEntityStorageTest.php b/core/tests/Drupal/KernelTests/Core/Config/ConfigEntityStorageTest.php
index cadb831..0495005 100644
--- a/core/tests/Drupal/KernelTests/Core/Config/ConfigEntityStorageTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Config/ConfigEntityStorageTest.php
@@ -26,12 +26,11 @@ class ConfigEntityStorageTest extends KernelTestBase {
   public function testUUIDConflict() {
     $entity_type = 'config_test';
     $id = 'test_1';
+    $storage = $this->container->get('entity_type.manager')
+      ->getStorage($entity_type);
     // Load the original configuration entity.
-    $this->container->get('entity_type.manager')
-      ->getStorage($entity_type)
-      ->create(array('id' => $id))
-      ->save();
-    $entity = entity_load($entity_type, $id);
+    $storage->create(array('id' => $id))->save();
+    $entity = $storage->load($id);
 
     $original_properties = $entity->toArray();
 
@@ -48,7 +47,8 @@ public function testUUIDConflict() {
     }
 
     // Ensure that the config entity was not corrupted.
-    $entity = entity_load('config_test', $entity->id(), TRUE);
+    $storage->resetCache(array($entity->id()));
+    $entity = $storage->load($entity->id());
     $this->assertIdentical($entity->toArray(), $original_properties);
   }
 
diff --git a/core/tests/Drupal/KernelTests/Core/Entity/EntityApiTest.php b/core/tests/Drupal/KernelTests/Core/Entity/EntityApiTest.php
index 5f2693e..40e0cff 100644
--- a/core/tests/Drupal/KernelTests/Core/Entity/EntityApiTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Entity/EntityApiTest.php
@@ -3,6 +3,7 @@
 namespace Drupal\KernelTests\Core\Entity;
 
 use Drupal\Core\Entity\EntityStorageException;
+use Drupal\Core\Entity\EntityStorageInterface;
 use Drupal\entity_test\Entity\EntityTest;
 use Drupal\user\UserInterface;
 
@@ -46,18 +47,24 @@ public function testCRUD() {
    *   The user to run the tests with.
    */
   protected function assertCRUD($entity_type, UserInterface $user1) {
+    /** @var EntityStorageInterface $storage */
+    $storage = $this->container->get('entity_type.manager')
+      ->getStorage($entity_type);
     // Create some test entities.
-    $entity = $this->container->get('entity_type.manager')
-      ->getStorage($entity_type)
-      ->create(array('name' => 'test', 'user_id' => $user1->id()));
+    $entity = $storage->create(array(
+      'name' => 'test',
+      'user_id' => $user1->id(),
+    ));
     $entity->save();
-    $entity = $this->container->get('entity_type.manager')
-      ->getStorage($entity_type)
-      ->create(array('name' => 'test2', 'user_id' => $user1->id()));
+    $entity = $storage->create(array(
+      'name' => 'test2',
+      'user_id' => $user1->id(),
+    ));
     $entity->save();
-    $entity = $this->container->get('entity_type.manager')
-      ->getStorage($entity_type)
-      ->create(array('name' => 'test', 'user_id' => NULL));
+    $entity = $storage->create(array(
+      'name' => 'test',
+      'user_id' => NULL,
+    ));
     $entity->save();
 
     $entities = array_values(entity_load_multiple_by_properties($entity_type, array('name' => 'test')));
@@ -65,7 +72,7 @@ protected function assertCRUD($entity_type, UserInterface $user1) {
     $this->assertEqual($entities[1]->name->value, 'test', format_string('%entity_type: Created and loaded entity', array('%entity_type' => $entity_type)));
 
     // Test loading a single entity.
-    $loaded_entity = entity_load($entity_type, $entity->id());
+    $loaded_entity = $storage->load($entity->id());
     $this->assertEqual($loaded_entity->id(), $entity->id(), format_string('%entity_type: Loaded a single entity by id.', array('%entity_type' => $entity_type)));
 
     // Test deleting an entity.
@@ -78,14 +85,14 @@ protected function assertCRUD($entity_type, UserInterface $user1) {
     $entities = array_values(entity_load_multiple_by_properties($entity_type, array('name' => 'test')));
     $entities[0]->name->value = 'test3';
     $entities[0]->save();
-    $entity = entity_load($entity_type, $entities[0]->id());
+    $entity = $storage->load($entities[0]->id());
     $this->assertEqual($entity->name->value, 'test3', format_string('%entity_type: Entity updated.', array('%entity_type' => $entity_type)));
 
     // Try deleting multiple test entities by deleting all.
-    $ids = array_keys(entity_load_multiple($entity_type));
+    $ids = array_keys($storage->loadMultiple());
     entity_delete_multiple($entity_type, $ids);
 
-    $all = entity_load_multiple($entity_type);
+    $all = $storage->loadMultiple();
     $this->assertTrue(empty($all), format_string('%entity_type: Deleted all entities.', array('%entity_type' => $entity_type)));
 
     // Verify that all data got deleted.
@@ -110,7 +117,7 @@ protected function assertCRUD($entity_type, UserInterface $user1) {
     $controller->delete($entities);
 
     // Verify that entities got deleted.
-    $all = entity_load_multiple($entity_type);
+    $all = $storage->loadMultiple();
     $this->assertTrue(empty($all), format_string('%entity_type: Deleted all entities.', array('%entity_type' => $entity_type)));
 
     // Verify that all data got deleted from the tables.
diff --git a/core/tests/Drupal/KernelTests/Core/Entity/EntityFieldTest.php b/core/tests/Drupal/KernelTests/Core/Entity/EntityFieldTest.php
index 8532014..94b07b5 100644
--- a/core/tests/Drupal/KernelTests/Core/Entity/EntityFieldTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Entity/EntityFieldTest.php
@@ -377,7 +377,8 @@ protected function doTestSave($entity_type) {
     $entity->save();
     $this->assertTrue((bool) $entity->id(), format_string('%entity_type: Entity has received an id.', array('%entity_type' => $entity_type)));
 
-    $entity = entity_load($entity_type, $entity->id());
+    $entity = $this->container->get('entity_type.manager')
+      ->getStorage($entity_type)->load($entity->id());
     $this->assertTrue((bool) $entity->id(), format_string('%entity_type: Entity loaded.', array('%entity_type' => $entity_type)));
 
     // Access the name field.
@@ -744,7 +745,8 @@ protected function doTestComputedProperties($entity_type) {
 
     // Save and load entity and make sure it still works.
     $entity->save();
-    $entity = entity_load($entity_type, $entity->id());
+    $entity = $this->container->get('entity_type.manager')
+      ->getStorage($entity_type)->load($entity->id());
     $this->assertEqual($entity->field_test_text->processed, $target, format_string('%entity_type: Text is processed with the default filter.', array('%entity_type' => $entity_type)));
   }
 
diff --git a/core/tests/Drupal/KernelTests/Core/Entity/EntityQueryTest.php b/core/tests/Drupal/KernelTests/Core/Entity/EntityQueryTest.php
index 2db824f..6b78f2a 100644
--- a/core/tests/Drupal/KernelTests/Core/Entity/EntityQueryTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Entity/EntityQueryTest.php
@@ -247,7 +247,7 @@ function testEntityQuery() {
       ->condition("$greetings.value", 'merhaba')
       ->sort('id')
       ->execute();
-    $entities = entity_load_multiple('entity_test_mulrev', $ids);
+    $entities = EntityTestMulRev::loadMultiple($ids);
     $first_entity = reset($entities);
     $old_name = $first_entity->name->value;
     foreach ($entities as $entity) {
diff --git a/core/tests/Drupal/KernelTests/Core/Entity/EntityTranslationTest.php b/core/tests/Drupal/KernelTests/Core/Entity/EntityTranslationTest.php
index 923a13f..6e918ea 100644
--- a/core/tests/Drupal/KernelTests/Core/Entity/EntityTranslationTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Entity/EntityTranslationTest.php
@@ -3,6 +3,7 @@
 namespace Drupal\KernelTests\Core\Entity;
 
 use Drupal\Component\Utility\SafeMarkup;
+use Drupal\Core\Entity\EntityStorageInterface;
 use Drupal\Core\Language\LanguageInterface;
 use Drupal\entity_test\Entity\EntityTestMulRev;
 use Drupal\field\Entity\FieldConfig;
@@ -162,13 +163,19 @@ protected function doTestMultilingualProperties($entity_type) {
     $uid = mt_rand(0, 127);
     $langcode = $this->langcodes[0];
 
+    /** @var EntityStorageInterface $storage */
+    $storage = $this->container->get('entity_type.manager')
+      ->getStorage($entity_type);
+
     // Create a language neutral entity and check that properties are stored
     // as language neutral.
-    $entity = $this->container->get('entity_type.manager')
-      ->getStorage($entity_type)
-      ->create(array('name' => $name, 'user_id' => $uid, $langcode_key => LanguageInterface::LANGCODE_NOT_SPECIFIED));
+    $entity = $storage->create(array(
+      'name' => $name,
+      'user_id' => $uid,
+      $langcode_key => LanguageInterface::LANGCODE_NOT_SPECIFIED,
+    ));
     $entity->save();
-    $entity = entity_load($entity_type, $entity->id());
+    $entity = $storage->load($entity->id());
     $default_langcode = $entity->language()->getId();
     $this->assertEqual($default_langcode, LanguageInterface::LANGCODE_NOT_SPECIFIED, format_string('%entity_type: Entity created as language neutral.', array('%entity_type' => $entity_type)));
     $field = $entity->getTranslation(LanguageInterface::LANGCODE_DEFAULT)->get('name');
@@ -188,11 +195,13 @@ protected function doTestMultilingualProperties($entity_type) {
 
     // Create a language-aware entity and check that properties are stored
     // as language-aware.
-    $entity = $this->container->get('entity_type.manager')
-      ->getStorage($entity_type)
-      ->create(array('name' => $name, 'user_id' => $uid, $langcode_key => $langcode));
+    $entity = $storage->create(array(
+      'name' => $name,
+      'user_id' => $uid,
+      $langcode_key => $langcode,
+    ));
     $entity->save();
-    $entity = entity_load($entity_type, $entity->id());
+    $entity = $storage->load($entity->id());
     $default_langcode = $entity->language()->getId();
     $this->assertEqual($default_langcode, $langcode, format_string('%entity_type: Entity created as language specific.', array('%entity_type' => $entity_type)));
     $field = $entity->getTranslation($langcode)->get('name');
@@ -224,7 +233,7 @@ protected function doTestMultilingualProperties($entity_type) {
     $entity->save();
 
     // Check that property translation were correctly stored.
-    $entity = entity_load($entity_type, $entity->id());
+    $entity = $storage->load($entity->id());
     foreach ($this->langcodes as $langcode) {
       $args = array(
         '%entity_type' => $entity_type,
@@ -251,9 +260,9 @@ protected function doTestMultilingualProperties($entity_type) {
       ))
       ->save();
 
-    $entities = entity_load_multiple($entity_type);
+    $entities = $storage->loadMultiple();
     $this->assertEqual(count($entities), 3, format_string('%entity_type: Three entities were created.', array('%entity_type' => $entity_type)));
-    $entities = entity_load_multiple($entity_type, array($translated_id));
+    $entities = $storage->loadMultiple(array($translated_id));
     $this->assertEqual(count($entities), 1, format_string('%entity_type: One entity correctly loaded by id.', array('%entity_type' => $entity_type)));
     $entities = entity_load_multiple_by_properties($entity_type, array('name' => $name));
     $this->assertEqual(count($entities), 2, format_string('%entity_type: Two entities correctly loaded by name.', array('%entity_type' => $entity_type)));
@@ -284,7 +293,8 @@ protected function doTestMultilingualProperties($entity_type) {
     $this->assertEqual(count($result), 1, format_string('%entity_type: One entity loaded by name and uid using different language meta conditions.', array('%entity_type' => $entity_type)));
 
     // Test mixed property and field conditions.
-    $entity = entity_load($entity_type, reset($result), TRUE);
+    $storage->resetCache($result);
+    $entity = $storage->load(reset($result));
     $field_value = $this->randomString();
     $entity->getTranslation($langcode)->set($this->fieldName, array(array('value' => $field_value)));
     $entity->save();
diff --git a/core/tests/Drupal/KernelTests/Core/Entity/EntityUUIDTest.php b/core/tests/Drupal/KernelTests/Core/Entity/EntityUUIDTest.php
index 2291355..2b553a8 100644
--- a/core/tests/Drupal/KernelTests/Core/Entity/EntityUUIDTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Entity/EntityUUIDTest.php
@@ -1,6 +1,7 @@
 <?php
 
 namespace Drupal\KernelTests\Core\Entity;
+use Drupal\Core\Entity\EntityStorageInterface;
 
 /**
  * Tests creation, saving, and loading of entity UUIDs.
@@ -40,20 +41,20 @@ protected function assertCRUD($entity_type) {
     // Verify that no UUID is auto-generated when passing one for creation.
     $uuid_service = $this->container->get('uuid');
     $uuid = $uuid_service->generate();
-    $custom_entity = $this->container->get('entity_type.manager')
-      ->getStorage($entity_type)
-      ->create(array(
+
+    /** @var EntityStorageInterface $storage */
+    $storage = $this->container->get('entity_type.manager')
+      ->getStorage($entity_type);
+    $custom_entity = $storage->create(array(
         'name' => $this->randomMachineName(),
         'uuid' => $uuid,
-      ));
+    ));
     $this->assertIdentical($custom_entity->uuid(), $uuid);
     // Save this entity, so we have more than one later.
     $custom_entity->save();
 
     // Verify that a new UUID is generated upon creating an entity.
-    $entity = $this->container->get('entity_type.manager')
-      ->getStorage($entity_type)
-      ->create(array('name' => $this->randomMachineName()));
+    $entity = $storage->create(array('name' => $this->randomMachineName()));
     $uuid = $entity->uuid();
     $this->assertTrue($uuid);
 
@@ -65,7 +66,8 @@ protected function assertCRUD($entity_type) {
     $this->assertIdentical($entity->uuid(), $uuid);
 
     // Verify that the UUID is retained upon loading.
-    $entity_loaded = entity_load($entity_type, $entity->id(), TRUE);
+    $storage->resetCache(array($entity->id()));
+    $entity_loaded = $storage->load($entity->id());
     $this->assertIdentical($entity_loaded->uuid(), $uuid);
 
     // Verify that \Drupal::entityManager()->loadEntityByUuid() loads the same entity.
diff --git a/core/tests/Drupal/Tests/BrowserTestBase.php b/core/tests/Drupal/Tests/BrowserTestBase.php
index 19fc913..73b877e 100644
--- a/core/tests/Drupal/Tests/BrowserTestBase.php
+++ b/core/tests/Drupal/Tests/BrowserTestBase.php
@@ -726,7 +726,7 @@ protected function drupalCreateRole(array $permissions, $rid = NULL, $name = NUL
       // Grant the specified permissions to the role, if any.
       if (!empty($permissions)) {
         user_role_grant_permissions($role->id(), $permissions);
-        $assigned_permissions = entity_load('user_role', $role->id())->getPermissions();
+        $assigned_permissions = Role::load($role->id())->getPermissions();
         $missing_permissions = array_diff($permissions, $assigned_permissions);
         if ($missing_permissions) {
           $this->fail(SafeMarkup::format('Failed to create permissions: @perms', array('@perms' => implode(', ', $missing_permissions))));
