diff --git a/core/lib/Drupal/Core/Config/Entity/ConfigEntityBase.php b/core/lib/Drupal/Core/Config/Entity/ConfigEntityBase.php
index c8b9eda..9d69e52 100644
--- a/core/lib/Drupal/Core/Config/Entity/ConfigEntityBase.php
+++ b/core/lib/Drupal/Core/Config/Entity/ConfigEntityBase.php
@@ -7,6 +7,7 @@
 
 namespace Drupal\Core\Config\Entity;
 
+use Drupal\Component\Uuid\Uuid;
 use Drupal\Core\Entity\Entity;
 use Drupal\Core\Entity\EntityStorageControllerInterface;
 use Drupal\Core\Config\ConfigDuplicateUUIDException;
@@ -188,4 +189,13 @@ public function preSave(EntityStorageControllerInterface $storage_controller) {
     }
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function setUuid() {
+    $uuid = new Uuid();
+    $this->uuid = $uuid->generate();
+    return $this->uuid;
+  }
+
 }
diff --git a/core/lib/Drupal/Core/Config/Entity/ConfigEntityInterface.php b/core/lib/Drupal/Core/Config/Entity/ConfigEntityInterface.php
index 14d3f18..b9f9d9a 100644
--- a/core/lib/Drupal/Core/Config/Entity/ConfigEntityInterface.php
+++ b/core/lib/Drupal/Core/Config/Entity/ConfigEntityInterface.php
@@ -15,6 +15,17 @@
 interface ConfigEntityInterface extends EntityInterface {
 
   /**
+   * Sets the entity UUID (Universally Unique Identifier).
+   *
+   * The UUID is guaranteed to be unique and can be used to identify an entity
+   * across multiple systems.
+   *
+   * @return string
+   *   The UUID of the entity, or NULL if the entity does not have one.
+   */
+  public function setUuid();
+
+  /**
    * Returns the original ID.
    *
    * @return string|null
diff --git a/core/lib/Drupal/Core/Config/Entity/ConfigStorageController.php b/core/lib/Drupal/Core/Config/Entity/ConfigStorageController.php
index b86e1f0..d17cfbe 100644
--- a/core/lib/Drupal/Core/Config/Entity/ConfigStorageController.php
+++ b/core/lib/Drupal/Core/Config/Entity/ConfigStorageController.php
@@ -7,7 +7,6 @@
 
 namespace Drupal\Core\Config\Entity;
 
-use Drupal\Component\Uuid\Uuid;
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Entity\EntityMalformedException;
 use Drupal\Core\Entity\EntityStorageControllerBase;
@@ -144,7 +143,7 @@ public function load(array $ids = NULL) {
       // Remove any invalid ids from the array.
       $passed_ids = array_intersect_key($passed_ids, $entities);
       foreach ($entities as $entity) {
-        $passed_ids[$entity->{$this->idKey}] = $entity;
+        $passed_ids[$entity->id()] = $entity;
       }
       $entities = $passed_ids;
     }
@@ -317,9 +316,9 @@ public function create(array $values) {
     $entity->enforceIsNew();
 
     // Assign a new UUID if there is none yet.
-    if (!isset($entity->{$this->uuidKey})) {
-      $uuid = new Uuid();
-      $entity->{$this->uuidKey} = $uuid->generate();
+    $uuid = $entity->Uuid();
+    if (empty($uuid)) {
+      $entity->setUuid();
     }
     $entity->postCreate($this);
 
diff --git a/core/lib/Drupal/Core/Entity/EntityStorageControllerBase.php b/core/lib/Drupal/Core/Entity/EntityStorageControllerBase.php
index 5dbf55b..76097b1 100644
--- a/core/lib/Drupal/Core/Entity/EntityStorageControllerBase.php
+++ b/core/lib/Drupal/Core/Entity/EntityStorageControllerBase.php
@@ -70,6 +70,13 @@
   protected $uuidKey;
 
   /**
+   * {@inheritdoc}
+   */
+  public function id() {
+    return $this->idKey;
+  }
+
+  /**
    * Constructs an EntityStorageControllerBase instance.
    *
    * @param string $entity_type
diff --git a/core/lib/Drupal/Core/Entity/EntityStorageControllerInterface.php b/core/lib/Drupal/Core/Entity/EntityStorageControllerInterface.php
index 5ae3076..9f4bfa1 100644
--- a/core/lib/Drupal/Core/Entity/EntityStorageControllerInterface.php
+++ b/core/lib/Drupal/Core/Entity/EntityStorageControllerInterface.php
@@ -162,4 +162,12 @@ public function invokeFieldMethod($method, EntityInterface $entity);
    */
   public function invokeFieldItemPrepareCache(EntityInterface $entity);
 
+  /**
+   * Returns the entity identifier (the entity's machine name or numeric ID).
+   *
+   * @return
+   *   The identifier of the entity, or NULL if the entity does not yet have
+   *   an identifier.
+   */
+  public function id();
 }
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 055b014..771bb10 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Entity/EntityCrudHookTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Entity/EntityCrudHookTest.php
@@ -441,7 +441,7 @@ public function testTaxonomyVocabularyHooks() {
     ));
 
     $_SESSION['entity_crud_hook_test'] = array();
-    $vocabulary->name = 'New name';
+    $vocabulary->setName('New name');
     $vocabulary->save();
 
     $this->assertHookMessageOrder(array(
diff --git a/core/modules/system/lib/Drupal/system/Tests/Upgrade/LanguageUpgradePathTest.php b/core/modules/system/lib/Drupal/system/Tests/Upgrade/LanguageUpgradePathTest.php
index 506ec4c..a79ac57 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Upgrade/LanguageUpgradePathTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Upgrade/LanguageUpgradePathTest.php
@@ -95,7 +95,7 @@ public function testLanguageUpgrade() {
     // A langcode property was added to vocabularies and terms. Check that
     // existing vocabularies and terms got assigned the site default language.
     $vocabulary = taxonomy_vocabulary_load('tags');
-    $this->assertEqual($vocabulary->langcode, 'ca');
+    $this->assertEqual($vocabulary->langcode(), 'ca');
     $term = db_query('SELECT * FROM {taxonomy_term_data} WHERE tid = :tid', array(':tid' => 1))->fetchObject();
     $this->assertEqual($term->langcode, 'ca');
 
diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/Core/Entity/Vocabulary.php b/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/Core/Entity/Vocabulary.php
index 9d55435..6bb73d9 100644
--- a/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/Core/Entity/Vocabulary.php
+++ b/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/Core/Entity/Vocabulary.php
@@ -43,28 +43,28 @@ class Vocabulary extends ConfigEntityBase implements VocabularyInterface {
    *
    * @var string
    */
-  public $vid;
+  protected $vid;
 
   /**
    * The vocabulary UUID.
    *
    * @var string
    */
-  public $uuid;
+  protected $uuid;
 
   /**
    * Name of the vocabulary.
    *
    * @var string
    */
-  public $name;
+  protected $name;
 
   /**
    * Description of the vocabulary.
    *
    * @var string
    */
-  public $description;
+  protected $description;
 
   /**
    * The type of hierarchy allowed within the vocabulary.
@@ -76,14 +76,14 @@ class Vocabulary extends ConfigEntityBase implements VocabularyInterface {
    *
    * @var integer
    */
-  public $hierarchy = TAXONOMY_HIERARCHY_DISABLED;
+  protected $hierarchy = TAXONOMY_HIERARCHY_DISABLED;
 
   /**
    * The weight of this vocabulary in relation to other vocabularies.
    *
    * @var integer
    */
-  public $weight = 0;
+  protected $weight = 0;
 
   /**
    * {@inheritdoc}
@@ -95,6 +95,67 @@ public function id() {
   /**
    * {@inheritdoc}
    */
+  public function setName($name) {
+    $this->name = $name;
+    return $this->name;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setWeight($weight = 0) {
+    $this->weight = $weight;
+    return $this->weight;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getWeight() {
+    return $this->weight;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setHierarchy($hierarchy = TAXONOMY_HIERARCHY_DISABLED) {
+    $this->hierarchy = $hierarchy;
+    return $this->hierarchy;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getHierarchy() {
+    return $this->hierarchy;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setDescription($description) {
+    $this->description = $description;
+    return $this->description;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getDescription() {
+    return $this->description;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setNewVid($machineName) {
+    $this->vid = $machineName;
+    return $this->vid;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
   public function uri() {
     return array(
       'path' => 'admin/structure/taxonomy/manage/' . $this->id(),
@@ -179,4 +240,22 @@ public static function postDelete(EntityStorageControllerInterface $storage_cont
     $storage_controller->resetCache(array_keys($vocabularies));
   }
 
+  /**
+   * Overrides \Drupal\Core\Config\Entity\ConfigEntityBase::getExportProperties();
+   */
+  public function getExportProperties() {
+    $properties = parent::getExportProperties();
+    $names = array(
+      'description',
+      'weight',
+      'hierarchy',
+      'name',
+      'vid',
+      'uuid',
+    );
+    foreach ($names as $name) {
+      $properties[$name] = $this->get($name);
+    }
+    return $properties;
+  }
 }
diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/TermFormController.php b/core/modules/taxonomy/lib/Drupal/taxonomy/TermFormController.php
index 832a0cf..354d6b5 100644
--- a/core/modules/taxonomy/lib/Drupal/taxonomy/TermFormController.php
+++ b/core/modules/taxonomy/lib/Drupal/taxonomy/TermFormController.php
@@ -54,7 +54,7 @@ public function form(array $form, array &$form_state) {
     $form['relations'] = array(
       '#type' => 'details',
       '#title' => t('Relations'),
-      '#collapsed' => ($vocabulary->hierarchy != TAXONOMY_HIERARCHY_MULTIPLE),
+      '#collapsed' => ($vocabulary->getHierarchy() != TAXONOMY_HIERARCHY_MULTIPLE),
       '#weight' => 10,
     );
 
diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/EfqTest.php b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/EfqTest.php
index bc219ee..5675d15 100644
--- a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/EfqTest.php
+++ b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/EfqTest.php
@@ -61,7 +61,7 @@ function testTaxonomyEfq() {
       ->condition('vid', $vocabulary2->id())
       ->execute();
     sort($result);
-    $this->assertEqual(array_keys($terms2), $result, format_string('Taxonomy terms from the %name vocabulary were retrieved by entity query.', array('%name' => $vocabulary2->name)));
+    $this->assertEqual(array_keys($terms2), $result, format_string('Taxonomy terms from the %name vocabulary were retrieved by entity query.', array('%name' => $vocabulary2->label())));
     $tid = reset($result);
     $ids = (object) array(
       'entity_type' => 'taxonomy_term',
diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermFieldTest.php b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermFieldTest.php
index e893001..55609e2 100644
--- a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermFieldTest.php
+++ b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermFieldTest.php
@@ -155,7 +155,7 @@ function testTaxonomyTermFieldChangeMachineName() {
     $this->field->save();
     // Change the machine name.
     $new_name = drupal_strtolower($this->randomName());
-    $this->vocabulary->vid = $new_name;
+    $this->vocabulary->setNewVid($new_name);
     $this->vocabulary->save();
 
     // Check that the field instance is still attached to the vocabulary.
diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermTest.php b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermTest.php
index caf5397..34123b1 100644
--- a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermTest.php
+++ b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermTest.php
@@ -71,7 +71,7 @@ function testTaxonomyTermHierarchy() {
 
     // Check that hierarchy is flat.
     $vocabulary = taxonomy_vocabulary_load($this->vocabulary->id());
-    $this->assertEqual(0, $vocabulary->hierarchy, 'Vocabulary is flat.');
+    $this->assertEqual(0, $vocabulary->getHierarchy(), 'Vocabulary is flat.');
 
     // Edit $term2, setting $term1 as parent.
     $edit = array();
diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TokenReplaceTest.php b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TokenReplaceTest.php
index eec5921..c50229e 100644
--- a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TokenReplaceTest.php
+++ b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TokenReplaceTest.php
@@ -91,7 +91,7 @@ function testTaxonomyTokenReplacement() {
     $tests['[term:url]'] = url('taxonomy/term/' . $term1->id(), array('absolute' => TRUE));
     $tests['[term:node-count]'] = 0;
     $tests['[term:parent:name]'] = '[term:parent:name]';
-    $tests['[term:vocabulary:name]'] = check_plain($this->vocabulary->name);
+    $tests['[term:vocabulary:name]'] = check_plain($this->vocabulary->label());
 
     foreach ($tests as $input => $expected) {
       $output = $token_service->replace($input, array('term' => $term1), array('langcode' => $language_interface->langcode));
@@ -108,7 +108,7 @@ function testTaxonomyTokenReplacement() {
     $tests['[term:parent:name]'] = check_plain($term1->name->value);
     $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);
+    $tests['[term:vocabulary:name]'] = check_plain($this->vocabulary->label());
 
     // Test to make sure that we generated something for each token.
     $this->assertFalse(in_array(0, array_map('strlen', $tests)), 'No empty tokens generated.');
@@ -122,7 +122,7 @@ function testTaxonomyTokenReplacement() {
     $tests['[term:name]'] = $term2->name->value;
     $tests['[term:description]'] = $term2->description->value;
     $tests['[term:parent:name]'] = $term1->name->value;
-    $tests['[term:vocabulary:name]'] = $this->vocabulary->name;
+    $tests['[term:vocabulary:name]'] = $this->vocabulary->label();
 
     foreach ($tests as $input => $expected) {
       $output = $token_service->replace($input, array('term' => $term2), array('langcode' => $language_interface->langcode, 'sanitize' => FALSE));
@@ -132,8 +132,8 @@ function testTaxonomyTokenReplacement() {
     // Generate and test sanitized tokens.
     $tests = array();
     $tests['[vocabulary:vid]'] = $this->vocabulary->id();
-    $tests['[vocabulary:name]'] = check_plain($this->vocabulary->name);
-    $tests['[vocabulary:description]'] = filter_xss($this->vocabulary->description);
+    $tests['[vocabulary:name]'] = check_plain($this->vocabulary->label());
+    $tests['[vocabulary:description]'] = filter_xss($this->vocabulary->getDescription());
     $tests['[vocabulary:node-count]'] = 1;
     $tests['[vocabulary:term-count]'] = 2;
 
@@ -146,8 +146,8 @@ function testTaxonomyTokenReplacement() {
     }
 
     // Generate and test unsanitized tokens.
-    $tests['[vocabulary:name]'] = $this->vocabulary->name;
-    $tests['[vocabulary:description]'] = $this->vocabulary->description;
+    $tests['[vocabulary:name]'] = $this->vocabulary->label();
+    $tests['[vocabulary:description]'] = $this->vocabulary->getDescription();
 
     foreach ($tests as $input => $expected) {
       $output = $token_service->replace($input, array('vocabulary' => $this->vocabulary), array('langcode' => $language_interface->langcode, 'sanitize' => FALSE));
diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/VocabularyTest.php b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/VocabularyTest.php
index efc49c8..5fdbb27 100644
--- a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/VocabularyTest.php
+++ b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/VocabularyTest.php
@@ -88,8 +88,8 @@ function testTaxonomyAdminChangingWeights() {
     $vocabularies = taxonomy_vocabulary_load_multiple();
     $edit = array();
     foreach ($vocabularies as $key => $vocabulary) {
-      $weight = -$vocabulary->weight;
-      $vocabularies[$key]->weight = $weight;
+      $weight = -$vocabulary->getWeight();
+      $vocabularies[$key]->setWeight($weight);
       $edit['vocabularies[' . $key . '][weight]'] = $weight;
     }
     // Saving the new weights via the interface.
@@ -102,7 +102,7 @@ function testTaxonomyAdminChangingWeights() {
 
     // Check that the weights are saved in the database correctly.
     foreach ($vocabularies as $key => $vocabulary) {
-      $this->assertEqual($new_vocabularies[$key]->weight, $vocabularies[$key]->weight, 'The vocabulary weight was changed.');
+      $this->assertEqual($new_vocabularies[$key]->getWeight(), $vocabularies[$key]->getWeight(), 'The vocabulary weight was changed.');
     }
   }
 
@@ -143,12 +143,12 @@ function testTaxonomyAdminDeletingVocabulary() {
     // Delete the vocabulary.
     $edit = array();
     $this->drupalPost('admin/structure/taxonomy/manage/' . $vocabulary->id() . '/edit', $edit, t('Delete'));
-    $this->assertRaw(t('Are you sure you want to delete the vocabulary %name?', array('%name' => $vocabulary->name)), '[confirm deletion] Asks for confirmation.');
+    $this->assertRaw(t('Are you sure you want to delete the vocabulary %name?', array('%name' => $vocabulary->label())), '[confirm deletion] Asks for confirmation.');
     $this->assertText(t('Deleting a vocabulary will delete all the terms in it. This action cannot be undone.'), '[confirm deletion] Inform that all terms will be deleted.');
 
     // Confirm deletion.
     $this->drupalPost(NULL, NULL, t('Delete'));
-    $this->assertRaw(t('Deleted vocabulary %name.', array('%name' => $vocabulary->name)), 'Vocabulary deleted.');
+    $this->assertRaw(t('Deleted vocabulary %name.', array('%name' => $vocabulary->label())), 'Vocabulary deleted.');
     $this->container->get('plugin.manager.entity')->getStorageController('taxonomy_vocabulary')->resetCache();
     $this->assertFalse(taxonomy_vocabulary_load($vid), t('Vocabulary not found.'));
   }
diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/VocabularyUnitTest.php b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/VocabularyUnitTest.php
index fec21c3..5913119 100644
--- a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/VocabularyUnitTest.php
+++ b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/VocabularyUnitTest.php
@@ -75,18 +75,18 @@ function testTaxonomyVocabularyDeleteWithTerms() {
   function testTaxonomyVocabularyLoadStaticReset() {
     $original_vocabulary = taxonomy_vocabulary_load($this->vocabulary->id());
     $this->assertTrue(is_object($original_vocabulary), 'Vocabulary loaded successfully.');
-    $this->assertEqual($this->vocabulary->name, $original_vocabulary->name, 'Vocabulary loaded successfully.');
+    $this->assertEqual($this->vocabulary->label(), $original_vocabulary->label(), 'Vocabulary loaded successfully.');
 
     // Change the name and description.
     $vocabulary = $original_vocabulary;
-    $vocabulary->name = $this->randomName();
-    $vocabulary->description = $this->randomName();
+    $vocabulary->setName($this->randomName());
+    $vocabulary->setDescription($this->randomName());
     $vocabulary->save();
 
     // Load the vocabulary.
     $new_vocabulary = taxonomy_vocabulary_load($original_vocabulary->id());
-    $this->assertEqual($new_vocabulary->name, $vocabulary->name);
-    $this->assertEqual($new_vocabulary->name, $vocabulary->name);
+    $this->assertEqual($new_vocabulary->label(), $vocabulary->label());
+    $this->assertEqual($new_vocabulary->label(), $vocabulary->label());
 
     // Delete the vocabulary.
     $this->vocabulary->delete();
@@ -106,13 +106,13 @@ function testTaxonomyVocabularyLoadMultiple() {
 
     // Create some vocabularies and assign weights.
     $vocabulary1 = $this->createVocabulary();
-    $vocabulary1->weight = 0;
+    $vocabulary1->setWeight(0);
     $vocabulary1->save();
     $vocabulary2 = $this->createVocabulary();
-    $vocabulary2->weight = 1;
+    $vocabulary2->setWeight(1);
     $vocabulary2->save();
     $vocabulary3 = $this->createVocabulary();
-    $vocabulary3->weight = 2;
+    $vocabulary3->setWeight(2);
     $vocabulary3->save();
 
     // Fetch the names for all vocabularies, confirm that they are keyed by
@@ -138,12 +138,12 @@ function testTaxonomyVocabularyLoadMultiple() {
     // Test loading vocabularies by their properties.
     $controller = $this->container->get('plugin.manager.entity')->getStorageController('taxonomy_vocabulary');
     // Fetch vocabulary 1 by name.
-    $vocabulary = current($controller->loadByProperties(array('name' => $vocabulary1->name)));
+    $vocabulary = current($controller->loadByProperties(array('name' => $vocabulary1->label())));
     $this->assertEqual($vocabulary->id(), $vocabulary1->id(), 'Vocabulary loaded successfully by name.');
 
     // Fetch vocabulary 2 by name and ID.
     $vocabulary = current($controller->loadByProperties(array(
-      'name' => $vocabulary2->name,
+      'name' => $vocabulary2->label(),
       'vid' => $vocabulary2->id(),
     )));
     $this->assertEqual($vocabulary->id(), $vocabulary2->id(), 'Vocabulary loaded successfully by name and ID.');
@@ -167,7 +167,7 @@ function testTaxonomyVocabularyChangeMachineName() {
     // Change the machine name.
     $old_name = $this->vocabulary->id();
     $new_name = drupal_strtolower($this->randomName());
-    $this->vocabulary->vid = $new_name;
+    $this->vocabulary->setNewVid($new_name);
     $this->vocabulary->save();
 
     // Check that entity bundles are properly updated.
diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/VocabularyFormController.php b/core/modules/taxonomy/lib/Drupal/taxonomy/VocabularyFormController.php
index db8c145..4b791f9 100644
--- a/core/modules/taxonomy/lib/Drupal/taxonomy/VocabularyFormController.php
+++ b/core/modules/taxonomy/lib/Drupal/taxonomy/VocabularyFormController.php
@@ -28,7 +28,7 @@ public function form(array $form, array &$form_state) {
     $form['name'] = array(
       '#type' => 'textfield',
       '#title' => t('Name'),
-      '#default_value' => $vocabulary->name,
+      '#default_value' => $vocabulary->label(),
       '#maxlength' => 255,
       '#required' => TRUE,
     );
@@ -44,7 +44,7 @@ public function form(array $form, array &$form_state) {
     $form['description'] = array(
       '#type' => 'textfield',
       '#title' => t('Description'),
-      '#default_value' => $vocabulary->description,
+      '#default_value' => $vocabulary->getDescription(),
     );
 
     // $form['langcode'] is not wrapped in an if (module_exists('language'))
@@ -55,7 +55,7 @@ public function form(array $form, array &$form_state) {
       '#type' => 'language_select',
       '#title' => t('Vocabulary language'),
       '#languages' => Language::STATE_ALL,
-      '#default_value' => $vocabulary->langcode,
+      '#default_value' => $vocabulary->language(),
     );
     if (module_exists('language')) {
       $form['default_terms_language'] = array(
@@ -148,18 +148,18 @@ public function save(array $form, array &$form_state) {
     $vocabulary = $this->entity;
 
     // Prevent leading and trailing spaces in vocabulary names.
-    $vocabulary->name = trim($vocabulary->name);
+    $vocabulary->setName(trim($vocabulary->label()));
 
     switch ($vocabulary->save()) {
       case SAVED_NEW:
-        drupal_set_message(t('Created new vocabulary %name.', array('%name' => $vocabulary->name)));
-        watchdog('taxonomy', 'Created new vocabulary %name.', array('%name' => $vocabulary->name), WATCHDOG_NOTICE, l(t('edit'), 'admin/structure/taxonomy/manage/' . $vocabulary->id() . '/edit'));
+        drupal_set_message(t('Created new vocabulary %name.', array('%name' => $vocabulary->label())));
+        watchdog('taxonomy', 'Created new vocabulary %name.', array('%name' => $vocabulary->label()), WATCHDOG_NOTICE, l(t('edit'), 'admin/structure/taxonomy/manage/' . $vocabulary->id() . '/edit'));
         $form_state['redirect'] = 'admin/structure/taxonomy/manage/' . $vocabulary->id();
         break;
 
       case SAVED_UPDATED:
-        drupal_set_message(t('Updated vocabulary %name.', array('%name' => $vocabulary->name)));
-        watchdog('taxonomy', 'Updated vocabulary %name.', array('%name' => $vocabulary->name), WATCHDOG_NOTICE, l(t('edit'), 'admin/structure/taxonomy/manage/' . $vocabulary->id() . '/edit'));
+        drupal_set_message(t('Updated vocabulary %name.', array('%name' => $vocabulary->label())));
+        watchdog('taxonomy', 'Updated vocabulary %name.', array('%name' => $vocabulary->label()), WATCHDOG_NOTICE, l(t('edit'), 'admin/structure/taxonomy/manage/' . $vocabulary->id() . '/edit'));
         $form_state['redirect'] = 'admin/structure/taxonomy';
         break;
     }
diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/VocabularyInterface.php b/core/modules/taxonomy/lib/Drupal/taxonomy/VocabularyInterface.php
index 51ec34f..c776906 100644
--- a/core/modules/taxonomy/lib/Drupal/taxonomy/VocabularyInterface.php
+++ b/core/modules/taxonomy/lib/Drupal/taxonomy/VocabularyInterface.php
@@ -14,4 +14,87 @@
  */
 interface VocabularyInterface extends ConfigEntityInterface {
 
+  /**
+   * Sets the vocabulary name.
+   *
+   * @param string name
+   *   The vocabulary name.
+   *
+   * @return \Drupal\taxonomy\VocabularyInterface
+   *   The called vocabulary entity.
+   */
+  public function setName($name);
+
+  /**
+   * Sets the vocabulary weight.
+   *
+   * @param integer $weight
+   *   The weight of vocabulary.
+   *
+   * @return \Drupal\taxonomy\VocabularyInterface
+   *   The called vocabulary entity.
+   */
+  public function setWeight($weight);
+
+  /**
+   * Returns the vocabulary weight.
+   *
+   * @return integer
+   *   The vocabulary weight.
+   */
+  public function getWeight();
+
+  /**
+   * Sets the vocabulary hierarchy.
+   *
+   * @param integer $hierarchy
+   *   The hierarchy type of vocabulary.
+   *   Possible values:
+   *    - TAXONOMY_HIERARCHY_DISABLED: No parents.
+   *    - TAXONOMY_HIERARCHY_SINGLE: Single parent.
+   *    - TAXONOMY_HIERARCHY_MULTIPLE: Multiple parents.
+   *
+   * @return \Drupal\taxonomy\VocabularyInterface
+   *   The called vocabulary entity.
+   */
+  public function setHierarchy($hierarchy);
+
+  /**
+   * Returns the vocabulary hierarchy.
+   *
+   * @return integer
+   *   The vocabulary hierarchy.
+   */
+  public function getHierarchy();
+
+  /**
+   * Sets the vocabulary description.
+   *
+   * @param string description
+   *   The vocabulary description.
+   *
+   * @return \Drupal\taxonomy\VocabularyInterface
+   *   The called vocabulary entity.
+   */
+  public function setDescription($description);
+
+  /**
+   * Returns the vocabulary description.
+   *
+   * @return string
+   *   The vocabulary description.
+   */
+  public function getDescription();
+
+  /**
+   * Sets the vocabulary vid.
+   *
+   * @param string $machineName
+   *   The vocabulary machine name.
+   *
+   * @return \Drupal\taxonomy\VocabularyInterface
+   *   The called vocabulary entity.
+   */
+  public function setNewVid($machineName);
+
 }
diff --git a/core/modules/taxonomy/taxonomy.admin.inc b/core/modules/taxonomy/taxonomy.admin.inc
index e8bd8e0..99c0a15 100644
--- a/core/modules/taxonomy/taxonomy.admin.inc
+++ b/core/modules/taxonomy/taxonomy.admin.inc
@@ -165,7 +165,7 @@ function taxonomy_overview_terms($form, &$form_state, Vocabulary $vocabulary) {
       '#title' => $term->label(),
       '#href' => "taxonomy/term/" . $term->id(),
     );
-    if ($vocabulary->hierarchy != TAXONOMY_HIERARCHY_MULTIPLE && count($tree) > 1) {
+    if ($vocabulary->getHierarchy() != TAXONOMY_HIERARCHY_MULTIPLE && count($tree) > 1) {
       $parent_fields = TRUE;
       $form['terms'][$key]['term']['tid'] = array(
         '#type' => 'hidden',
@@ -267,7 +267,7 @@ function taxonomy_overview_terms($form, &$form_state, Vocabulary $vocabulary) {
   }
   $form['terms']['#tabledrag'][] = array('order', 'sibling', 'term-weight');
 
-  if ($vocabulary->hierarchy != TAXONOMY_HIERARCHY_MULTIPLE && count($tree) > 1) {
+  if ($vocabulary->getHierarchy() != TAXONOMY_HIERARCHY_MULTIPLE && count($tree) > 1) {
     $form['actions'] = array('#type' => 'actions', '#tree' => FALSE);
     $form['actions']['submit'] = array(
       '#type' => 'submit',
@@ -383,8 +383,8 @@ function taxonomy_overview_terms_submit($form, &$form_state) {
   }
 
   // Update the vocabulary hierarchy to flat or single hierarchy.
-  if ($vocabulary->hierarchy != $hierarchy) {
-    $vocabulary->hierarchy = $hierarchy;
+  if ($vocabulary->getHierarchy() != $hierarchy) {
+    $vocabulary->setHierarchy($hierarchy);
     $vocabulary->save();
   }
   drupal_set_message(t('The configuration options have been saved.'));
@@ -457,7 +457,7 @@ function taxonomy_vocabulary_confirm_delete($form, &$form_state, $vid) {
   $form_state['taxonomy']['vocabulary'] = $vocabulary;
   $form['#id'] = 'taxonomy_vocabulary_confirm_delete';
   $form['type'] = array('#type' => 'value', '#value' => 'vocabulary');
-  $form['name'] = array('#type' => 'value', '#value' => $vocabulary->name);
+  $form['name'] = array('#type' => 'value', '#value' => $vocabulary->label());
   $form['#submit'] = array('taxonomy_vocabulary_confirm_delete_submit');
   return confirm_form($form,
     t('Are you sure you want to delete the vocabulary %title?',
@@ -493,7 +493,7 @@ function taxonomy_vocabulary_confirm_reset_alphabetical($form, &$form_state, $vi
 
   $form['type'] = array('#type' => 'value', '#value' => 'vocabulary');
   $form['vid'] = array('#type' => 'value', '#value' => $vid);
-  $form['name'] = array('#type' => 'value', '#value' => $vocabulary->name);
+  $form['name'] = array('#type' => 'value', '#value' => $vocabulary->label());
   $form['reset_alphabetical'] = array('#type' => 'value', '#value' => TRUE);
   return confirm_form($form,
     t('Are you sure you want to reset the vocabulary %title to alphabetical order?',
diff --git a/core/modules/taxonomy/taxonomy.module b/core/modules/taxonomy/taxonomy.module
index c21b665..6fbd0c2 100644
--- a/core/modules/taxonomy/taxonomy.module
+++ b/core/modules/taxonomy/taxonomy.module
@@ -71,13 +71,13 @@ function taxonomy_help($path, $arg) {
       return $output;
     case 'admin/structure/taxonomy/manage/%':
       $vocabulary = taxonomy_vocabulary_load($arg[4]);
-      switch ($vocabulary->hierarchy) {
+      switch ($vocabulary->getHierarchy()) {
         case TAXONOMY_HIERARCHY_DISABLED:
-          return '<p>' . t('You can reorganize the terms in %capital_name using their drag-and-drop handles, and group terms under a parent term by sliding them under and to the right of the parent.', array('%capital_name' => drupal_ucfirst($vocabulary->name), '%name' => $vocabulary->name)) . '</p>';
+          return '<p>' . t('You can reorganize the terms in %capital_name using their drag-and-drop handles, and group terms under a parent term by sliding them under and to the right of the parent.', array('%capital_name' => drupal_ucfirst($vocabulary->label()), '%name' => $vocabulary->label())) . '</p>';
         case TAXONOMY_HIERARCHY_SINGLE:
-          return '<p>' . t('%capital_name contains terms grouped under parent terms. You can reorganize the terms in %capital_name using their drag-and-drop handles.', array('%capital_name' => drupal_ucfirst($vocabulary->name), '%name' => $vocabulary->name)) . '</p>';
+          return '<p>' . t('%capital_name contains terms grouped under parent terms. You can reorganize the terms in %capital_name using their drag-and-drop handles.', array('%capital_name' => drupal_ucfirst($vocabulary->label()), '%name' => $vocabulary->label())) . '</p>';
         case TAXONOMY_HIERARCHY_MULTIPLE:
-          return '<p>' . t('%capital_name contains terms with multiple parents. Drag and drop of terms with multiple parents is not supported, but you can re-enable drag-and-drop support by editing each term to include only a single parent.', array('%capital_name' => drupal_ucfirst($vocabulary->name))) . '</p>';
+          return '<p>' . t('%capital_name contains terms with multiple parents. Drag and drop of terms with multiple parents is not supported, but you can re-enable drag-and-drop support by editing each term to include only a single parent.', array('%capital_name' => drupal_ucfirst($vocabulary->label()))) . '</p>';
       }
   }
 }
@@ -94,12 +94,12 @@ function taxonomy_permission() {
   foreach (taxonomy_vocabulary_load_multiple() as $vocabulary) {
     $permissions += array(
       'edit terms in ' . $vocabulary->id() => array(
-        'title' => t('Edit terms in %vocabulary', array('%vocabulary' => $vocabulary->name)),
+        'title' => t('Edit terms in %vocabulary', array('%vocabulary' => $vocabulary->label())),
       ),
     );
     $permissions += array(
        'delete terms in ' . $vocabulary->id() => array(
-         'title' => t('Delete terms from %vocabulary', array('%vocabulary' => $vocabulary->name)),
+         'title' => t('Delete terms from %vocabulary', array('%vocabulary' => $vocabulary->label())),
       ),
     );
   }
@@ -405,8 +405,8 @@ function taxonomy_check_vocabulary_hierarchy(Vocabulary $vocabulary, $changed_te
       $hierarchy = TAXONOMY_HIERARCHY_SINGLE;
     }
   }
-  if ($hierarchy != $vocabulary->hierarchy) {
-    $vocabulary->hierarchy = $hierarchy;
+  if ($hierarchy != $vocabulary->getHierarchy()) {
+    $vocabulary->setHierarchy($hierarchy);
     $vocabulary->save();
   }
 
@@ -1058,7 +1058,7 @@ function taxonomy_field_settings_form($field, $instance) {
   $vocabularies = taxonomy_vocabulary_load_multiple();
   $options = array();
   foreach ($vocabularies as $vocabulary) {
-    $options[$vocabulary->id()] = $vocabulary->name;
+    $options[$vocabulary->id()] = $vocabulary->label();
   }
   $form['allowed_values'] = array(
     '#tree' => TRUE,
diff --git a/core/modules/taxonomy/taxonomy.tokens.inc b/core/modules/taxonomy/taxonomy.tokens.inc
index f0818a6..999ae46 100644
--- a/core/modules/taxonomy/taxonomy.tokens.inc
+++ b/core/modules/taxonomy/taxonomy.tokens.inc
@@ -126,7 +126,7 @@ function taxonomy_tokens($type, $tokens, array $data = array(), array $options =
 
         case 'vocabulary':
           $vocabulary = taxonomy_vocabulary_load($term->bundle());
-          $replacements[$original] = check_plain($vocabulary->name);
+          $replacements[$original] = check_plain($vocabulary->label());
           break;
 
         case 'parent':
@@ -159,11 +159,11 @@ function taxonomy_tokens($type, $tokens, array $data = array(), array $options =
           break;
 
         case 'name':
-          $replacements[$original] = $sanitize ? check_plain($vocabulary->name) : $vocabulary->name;
+          $replacements[$original] = $sanitize ? check_plain($vocabulary->label()) : $vocabulary->label();
           break;
 
         case 'description':
-          $replacements[$original] = $sanitize ? filter_xss($vocabulary->description) : $vocabulary->description;
+          $replacements[$original] = $sanitize ? filter_xss($vocabulary->getDescription()) : $vocabulary->getDescription();
           break;
 
         case 'term-count':
