diff --git a/core/modules/comment/src/Tests/CommentTestBase.php b/core/modules/comment/src/Tests/CommentTestBase.php
index d86e3d4..3462c06 100644
--- a/core/modules/comment/src/Tests/CommentTestBase.php
+++ b/core/modules/comment/src/Tests/CommentTestBase.php
@@ -12,6 +12,8 @@
 use Drupal\comment\CommentInterface;
 use Drupal\field\Entity\FieldConfig;
 use Drupal\comment\Plugin\Field\FieldType\CommentItemInterface;
+use Drupal\node\Entity\NodeType;
+use Drupal\field\Entity\FieldInstanceConfig;
 use Drupal\simpletest\WebTestBase;
 
 /**
@@ -52,7 +54,7 @@ protected function setUp() {
 
     // Create an article content type only if it does not yet exist, so that
     // child classes may specify the standard profile.
-    $types = node_type_get_types();
+    $types = NodeType::loadMultiple();
     if (empty($types['article'])) {
       $this->drupalCreateContentType(array('type' => 'article', 'name' => t('Article')));
     }
diff --git a/core/modules/config/src/Tests/ConfigImportRecreateTest.php b/core/modules/config/src/Tests/ConfigImportRecreateTest.php
index b569c5f..b41755f 100644
--- a/core/modules/config/src/Tests/ConfigImportRecreateTest.php
+++ b/core/modules/config/src/Tests/ConfigImportRecreateTest.php
@@ -11,6 +11,7 @@
 use Drupal\Core\Config\ConfigImporter;
 use Drupal\Core\Config\StorageComparer;
 use Drupal\simpletest\DrupalUnitTestBase;
+use Drupal\node\Entity\NodeType;
 
 /**
  * Tests importing recreated configuration entities.
@@ -98,7 +99,7 @@ public function testRecreateEntity() {
 
     // Verify that there is nothing more to import.
     $this->assertFalse($this->configImporter->reset()->hasUnprocessedConfigurationChanges());
-    $content_type = entity_load('node_type', $type_name);
+    $content_type = NodeType::load($type_name);
     $this->assertEqual('Node type one', $content_type->label());
   }
 
diff --git a/core/modules/field_ui/src/Tests/EntityDisplayTest.php b/core/modules/field_ui/src/Tests/EntityDisplayTest.php
index c2ef81c..d8e5a83 100644
--- a/core/modules/field_ui/src/Tests/EntityDisplayTest.php
+++ b/core/modules/field_ui/src/Tests/EntityDisplayTest.php
@@ -9,6 +9,7 @@
 
 use Drupal\Core\Entity\Entity\EntityViewMode;
 use Drupal\simpletest\KernelTestBase;
+use Drupal\node\Entity\NodeType;
 
 /**
  * Tests the entity display configuration entities.
@@ -276,7 +277,7 @@ public function testRenameDeleteBundle() {
     entity_get_form_display('node', 'article', 'default')->save();
 
     // Rename the article bundle and assert the entity display is renamed.
-    $type = node_type_load('article');
+    $type = NodeType::load('article');
     $type->old_type = 'article';
     $type->type = 'article_rename';
     $type->save();
diff --git a/core/modules/file/src/Tests/FilePrivateTest.php b/core/modules/file/src/Tests/FilePrivateTest.php
index d1561cc..d02ab61 100644
--- a/core/modules/file/src/Tests/FilePrivateTest.php
+++ b/core/modules/file/src/Tests/FilePrivateTest.php
@@ -6,8 +6,10 @@
  */
 
 namespace Drupal\file\Tests;
+
 use Drupal\file\Entity\File;
 use Drupal\node\Entity\Node;
+use Drupal\node\Entity\NodeType;
 
 /**
  * Uploads a test to a private node and checks access.
@@ -25,7 +27,7 @@ class FilePrivateTest extends FileFieldTestBase {
 
   protected function setUp() {
     parent::setUp();
-    node_access_test_add_field(entity_load('node_type', 'article'));
+    node_access_test_add_field(NodeType::load('article'));
     node_access_rebuild();
     \Drupal::state()->set('node_access_test.private', TRUE);
   }
diff --git a/core/modules/forum/forum.module b/core/modules/forum/forum.module
index 10b7366..15ace54 100644
--- a/core/modules/forum/forum.module
+++ b/core/modules/forum/forum.module
@@ -13,6 +13,7 @@
 use Drupal\Component\Utility\String;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Routing\RouteMatchInterface;
+use Drupal\node\Entity\NodeType;
 
 /**
  * Implements hook_help().
@@ -116,7 +117,7 @@ function forum_menu_local_tasks(&$data, $route_name) {
         $links[$type] = array(
           '#theme' => 'menu_local_action',
           '#link' => array(
-            'title' => t('Add new @node_type', array('@node_type' => entity_load('node_type', $type)->label())),
+            'title' => t('Add new @node_type', array('@node_type' => NodeType::load($type)->label())),
             'url' => Url::fromRoute('node.add', ['node_type' => $type]),
           ),
         );
diff --git a/core/modules/forum/src/Tests/ForumNodeAccessTest.php b/core/modules/forum/src/Tests/ForumNodeAccessTest.php
index 34ddd35..1fa31b1 100644
--- a/core/modules/forum/src/Tests/ForumNodeAccessTest.php
+++ b/core/modules/forum/src/Tests/ForumNodeAccessTest.php
@@ -8,6 +8,7 @@
 namespace Drupal\forum\Tests;
 
 use Drupal\simpletest\WebTestBase;
+use Drupal\node\Entity\NodeType;
 
 /**
  * Tests forum block view for private node access.
@@ -26,7 +27,7 @@ class ForumNodeAccessTest extends WebTestBase {
   protected function setUp() {
     parent::setUp();
     node_access_rebuild();
-    node_access_test_add_field(entity_load('node_type', 'forum'));
+    node_access_test_add_field(NodeType::load('forum'));
     \Drupal::state()->set('node_access_test.private', TRUE);
   }
 
diff --git a/core/modules/migrate_drupal/src/Tests/d6/MigrateNodeTypeTest.php b/core/modules/migrate_drupal/src/Tests/d6/MigrateNodeTypeTest.php
index 034dd04..014a7b6 100644
--- a/core/modules/migrate_drupal/src/Tests/d6/MigrateNodeTypeTest.php
+++ b/core/modules/migrate_drupal/src/Tests/d6/MigrateNodeTypeTest.php
@@ -10,6 +10,7 @@
 use Drupal\field\Entity\FieldConfig;
 use Drupal\migrate\MigrateExecutable;
 use Drupal\migrate_drupal\Tests\MigrateDrupalTestBase;
+use Drupal\node\Entity\NodeType;
 
 /**
  * Upgrade node types to node.type.*.yml.
@@ -45,7 +46,7 @@ protected function setUp() {
   public function testNodeType() {
     $migration = entity_load('migration', 'd6_node_type');
     // Test the test_page content type.
-    $node_type_page = entity_load('node_type', 'test_page');
+    $node_type_page = NodeType::load('test_page');
     $this->assertEqual($node_type_page->id(), 'test_page', 'Node type test_page loaded');
 
     $this->assertEqual($node_type_page->displaySubmitted(), TRUE);
@@ -58,7 +59,7 @@ public function testNodeType() {
     $this->assertEqual($field->getLabel(), 'This is the body field label', 'Body field was found.');
 
     // Test the test_story content type.
-    $node_type_story = entity_load('node_type', 'test_story');
+    $node_type_story = NodeType::load('test_story');
     $this->assertEqual($node_type_story->id(), 'test_story', 'Node type test_story loaded');
 
     $this->assertEqual($node_type_story->displaySubmitted(), TRUE);
@@ -71,7 +72,7 @@ public function testNodeType() {
     $this->assertEqual($field, NULL, 'No body field found');
 
     // Test the test_event content type.
-    $node_type_event = entity_load('node_type', 'test_event');
+    $node_type_event = NodeType::load('test_event');
     $this->assertEqual($node_type_event->id(), 'test_event', 'Node type test_event loaded');
 
     $this->assertEqual($node_type_event->displaySubmitted(), TRUE);
diff --git a/core/modules/node/node.module b/core/modules/node/node.module
index 6988f1e..0ea91e9 100644
--- a/core/modules/node/node.module
+++ b/core/modules/node/node.module
@@ -287,7 +287,7 @@ function node_type_get_names() {
  *   entity bundles.
  */
 function node_get_type_label(NodeInterface $node) {
-  $type = entity_load('node_type', $node->bundle());
+  $type = NodeType::load($node->bundle());
   return $type ? $type->label() : FALSE;
 }
 
@@ -390,7 +390,7 @@ function node_entity_extra_field_info() {
   $module_language_enabled = \Drupal::moduleHandler()->moduleExists('language');
   $description = t('Node module element');
 
-  foreach (node_type_get_types() as $bundle) {
+  foreach (NodeType::loadMultiple() as $bundle) {
     // Add the 'language' select if Language module is enabled and the bundle
     // has multilingual support.
     // Visibility of the ordering of the language selector is the same as on the
diff --git a/core/modules/node/src/NodeTypeForm.php b/core/modules/node/src/NodeTypeForm.php
index 087409c..79fa540 100644
--- a/core/modules/node/src/NodeTypeForm.php
+++ b/core/modules/node/src/NodeTypeForm.php
@@ -84,7 +84,7 @@ public function form(array $form, FormStateInterface $form_state) {
       '#maxlength' => EntityTypeInterface::BUNDLE_MAX_LENGTH,
       '#disabled' => $type->isLocked(),
       '#machine_name' => array(
-        'exists' => 'node_type_load',
+        'exists' => ['Drupal\node\Entity\NodeType', 'load'],
         'source' => array('name'),
       ),
       '#description' => t('A unique machine-readable name for this content type. It must only contain lowercase letters, numbers, and underscores. This name will be used for constructing the URL of the %node-add page, in which underscores will be converted into hyphens.', array(
diff --git a/core/modules/node/src/Plugin/views/argument/Type.php b/core/modules/node/src/Plugin/views/argument/Type.php
index e64ff6f..dfa4e0c 100644
--- a/core/modules/node/src/Plugin/views/argument/Type.php
+++ b/core/modules/node/src/Plugin/views/argument/Type.php
@@ -8,7 +8,9 @@
 namespace Drupal\node\Plugin\views\argument;
 
 use Drupal\Component\Utility\String as UtilityString;
+use Drupal\Core\Entity\EntityStorageInterface;
 use Drupal\views\Plugin\views\argument\String;
+use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
  * Argument handler to accept a node type.
@@ -18,6 +20,39 @@
 class Type extends String {
 
   /**
+   * Database Service Object.
+   *
+   * @var \Drupal\Core\Entity\EntityStorageInterface
+   */
+  protected $nodeTypeStorage;
+
+  /**
+   * Constructs a Drupal\Component\Plugin\PluginBase object.
+   *
+   * @param array $configuration
+   *   A configuration array containing information about the plugin instance.
+   * @param string $plugin_id
+   *   The plugin_id for the plugin instance.
+   * @param mixed $plugin_definition
+   *   The plugin implementation definition.
+   * @param \Drupal\node\NodeTypeInterface $storageInterface
+   *   Database Service Object.
+   */
+  public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityStorageInterface $storageInterface) {
+    parent::__construct($configuration, $plugin_id, $plugin_definition);
+
+    $this->nodeTypeStorage = $storageInterface;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
+    $entity_manager = $container->get('entity.manager');
+    return new static($configuration, $plugin_id, $plugin_definition, $entity_manager->getStorage('node_type'));
+  }
+
+  /**
    * Override the behavior of summaryName(). Get the user friendly version
    * of the node type.
    */
@@ -34,7 +69,7 @@ function title() {
   }
 
   function node_type($type_name) {
-    $type = entity_load('node_type', $type_name);
+    $type = $this->nodeTypeStorage->load($type_name);
     $output = $type ? $type->label() : $this->t('Unknown content type');
     return UtilityString::checkPlain($output);
   }
diff --git a/core/modules/node/src/Plugin/views/field/Type.php b/core/modules/node/src/Plugin/views/field/Type.php
index 33fd413..d22d0a1 100644
--- a/core/modules/node/src/Plugin/views/field/Type.php
+++ b/core/modules/node/src/Plugin/views/field/Type.php
@@ -8,8 +8,9 @@
 namespace Drupal\node\Plugin\views\field;
 
 use Drupal\Core\Form\FormStateInterface;
-use Drupal\node\Plugin\views\field\Node;
+use Drupal\Core\Entity\EntityStorageInterface;
 use Drupal\views\ResultRow;
+use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
  * Field handler to translate a node type into its readable form.
@@ -20,6 +21,42 @@
  */
 class Type extends Node {
 
+  /**
+   * Database Service Object.
+   *
+   * @var \Drupal\Core\Entity\EntityStorageInterface
+   */
+  protected $nodeTypeStorage;
+
+  /**
+   * Constructs a Drupal\Component\Plugin\PluginBase object.
+   *
+   * @param array $configuration
+   *   A configuration array containing information about the plugin instance.
+   * @param string $plugin_id
+   *   The plugin_id for the plugin instance.
+   * @param mixed $plugin_definition
+   *   The plugin implementation definition.
+   * @param \Drupal\node\NodeTypeInterface $storageInterface
+   *   Database Service Object.
+   */
+  public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityStorageInterface $storageInterface) {
+    parent::__construct($configuration, $plugin_id, $plugin_definition);
+
+    $this->nodeTypeStorage = $storageInterface;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
+    $entity_manager = $container->get('entity.manager');
+    return new static($configuration, $plugin_id, $plugin_definition, $entity_manager->getStorage('node_type'));
+  }
+
+  /**
+   * {@inheritdoc}
+   */
   protected function defineOptions() {
     $options = parent::defineOptions();
     $options['machine_name'] = array('default' => FALSE);
@@ -46,7 +83,7 @@ public function buildOptionsForm(&$form, FormStateInterface $form_state) {
    */
   function render_name($data, $values) {
     if ($this->options['machine_name'] != 1 && $data !== NULL && $data !== '') {
-      $type = entity_load('node_type', $data);
+      $type = $this->nodeTypeStorage->load($data);
       return $type ? $this->t($this->sanitizeValue($type->label())) : '';
     }
     return $this->sanitizeValue($data);
diff --git a/core/modules/node/src/Tests/Config/NodeImportChangeTest.php b/core/modules/node/src/Tests/Config/NodeImportChangeTest.php
index 015c008..18a0834 100644
--- a/core/modules/node/src/Tests/Config/NodeImportChangeTest.php
+++ b/core/modules/node/src/Tests/Config/NodeImportChangeTest.php
@@ -8,6 +8,7 @@
 namespace Drupal\node\Tests\Config;
 
 use Drupal\simpletest\DrupalUnitTestBase;
+use Drupal\node\Entity\NodeType;
 
 /**
  * Change content types during config create method invocation.
@@ -56,7 +57,7 @@ public function testImportChange() {
     $this->configImporter()->import();
 
     // Check that the updated config was correctly imported.
-    $node_type = entity_load('node_type', $node_type_id);
+    $node_type = NodeType::load($node_type_id);
     $this->assertEqual($node_type->label(), $new_label, 'Node type name has been updated.');
   }
 
diff --git a/core/modules/node/src/Tests/Config/NodeImportCreateTest.php b/core/modules/node/src/Tests/Config/NodeImportCreateTest.php
index ffcafcb..590d27d 100644
--- a/core/modules/node/src/Tests/Config/NodeImportCreateTest.php
+++ b/core/modules/node/src/Tests/Config/NodeImportCreateTest.php
@@ -9,6 +9,7 @@
 
 use Drupal\field\Entity\FieldConfig;
 use Drupal\simpletest\DrupalUnitTestBase;
+use Drupal\node\Entity\NodeType;
 
 /**
  * Create content types during config create method invocation.
@@ -42,12 +43,12 @@ public function testImportCreateDefault() {
     $node_type_id = 'default';
 
     // Check that the content type does not exist yet.
-    $this->assertFalse(entity_load('node_type', $node_type_id));
+    $this->assertFalse(NodeType::load($node_type_id));
 
     // Enable node_test_config module and check that the content type
     // shipped in the module's default config is created.
     $this->container->get('module_handler')->install(array('node_test_config'));
-    $node_type = entity_load('node_type', $node_type_id);
+    $node_type = NodeType::load($node_type_id);
     $this->assertTrue($node_type, 'The default content type was created.');
   }
 
@@ -71,7 +72,7 @@ public function testImportCreate() {
     $this->configImporter()->import();
 
     // Check that the content type was created.
-    $node_type = entity_load('node_type', $node_type_id);
+    $node_type = NodeType::load($node_type_id);
     $this->assertTrue($node_type, 'Import node type from staging was created.');
     $this->assertFalse(FieldConfig::loadByName('node', $node_type_id, 'body'));
   }
diff --git a/core/modules/node/src/Tests/NodeAccessBaseTableTest.php b/core/modules/node/src/Tests/NodeAccessBaseTableTest.php
index d5e4dd4..231c98b 100644
--- a/core/modules/node/src/Tests/NodeAccessBaseTableTest.php
+++ b/core/modules/node/src/Tests/NodeAccessBaseTableTest.php
@@ -7,6 +7,8 @@
 
 namespace Drupal\node\Tests;
 
+use Drupal\node\Entity\NodeType;
+
 /**
  * Tests behavior of the node access subsystem if the base table is not node.
  *
@@ -33,7 +35,7 @@ class NodeAccessBaseTableTest extends NodeTestBase {
   protected function setUp() {
     parent::setUp();
 
-    node_access_test_add_field(entity_load('node_type', 'article'));
+    node_access_test_add_field(NodeType::load('article'));
 
     node_access_rebuild();
     \Drupal::state()->set('node_access_test.private', TRUE);
diff --git a/core/modules/node/src/Tests/NodeAccessLanguageAwareCombinationTest.php b/core/modules/node/src/Tests/NodeAccessLanguageAwareCombinationTest.php
index f73ac3b..d370f5b 100644
--- a/core/modules/node/src/Tests/NodeAccessLanguageAwareCombinationTest.php
+++ b/core/modules/node/src/Tests/NodeAccessLanguageAwareCombinationTest.php
@@ -9,6 +9,7 @@
 
 use Drupal\Core\Language\LanguageInterface;
 use Drupal\language\Entity\ConfigurableLanguage;
+use Drupal\node\Entity\NodeType;
 
 /**
  * Tests node access functionality with multiple languages and two node access
@@ -49,7 +50,7 @@ class NodeAccessLanguageAwareCombinationTest extends NodeTestBase {
   protected function setUp() {
     parent::setUp();
 
-    node_access_test_add_field(entity_load('node_type', 'page'));
+    node_access_test_add_field(NodeType::load('page'));
 
     // Create the 'private' field, which allows the node to be marked as private
     // (restricted access) in a given translation.
diff --git a/core/modules/node/src/Tests/NodeAccessLanguageTest.php b/core/modules/node/src/Tests/NodeAccessLanguageTest.php
index aa29d40..5cde8ea 100644
--- a/core/modules/node/src/Tests/NodeAccessLanguageTest.php
+++ b/core/modules/node/src/Tests/NodeAccessLanguageTest.php
@@ -9,6 +9,7 @@
 
 use Drupal\Core\Language\LanguageInterface;
 use Drupal\language\Entity\ConfigurableLanguage;
+use Drupal\node\Entity\NodeType;
 
 /**
  * Tests node_access and db_select() with node_access tag functionality with
@@ -28,7 +29,7 @@ class NodeAccessLanguageTest extends NodeTestBase {
   protected function setUp() {
     parent::setUp();
 
-    node_access_test_add_field(entity_load('node_type', 'page'));
+    node_access_test_add_field(NodeType::load('page'));
 
     // After enabling a node access module, the access table has to be rebuild.
     node_access_rebuild();
diff --git a/core/modules/node/src/Tests/NodeCreationTest.php b/core/modules/node/src/Tests/NodeCreationTest.php
index d939dab..3bd790c 100644
--- a/core/modules/node/src/Tests/NodeCreationTest.php
+++ b/core/modules/node/src/Tests/NodeCreationTest.php
@@ -9,6 +9,8 @@
 
 use Drupal\Core\Database\Database;
 use Drupal\Core\Language\LanguageInterface;
+use Drupal\node\Entity\Node;
+use Drupal\node\Entity\NodeType;
 
 /**
  * Create a node and test saving it.
@@ -39,7 +41,7 @@ protected function setUp() {
    */
   function testNodeCreation() {
     // Test /node/add page with only one content type.
-    entity_load('node_type', 'article')->delete();
+    NodeType::load('article')->delete();
     $this->drupalGet('node/add');
     $this->assertResponse(200);
     $this->assertUrl('node/add/page');
@@ -62,7 +64,7 @@ function testNodeCreation() {
     $this->assertNoText(format_date($node->getCreatedTime()));
 
     // Change the node type setting to show submitted by information.
-    $node_type = entity_load('node_type', 'page');
+    $node_type = NodeType::load('page');
     $node_type->setDisplaySubmitted(TRUE);
     $node_type->save();
 
@@ -171,7 +173,7 @@ function testNodeAddWithoutContentTypes () {
     $this->assertNoLinkByHref('/admin/structure/types/add');
 
     // Test /node/add page without content types.
-    foreach (entity_load_multiple('node_type') as $entity ) {
+    foreach (\Drupal::entityManager()->getStorage('node_type')->loadMultiple() as $entity ) {
       $entity->delete();
     }
 
diff --git a/core/modules/node/src/Tests/NodeRevisionsUiTest.php b/core/modules/node/src/Tests/NodeRevisionsUiTest.php
index c9a4a36..cf1400b 100644
--- a/core/modules/node/src/Tests/NodeRevisionsUiTest.php
+++ b/core/modules/node/src/Tests/NodeRevisionsUiTest.php
@@ -7,6 +7,8 @@
 
 namespace Drupal\node\Tests;
 
+use Drupal\node\Entity\NodeType;
+
 /**
  * Tests the UI for controlling node revision behavior.
  *
@@ -38,7 +40,7 @@ function testNodeFormSaveWithoutRevision() {
 
     // Set page revision setting 'create new revision'. This will mean new
     // revisions are created by default when the node is edited.
-    $type = entity_load('node_type', 'page');
+    $type = NodeType::load('page');
     $type->setNewRevision(TRUE);
     $type->save();
 
diff --git a/core/modules/node/src/Tests/NodeTypePersistenceTest.php b/core/modules/node/src/Tests/NodeTypePersistenceTest.php
index 62c2783..7001583 100644
--- a/core/modules/node/src/Tests/NodeTypePersistenceTest.php
+++ b/core/modules/node/src/Tests/NodeTypePersistenceTest.php
@@ -7,6 +7,8 @@
 
 namespace Drupal\node\Tests;
 
+use Drupal\node\Entity\NodeType;
+
 /**
  * Ensures that node type customization survives module enabling and disabling.
  *
@@ -26,7 +28,7 @@ function testNodeTypeCustomizationPersistence() {
 
     // Enable forum and verify that the node type exists and is not disabled.
     $this->drupalPostForm('admin/modules', $forum_enable, t('Save configuration'));
-    $forum = entity_load('node_type', 'forum');
+    $forum = NodeType::load('forum');
     $this->assertTrue($forum->id(), 'Forum node type found.');
     $this->assertTrue($forum->isLocked(), 'Forum node type is locked');
 
@@ -47,7 +49,7 @@ function testNodeTypeCustomizationPersistence() {
     $edit = array('uninstall[forum]' => 'forum');
     $this->drupalPostForm('admin/modules/uninstall', $edit, t('Uninstall'));
     $this->drupalPostForm(NULL, array(), t('Uninstall'));
-    $forum = entity_load('node_type', 'forum');
+    $forum = NodeType::load('forum');
     $this->assertFalse($forum->isLocked(), 'Forum node type is not locked');
     $this->drupalGet('node/add');
     $this->assertNoText('forum', 'forum type is no longer found on node/add');
diff --git a/core/modules/node/src/Tests/NodeTypeRenameConfigImportTest.php b/core/modules/node/src/Tests/NodeTypeRenameConfigImportTest.php
index 75973e0..7ebab71 100644
--- a/core/modules/node/src/Tests/NodeTypeRenameConfigImportTest.php
+++ b/core/modules/node/src/Tests/NodeTypeRenameConfigImportTest.php
@@ -11,6 +11,7 @@
 use Drupal\Component\Utility\Unicode;
 use Drupal\Core\Config\Entity\ConfigEntityStorage;
 use Drupal\simpletest\WebTestBase;
+use Drupal\node\Entity\NodeType;
 
 /**
  * Tests importing renamed node type via configuration synchronisation.
@@ -126,8 +127,8 @@ public function testConfigurationRename() {
     $this->drupalPostForm('admin/config/development/configuration', array(), t('Import all'));
     $this->assertText(t('There are no configuration changes to import.'));
 
-    $this->assertFalse(entity_load('node_type', $active_type), 'The content no longer exists with the old name.');
-    $content_type = entity_load('node_type', $staged_type);
+    $this->assertFalse(NodeType::load($active_type), 'The content no longer exists with the old name.');
+    $content_type = NodeType::load($staged_type);
     $this->assertIdentical($staged_type, $content_type->type);
 
     // Ensure the base field override has been renamed and the value is correct.
diff --git a/core/modules/node/src/Tests/NodeTypeTest.php b/core/modules/node/src/Tests/NodeTypeTest.php
index b0bb658..7ae5769 100644
--- a/core/modules/node/src/Tests/NodeTypeTest.php
+++ b/core/modules/node/src/Tests/NodeTypeTest.php
@@ -7,6 +7,8 @@
 
 namespace Drupal\node\Tests;
 use Drupal\field\Entity\FieldConfig;
+use Drupal\field\Entity\FieldInstanceConfig;
+use Drupal\node\Entity\NodeType;
 
 /**
  * Ensures that node type functions work correctly.
@@ -28,7 +30,7 @@ class NodeTypeTest extends NodeTestBase {
    * Load available node types and validate the returned data.
    */
   function testNodeTypeGetFunctions() {
-    $node_types = node_type_get_types();
+    $node_types = NodeType::loadMultiple();
     $node_names = node_type_get_names();
 
     $this->assertTrue(isset($node_types['article']), 'Node type article is available.');
@@ -36,7 +38,7 @@ function testNodeTypeGetFunctions() {
 
     $this->assertEqual($node_types['article']->name, $node_names['article'], 'Correct node type base has been returned.');
 
-    $article = entity_load('node_type', 'article');
+    $article = NodeType::load('article');
     $this->assertEqual($node_types['article'], $article, 'Correct node type has been returned.');
     $this->assertEqual($node_types['article']->name, $article->label(), 'Correct node type name has been returned.');
   }
@@ -48,7 +50,7 @@ function testNodeTypeCreation() {
     // Create a content type programmaticaly.
     $type = $this->drupalCreateContentType();
 
-    $type_exists = (bool) entity_load('node_type', $type->type);
+    $type_exists = (bool) NodeType::load($type->type);
     $this->assertTrue($type_exists, 'The new content type has been created in the database.');
 
     // Login a test user.
@@ -67,7 +69,7 @@ function testNodeTypeCreation() {
       'type' => 'foo',
     );
     $this->drupalPostForm('admin/structure/types/add', $edit, t('Save and manage fields'));
-    $type_exists = (bool) entity_load('node_type', 'foo');
+    $type_exists = (bool) NodeType::load('foo');
     $this->assertTrue($type_exists, 'The new content type has been created in the database.');
   }
 
@@ -127,7 +129,7 @@ function testNodeTypeEditing() {
   function testNodeTypeStatus() {
     // Enable all core node modules, and all types should be active.
     $this->container->get('module_handler')->install(array('book'), FALSE);
-    $types = node_type_get_types();
+    $types = NodeType::loadMultiple();
     foreach (array('book', 'article', 'page') as $type) {
       $this->assertTrue(isset($types[$type]), format_string('%type is found in node types.', array('%type' => $type)));
       $this->assertFalse($types[$type]->isLocked(), format_string('%type type is not locked.', array('%type' => $type)));
@@ -136,14 +138,14 @@ function testNodeTypeStatus() {
     // Disable book module and the respective type should still be active, since
     // it is not provided by shipped configuration entity.
     $this->container->get('module_handler')->uninstall(array('book'), FALSE);
-    $types = node_type_get_types();
+    $types = NodeType::loadMultiple();
     $this->assertFalse($types['book']->isLocked(), "Book module's node type still active.");
     $this->assertFalse($types['article']->isLocked(), 'Article node type still active.');
     $this->assertFalse($types['page']->isLocked(), 'Basic page node type still active.');
 
     // Re-install the modules and verify that the types are active again.
     $this->container->get('module_handler')->install(array('book'), FALSE);
-    $types = node_type_get_types();
+    $types = NodeType::loadMultiple();
     foreach (array('book', 'article', 'page') as $type) {
       $this->assertTrue(isset($types[$type]), format_string('%type is found in node types.', array('%type' => $type)));
       $this->assertFalse($types[$type]->isLocked(), format_string('%type type is not locked.', array('%type' => $type)));
diff --git a/core/modules/quickedit/src/Tests/QuickEditLoadingTest.php b/core/modules/quickedit/src/Tests/QuickEditLoadingTest.php
index a20663d..95b59b6 100644
--- a/core/modules/quickedit/src/Tests/QuickEditLoadingTest.php
+++ b/core/modules/quickedit/src/Tests/QuickEditLoadingTest.php
@@ -12,6 +12,7 @@
 use Drupal\quickedit\Ajax\MetadataCommand;
 use Drupal\Core\Ajax\AppendCommand;
 use Drupal\Component\Utility\Unicode;
+use Drupal\node\Entity\NodeType;
 
 /**
  * Tests loading of in-place editing functionality and lazy loading of its
@@ -237,7 +238,7 @@ public function testUserWithPermission() {
       // then again retrieve the field form, fill it, submit it (so it ends up
       // in TempStore) and then save the entity. Now there should be two
       // revisions.
-      $node_type = entity_load('node_type', 'article');
+      $node_type = NodeType::load('article');
       $node_type->setNewRevision(TRUE);
       $node_type->save();
 
diff --git a/core/modules/rdf/src/Tests/StandardProfileTest.php b/core/modules/rdf/src/Tests/StandardProfileTest.php
index 29e9804..78aac51 100644
--- a/core/modules/rdf/src/Tests/StandardProfileTest.php
+++ b/core/modules/rdf/src/Tests/StandardProfileTest.php
@@ -9,6 +9,7 @@
 
 use Drupal\node\NodeInterface;
 use Drupal\simpletest\WebTestBase;
+use Drupal\node\Entity\NodeType;
 
 /**
  * Tests the RDF mappings and RDFa markup of the standard profile.
@@ -272,7 +273,7 @@ protected function doPageRdfaTests() {
     // The standard profile hides the created date on pages. Revert display to
     // true for testing.
     // @todo Clean-up standard profile defaults.
-    $node_type = entity_load('node_type', 'page');
+    $node_type = NodeType::load('page');
     $node_type->setDisplaySubmitted(TRUE);
     $node_type->save();
 
diff --git a/core/modules/simpletest/src/WebTestBase.php b/core/modules/simpletest/src/WebTestBase.php
index 98f68fc..c75e43d 100644
--- a/core/modules/simpletest/src/WebTestBase.php
+++ b/core/modules/simpletest/src/WebTestBase.php
@@ -27,8 +27,9 @@
 use Drupal\Core\StreamWrapper\PublicStream;
 use Drupal\Core\Datetime\DrupalDateTime;
 use Drupal\block\Entity\Block;
-use Symfony\Component\HttpFoundation\Request;
+use Drupal\node\Entity\NodeType;
 use Drupal\user\Entity\Role;
+use Symfony\Component\HttpFoundation\Request;
 
 /**
  * Test case for typical Drupal tests.
@@ -264,7 +265,7 @@ protected function drupalCreateContentType(array $values = array()) {
     if (!isset($values['type'])) {
       do {
         $id = strtolower($this->randomMachineName(8));
-      } while (node_type_load($id));
+      } while (NodeType::load($id));
     }
     else {
       $id = $values['type'];
diff --git a/core/modules/system/entity.api.php b/core/modules/system/entity.api.php
index b9f60fe..8c726ff 100644
--- a/core/modules/system/entity.api.php
+++ b/core/modules/system/entity.api.php
@@ -1904,7 +1904,7 @@ function hook_entity_extra_field_info() {
   $module_language_enabled = \Drupal::moduleHandler()->moduleExists('language');
   $description = t('Node module element');
 
-  foreach (node_type_get_types() as $bundle) {
+  foreach (\Drupal\node\Entity\NodeType::loadMultiple() as $bundle) {
 
     // Add also the 'language' select if Language module is enabled and the
     // bundle has multilingual support.
@@ -1942,7 +1942,7 @@ function hook_entity_extra_field_info() {
  */
 function hook_entity_extra_field_info_alter(&$info) {
   // Force node title to always be at the top of the list by default.
-  foreach (node_type_get_types() as $bundle) {
+  foreach (\Drupal\node\Entity\NodeType::loadMultiple() as $bundle) {
     if (isset($info['node'][$bundle->type]['form']['title'])) {
       $info['node'][$bundle->type]['form']['title']['weight'] = -20;
     }
diff --git a/core/modules/tracker/src/Tests/TrackerNodeAccessTest.php b/core/modules/tracker/src/Tests/TrackerNodeAccessTest.php
index 62129d8..b575911 100644
--- a/core/modules/tracker/src/Tests/TrackerNodeAccessTest.php
+++ b/core/modules/tracker/src/Tests/TrackerNodeAccessTest.php
@@ -9,6 +9,7 @@
 
 use Drupal\comment\Plugin\Field\FieldType\CommentItemInterface;
 use Drupal\simpletest\WebTestBase;
+use Drupal\node\Entity\NodeType;
 
 /**
  * Tests for private node access on /tracker.
@@ -28,7 +29,7 @@ protected function setUp() {
     parent::setUp();
     node_access_rebuild();
     $this->drupalCreateContentType(array('type' => 'page'));
-    node_access_test_add_field(entity_load('node_type', 'page'));
+    node_access_test_add_field(NodeType::load('page'));
     $this->container->get('comment.manager')->addDefaultField('node', 'page', 'comment', CommentItemInterface::OPEN);
     \Drupal::state()->set('node_access_test.private', TRUE);
   }
