diff --git a/core/modules/locale/src/Tests/LocaleContentTest.php b/core/modules/locale/src/Tests/LocaleContentTest.php
index 1bef062..03afbdd 100644
--- a/core/modules/locale/src/Tests/LocaleContentTest.php
+++ b/core/modules/locale/src/Tests/LocaleContentTest.php
@@ -64,7 +64,7 @@ public function testContentTypeLanguageConfiguration() {
     // User to add and remove language.
     $admin_user = $this->drupalCreateUser(array('administer languages', 'administer content types', 'access administration pages'));
     // User to create a node.
-    $web_user = $this->drupalCreateUser(array("create {$type1->type} content", "create {$type2->type} content", "edit any {$type2->type} content"));
+    $web_user = $this->drupalCreateUser(array("create {$type1->id()} content", "create {$type2->id()} content", "edit any {$type2->id()} content"));
 
     // Add custom language.
     $this->drupalLogin($admin_user);
@@ -81,24 +81,24 @@ public function testContentTypeLanguageConfiguration() {
     $this->drupalPostForm('admin/config/regional/language/add', $edit, t('Add custom language'));
 
     // Set the content type to use multilingual support.
-    $this->drupalGet("admin/structure/types/manage/{$type2->type}");
+    $this->drupalGet("admin/structure/types/manage/{$type2->id()}");
     $this->assertText(t('Language settings'), 'Multilingual support widget present on content type configuration form.');
     $edit = array(
       'language_configuration[language_show]' => TRUE,
     );
-    $this->drupalPostForm("admin/structure/types/manage/{$type2->type}", $edit, t('Save content type'));
-    $this->assertRaw(t('The content type %type has been updated.', array('%type' => $type2->name)));
+    $this->drupalPostForm("admin/structure/types/manage/{$type2->id()}", $edit, t('Save content type'));
+    $this->assertRaw(t('The content type %type has been updated.', array('%type' => $type2->get('name'))));
     $this->drupalLogout();
     \Drupal::languageManager()->reset();
 
     // Verify language selection is not present on the node add form.
     $this->drupalLogin($web_user);
-    $this->drupalGet("node/add/{$type1->type}");
+    $this->drupalGet("node/add/{$type1->id()}");
     // Verify language select list is not present.
     $this->assertNoFieldByName('language', NULL, 'Language select not present on the node add form.');
 
     // Verify language selection appears on the node add form.
-    $this->drupalGet("node/add/{$type2->type}");
+    $this->drupalGet("node/add/{$type2->id()}");
     // Verify language select list is present.
     $this->assertFieldByName('langcode', NULL, 'Language select present on the node add form.');
     // Ensure language appears.
@@ -108,7 +108,7 @@ public function testContentTypeLanguageConfiguration() {
     $node_title = $this->randomMachineName();
     $node_body = $this->randomMachineName();
     $edit = array(
-      'type' => $type2->type,
+      'type' => $type2->id(),
       'title' => $node_title,
       'body' => array(array('value' => $node_body)),
       'langcode' => $langcode,
@@ -137,7 +137,7 @@ public function testContentTypeDirLang() {
     // User to add and remove language.
     $admin_user = $this->drupalCreateUser(array('administer languages', 'administer content types', 'access administration pages'));
     // User to create a node.
-    $web_user = $this->drupalCreateUser(array("create {$type->type} content", "edit own {$type->type} content"));
+    $web_user = $this->drupalCreateUser(array("create {$type->id()} content", "edit own {$type->id()} content"));
 
     // Login as admin.
     $this->drupalLogin($admin_user);
@@ -154,12 +154,12 @@ public function testContentTypeDirLang() {
     \Drupal::languageManager()->reset();
 
     // Set the content type to use multilingual support.
-    $this->drupalGet("admin/structure/types/manage/{$type->type}");
+    $this->drupalGet("admin/structure/types/manage/{$type->id()}");
     $edit = array(
       'language_configuration[language_show]' => TRUE,
     );
-    $this->drupalPostForm("admin/structure/types/manage/{$type->type}", $edit, t('Save content type'));
-    $this->assertRaw(t('The content type %type has been updated.', array('%type' => $type->name)));
+    $this->drupalPostForm("admin/structure/types/manage/{$type->id()}", $edit, t('Save content type'));
+    $this->assertRaw(t('The content type %type has been updated.', array('%type' => $type->get('name'))));
     $this->drupalLogout();
 
     // Login as web user to add new node.
@@ -170,7 +170,7 @@ public function testContentTypeDirLang() {
     foreach (array('en', 'es', 'ar') as $langcode) {
       $nodes[$langcode] = $this->drupalCreateNode(array(
         'langcode' => $langcode,
-        'type' => $type->type,
+        'type' => $type->id(),
         'promote' => NODE_PROMOTED,
       ));
     }
diff --git a/core/modules/node/node.module b/core/modules/node/node.module
index e9112b19..92b76a7 100644
--- a/core/modules/node/node.module
+++ b/core/modules/node/node.module
@@ -291,7 +291,7 @@ function node_get_type_label(NodeInterface $node) {
  *   The node type description.
  */
 function node_type_get_description(NodeTypeInterface $node_type) {
-  return $node_type->description;
+  return $node_type->get('description');
 }
 
 /**
@@ -334,14 +334,14 @@ function node_add_body_field(NodeTypeInterface $type, $label = 'Body') {
     $field->save();
 
     // Assign widget settings for the 'default' form mode.
-    entity_get_form_display('node', $type->type, 'default')
+    entity_get_form_display('node', $type->id(), 'default')
       ->setComponent('body', array(
         'type' => 'text_textarea_with_summary',
       ))
       ->save();
 
     // Assign display settings for the 'default' and 'teaser' view modes.
-    entity_get_display('node', $type->type, 'default')
+    entity_get_display('node', $type->get('type'), 'default')
       ->setComponent('body', array(
         'label' => 'hidden',
         'type' => 'text_default',
@@ -352,7 +352,7 @@ function node_add_body_field(NodeTypeInterface $type, $label = 'Body') {
     // might not exist.
     $view_modes = \Drupal::entityManager()->getViewModes('node');
     if (isset($view_modes['teaser'])) {
-      entity_get_display('node', $type->type, 'teaser')
+      entity_get_display('node', $type->get('type'), 'teaser')
         ->setComponent('body', array(
           'label' => 'hidden',
           'type' => 'text_summary_or_trimmed',
@@ -378,22 +378,22 @@ function node_entity_extra_field_info() {
     // Visibility of the ordering of the language selector is the same as on the
     // node/add form.
     if ($module_language_enabled) {
-      $configuration = language_get_default_configuration('node', $bundle->type);
+      $configuration = language_get_default_configuration('node', $bundle->id());
       if ($configuration['language_show']) {
-        $extra['node'][$bundle->type]['form']['langcode'] = array(
+        $extra['node'][$bundle->get('type')]['form']['langcode'] = array(
           'label' => t('Language'),
           'description' => $description,
           'weight' => 0,
         );
       }
     }
-    $extra['node'][$bundle->type]['display']['langcode'] = array(
+    $extra['node'][$bundle->id()]['display']['langcode'] = array(
       'label' => t('Language'),
       'description' => $description,
       'weight' => 0,
       'visible' => FALSE,
     );
-    $extra['node'][$bundle->type]['display']['links'] = array(
+    $extra['node'][$bundle->id()]['display']['links'] = array(
       'label' => t('Links'),
       'description' => $description,
       'weight' => 100,
diff --git a/core/modules/node/src/Entity/NodeType.php b/core/modules/node/src/Entity/NodeType.php
index e33c1ec..33ecd4b 100644
--- a/core/modules/node/src/Entity/NodeType.php
+++ b/core/modules/node/src/Entity/NodeType.php
@@ -50,7 +50,7 @@ class NodeType extends ConfigEntityBundleBase implements NodeTypeInterface {
    *
    * @todo Rename to $id.
    */
-  public $type;
+  protected $type;
 
   /**
    * The human-readable name of the node type.
@@ -59,21 +59,21 @@ class NodeType extends ConfigEntityBundleBase implements NodeTypeInterface {
    *
    * @todo Rename to $label.
    */
-  public $name;
+  protected $name;
 
   /**
    * A brief description of this node type.
    *
    * @var string
    */
-  public $description;
+  protected $description;
 
   /**
    * Help information shown to the user when creating a Node of this type.
    *
    * @var string
    */
-  public $help;
+  protected $help;
 
   /**
    * Default value of the 'Create new revision' checkbox of this node type.
diff --git a/core/modules/node/src/Tests/NodeTypeTest.php b/core/modules/node/src/Tests/NodeTypeTest.php
index d0d5d54..4ae0187 100644
--- a/core/modules/node/src/Tests/NodeTypeTest.php
+++ b/core/modules/node/src/Tests/NodeTypeTest.php
@@ -49,14 +49,14 @@ function testNodeTypeCreation() {
     // Create a content type programmaticaly.
     $type = $this->drupalCreateContentType();
 
-    $type_exists = (bool) entity_load('node_type', $type->type);
+    $type_exists = (bool) entity_load('node_type', $type->id());
     $this->assertTrue($type_exists, 'The new content type has been created in the database.');
 
     // Login a test user.
-    $web_user = $this->drupalCreateUser(array('create ' . $type->name . ' content'));
+    $web_user = $this->drupalCreateUser(array('create ' . $type->get('name') . ' content'));
     $this->drupalLogin($web_user);
 
-    $this->drupalGet('node/add/' . $type->type);
+    $this->drupalGet('node/add/' . $type->id());
     $this->assertResponse(200, 'The new content type can be accessed at node/add.');
 
     // Create a content type via the user interface.
@@ -137,11 +137,11 @@ function testNodeTypeDeletion() {
     $this->drupalLogin($web_user);
 
     // Add a new node of this type.
-    $node = $this->drupalCreateNode(array('type' => $type->type));
+    $node = $this->drupalCreateNode(array('type' => $type->id()));
     // Attempt to delete the content type, which should not be allowed.
-    $this->drupalGet('admin/structure/types/manage/' . $type->name . '/delete');
+    $this->drupalGet('admin/structure/types/manage/' . $type->get('name') . '/delete');
     $this->assertRaw(
-      t('%type is used by 1 piece of content on your site. You can not remove this content type until you have removed all of the %type content.', array('%type' => $type->name)),
+      t('%type is used by 1 piece of content on your site. You can not remove this content type until you have removed all of the %type content.', array('%type' => $type->get('name'))),
       'The content type will not be deleted until all nodes of that type are removed.'
     );
     $this->assertNoText(t('This action cannot be undone.'), 'The node type deletion confirmation form is not available.');
@@ -149,9 +149,9 @@ function testNodeTypeDeletion() {
     // Delete the node.
     $node->delete();
     // Attempt to delete the content type, which should now be allowed.
-    $this->drupalGet('admin/structure/types/manage/' . $type->name . '/delete');
+    $this->drupalGet('admin/structure/types/manage/' . $type->get('name') . '/delete');
     $this->assertRaw(
-      t('Are you sure you want to delete the content type %type?', array('%type' => $type->name)),
+      t('Are you sure you want to delete the content type %type?', array('%type' => $type->get('name'))),
       'The content type is available for deletion.'
     );
     $this->assertText(t('This action cannot be undone.'), 'The node type deletion confirmation form is available.');
