diff --git a/core/modules/node/lib/Drupal/node/NodeBCDecorator.php b/core/modules/node/lib/Drupal/node/NodeBCDecorator.php
index 9fa6bbf..fdaf3bd 100644
--- a/core/modules/node/lib/Drupal/node/NodeBCDecorator.php
+++ b/core/modules/node/lib/Drupal/node/NodeBCDecorator.php
@@ -13,4 +13,95 @@
  * Defines the node specific entity BC decorator.
  */
 class NodeBCDecorator extends EntityBCDecorator implements NodeInterface {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setTitle($title) {
+    $this->decorated->setTitle($title);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getCreatedTime() {
+    return $this->decorated->getCreatedTime();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setCreatedTime($timestamp) {
+    return $this->decorated->setCreatedTime($timestamp);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getChangedTime() {
+    return $this->decorated->getChangedTime();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function isPromoted() {
+    return $this->decorated->isPromoted();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setPromoted($promoted) {
+    $this->decorated->setPromoted($promoted);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function isSticky() {
+    return $this->decorated->isSticky();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setSticky($sticky) {
+    $this->decorated->setSticky($sticky);
+  }
+  /**
+   * {@inheritdoc}
+   */
+  public function getAuthor() {
+    return $this->decorated->getAuthor();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getAuthorId() {
+    return $this->decorated->getAuthorId();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setAuthorId($uid) {
+    $this->decorated->setAuthorId($uid);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function isPublished() {
+    return $this->decorated->isPublished();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setPublished($published) {
+    $this->decorated->setPublished($published);
+  }
+
 }
diff --git a/core/modules/node/lib/Drupal/node/NodeInterface.php b/core/modules/node/lib/Drupal/node/NodeInterface.php
index 7999675..aa60768 100644
--- a/core/modules/node/lib/Drupal/node/NodeInterface.php
+++ b/core/modules/node/lib/Drupal/node/NodeInterface.php
@@ -14,4 +14,110 @@
  */
 interface NodeInterface extends ContentEntityInterface {
 
+  /**
+   * Sets the node title.
+   *
+   * @param string $title
+   *   The node title.
+   */
+  public function setTitle($title);
+
+  /**
+   * Returns the node creation timestamp.
+   *
+   * @return int
+   *   Creation timestamp of the node.
+   */
+  public function getCreatedTime();
+
+  /**
+   * Sets the node creation timestamp.
+   *
+   * @param int $timestamp
+   *   The node creation timestamp.
+   */
+  public function setCreatedTime($timestamp);
+
+  /**
+   * Returns the node modification timestamp.
+   *
+   * @return int
+   *   Node creation timestamp.
+   */
+  public function getChangedTime();
+
+  /**
+   * Returns the node promotion status.
+   *
+   * @return bool
+   *   TRUE if the node is promoted.
+   */
+  public function isPromoted();
+
+  /**
+   * Sets the node promoted status.
+   *
+   * @param bool $promoted
+   *   TRUE to set this node to promoted, FALSE to set it to not promoted.
+   */
+  public function setPromoted($promoted);
+
+  /**
+   * Returns the node sticky status.
+   *
+   * @return bool
+   *   TRUE if the node is sticky.
+   */
+  public function isSticky();
+
+  /**
+   * Sets the node sticky status.
+   *
+   * @param bool $sticky
+   *   TRUE to set this node to sticky, FALSE to set it to not sticky.
+   */
+  public function setSticky($sticky);
+
+  /**
+   * Returns the node author user entity.
+   *
+   * @return \Drupal\user\UserInterface
+   *   The author user entity.
+   */
+  public function getAuthor();
+
+  /**
+   * Returns the node author user ID.
+   *
+   * @return int
+   *   The author user ID.
+   */
+  public function getAuthorId();
+
+  /**
+   * Sets the node author user ID.
+   *
+   * @param int $uid
+   *   The author user id.
+   */
+  public function setAuthorId($uid);
+
+  /**
+   * Returns the node published status indicator.
+   *
+   * Unpublished nodes are only visible to their authors and to administrators.
+   *
+   * @return bool
+   *   TRUE if the node is published.
+   */
+  public function isPublished();
+
+  /**
+   * Sets the published status of a node..
+   *
+   * @param bool $published
+   *   TRUE to set this node to published, FALSE to set it to unpublished.
+   */
+  public function setPublished($published);
+
 }
diff --git a/core/modules/node/lib/Drupal/node/Plugin/Core/Entity/Node.php b/core/modules/node/lib/Drupal/node/Plugin/Core/Entity/Node.php
index 0791287..c2a48d2 100644
--- a/core/modules/node/lib/Drupal/node/Plugin/Core/Entity/Node.php
+++ b/core/modules/node/lib/Drupal/node/Plugin/Core/Entity/Node.php
@@ -60,175 +60,6 @@
 class Node extends EntityNG implements NodeInterface {
 
   /**
-   * The node ID.
-   *
-   * @var \Drupal\Core\Entity\Field\FieldInterface
-   */
-  public $nid;
-
-  /**
-   * The node revision ID.
-   *
-   * @var \Drupal\Core\Entity\Field\FieldInterface
-   */
-  public $vid;
-
-  /**
-   * The node UUID.
-   *
-   * @var \Drupal\Core\Entity\Field\FieldInterface
-   */
-  public $uuid;
-
-  /**
-   * The node content type (bundle).
-   *
-   * @var \Drupal\Core\Entity\Field\FieldInterface
-   */
-  public $type;
-
-  /**
-   * The node language code.
-   *
-   * @var \Drupal\Core\Entity\Field\FieldInterface
-   */
-  public $langcode;
-
-  /**
-   * The node title.
-   *
-   * @var \Drupal\Core\Entity\Field\FieldInterface
-   */
-  public $title;
-
-  /**
-   * The node owner's user ID.
-   *
-   * @var \Drupal\Core\Entity\Field\FieldInterface
-   */
-  public $uid;
-
-  /**
-   * The node published status indicator.
-   *
-   * Unpublished nodes are only visible to their authors and to administrators.
-   * The value is either NODE_PUBLISHED or NODE_NOT_PUBLISHED.
-   *
-   * @var \Drupal\Core\Entity\Field\FieldInterface
-   */
-  public $status;
-
-  /**
-   * The node creation timestamp.
-   *
-   * @var \Drupal\Core\Entity\Field\FieldInterface
-   */
-  public $created;
-
-  /**
-   * The node modification timestamp.
-   *
-   * @var \Drupal\Core\Entity\Field\FieldInterface
-   */
-  public $changed;
-
-  /**
-   * The node comment status indicator.
-   *
-   * COMMENT_NODE_HIDDEN => no comments
-   * COMMENT_NODE_CLOSED => comments are read-only
-   * COMMENT_NODE_OPEN => open (read/write)
-   *
-   * @var \Drupal\Core\Entity\Field\FieldInterface
-   */
-  public $comment;
-
-  /**
-   * The node promotion status.
-   *
-   * Promoted nodes should be displayed on the front page of the site. The value
-   * is either NODE_PROMOTED or NODE_NOT_PROMOTED.
-   *
-   * @var \Drupal\Core\Entity\Field\FieldInterface
-   */
-  public $promote;
-
-  /**
-   * The node sticky status.
-   *
-   * Sticky nodes should be displayed at the top of lists in which they appear.
-   * The value is either NODE_STICKY or NODE_NOT_STICKY.
-   *
-   * @var \Drupal\Core\Entity\Field\FieldInterface
-   */
-  public $sticky;
-
-  /**
-   * The node translation set ID.
-   *
-   * Translations sets are based on the ID of the node containing the source
-   * text for the translation set.
-   *
-   * @var \Drupal\Core\Entity\Field\FieldInterface
-   */
-  public $tnid;
-
-  /**
-   * The node translation status.
-   *
-   * If the translation page needs to be updated, the value is 1; otherwise 0.
-   *
-   * @var \Drupal\Core\Entity\Field\FieldInterface
-   */
-  public $translate;
-
-  /**
-   * The node revision creation timestamp.
-   *
-   * @var \Drupal\Core\Entity\Field\FieldInterface
-   */
-  public $revision_timestamp;
-
-  /**
-   * The node revision author's user ID.
-   *
-   * @var \Drupal\Core\Entity\Field\FieldInterface
-   */
-  public $revision_uid;
-
-  /**
-   * The node revision log message.
-   *
-   * @var \Drupal\Core\Entity\Field\FieldInterface
-   */
-  public $log;
-
-  /**
-   * Overrides \Drupal\Core\Entity\EntityNG::init().
-   */
-  protected function init() {
-    parent::init();
-    // We unset all defined properties, so magic getters apply.
-    unset($this->nid);
-    unset($this->vid);
-    unset($this->uuid);
-    unset($this->type);
-    unset($this->title);
-    unset($this->uid);
-    unset($this->status);
-    unset($this->created);
-    unset($this->changed);
-    unset($this->comment);
-    unset($this->promote);
-    unset($this->sticky);
-    unset($this->tnid);
-    unset($this->translate);
-    unset($this->revision_timestamp);
-    unset($this->revision_uid);
-    unset($this->log);
-  }
-
-  /**
    * Implements Drupal\Core\Entity\EntityInterface::id().
    */
   public function id() {
@@ -310,5 +141,100 @@ public static function preDelete(EntityStorageControllerInterface $storage_contr
     }
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function setTitle($title) {
+    $this->set('title', $title);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getCreatedTime() {
+    return $this->get('created')->value;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getChangedTime() {
+    return $this->get('changed')->value;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function isPromoted() {
+    return (bool) $this->get('promote')->value;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function isSticky() {
+    return (bool) $this->get('sticky')->value;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function isPublished() {
+    return (bool) $this->get('status')->value;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getAuthor() {
+    $entity = $this->get('uid')->entity;
+    // If no user is given, default to the anonymous user.
+    if (!$entity) {
+      return user_load(0)->getBCentity();
+    }
+    return $entity->getBCEntity();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getAuthorId() {
+    return $this->get('uid')->target_id;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setCreatedTime($timestamp) {
+    $this->set('created', $timestamp);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setPromoted($promoted) {
+    $this->set('promoted', $promoted ? NODE_PROMOTED : NODE_NOT_PROMOTED);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setSticky($sticky) {
+    $this->set('sticky', $sticky ? NODE_STICKY : NODE_NOT_STICKY);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setAuthorId($uid) {
+    $this->set('uid', $uid);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setPublished($published) {
+    $this->set('status', $published ? NODE_PUBLISHED : NODE_NOT_PUBLISHED);
+  }
 
 }
diff --git a/core/modules/node/node.module b/core/modules/node/node.module
index fbdf07d..903e876 100644
--- a/core/modules/node/node.module
+++ b/core/modules/node/node.module
@@ -20,6 +20,7 @@
 use Drupal\Core\Template\Attribute;
 use Drupal\entity\Plugin\Core\Entity\EntityDisplay;
 use Drupal\file\Plugin\Core\Entity\File;
+use Drupal\node\NodeInterface;
 use Drupal\user\UserInterface;
 
 /**
@@ -133,7 +134,7 @@ function node_help($path, $arg) {
 
     case 'node/%/edit':
       $node = node_load($arg[1]);
-      $type = node_type_load($node->type);
+      $type = node_type_load($node->bundle());
       return (!empty($type->help) ? '<p>' . filter_xss_admin($type->help) . '</p>' : '');
   }
 
@@ -220,7 +221,7 @@ function node_entity_display_alter(EntityDisplay $display, $context) {
  */
 function node_uri(EntityInterface $node) {
   return array(
-    'path' => 'node/' . $node->nid->value,
+    'path' => 'node/' . $node->id(),
   );
 }
 
@@ -375,7 +376,7 @@ function node_type_get_label($name) {
  */
 function node_get_type_label(EntityInterface $node) {
   $types = _node_types_build()->names;
-  return isset($types[$node->type]) ? $types[$node->type] : FALSE;
+  return isset($types[$node->bundle()]) ? $types[$node->bundle()] : FALSE;
 }
 
 /**
@@ -853,7 +854,7 @@ function node_rdf_mapping() {
   );
 }
 
-/**
+/**s
  * Loads node entities from the database.
  *
  * This function should be used whenever you need to load more than one node
@@ -927,10 +928,10 @@ function node_submit(EntityInterface $node) {
   // form, which we then need to translate to a user ID.
   if (isset($node->name)) {
     if ($account = user_load_by_name($node->name)) {
-      $node->uid = $account->uid;
+      $node->setAuthorId($account->id());
     }
     else {
-      $node->uid = 0;
+      $node->setAuthorId(0);
     }
   }
 
@@ -940,7 +941,7 @@ function node_submit(EntityInterface $node) {
     $node->revision_timestamp = REQUEST_TIME;
   }
 
-  $node->created = !empty($node->date) && $node->date instanceOf DrupalDateTime ? $node->date->getTimestamp() : REQUEST_TIME;
+  $node->setCreatedTime(!empty($node->date) && $node->date instanceOf DrupalDateTime ? $node->date->getTimestamp() : REQUEST_TIME);
   $node->validated = TRUE;
 
   return $node;
@@ -979,11 +980,11 @@ function node_show(EntityInterface $node, $message = FALSE) {
   }
 
   // For markup consistency with other pages, use node_view_multiple() rather than node_view().
-  $nodes = array('nodes' => node_view_multiple(array($node->nid => $node), 'full'));
+  $nodes = array('nodes' => node_view_multiple(array($node->id() => $node), 'full'));
 
   // Update the history table, stating that this user viewed this node.
   if (module_exists('history')) {
-    history_write($node->nid);
+    history_write($node->id());
   }
 
   return $nodes;
@@ -1000,7 +1001,7 @@ function node_show(EntityInterface $node, $message = FALSE) {
  */
 function node_is_page(EntityInterface $node) {
   $page_node = menu_get_object();
-  return (!empty($page_node) ? $page_node->nid == $node->nid : FALSE);
+  return (!empty($page_node) ? $page_node->id() == $node->id() : FALSE);
 }
 
 /**
@@ -1041,7 +1042,7 @@ function template_preprocess_node(&$variables) {
   $variables['node'] = $variables['elements']['#node'];
   $node = $variables['node'];
 
-  $variables['date'] = format_date($node->created);
+  $variables['date'] = format_date($node->getCreatedTime());
   // @todo Change 'name' to 'author' and also convert to a render array pending
   //   http://drupal.org/node/1941286.
   $username = array(
@@ -1066,14 +1067,14 @@ function template_preprocess_node(&$variables) {
   field_attach_preprocess($node, $variables['content'], $variables);
 
   // Display post information only on certain node types.
-  if (variable_get('node_submitted_' . $node->type, TRUE)) {
+  if (variable_get('node_submitted_' . $node->bundle(), TRUE)) {
     $variables['display_submitted'] = TRUE;
     $variables['submitted'] = t('Submitted by !username on !datetime', array('!username' => $variables['name'], '!datetime' => $variables['date']));
     if (theme_get_setting('features.node_user_picture')) {
       // To change user picture settings (e.g. image style), edit the 'compact'
       // view mode on the User entity. Note that the 'compact' view mode might
       // not be configured, so remember to always check the theme setting first.
-      $variables['user_picture'] = user_view($node->account, 'compact');
+      $variables['user_picture'] = user_view($node->getAuthor(), 'compact');
     }
     else {
       $variables['user_picture'] = array();
@@ -1090,14 +1091,14 @@ function template_preprocess_node(&$variables) {
 
   // Gather node classes.
   $variables['attributes']['class'][] = 'node';
-  $variables['attributes']['class'][] = drupal_html_class('node-' . $node->type);
-  if ($node->promote) {
+  $variables['attributes']['class'][] = drupal_html_class('node-' . $node->bundle());
+  if ($node->isPromoted()) {
     $variables['attributes']['class'][] = 'promoted';
   }
-  if ($node->sticky) {
+  if ($node->isSticky()) {
     $variables['attributes']['class'][] = 'sticky';
   }
-  if (!$node->status) {
+  if (!$node->isPublished()) {
     $variables['attributes']['class'][] = 'unpublished';
   }
   if ($variables['view_mode']) {
@@ -1108,8 +1109,8 @@ function template_preprocess_node(&$variables) {
   }
 
   // Clean up name so there are no underscores.
-  $variables['theme_hook_suggestions'][] = 'node__' . $node->type;
-  $variables['theme_hook_suggestions'][] = 'node__' . $node->nid;
+  $variables['theme_hook_suggestions'][] = 'node__' . $node->bundle();
+  $variables['theme_hook_suggestions'][] = 'node__' . $node->id();
 
   $variables['content_attributes']['class'][] = 'content';
 }
@@ -1309,12 +1310,12 @@ function node_search_execute($keys = NULL, $conditions = NULL) {
       'type' => check_plain(node_get_type_label($node)),
       'title' => $node->label($item->langcode),
       'user' => drupal_render($username),
-      'date' => $node->changed,
+      'date' => $node->getChangedTime(),
       'node' => $node,
       'extra' => $extra,
       'score' => $item->calculated_score,
       'snippet' => search_excerpt($keys, $node->rendered, $item->langcode),
-      'langcode' => $node->langcode,
+      'langcode' => $node->language()->langcode,
     );
   }
   return $results;
@@ -1474,10 +1475,11 @@ function _node_revision_access(EntityInterface $node, $op = 'view', $account = N
     'update' => 'revert all revisions',
     'delete' => 'delete all revisions',
   );
+  $bundle = $node->bundle();
   $type_map = array(
-    'view' => "view $node->type revisions",
-    'update' => "revert $node->type revisions",
-    'delete' => "delete $node->type revisions",
+    'view' => "view $bundle revisions",
+    'update' => "revert $bundle revisions",
+    'delete' => "delete $bundle revisions",
   );
 
   if (!$node || !isset($map[$op]) || !isset($type_map[$op])) {
@@ -1492,12 +1494,12 @@ function _node_revision_access(EntityInterface $node, $op = 'view', $account = N
 
   // If no language code was provided, default to the node revision's langcode.
   if (empty($langcode)) {
-    $langcode = $node->langcode;
+    $langcode = $node->language()->langcode;
   }
 
   // Statically cache access by revision ID, language code, user account ID,
   // and operation.
-  $cid = $node->vid . ':' . $langcode . ':' . $account->uid . ':' . $op;
+  $cid = $node->getRevisionId() . ':' . $langcode . ':' . $account->id() . ':' . $op;
 
   if (!isset($access[$cid])) {
     // Perform basic permission checks first.
@@ -1510,7 +1512,7 @@ function _node_revision_access(EntityInterface $node, $op = 'view', $account = N
     // different revisions so there is no need for a separate database check.
     // Also, if you try to revert to or delete the default revision, that's
     // not good.
-    if ($node->isDefaultRevision() && (db_query('SELECT COUNT(*) FROM {node_field_revision} WHERE nid = :nid AND default_langcode = 1', array(':nid' => $node->nid))->fetchField() == 1 || $op == 'update' || $op == 'delete')) {
+    if ($node->isDefaultRevision() && (db_query('SELECT COUNT(*) FROM {node_field_revision} WHERE nid = :nid AND default_langcode = 1', array(':nid' => $node->id()))->fetchField() == 1 || $op == 'update' || $op == 'delete')) {
       $access[$cid] = FALSE;
     }
     elseif (user_access('administer nodes', $account)) {
@@ -1519,7 +1521,7 @@ function _node_revision_access(EntityInterface $node, $op = 'view', $account = N
     else {
       // First check the access to the default revision and finally, if the
       // node passed in is not the default revision then access to that, too.
-      $access[$cid] = node_access($op, node_load($node->nid), $account, $langcode) && ($node->isDefaultRevision() || node_access($op, $node, $account, $langcode));
+      $access[$cid] = node_access($op, node_load($node->id()), $account, $langcode) && ($node->isDefaultRevision() || node_access($op, $node, $account, $langcode));
     }
   }
 
@@ -1775,7 +1777,7 @@ function node_last_changed($nid, $langcode = NULL) {
  */
 function node_revision_list(EntityInterface $node) {
   $revisions = array();
-  $result = db_query('SELECT nfr.vid, nfr.title, nfr.log, nfr.revision_uid AS uid, n.vid AS current_vid, nfr.revision_timestamp, u.name FROM {node_field_revision} nfr LEFT JOIN {node} n ON n.vid = nfr.vid INNER JOIN {users} u ON u.uid = nfr.revision_uid WHERE nfr.nid = :nid AND nfr.default_langcode = 1 ORDER BY nfr.vid DESC', array(':nid' => $node->nid));
+  $result = db_query('SELECT nfr.vid, nfr.title, nfr.log, nfr.revision_uid AS uid, n.vid AS current_vid, nfr.revision_timestamp, u.name FROM {node_field_revision} nfr LEFT JOIN {node} n ON n.vid = nfr.vid INNER JOIN {users} u ON u.uid = nfr.revision_uid WHERE nfr.nid = :nid AND nfr.default_langcode = 1 ORDER BY nfr.vid DESC', array(':nid' => $node->id()));
   foreach ($result as $revision) {
     $revisions[$revision->vid] = $revision;
   }
@@ -1851,13 +1853,13 @@ function theme_node_recent_block($variables) {
     );
     if (node_access('update', $node)) {
       $row[] = array(
-        'data' => l(t('edit'), 'node/' . $node->nid . '/edit', $l_options),
+        'data' => l(t('edit'), 'node/' . $node->id() . '/edit', $l_options),
         'class' => 'edit',
       );
     }
     if (node_access('delete', $node)) {
       $row[] = array(
-        'data' => l(t('delete'), 'node/' . $node->nid . '/delete', $l_options),
+        'data' => l(t('delete'), 'node/' . $node->id() . '/delete', $l_options),
         'class' => 'delete',
       );
     }
@@ -1886,7 +1888,7 @@ function theme_node_recent_block($variables) {
 /**
  * Returns HTML for a recent node to be displayed in the recent content block.
  *
- * @param $variables
+ * @param $variable
  *   An associative array containing:
  *   - node: A node entity.
  *
@@ -1896,16 +1898,16 @@ function theme_node_recent_content($variables) {
   $node = $variables['node'];
 
   $output = '<div class="node-title">';
-  $output .= l($node->label(), 'node/' . $node->nid);
+  $output .= l($node->label(), 'node/' . $node->id());
   $mark = array(
     '#theme' => 'mark',
-    '#mark_type' => node_mark($node->nid, $node->changed),
+    '#mark_type' => node_mark($node->id(), $node->getChangedTime()),
   );
   $output .= drupal_render($mark);
   $output .= '</div><div class="node-author">';
   $username = array(
     '#theme' => 'username',
-    '#account' => user_load($node->uid),
+    '#account' => $node->getAuthor(),
   );
   $output .= drupal_render($username);
   $output .= '</div>';
@@ -1965,7 +1967,7 @@ function node_block_access($block) {
     // the settings from this block, deny access to it.
     if (!empty($node)) {
       // This is a node or node edit page.
-      return in_array($node->type, $allowed_types);
+      return in_array($node->bundle(), $allowed_types);
     }
     elseif (isset($node_add_arg) && isset($node_types[$node_add_arg])) {
       // This is a node creation page
@@ -2030,12 +2032,12 @@ function node_feed($nids = FALSE, $channel = array()) {
   foreach ($nodes as $node) {
     $item_text = '';
 
-    $node->link = url("node/$node->nid", array('absolute' => TRUE));
+    $node->link = url('node/' . $node->id(), array('absolute' => TRUE));
     $node->rss_namespaces = array();
     $node->rss_elements = array(
-      array('key' => 'pubDate', 'value' => gmdate('r', $node->created)),
-      array('key' => 'dc:creator', 'value' => $node->name),
-      array('key' => 'guid', 'value' => $node->nid . ' at ' . $base_url, 'attributes' => array('isPermaLink' => 'false'))
+      array('key' => 'pubDate', 'value' => gmdate('r', $node->getCreatedTime())),
+      array('key' => 'dc:creator', 'value' => $node->getAuthor()->label()),
+      array('key' => 'guid', 'value' => $node->id() . ' at ' . $base_url, 'attributes' => array('isPermaLink' => 'false'))
     );
 
     // The node gets built and modules add to or modify $node->rss_elements
@@ -2176,7 +2178,7 @@ function _node_index_node(EntityInterface $node) {
 
   // Save the changed time of the most recent indexed node, for the search
   // results half-life calculation.
-  Drupal::state()->set('node.cron_last', $node->changed);
+  Drupal::state()->set('node.cron_last', $node->getChangedTime());
 
   $languages = $node->getTranslationLanguages();
 
@@ -2196,7 +2198,7 @@ function _node_index_node(EntityInterface $node) {
     }
 
     // Update index.
-    search_index($node->nid, 'node', $text, $language->langcode);
+    search_index($node->id(), 'node', $text, $language->langcode);
   }
 }
 
@@ -2506,13 +2508,13 @@ function node_node_access($node, $op, $account) {
     }
 
     if ($op == 'update') {
-      if (user_access('edit any ' . $type . ' content', $account) || (user_access('edit own ' . $type . ' content', $account) && ($account->uid == $node->uid))) {
+      if (user_access('edit any ' . $type . ' content', $account) || (user_access('edit own ' . $type . ' content', $account) && ($account->uid == $node->getAuthorId()))) {
         return NODE_ACCESS_ALLOW;
       }
     }
 
     if ($op == 'delete') {
-      if (user_access('delete any ' . $type . ' content', $account) || (user_access('delete own ' . $type . ' content', $account) && ($account->uid == $node->uid))) {
+      if (user_access('delete any ' . $type . ' content', $account) || (user_access('delete own ' . $type . ' content', $account) && ($account->uid == $node->getAuthorId()))) {
         return NODE_ACCESS_ALLOW;
       }
     }
@@ -2820,18 +2822,18 @@ function node_query_node_access_alter(AlterableInterface $query) {
  * via hook_node_access_records_alter() implementations, and saves the collected
  * and altered grants to the database.
  *
- * @param \Drupal\Core\Entity\EntityInterface $node
+ * @param \Drupal\node\NodeInterface $node
  *   The $node to acquire grants for.
  * @param $delete
  *   (optional) Whether to delete existing node access records before inserting
  *   new ones. Defaults to TRUE.
  */
-function node_access_acquire_grants(EntityInterface $node, $delete = TRUE) {
+function node_access_acquire_grants(NodeInterface $node, $delete = TRUE) {
   $grants = module_invoke_all('node_access_records', $node);
   // Let modules alter the grants.
   drupal_alter('node_access_records', $grants, $node);
   // If no grants are set and the node is published, then use the default grant.
-  if (empty($grants) && !empty($node->status)) {
+  if (empty($grants) && $node->isPublished()) {
     $grants[] = array('realm' => 'all', 'gid' => 0, 'grant_view' => 1, 'grant_update' => 0, 'grant_delete' => 0);
   }
   _node_access_write_grants($node, $grants, NULL, $delete);
@@ -2865,7 +2867,7 @@ function node_access_acquire_grants(EntityInterface $node, $delete = TRUE) {
  */
 function _node_access_write_grants(EntityInterface $node, $grants, $realm = NULL, $delete = TRUE) {
   if ($delete) {
-    $query = db_delete('node_access')->condition('nid', $node->nid);
+    $query = db_delete('node_access')->condition('nid', $node->id());
     if ($realm) {
       $query->condition('realm', array($realm, 'all'), 'IN');
     }
@@ -2889,7 +2891,7 @@ function _node_access_write_grants(EntityInterface $node, $grants, $realm = NULL
       foreach ($grant_languages as $grant_langcode => $grant_language) {
         // Only write grants; denies are implicit.
         if ($grant['grant_view'] || $grant['grant_update'] || $grant['grant_delete']) {
-          $grant['nid'] = $node->nid;
+          $grant['nid'] = $node->id();
           $grant['langcode'] = $grant_langcode;
           // The record with the original langcode is used as the fallback.
           if ($grant['langcode'] == $node->langcode) {
