diff --git a/core/modules/comment/lib/Drupal/comment/CommentInterface.php b/core/modules/comment/lib/Drupal/comment/CommentInterface.php
index e586087..50529d1 100644
--- a/core/modules/comment/lib/Drupal/comment/CommentInterface.php
+++ b/core/modules/comment/lib/Drupal/comment/CommentInterface.php
@@ -15,6 +15,217 @@
 interface CommentInterface extends ContentEntityInterface {
 
   /**
+   * The parent comment entity if this is a reply to a comment.
+   *
+   * @return int
+   */
+  public function getParent();
+
+  /**
+   * The parent comment ID if this is a reply to a comment.
+   *
+   * @todo: Rename to 'parent_id'.
+   *
+   * @return int
+   */
+  public function getParentId();
+
+  /**
+   * Return the node to which the comment is attached.
+   *
+   * @return \Drupal\Core\Entity\EntityInterface
+   */
+  public function getNode();
+
+  /**
+   * Return the ID of the node to which the comment is attached.
+   *
+   * @return int
+   */
+  public function getNodeId();
+
+  /**
+   * The comment language code.
+   *
+   * @return string
+   */
+  public function getLangcode();
+
+  /**
+   * The comment author.
+   *
+   * @return int
+   */
+  public function getAuthor();
+
+  /**
+   * The comment author ID.
+   *
+   * @return int
+   */
+  public function getAuthorId();
+
+  /**
+   * The title of the comment.
+   *
+   * @return string
+   */
+  public function getSubject();
+
+  /**
+   * The comment author's name.
+   *
+   * For anonymous authors, this is the value as typed in the comment form.
+   *
+   * @return string
+   */
+  public function getAuthorName();
+
+  /**
+   * Set the name of the auhor of the comment.
+   *
+   * @param string $name
+   *   A string containing the name of the author.
+   *
+   * @return \Drupal\comment\Plugin\Core\Entity\CommentInterface
+   *   The class instance that this method is called on.
+   */
+  public function setName($name);
+
+  /**
+   * The comment author's e-mail address.
+   *
+   * For anonymous authors, this is the value as typed in the comment form.
+   *
+   * @return string
+   */
+  public function getMail();
+
+  /**
+   * The comment author's home page address.
+   *
+   * For anonymous authors, this is the value as typed in the comment form.
+   *
+   * @return string
+   */
+  public function getHomepage();
+
+  /**
+   * The comment author's hostname.
+   *
+   * @return string
+   */
+  public function getHostname();
+
+  /**
+   * Set the hostname of the comment.
+   *
+   * @param string $hostname
+   *   The hostname of the comment.
+   *
+   * @return \Drupal\comment\Plugin\Core\Entity\CommentInterface
+   *   The class instance that this method is called on.
+   */
+  public function setHostname($hostname);
+
+  /**
+   * The time that the comment was created.
+   *
+   * @return int
+   */
+  public function getCreated();
+
+  /**
+   * Set the creation date of the comment.
+   *
+   * @param int $created
+   *   The timestamp of when the comment was created.
+   *
+   * @return \Drupal\comment\Plugin\Core\Entity\CommentInterface
+   *   The class instance that this method is called on.
+   */
+  public function setCreated($created);
+
+  /**
+   * A boolean field indicating whether the comment is published.
+   *
+   * @return int
+   */
+  public function getChanged();
+
+  /**
+   * Set the date of when the comment was updated.
+   *
+   * @param int $changed
+   *   The timestamp of when the comment was updated.
+   * 
+   * @return \Drupal\comment\Plugin\Core\Entity\CommentInterface
+   *   The class instance that this method is called on.
+   */
+  public function setChanged($changed);
+
+  /**
+   * A boolean field indicating whether the comment is published.
+   *
+   * @return bool
+   */
+  public function isPublished();
+
+  /**
+   * Sets the status of the comment entity.
+   *
+   * @param bool $status
+   *   The status of the comment entity.
+   *
+   * @return \Drupal\comment\Plugin\Core\Entity\CommentInterface
+   *   The class instance that this method is called on.
+   */
+  public function setStatus($status);
+
+  /**
+   * The alphadecimal representation of the comment's place in a thread.
+   *
+   * @return string
+   */
+  public function getThread();
+
+  /**
+   * Sets the alphadecimal representation of the comment's place in a thread.
+   *
+   * @param string $thread
+   *   The alphadecimal representation of the comment's place in a thread
+   *
+   * @return \Drupal\comment\Plugin\Core\Entity\CommentInterface
+   *   The class instance that this method is called on.
+   */
+  public function setThread($thread);
+
+  /**
+   * The comment node type.
+   *
+   * @return string
+   */
+  public function getNodeType();
+
+  /**
+   * Sets the comment node type.
+   *
+   * @param string $node_type
+   *   The node type where the comment is attached.
+   *
+   * @return \Drupal\comment\Plugin\Core\Entity\CommentInterface
+   *   The class instance that this method is called on.
+   */
+  public function setNodeType($node_type);
+
+  /**
+   * The comment 'new' marker for the current user.
+   *
+   * @return bool
+   */
+  public function isNew();
+
+  /**
    * Returns the permalink URL for this comment.
    *
    * @return array
diff --git a/core/modules/comment/lib/Drupal/comment/Plugin/Core/Entity/Comment.php b/core/modules/comment/lib/Drupal/comment/Plugin/Core/Entity/Comment.php
index 700b629..a4328a0 100644
--- a/core/modules/comment/lib/Drupal/comment/Plugin/Core/Entity/Comment.php
+++ b/core/modules/comment/lib/Drupal/comment/Plugin/Core/Entity/Comment.php
@@ -52,160 +52,199 @@
 class Comment extends EntityNG implements CommentInterface {
 
   /**
-   * The comment ID.
-   *
-   * @todo Rename to 'id'.
-   *
-   * @var \Drupal\Core\Entity\Field\FieldInterface
+   * {@inheritdoc}
+   */
+  public function getParent() {
+    return $this->get('pid')->entity;
+  }
+  /**
+   * {@inheritdoc}
    */
-  public $cid;
+  public function getParentId() {
+    return $this->get('pid')->target_id;
+  }
 
   /**
-   * The comment UUID.
-   *
-   * @var \Drupal\Core\Entity\Field\FieldInterface
+   * {@inheritdoc}
    */
-  public $uuid;
+  public function getNode() {
+    return $this->get('nid')->entity;
+  }
 
   /**
-   * The parent comment ID if this is a reply to a comment.
-   *
-   * @todo: Rename to 'parent_id'.
-   *
-   * @var \Drupal\Core\Entity\Field\FieldInterface
+   * {@inheritdoc}
    */
-  public $pid;
+  public function getNodeId() {
+    return $this->get('nid')->target_id;
+  }
 
   /**
-   * The ID of the node to which the comment is attached.
-   *
-   * @var \Drupal\Core\Entity\Field\FieldInterface
+   * {@inheritdoc}
    */
-  public $nid;
+  public function getLangcode() {
+    return $this->get('langcode')->value;
+  }
 
   /**
-   * The comment language code.
-   *
-   * @var \Drupal\Core\Entity\Field\FieldInterface
+   * {@inheritdoc}
    */
-  public $langcode;
+  public function getAuthor() {
+    return $this->get('uid')->entity;
+  }
 
   /**
-   * The comment title.
-   *
-   * @var \Drupal\Core\Entity\Field\FieldInterface
+   * {@inheritdoc}
    */
-  public $subject;
+  public function getAuthorId() {
+    return $this->get('uid')->target_id;
+  }
 
   /**
-   * The comment author ID.
-   *
-   * @var \Drupal\Core\Entity\Field\FieldInterface
+   * {@inheritdoc}
    */
-  public $uid;
+  public function getSubject() {
+    return $this->get('subject')->value;
+  }
 
   /**
-   * The comment author's name.
-   *
-   * For anonymous authors, this is the value as typed in the comment form.
-   *
-   * @var \Drupal\Core\Entity\Field\FieldInterface
+   * {@inheritdoc}
    */
-  public $name;
+  public function getName() {
+    return $this->get('name')->value;
+  }
 
   /**
-   * The comment author's e-mail address.
-   *
-   * For anonymous authors, this is the value as typed in the comment form.
-   *
-   * @var \Drupal\Core\Entity\Field\FieldInterface
+   * {@inheritdoc}
    */
-  public $mail;
+  public function setName($name) {
+    $this->set('name', $name);
+    return $this;
+  }
 
   /**
-   * The comment author's home page address.
-   *
-   * For anonymous authors, this is the value as typed in the comment form.
-   *
-   * @var \Drupal\Core\Entity\Field\FieldInterface
+   * {@inheritdoc}
    */
-  public $homepage;
+  public function getMail() {
+    return $this->get('mail')->value;
+  }
 
   /**
-   * The comment author's hostname.
-   *
-   * @var \Drupal\Core\Entity\Field\FieldInterface
+   * {@inheritdoc}
    */
-  public $hostname;
+  public function getHomepage() {
+    return $this->get('homepage')->value;
+  }
 
   /**
-   * The time that the comment was created.
-   *
-   * @var \Drupal\Core\Entity\Field\FieldInterface
+   * {@inheritdoc}
    */
-  public $created;
+  public function getHostname() {
+    return $this->get('hostname')->value;
+  }
 
   /**
-   * The time that the comment was last edited.
-   *
-   * @var \Drupal\Core\Entity\Field\FieldInterface
+   * {@inheritdoc}
    */
-  public $changed;
+  public function setHostname($hostname) {
+    $this->set('hostname', $hostname);
+    return $this;
+  }
 
   /**
-   * A boolean field indicating whether the comment is published.
-   *
-   * @var \Drupal\Core\Entity\Field\FieldInterface
+   * {@inheritdoc}
    */
-  public $status;
+  public function getCreated() {
+    if (isset($this->get('created')->value)) {
+      return $this->get('created')->value;
+    }
+    return null;
+  }
 
   /**
-   * The alphadecimal representation of the comment's place in a thread.
-   *
-   * @var \Drupal\Core\Entity\Field\FieldInterface
+   * {@inheritdoc}
    */
-  public $thread;
+  public function setCreated($created) {
+    $this->set('created', $created);
+    return $this;
+  }
 
   /**
-   * The comment node type.
-   *
-   * @var \Drupal\Core\Entity\Field\FieldInterface
+   * {@inheritdoc}
    */
-  public $node_type;
+  public function getChanged() {
+    if (isset($this->get('created')->value)) {
+      return $this->get('changed')->value;
+    }
+    return null;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setChanged($changed) {
+    $this->set('changed', $changed);
+    return $this;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function isPublished() {
+    return $this->get('status')->value;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setStatus($status) {
+    $this->set('status', (bool) $status);
+    return $this;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getThread() {
+    if (isset($this->get('thread')->value)) {
+      return $this->get('thread')->value;
+    }
+    return null;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setThread($thread) {
+    $this->set('thread', $thread);
+    return $this;
+  }
 
   /**
-   * The comment 'new' marker for the current user.
-   *
-   * @var \Drupal\Core\Entity\Field\FieldInterface
+   * {@inheritdoc}
    */
-  public $new;
+  public function getNodeType() {
+    if (isset($this->get('node_type')->value)) {
+      return $this->get('node_type')->value;
+    }
+    return null;
+  }
 
   /**
-   * Initialize the object. Invoked upon construction and wake up.
+   * {@inheritdoc}
    */
-  protected function init() {
-    parent::init();
-    // We unset all defined properties, so magic getters apply.
-    unset($this->cid);
-    unset($this->uuid);
-    unset($this->pid);
-    unset($this->nid);
-    unset($this->subject);
-    unset($this->uid);
-    unset($this->name);
-    unset($this->mail);
-    unset($this->homepage);
-    unset($this->hostname);
-    unset($this->created);
-    unset($this->changed);
-    unset($this->status);
-    unset($this->thread);
-    unset($this->node_type);
-    unset($this->new);
+  public function setNodeType($node_type) {
+    $this->set('node_type', $node_type);
+    return $this;
+  }
+  /**
+   * {@inheritdoc}
+   */
+  public function isNew() {
+    return $this->get('new')->value;
   }
 
   /**
-   * Implements Drupal\Core\Entity\EntityInterface::id().
+   * {@inheritdoc}
    */
   public function id() {
     return $this->get('cid')->value;
@@ -227,19 +266,19 @@ public static function preCreate(EntityStorageControllerInterface $storage_contr
   public function preSave(EntityStorageControllerInterface $storage_controller) {
     global $user;
 
-    if (!isset($this->status->value)) {
-      $this->status->value = user_access('skip comment approval') ? COMMENT_PUBLISHED : COMMENT_NOT_PUBLISHED;
+    if (!$this->isPublished()) {
+      $this->setStatus(user_access('skip comment approval') ? COMMENT_PUBLISHED : COMMENT_NOT_PUBLISHED);
     }
     // Make sure we have a proper bundle name.
-    if (!isset($this->node_type->value)) {
-      $this->node_type->value = 'comment_node_' . $this->nid->entity->type;
+    if (is_null($this->getNodeType())) {
+      $this->setNodeType('comment_node_' . $this->getNode()->type);
     }
     if ($this->isNew()) {
       // Add the comment to database. This next section builds the thread field.
       // Also see the documentation for comment_view().
-      if (!empty($this->thread->value)) {
+      if (is_null($this->getThread())) {
         // Allow calling code to set thread itself.
-        $thread = $this->thread->value;
+        $thread = $this->getThread();
       }
       else {
         if ($this->threadLock) {
@@ -247,7 +286,7 @@ public function preSave(EntityStorageControllerInterface $storage_controller) {
           // is extended in a faulty manner.
           throw new \LogicException('preSave is called again without calling postSave() or releaseThreadLock()');
         }
-        if ($this->pid->target_id == 0) {
+        if ($this->getParentId() == 0) {
           // This is a comment with no parent comment (depth 0): we start
           // by retrieving the maximum thread level.
           $max = $storage_controller->getMaxThread($this);
@@ -263,10 +302,10 @@ public function preSave(EntityStorageControllerInterface $storage_controller) {
           // the thread value at the proper depth.
 
           // Get the parent comment:
-          $parent = $this->pid->entity;
+          $parent = $this->getParent();
           // Strip the "/" from the end of the parent thread.
-          $parent->thread->value = (string) rtrim((string) $parent->thread->value, '/');
-          $prefix = $parent->thread->value . '.';
+          $parent->setThread((string) rtrim((string) $parent->getThread(), '/'));
+          $prefix = $parent->getThread() . '.';
           // Get the max value in *this* thread.
           $max = $storage_controller->getMaxThreadPerThread($this);
 
@@ -281,7 +320,7 @@ public function preSave(EntityStorageControllerInterface $storage_controller) {
             $max = rtrim($max, '/');
             // Get the value at the correct depth.
             $parts = explode('.', $max);
-            $parent_depth = count(explode('.', $parent->thread->value));
+            $parent_depth = count(explode('.', $parent->getThread()));
             $n = comment_alphadecimal_to_int($parts[$parent_depth]);
           }
         }
@@ -293,20 +332,20 @@ public function preSave(EntityStorageControllerInterface $storage_controller) {
         } while (!lock()->acquire("comment:{$this->nid->target_id}:$thread"));
         $this->threadLock = $thread;
       }
-      if (empty($this->created->value)) {
-        $this->created->value = REQUEST_TIME;
+      if (is_null($this->getCreated())) {
+        $this->setCreated(REQUEST_TIME);
       }
-      if (empty($this->changed->value)) {
-        $this->changed->value = $this->created->value;
+      if (is_null($this->getChanged())) {
+        $this->setChanged($this->getCreated());
       }
       // We test the value with '===' because we need to modify anonymous
       // users as well.
-      if ($this->uid->target_id === $user->uid && $user->uid) {
-        $this->name->value = $user->name;
+      if ($this->getAuthorId() === $user->uid && $user->uid) {
+        $this->setName($user->name);
       }
       // Add the values which aren't passed into the function.
-      $this->thread->value = $thread;
-      $this->hostname->value = \Drupal::request()->getClientIP();
+      $this->setThread($thread);
+      $this->setHostname(\Drupal::request()->getClientIP());
     }
   }
 
@@ -316,8 +355,8 @@ public function preSave(EntityStorageControllerInterface $storage_controller) {
   public function postSave(EntityStorageControllerInterface $storage_controller, $update = TRUE) {
     $this->releaseThreadLock();
     // Update the {node_comment_statistics} table prior to executing the hook.
-    $storage_controller->updateNodeStatistics($this->nid->target_id);
-    if ($this->status->value == COMMENT_PUBLISHED) {
+    $storage_controller->updateNodeStatistics($this->getNodeId());
+    if ($this->isPublished()) {
       module_invoke_all('comment_publish', $this);
     }
   }
@@ -349,7 +388,7 @@ public static function postDelete(EntityStorageControllerInterface $storage_cont
    */
   public function permalink() {
 
-    $url['path'] = 'node/' . $this->nid->value;
+    $url['path'] = 'node/' . $this->getNodeId();
     $url['options'] = array('fragment' => 'comment-' . $this->id());
 
     return $url;
