diff --git a/core/modules/comment/src/Tests/CommentTestBase.php b/core/modules/comment/src/Tests/CommentTestBase.php
index 05f139d..2cde73f 100644
--- a/core/modules/comment/src/Tests/CommentTestBase.php
+++ b/core/modules/comment/src/Tests/CommentTestBase.php
@@ -11,6 +11,7 @@
 use Drupal\comment\Entity\Comment;
 use Drupal\comment\CommentInterface;
 use Drupal\comment\Plugin\Field\FieldType\CommentItemInterface;
+use Drupal\node\Entity\NodeType;
 use Drupal\field\Entity\FieldInstanceConfig;
 use Drupal\simpletest\WebTestBase;
 
@@ -52,7 +53,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 a281894..1270dec 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 7cf09db..31e4272 100644
--- a/core/modules/field_ui/src/Tests/EntityDisplayTest.php
+++ b/core/modules/field_ui/src/Tests/EntityDisplayTest.php
@@ -7,8 +7,10 @@
 
 namespace Drupal\field_ui\Tests;
 
+
 use Drupal\Core\Entity\Entity\EntityViewMode;
 use Drupal\simpletest\KernelTestBase;
+use Drupal\node\Entity\NodeType;
 
 /**
  * Tests the entity display configuration entities.
@@ -276,7 +278,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 039c305..9628471 100644
--- a/core/modules/forum/forum.module
+++ b/core/modules/forum/forum.module
@@ -12,6 +12,7 @@
 use Drupal\Component\Utility\String;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Routing\RouteMatchInterface;
+use Drupal\node\Entity\NodeType;
 
 /**
  * Implements hook_help().
@@ -118,7 +119,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())),
             'href' => 'node/add/' . $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 4ef6be3..6473d4c 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\FieldInstanceConfig;
 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($instance->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($instance, 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 030e62a..adce8e0 100644
--- a/core/modules/node/node.module
+++ b/core/modules/node/node.module
@@ -306,7 +306,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;
 }
 
@@ -410,7 +410,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/Entity/Node.php b/core/modules/node/src/Entity/Node.php
index 03ccd91..20f6c9e 100644
--- a/core/modules/node/src/Entity/Node.php
+++ b/core/modules/node/src/Entity/Node.php
@@ -491,6 +491,7 @@ public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
    * @return array
    *   An array of default values.
    */
+
   public static function getCurrentUserId() {
     return array(\Drupal::currentUser()->id());
   }
diff --git a/core/modules/node/src/NodeForm.php b/core/modules/node/src/NodeForm.php
index 45343d5..f45a764 100644
--- a/core/modules/node/src/NodeForm.php
+++ b/core/modules/node/src/NodeForm.php
@@ -15,6 +15,7 @@
 use Drupal\user\TempStoreFactory;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 use Drupal\user\Entity\User;
+use Drupal\node\Entity\NodeType;
 
 /**
  * Form controller for the node edit forms.
@@ -57,7 +58,6 @@ public static function create(ContainerInterface $container) {
   protected function prepareEntity() {
     /** @var \Drupal\node\NodeInterface $node */
     $node = $this->entity;
-
     if (!$node->isNew()) {
       // Remove the revision log message from the original node entity.
       $node->revision_log = NULL;
diff --git a/core/modules/node/src/NodeTypeForm.php b/core/modules/node/src/NodeTypeForm.php
index e60ee82..96b5118 100644
--- a/core/modules/node/src/NodeTypeForm.php
+++ b/core/modules/node/src/NodeTypeForm.php
@@ -83,7 +83,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 42a14a6..ad8aec2 100644
--- a/core/modules/node/src/Plugin/views/argument/Type.php
+++ b/core/modules/node/src/Plugin/views/argument/Type.php
@@ -9,6 +9,7 @@
 
 use Drupal\Component\Utility\String as UtilityString;
 use Drupal\views\Plugin\views\argument\String;
+use Drupal\node\Entity\NodeType;
 
 /**
  * Argument handler to accept a node type.
@@ -34,7 +35,7 @@ function title() {
   }
 
   function node_type($type_name) {
-    $type = entity_load('node_type', $type_name);
+    $type = NodeType::load($type_name);
     $output = $type ? $type->label() : 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 4824227..fbefec5 100644
--- a/core/modules/node/src/Plugin/views/field/Type.php
+++ b/core/modules/node/src/Plugin/views/field/Type.php
@@ -10,6 +10,7 @@
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\node\Plugin\views\field\Node;
 use Drupal\views\ResultRow;
+use Drupal\node\Entity\NodeType;
 
 /**
  * Field handler to translate a node type into its readable form.
@@ -46,7 +47,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 = NodeType::load($data);
       return $type ? 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 bcff81c..dcf9020 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\FieldInstanceConfig;
 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(FieldInstanceConfig::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 0ae66c0..2d55bda 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 6e091f9..4fa78a5 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 8c2d128..4fcd21c 100644
--- a/core/modules/node/src/Tests/NodeTypeTest.php
+++ b/core/modules/node/src/Tests/NodeTypeTest.php
@@ -6,7 +6,9 @@
  */
 
 namespace Drupal\node\Tests;
+
 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 f795ad3..7a5fe9d 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
@@ -241,7 +242,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 d097a5e..eda0413 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 5a6bba8..888e33d 100644
--- a/core/modules/simpletest/src/WebTestBase.php
+++ b/core/modules/simpletest/src/WebTestBase.php
@@ -28,6 +28,7 @@
 use Drupal\Core\Datetime\DrupalDateTime;
 use Drupal\block\Entity\Block;
 use Symfony\Component\HttpFoundation\Request;
+use Drupal\node\Entity\NodeType;
 
 /**
  * Test case for typical Drupal tests.
@@ -263,7 +264,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 137407c..346485c 100644
--- a/core/modules/system/entity.api.php
+++ b/core/modules/system/entity.api.php
@@ -1894,7 +1894,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.
@@ -1932,7 +1932,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);
   }
