diff --git a/core/modules/entity_reference/lib/Drupal/entity_reference/Tests/EntityReferenceItemTest.php b/core/modules/entity_reference/lib/Drupal/entity_reference/Tests/EntityReferenceItemTest.php
index 2a50949..759b458 100644
--- a/core/modules/entity_reference/lib/Drupal/entity_reference/Tests/EntityReferenceItemTest.php
+++ b/core/modules/entity_reference/lib/Drupal/entity_reference/Tests/EntityReferenceItemTest.php
@@ -76,7 +76,7 @@ public function testEntityReferenceItem() {
     $this->assertTrue($entity->field_test_taxonomy instanceof FieldInterface, 'Field implements interface.');
     $this->assertTrue($entity->field_test_taxonomy[0] instanceof FieldItemInterface, 'Field item implements interface.');
     $this->assertEqual($entity->field_test_taxonomy->target_id, $tid);
-    $this->assertEqual($entity->field_test_taxonomy->entity->name->value, $this->term->name->value);
+    $this->assertEqual($entity->field_test_taxonomy->entity->name->value, $this->term->label());
     $this->assertEqual($entity->field_test_taxonomy->entity->id(), $tid);
     $this->assertEqual($entity->field_test_taxonomy->entity->uuid(), $this->term->uuid());
 
@@ -86,7 +86,7 @@ public function testEntityReferenceItem() {
     $entity->field_test_taxonomy->entity->save();
     // Verify it is the correct name.
     $term = entity_load('taxonomy_term', $tid);
-    $this->assertEqual($term->name->value, $new_name);
+    $this->assertEqual($term->label(), $new_name);
 
     // Make sure the computed term reflects updates to the term id.
     $term2 = entity_create('taxonomy_term', array(
@@ -98,7 +98,7 @@ public function testEntityReferenceItem() {
 
     $entity->field_test_taxonomy->target_id = $term2->id();
     $this->assertEqual($entity->field_test_taxonomy->entity->id(), $term2->id());
-    $this->assertEqual($entity->field_test_taxonomy->entity->name->value, $term2->name->value);
+    $this->assertEqual($entity->field_test_taxonomy->entity->name->value, $term2->label());
 
     // Delete terms so we have nothing to reference and try again
     $term->delete();
diff --git a/core/modules/system/lib/Drupal/system/Tests/Entity/EntityCrudHookTest.php b/core/modules/system/lib/Drupal/system/Tests/Entity/EntityCrudHookTest.php
index 84231d3..7bdffe3 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Entity/EntityCrudHookTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Entity/EntityCrudHookTest.php
@@ -382,7 +382,7 @@ public function testTaxonomyTermHooks() {
     ));
 
     $_SESSION['entity_crud_hook_test'] = array();
-    $term->name = 'New name';
+    $term->setName('New name');
     $term->save();
 
     $this->assertHookMessageOrder(array(
diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/Entity/Term.php b/core/modules/taxonomy/lib/Drupal/taxonomy/Entity/Term.php
index 03ddfe2..c11874f 100644
--- a/core/modules/taxonomy/lib/Drupal/taxonomy/Entity/Term.php
+++ b/core/modules/taxonomy/lib/Drupal/taxonomy/Entity/Term.php
@@ -57,91 +57,133 @@
 class Term extends EntityNG implements TermInterface {
 
   /**
-   * The taxonomy term ID.
-   *
-   * @var \Drupal\Core\Entity\Field\FieldInterface
+   * Implements Drupal\Core\Entity\EntityInterface::id().
    */
-  public $tid;
+  public function id() {
+    return $this->get('tid')->value;
+  }
 
   /**
-   * The term UUID.
-   *
-   * @var \Drupal\Core\Entity\Field\FieldInterface
+   * {@inheritdoc}
    */
-  public $uuid;
+  public function getDescription() {
+    return $this->get('description')->value;
+  }
 
   /**
-   * The taxonomy vocabulary ID this term belongs to.
-   *
-   * @var \Drupal\Core\Entity\Field\FieldInterface
+   * {@inheritdoc}
    */
-  public $vid;
+  public function getFormat() {
+    return $this->get('format')->value;
+  }
 
   /**
-   * Name of the term.
-   *
-   * @var \Drupal\Core\Entity\Field\FieldInterface
+   * {@inheritdoc}
    */
-  public $name;
+  public function getName() {
+    return $this->label();
+  }
 
   /**
-   * Description of the term.
-   *
-   * @var \Drupal\Core\Entity\Field\FieldInterface
+   * {@inheritdoc}
    */
-  public $description;
+  public function getParents() {
+    $parents = array();
+
+    foreach ($this->get('parent') as $parent) {
+      $parents[] = $parent->value;
+    }
+
+    // @todo If the term has no parents then the parents array will
+    // have a single 0 entry. This feels wrong but is needed because
+    // all terms need to have a precense in the taxonomy_term_heirarchy
+    // table. Perhaps better to have no entry in here if it has no parents?
+    return $parents;
+  }
 
   /**
-   * The text format name for the term's description.
-   *
-   * @var \Drupal\Core\Entity\Field\FieldInterface
+   * {@inheritdoc}
    */
-  public $format;
+  public function hasParents() {
+    $parents = taxonomy_term_load_parents($this->id());
+    return count($parents) > 0;
+  }
 
   /**
-   * The weight of this term.
-   *
-   * This property stores the weight of this term in relation to other terms of
-   * the same vocabulary.
-   *
-   * @var \Drupal\Core\Entity\Field\FieldInterface
+   * {@inheritdoc}
    */
-  public $weight;
+  protected function hasChangedParents() {
+    // @todo complete this internal functionality to determine if
+    // the parents of the Term have changed.
+    return TRUE;
+  }
 
   /**
-   * The parent term(s) for this term.
-   *
-   * This property is not loaded, but may be used to modify the term parents via
-   * Term::save().
-   *
-   * The property can be set to an array of term IDs. An entry of 0 means this
-   * term does not have any parents. When omitting this variable during an
-   * update, the existing hierarchy for the term remains unchanged.
-   *
-   * @var \Drupal\Core\Entity\Field\FieldInterface
+   * {@inheritdoc}
    */
-  public $parent;
+  public function getWeight() {
+    return $this->get('weight')->value;
+  }
 
   /**
-   * Implements Drupal\Core\Entity\EntityInterface::id().
+   * {@inheritdoc}
    */
-  public function id() {
-    return $this->get('tid')->value;
+  public function setDescription($description) {
+    $this->set('description', $description);
+    return $this;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setFormat($format) {
+    $this->set('format', $format);
+    return $this;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setName($name) {
+    $this->set('name', $name);
+    return $this;
   }
 
   /**
-   * Overides \Drupal\Core\Entity\EntityNG::init().
+   * {@inheritdoc}
+   */
+  public function clearParents() {
+    return $this->setParents(array());
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function addParents($parents) {
+    if (!is_array($parents)) {
+      $parents = array($parents);
+    }
+
+    $current_parents = $this->getParents();
+    $modified_parents = array_merge($parents, $current_parents);
+
+    return $this->setParents($modified_parents);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setParents($parents) {
+    $this->set('parent', $parents);
+    return $this;
+  }
+
+  /**
+   * {@inheritdoc}
    */
-  protected function init() {
-    parent::init();
-    unset($this->tid);
-    unset($this->uuid);
-    unset($this->vid);
-    unset($this->name);
-    unset($this->weight);
-    unset($this->format);
-    unset($this->description);
-    unset($this->parent);
+  public function setWeight($weight) {
+    $this->set('weight', $weight);
+    return $this;
   }
 
   /**
@@ -193,7 +235,7 @@ public function postSave(EntityStorageControllerInterface $storage_controller, $
 
     // Only change the parents if a value is set, keep the existing values if
     // not.
-    if (isset($this->parent->value)) {
+    if ($this->hasChangedParents()) {
       $storage_controller->deleteTermHierarchy(array($this->id()));
       $storage_controller->updateTermHierarchy($this);
     }
diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/TermFormController.php b/core/modules/taxonomy/lib/Drupal/taxonomy/TermFormController.php
index b6bbb41..cab1846 100644
--- a/core/modules/taxonomy/lib/Drupal/taxonomy/TermFormController.php
+++ b/core/modules/taxonomy/lib/Drupal/taxonomy/TermFormController.php
@@ -69,7 +69,7 @@ public function form(array $form, array &$form_state) {
     $form['name'] = array(
       '#type' => 'textfield',
       '#title' => $this->t('Name'),
-      '#default_value' => $term->name->value,
+      '#default_value' => $term->getName(),
       '#maxlength' => 255,
       '#required' => TRUE,
       '#weight' => -5,
@@ -78,8 +78,8 @@ public function form(array $form, array &$form_state) {
     $form['description'] = array(
       '#type' => 'text_format',
       '#title' => $this->t('Description'),
-      '#default_value' => $term->description->value,
-      '#format' => $term->format->value,
+      '#default_value' => $term->getDescription(),
+      '#format' => $term->getFormat(),
       '#weight' => 0,
     );
     $language_configuration = $this->moduleHandler->moduleExists('language') ? language_get_default_configuration('taxonomy_term', $vocabulary->id()) : FALSE;
@@ -117,6 +117,7 @@ public function form(array $form, array &$form_state) {
       if (empty($parent)) {
         $parent = array(0);
       }
+
       foreach ($tree as $item) {
         if (!in_array($item->tid, $exclude)) {
           $options[$item->tid] = str_repeat('-', $item->depth) . $item->name;
@@ -136,7 +137,7 @@ public function form(array $form, array &$form_state) {
       '#type' => 'textfield',
       '#title' => $this->t('Weight'),
       '#size' => 6,
-      '#default_value' => $term->weight->value,
+      '#default_value' => $term->getWeight(),
       '#description' => $this->t('Terms are displayed in ascending order by weight.'),
       '#required' => TRUE,
     );
@@ -177,16 +178,16 @@ public function buildEntity(array $form, array &$form_state) {
     $term = parent::buildEntity($form, $form_state);
 
     // Prevent leading and trailing spaces in term names.
-    $term->name->value = trim($term->name->value);
+    $term->setName(trim($term->getName()));
 
     // Convert text_format field into values expected by
     // \Drupal\Core\Entity\Entity::save() method.
     $description = $form_state['values']['description'];
-    $term->description->value = $description['value'];
-    $term->format->value = $description['format'];
+    $term->setDescription($description['value']);
+    $term->setFormat($description['format']);
 
     // Assign parents with proper delta values starting from 0.
-    $term->parent = array_keys($form_state['values']['parent']);
+    $term->setParents(array_keys($form_state['values']['parent']));
 
     return $term;
   }
diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/TermInterface.php b/core/modules/taxonomy/lib/Drupal/taxonomy/TermInterface.php
index 03770bd..df55abf 100644
--- a/core/modules/taxonomy/lib/Drupal/taxonomy/TermInterface.php
+++ b/core/modules/taxonomy/lib/Drupal/taxonomy/TermInterface.php
@@ -15,4 +15,127 @@
  */
 interface TermInterface extends ContentEntityInterface, EntityChangedInterface {
 
+  /**
+   * Returns Term's description.
+   *
+   * @return string
+   *   The term description.
+   */
+  public function getDescription();
+
+  /**
+   * Returns the text format name for the term's description.
+   *
+   * @return string
+   *   The text format name.
+   */
+  public function getFormat();
+
+  /**
+   * Returns the name of the term.
+   *
+   * @return string
+   *   The name of the term.
+   */
+  public function getName();
+
+  /**
+   * Returns the parent terms for this term, if set.
+   *
+   * @return array
+   *   Array of parent tids for this term. Empty array if no parents.
+   */
+  public function getParents();
+
+  /**
+   * Returns TRUE is this term has parents. Returning FALSE indicates
+   * that this is a top-level term.
+   *
+   * @return boolean
+   *   TRUE if term has parents, FALSE if it has no parents.
+   */
+  public function hasParents();
+
+  /**
+   * Returns the weight of this term.
+   *
+   * @return int
+   *   The weight of the term.
+   */
+  public function getWeight();
+
+  /**
+   * Sets the Term's description.
+   *
+   * @param string $description
+   *   The term's description.
+   *
+   * @return \Drupal\taxonomy\Entity\Term
+   *   The modified taxonomy term.
+   */
+  public function setDescription($description);
+
+  /**
+   * Sets the text format name for the term's description.
+   *
+   * @param string $format
+   *   The term's decription text format.
+   *
+   * @return \Drupal\taxonomy\Entity\Term
+   *   The modified taxonomy term.
+   */
+  public function setFormat($format);
+
+  /**
+   * Sets the name of the term.
+   *
+   * @param int $name
+   *   The term's name.
+   *
+   * @return \Drupal\taxonomy\Entity\Term
+   *   The modified taxonomy term.
+   */
+  public function setName($name);
+
+  /**
+   * Adds parents to this term.
+   *
+   * @param mixed $parents
+   *   A tid or array of tids to add to the list of parent terms
+   *   for this term.
+   *
+   * @return \Drupal\taxonomy\Entity\Term
+   *   The modified taxonomy term.
+   */
+  public function addParents($parents);
+
+  /**
+   * Set the parents of the term.
+   *
+   * @param array $parents
+   *   An array of Terms.
+   *
+   * @return \Drupal\taxonomy\Entity\Term
+   *   The modified taxonomy term.
+   */
+  public function setParents($parents);
+
+  /**
+   * Removes any parents from this term.
+   *
+   * @return \Drupal\taxonomy\Entity\Term
+   *   The modified taxonomy term.
+   */
+  public function clearParents();
+
+  /**
+   * Returns the weight of this term.
+   *
+   * @param int $weight
+   *   The term's weight.
+   *
+   * @return \Drupal\taxonomy\Entity\Term
+   *   The modified taxonomy term.
+   */
+  public function setWeight($weight);
 }
diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/TermStorageController.php b/core/modules/taxonomy/lib/Drupal/taxonomy/TermStorageController.php
index f77b1b5..a31065c 100644
--- a/core/modules/taxonomy/lib/Drupal/taxonomy/TermStorageController.php
+++ b/core/modules/taxonomy/lib/Drupal/taxonomy/TermStorageController.php
@@ -17,6 +17,20 @@
 class TermStorageController extends DatabaseStorageControllerNG implements TermStorageControllerInterface {
 
   /**
+   * Attempt to load the term parents
+   *
+   * {@inheritdoc}
+   */
+  protected function attachLoad(&$terms, $load_revision = FALSE) {
+    parent::attachLoad($terms, $load_revision);
+
+    foreach ($terms as $idx => $term) {
+      $parents = array_keys(taxonomy_term_load_parents($term->id()));
+      $term->setParents($parents);
+    }
+  }
+
+  /**
    * Overrides Drupal\Core\Entity\DatabaseStorageController::create().
    *
    * @param array $values
@@ -73,12 +87,13 @@ public function updateTermHierarchy(EntityInterface $term) {
     $query = $this->database->insert('taxonomy_term_hierarchy')
       ->fields(array('tid', 'parent'));
 
-    foreach ($term->parent as $parent) {
+    foreach ($term->getParents() as $parent_tid) {
       $query->values(array(
         'tid' => $term->id(),
-        'parent' => (int) $parent->value,
+        'parent' => (int) $parent_tid,
       ));
     }
+
     $query->execute();
   }
 
diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/LoadMultipleTest.php b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/LoadMultipleTest.php
index b0bb675..2150462 100644
--- a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/LoadMultipleTest.php
+++ b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/LoadMultipleTest.php
@@ -63,7 +63,7 @@ function testTaxonomyTermMultipleLoad() {
 
     // Create a single term and load it by name.
     $term = $this->createTerm($vocabulary);
-    $loaded_terms = entity_load_multiple_by_properties('taxonomy_term', array('name' => $term->name->value));
+    $loaded_terms = entity_load_multiple_by_properties('taxonomy_term', array('name' => $term->label()));
     $this->assertEqual(count($loaded_terms), 1, 'One term was loaded.');
     $loaded_term = reset($loaded_terms);
     $this->assertEqual($term->id(), $loaded_term->id(), 'Term loaded by name successfully.');
diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/RssTest.php b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/RssTest.php
index 654ea15..7d8dba0 100644
--- a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/RssTest.php
+++ b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/RssTest.php
@@ -100,7 +100,7 @@ function testTaxonomyRss() {
     $this->drupalGet('rss.xml');
     $test_element = array(
       'key' => 'category',
-      'value' => $term1->name->value,
+      'value' => $term1->label(),
       'attributes' => array(
         'domain' => url('taxonomy/term/' . $term1->id(), array('absolute' => TRUE)),
       ),
diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TaxonomyTermIndentationTest.php b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TaxonomyTermIndentationTest.php
index 7722a16..00ec21e 100644
--- a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TaxonomyTermIndentationTest.php
+++ b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TaxonomyTermIndentationTest.php
@@ -57,4 +57,3 @@ function testTermIndentation() {
   }
 
 }
-
diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TaxonomyTermReferenceItemTest.php b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TaxonomyTermReferenceItemTest.php
index c5e96f7..5c32254 100644
--- a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TaxonomyTermReferenceItemTest.php
+++ b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TaxonomyTermReferenceItemTest.php
@@ -96,7 +96,7 @@ public function testTaxonomyTermReferenceItem() {
     $entity->field_test_taxonomy->entity->save();
     // Verify it is the correct name.
     $term = entity_load('taxonomy_term', $tid);
-    $this->assertEqual($term->name->value, $new_name);
+    $this->assertEqual($term->label(), $new_name);
 
     // Make sure the computed term reflects updates to the term id.
     $term2 = entity_create('taxonomy_term', array(
@@ -108,7 +108,7 @@ public function testTaxonomyTermReferenceItem() {
 
     $entity->field_test_taxonomy->target_id = $term2->id();
     $this->assertEqual($entity->field_test_taxonomy->entity->id(), $term2->id());
-    $this->assertEqual($entity->field_test_taxonomy->entity->name->value, $term2->name->value);
+    $this->assertEqual($entity->field_test_taxonomy->entity->name->value, $term2->label());
   }
 
 }
diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermIndexTest.php b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermIndexTest.php
index 686b4eb..eb9464a 100644
--- a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermIndexTest.php
+++ b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermIndexTest.php
@@ -208,7 +208,7 @@ function testTaxonomyTermHierarchyBreadcrumbs() {
     // Create two taxonomy terms and set term2 as the parent of term1.
     $term1 = $this->createTerm($this->vocabulary);
     $term2 = $this->createTerm($this->vocabulary);
-    $term1->parent = array($term2->id());
+    $term1->setParents(array($term2->id()));
     $term1->save();
 
     // Verify that the page breadcrumbs include a link to the parent term.
diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermTest.php b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermTest.php
index c57397b..0f1c5ba 100644
--- a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermTest.php
+++ b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermTest.php
@@ -91,7 +91,7 @@ function testTaxonomyTermHierarchy() {
 
     // Create a third term and save this as a parent of term2.
     $term3 = $this->createTerm($this->vocabulary);
-    $term2->parent = array($term1->id(), $term3->id());
+    $term2->setParents(array($term1->id(), $term3->id()));
     $term2->save();
     $parents = taxonomy_term_load_parents($term2->id());
     $this->assertTrue(isset($parents[$term1->id()]) && isset($parents[$term3->id()]), 'Both parents found successfully.');
@@ -240,15 +240,15 @@ function testNodeTermCreationAndDeletion() {
   function testTermAutocompletion() {
     // Add a term with a slash in the name.
     $first_term = $this->createTerm($this->vocabulary);
-    $first_term->name = '10/16/2011';
+    $first_term->setName('10/16/2011');
     $first_term->save();
     // Add another term that differs after the slash character.
     $second_term = $this->createTerm($this->vocabulary);
-    $second_term->name = '10/17/2011';
+    $second_term->setName('10/17/2011');
     $second_term->save();
     // Add another term that has both a comma and a slash character.
     $third_term = $this->createTerm($this->vocabulary);
-    $third_term->name = 'term with, a comma and / a slash';
+    $third_term->setName('term with, a comma and / a slash');
     $third_term->save();
 
     // Try to autocomplete a term name that matches both terms.
diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermUnitTest.php b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermUnitTest.php
index 4a81f05..a68e0df 100644
--- a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermUnitTest.php
+++ b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermUnitTest.php
@@ -44,13 +44,13 @@ function testTaxonomyVocabularyTree() {
     }
 
     // $term[2] is a child of 1 and 5.
-    $term[2]->parent = array($term[1]->id(), $term[5]->id());
+    $term[2]->setParents(array($term[1]->id(), $term[5]->id()));
     $term[2]->save();
     // $term[3] is a child of 2.
-    $term[3]->parent = array($term[2]->id());
+    $term[3]->setParents(array($term[2]->id()));
     $term[3]->save();
     // $term[5] is a child of 4.
-    $term[5]->parent = array($term[4]->id());
+    $term[5]->setParents(array($term[4]->id()));
     $term[5]->save();
 
     /**
diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TokenReplaceTest.php b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TokenReplaceTest.php
index fb501e5..f17d569 100644
--- a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TokenReplaceTest.php
+++ b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TokenReplaceTest.php
@@ -86,8 +86,8 @@ function testTaxonomyTokenReplacement() {
     // Generate and test sanitized tokens for term1.
     $tests = array();
     $tests['[term:tid]'] = $term1->id();
-    $tests['[term:name]'] = check_plain($term1->name->value);
-    $tests['[term:description]'] = check_markup($term1->description->value, $term1->format->value);
+    $tests['[term:name]'] = check_plain($term1->label());
+    $tests['[term:description]'] = check_markup($term1->getDescription(), $term1->getFormat());
     $tests['[term:url]'] = url('taxonomy/term/' . $term1->id(), array('absolute' => TRUE));
     $tests['[term:node-count]'] = 0;
     $tests['[term:parent:name]'] = '[term:parent:name]';
@@ -101,11 +101,11 @@ function testTaxonomyTokenReplacement() {
     // Generate and test sanitized tokens for term2.
     $tests = array();
     $tests['[term:tid]'] = $term2->id();
-    $tests['[term:name]'] = check_plain($term2->name->value);
-    $tests['[term:description]'] = check_markup($term2->description->value, $term2->format->value);
+    $tests['[term:name]'] = check_plain($term2->label());
+    $tests['[term:description]'] = check_markup($term2->getDescription(), $term2->getFormat());
     $tests['[term:url]'] = url('taxonomy/term/' . $term2->id(), array('absolute' => TRUE));
     $tests['[term:node-count]'] = 1;
-    $tests['[term:parent:name]'] = check_plain($term1->name->value);
+    $tests['[term:parent:name]'] = check_plain($term1->label());
     $tests['[term:parent:url]'] = url('taxonomy/term/' . $term1->id(), array('absolute' => TRUE));
     $tests['[term:parent:parent:name]'] = '[term:parent:parent:name]';
     $tests['[term:vocabulary:name]'] = check_plain($this->vocabulary->name);
@@ -119,9 +119,9 @@ function testTaxonomyTokenReplacement() {
     }
 
     // Generate and test unsanitized tokens.
-    $tests['[term:name]'] = $term2->name->value;
-    $tests['[term:description]'] = $term2->description->value;
-    $tests['[term:parent:name]'] = $term1->name->value;
+    $tests['[term:name]'] = $term2->label();
+    $tests['[term:description]'] = $term2->getDescription();
+    $tests['[term:parent:name]'] = $term1->label();
     $tests['[term:vocabulary:name]'] = $this->vocabulary->name;
 
     foreach ($tests as $input => $expected) {
diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/Views/TaxonomyIndexTidUiTest.php b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/Views/TaxonomyIndexTidUiTest.php
index b95759d..abe20f6 100644
--- a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/Views/TaxonomyIndexTidUiTest.php
+++ b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/Views/TaxonomyIndexTidUiTest.php
@@ -85,7 +85,8 @@ public function testFilterUI() {
     for ($i = 0; $i < 3; $i++) {
       for ($j = 0; $j <= $i; $j++) {
         $option = $result[$counter++];
-        $prefix = $terms[$i][$j]->parent->value ? '-' : '';
+        $parents = $terms[$i][$j]->getParents();
+        $prefix = reset($parents) ? '-' : '';
         $attributes = $option->attributes();
         $tid = (string) $attributes->value;
 
diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/VocabularyPermissionsTest.php b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/VocabularyPermissionsTest.php
index 9b4611d..0b06949 100644
--- a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/VocabularyPermissionsTest.php
+++ b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/VocabularyPermissionsTest.php
@@ -80,7 +80,7 @@ function testVocabularyPermissionsTaxonomyTerm() {
     // Edit the term.
     $this->drupalGet('taxonomy/term/' . $term->id() . '/edit');
     $this->assertResponse(200);
-    $this->assertText($term->name->value, 'Edit taxonomy term form opened successfully.');
+    $this->assertText($term->label(), 'Edit taxonomy term form opened successfully.');
 
     $edit['name'] = $this->randomName();
     $this->drupalPostForm(NULL, $edit, t('Save'));
diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/VocabularyUnitTest.php b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/VocabularyUnitTest.php
index 33c49cd..3f0b58f 100644
--- a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/VocabularyUnitTest.php
+++ b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/VocabularyUnitTest.php
@@ -55,9 +55,9 @@ function testTaxonomyVocabularyDeleteWithTerms() {
     }
 
     // Set up hierarchy. term 2 is a child of 1 and 4 a child of 1 and 2.
-    $terms[2]->parent = array($terms[1]->id());
+    $terms[2]->setParents(array($terms[1]->id()));
     $terms[2]->save();
-    $terms[4]->parent = array($terms[1]->id(), $terms[2]->id());
+    $terms[4]->setParents(array($terms[1]->id(), $terms[2]->id()));
     $terms[4]->save();
 
     // Assert that there are now 5 terms.
@@ -191,7 +191,7 @@ function testUninstallReinstall() {
       'name' => $this->field_name,
       'entity_type' => 'taxonomy_term',
       'type' => 'text',
-      'cardinality' => 4
+      'cardinality' => 4,
     );
     entity_create('field_entity', $this->field_definition)->save();
     $this->instance_definition = array(
diff --git a/core/modules/taxonomy/taxonomy.tokens.inc b/core/modules/taxonomy/taxonomy.tokens.inc
index ec94447..80dc08e 100644
--- a/core/modules/taxonomy/taxonomy.tokens.inc
+++ b/core/modules/taxonomy/taxonomy.tokens.inc
@@ -104,11 +104,11 @@ function taxonomy_tokens($type, $tokens, array $data = array(), array $options =
           break;
 
         case 'name':
-          $replacements[$original] = $sanitize ? check_plain($term->name->value) : $term->name->value;
+          $replacements[$original] = $sanitize ? check_plain($term->getName()) : $term->getName();
           break;
 
         case 'description':
-          $replacements[$original] = $sanitize ? check_markup($term->description->value, $term->format->value, '', TRUE) : $term->description->value;
+          $replacements[$original] = $sanitize ? check_markup($term->getDescription(), $term->getFormat(), '', TRUE) : $term->getDescription();
           break;
 
         case 'url':
@@ -132,7 +132,7 @@ function taxonomy_tokens($type, $tokens, array $data = array(), array $options =
         case 'parent':
           if ($parents = taxonomy_term_load_parents($term->id())) {
             $parent = array_pop($parents);
-            $replacements[$original] = check_plain($parent->name->value);
+            $replacements[$original] = check_plain($parent->getName());
           }
           break;
       }
