diff --git a/core/lib/Drupal/Core/Entity/ContentEntityInterface.php b/core/lib/Drupal/Core/Entity/ContentEntityInterface.php
index f07936c186d55aae7a1bb3dd1e4cde10d4f59249..d555ee5815f6f604f6f74011d5ee5bc0f6f9aacf 100644
--- a/core/lib/Drupal/Core/Entity/ContentEntityInterface.php
+++ b/core/lib/Drupal/Core/Entity/ContentEntityInterface.php
@@ -44,11 +44,11 @@ public function initTranslation($langcode);
   /**
    * Provides base field definitions for an entity type.
    *
-   * Implementations typically use the class \Drupal\Core\Field\FieldDefinition
+   * Implementations typically use the class \Drupal\Core\Field\BaseFieldDefinition
    * for creating the field definitions; for example a 'name' field could be
    * defined as the following:
    * @code
-   * $fields['name'] = FieldDefinition::create('string')
+   * $fields['name'] = BaseFieldDefinition::create('string')
    *   ->setLabel(t('Name'));
    * @endcode
    *
diff --git a/core/lib/Drupal/Core/Entity/EntityManager.php b/core/lib/Drupal/Core/Entity/EntityManager.php
index c827494e0db5c9cf38fa945087c6d5f0eb0bf0c8..7b56b682517cd4f70297fcf68ce05b3d85a69a99 100644
--- a/core/lib/Drupal/Core/Entity/EntityManager.php
+++ b/core/lib/Drupal/Core/Entity/EntityManager.php
@@ -11,7 +11,7 @@
 use Drupal\Component\Plugin\Exception\PluginNotFoundException;
 use Drupal\Component\Utility\String;
 use Drupal\Core\DependencyInjection\ClassResolverInterface;
-use Drupal\Core\Field\FieldDefinition;
+use Drupal\Core\Field\BaseFieldDefinition;
 use Drupal\Core\Cache\Cache;
 use Drupal\Core\Cache\CacheBackendInterface;
 use Drupal\Core\Extension\ModuleHandlerInterface;
@@ -76,7 +76,7 @@ class EntityManager extends DefaultPluginManager implements EntityManagerInterfa
    * Static cache of field storage definitions per entity type.
    *
    * Elements of the array:
-   *  - $entity_type_id: \Drupal\Core\Field\FieldDefinition[]
+   *  - $entity_type_id: \Drupal\Core\Field\BaseFieldDefinition[]
    *
    * @var array
    */
@@ -382,7 +382,7 @@ protected function buildBaseFieldDefinitions($entity_type_id) {
     foreach ($base_field_definitions as $definition) {
       // @todo Remove this check once FieldDefinitionInterface exposes a proper
       //  provider setter. See https://drupal.org/node/2225961.
-      if ($definition instanceof FieldDefinition) {
+      if ($definition instanceof BaseFieldDefinition) {
         $definition->setProvider($provider);
       }
     }
@@ -396,7 +396,7 @@ protected function buildBaseFieldDefinitions($entity_type_id) {
         foreach ($module_definitions as $field_name => $definition) {
           // @todo Remove this check once FieldDefinitionInterface exposes a
           //  proper provider setter. See https://drupal.org/node/2225961.
-          if ($definition instanceof FieldDefinition && $definition->getProvider() == NULL) {
+          if ($definition instanceof BaseFieldDefinition && $definition->getProvider() == NULL) {
             $definition->setProvider($module);
           }
           $base_field_definitions[$field_name] = $definition;
@@ -407,7 +407,7 @@ protected function buildBaseFieldDefinitions($entity_type_id) {
     // Automatically set the field name, target entity type and bundle
     // for non-configurable fields.
     foreach ($base_field_definitions as $field_name => $base_field_definition) {
-      if ($base_field_definition instanceof FieldDefinition) {
+      if ($base_field_definition instanceof BaseFieldDefinition) {
         $base_field_definition->setName($field_name);
         $base_field_definition->setTargetEntityTypeId($entity_type_id);
         $base_field_definition->setBundle(NULL);
@@ -481,7 +481,7 @@ protected function buildBundleFieldDefinitions($entity_type_id, $bundle, array $
     foreach ($bundle_field_definitions as $definition) {
       // @todo Remove this check once FieldDefinitionInterface exposes a proper
       //  provider setter. See https://drupal.org/node/2225961.
-      if ($definition instanceof FieldDefinition) {
+      if ($definition instanceof BaseFieldDefinition) {
         $definition->setProvider($provider);
       }
     }
@@ -495,7 +495,7 @@ protected function buildBundleFieldDefinitions($entity_type_id, $bundle, array $
         foreach ($module_definitions as $field_name => $definition) {
           // @todo Remove this check once FieldDefinitionInterface exposes a
           //  proper provider setter. See https://drupal.org/node/2225961.
-          if ($definition instanceof FieldDefinition) {
+          if ($definition instanceof BaseFieldDefinition) {
             $definition->setProvider($module);
           }
           $bundle_field_definitions[$field_name] = $definition;
@@ -506,7 +506,7 @@ protected function buildBundleFieldDefinitions($entity_type_id, $bundle, array $
     // Automatically set the field name, target entity type and bundle
     // for non-configurable fields.
     foreach ($bundle_field_definitions as $field_name => $field_definition) {
-      if ($field_definition instanceof FieldDefinition) {
+      if ($field_definition instanceof BaseFieldDefinition) {
         $field_definition->setName($field_name);
         $field_definition->setTargetEntityTypeId($entity_type_id);
         $field_definition->setBundle($bundle);
@@ -617,7 +617,7 @@ protected function buildFieldStorageDefinitions($entity_type_id) {
         foreach ($module_definitions as $field_name => $definition) {
           // @todo Remove this check once FieldDefinitionInterface exposes a
           //  proper provider setter. See https://drupal.org/node/2225961.
-          if ($definition instanceof FieldDefinition) {
+          if ($definition instanceof BaseFieldDefinition) {
             $definition->setProvider($module);
           }
           $field_definitions[$field_name] = $definition;
diff --git a/core/lib/Drupal/Core/Field/FieldDefinition.php b/core/lib/Drupal/Core/Field/BaseFieldDefinition.php
similarity index 99%
rename from core/lib/Drupal/Core/Field/FieldDefinition.php
rename to core/lib/Drupal/Core/Field/BaseFieldDefinition.php
index 1c3496ac2fe1320d821343f42f629da517426d28..755f2cafb0c3089e4d60cb0752deff36d0b2a4da 100644
--- a/core/lib/Drupal/Core/Field/FieldDefinition.php
+++ b/core/lib/Drupal/Core/Field/BaseFieldDefinition.php
@@ -2,7 +2,7 @@
 
 /**
  * @file
- * Contains \Drupal\Core\Field\FieldDefinition.
+ * Contains \Drupal\Core\Field\BaseFieldDefinition.
  */
 
 namespace Drupal\Core\Field;
@@ -15,7 +15,7 @@
 /**
  * A class for defining entity fields.
  */
-class FieldDefinition extends ListDataDefinition implements FieldDefinitionInterface, FieldStorageDefinitionInterface {
+class BaseFieldDefinition extends ListDataDefinition implements FieldDefinitionInterface, FieldStorageDefinitionInterface {
 
   /**
    * The field type.
diff --git a/core/lib/Drupal/Core/Field/FieldDefinitionInterface.php b/core/lib/Drupal/Core/Field/FieldDefinitionInterface.php
index cf6947b547f273af4f2f220d2106724a2da6dc5e..3de440eadf7003f7d4ee44362c43da931be3a7f7 100644
--- a/core/lib/Drupal/Core/Field/FieldDefinitionInterface.php
+++ b/core/lib/Drupal/Core/Field/FieldDefinitionInterface.php
@@ -39,7 +39,7 @@
  * However, entity base fields, such as $node->title, are not managed by
  * field.module and its "field_storage_config"/"field_instance_config"
  * configuration entities. Therefore, their definitions are provided by
- * different objects based on the class \Drupal\Core\Field\FieldDefinition,
+ * different objects based on the class \Drupal\Core\Field\BaseFieldDefinition,
  * which implements this interface as well.
  *
  * Field definitions may fully define a concrete data object (e.g.,
diff --git a/core/lib/Drupal/Core/Field/FieldItemInterface.php b/core/lib/Drupal/Core/Field/FieldItemInterface.php
index b3a92697ac2c6a9c71fe3a76f8e53b2de6dc0065..8577a04a288102bc6904b747b658c43df7d41ae6 100644
--- a/core/lib/Drupal/Core/Field/FieldItemInterface.php
+++ b/core/lib/Drupal/Core/Field/FieldItemInterface.php
@@ -32,7 +32,7 @@ interface FieldItemInterface extends ComplexDataInterface {
    *   An array of property definitions of contained properties, keyed by
    *   property name.
    *
-   * @see \Drupal\Core\Field\FieldDefinition
+   * @see \Drupal\Core\Field\BaseFieldDefinition
    */
   public static function propertyDefinitions(FieldStorageDefinitionInterface $field_definition);
 
@@ -46,7 +46,7 @@ public static function propertyDefinitions(FieldStorageDefinitionInterface $fiel
    * @return string|null
    *   The name of the value property, or NULL if there is none.
    *
-   * @see \Drupal\Core\Field\FieldDefinition
+   * @see \Drupal\Core\Field\BaseFieldDefinition
    */
   public static function mainPropertyName();
 
diff --git a/core/lib/Drupal/Core/Field/Plugin/DataType/Deriver/FieldItemDeriver.php b/core/lib/Drupal/Core/Field/Plugin/DataType/Deriver/FieldItemDeriver.php
index 19d44e424460ffb02d17d1ccb729d45d9915944a..ef15e33708a82cc32890765ed93e0aa860fc8dca 100644
--- a/core/lib/Drupal/Core/Field/Plugin/DataType/Deriver/FieldItemDeriver.php
+++ b/core/lib/Drupal/Core/Field/Plugin/DataType/Deriver/FieldItemDeriver.php
@@ -78,7 +78,7 @@ public function getDerivativeDefinition($derivative_id, $base_plugin_definition)
   public function getDerivativeDefinitions($base_plugin_definition) {
     foreach ($this->fieldTypePluginManager->getDefinitions() as $plugin_id => $definition) {
       $definition['definition_class'] = '\Drupal\Core\Field\TypedData\FieldItemDataDefinition';
-      $definition['list_definition_class'] = '\Drupal\Core\Field\FieldDefinition';
+      $definition['list_definition_class'] = '\Drupal\Core\Field\BaseFieldDefinition';
       $this->derivatives[$plugin_id] = $definition;
     }
     return $this->derivatives;
diff --git a/core/lib/Drupal/Core/Field/TypedData/FieldItemDataDefinition.php b/core/lib/Drupal/Core/Field/TypedData/FieldItemDataDefinition.php
index c18e9878a2cff8bc493d056a580474e557405191..7b85e8c7bcaac1e5822389179658ff11978746cc 100644
--- a/core/lib/Drupal/Core/Field/TypedData/FieldItemDataDefinition.php
+++ b/core/lib/Drupal/Core/Field/TypedData/FieldItemDataDefinition.php
@@ -7,7 +7,7 @@
 
 namespace Drupal\Core\Field\TypedData;
 
-use Drupal\Core\Field\FieldDefinition;
+use Drupal\Core\Field\BaseFieldDefinition;
 use Drupal\Core\TypedData\ComplexDataDefinitionInterface;
 use Drupal\Core\TypedData\DataDefinition;
 
@@ -38,7 +38,7 @@ public static function createFromDataType($data_type) {
       throw new \InvalidArgumentException('Data type must be in the form of "field_item:FIELD_TYPE".');
     }
 
-    $field_definition = FieldDefinition::create($parts[1]);
+    $field_definition = BaseFieldDefinition::create($parts[1]);
     return $field_definition->getItemDefinition();
   }
 
diff --git a/core/modules/aggregator/src/Entity/Feed.php b/core/modules/aggregator/src/Entity/Feed.php
index a01a055e832f337f9e4c27aab755d39b10ee3c09..6362d2d3499dd6cee942c6612cd8b30586a2f5dc 100644
--- a/core/modules/aggregator/src/Entity/Feed.php
+++ b/core/modules/aggregator/src/Entity/Feed.php
@@ -9,7 +9,7 @@
 
 use Drupal\Core\Entity\ContentEntityBase;
 use Drupal\Core\Entity\EntityTypeInterface;
-use Drupal\Core\Field\FieldDefinition;
+use Drupal\Core\Field\BaseFieldDefinition;
 use Symfony\Component\DependencyInjection\Container;
 use Drupal\Core\Entity\EntityStorageInterface;
 use Drupal\aggregator\FeedInterface;
@@ -127,18 +127,18 @@ public static function postDelete(EntityStorageInterface $storage, array $entiti
    * {@inheritdoc}
    */
   public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
-    $fields['fid'] = FieldDefinition::create('integer')
+    $fields['fid'] = BaseFieldDefinition::create('integer')
       ->setLabel(t('Feed ID'))
       ->setDescription(t('The ID of the aggregator feed.'))
       ->setReadOnly(TRUE)
       ->setSetting('unsigned', TRUE);
 
-    $fields['uuid'] = FieldDefinition::create('uuid')
+    $fields['uuid'] = BaseFieldDefinition::create('uuid')
       ->setLabel(t('UUID'))
       ->setDescription(t('The aggregator feed UUID.'))
       ->setReadOnly(TRUE);
 
-    $fields['title'] = FieldDefinition::create('string')
+    $fields['title'] = BaseFieldDefinition::create('string')
       ->setLabel(t('Title'))
       ->setDescription(t('The name of the feed (or the name of the website providing the feed).'))
       ->setRequired(TRUE)
@@ -148,11 +148,11 @@ public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
         'weight' => -5,
       ));
 
-    $fields['langcode'] = FieldDefinition::create('language')
+    $fields['langcode'] = BaseFieldDefinition::create('language')
       ->setLabel(t('Language code'))
       ->setDescription(t('The feed language code.'));
 
-    $fields['url'] = FieldDefinition::create('uri')
+    $fields['url'] = BaseFieldDefinition::create('uri')
       ->setLabel(t('URL'))
       ->setDescription(t('The fully-qualified URL of the feed.'))
       ->setRequired(TRUE)
@@ -165,7 +165,7 @@ public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
     $period = array_map(array(\Drupal::service('date.formatter'), 'formatInterval'), array_combine($intervals, $intervals));
     $period[AGGREGATOR_CLEAR_NEVER] = t('Never');
 
-    $fields['refresh'] = FieldDefinition::create('list_integer')
+    $fields['refresh'] = BaseFieldDefinition::create('list_integer')
       ->setLabel(t('Update interval'))
       ->setDescription(t('The length of time between feed updates. Requires a correctly configured <a href="@cron">cron maintenance task</a>.', array('@cron' => url('admin/reports/status'))))
       ->setSetting('unsigned', TRUE)
@@ -176,39 +176,39 @@ public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
         'weight' => -2,
       ));
 
-    $fields['checked'] = FieldDefinition::create('timestamp')
+    $fields['checked'] = BaseFieldDefinition::create('timestamp')
       ->setLabel(t('Checked'))
       ->setDescription(t('Last time feed was checked for new items, as Unix timestamp.'))
       ->setDefaultValue(0);
 
-    $fields['queued'] = FieldDefinition::create('timestamp')
+    $fields['queued'] = BaseFieldDefinition::create('timestamp')
       ->setLabel(t('Queued'))
       ->setDescription(t('Time when this feed was queued for refresh, 0 if not queued.'))
       ->setDefaultValue(0);
 
-    $fields['link'] = FieldDefinition::create('uri')
+    $fields['link'] = BaseFieldDefinition::create('uri')
       ->setLabel(t('Link'))
       ->setDescription(t('The link of the feed.'));
 
-    $fields['description'] = FieldDefinition::create('string_long')
+    $fields['description'] = BaseFieldDefinition::create('string_long')
       ->setLabel(t('Description'))
       ->setDescription(t("The parent website's description that comes from the !description element in the feed.", array('!description' => '<description>')));
 
-    $fields['image'] = FieldDefinition::create('uri')
+    $fields['image'] = BaseFieldDefinition::create('uri')
       ->setLabel(t('Image'))
       ->setDescription(t('An image representing the feed.'));
 
-    $fields['hash'] = FieldDefinition::create('string')
+    $fields['hash'] = BaseFieldDefinition::create('string')
       ->setLabel(t('Hash'))
       ->setDescription(t('Calculated hash of the feed data, used for validating cache.'));
 
-    $fields['etag'] = FieldDefinition::create('string')
+    $fields['etag'] = BaseFieldDefinition::create('string')
       ->setLabel(t('Etag'))
       ->setDescription(t('Entity tag HTTP response header, used for validating cache.'));
 
     // This is updated by the fetcher and not when the feed is saved, therefore
     // it's a timestamp and not a changed field.
-    $fields['modified'] = FieldDefinition::create('timestamp')
+    $fields['modified'] = BaseFieldDefinition::create('timestamp')
       ->setLabel(t('Modified'))
       ->setDescription(t('When the feed was last modified, as a Unix timestamp.'));
 
diff --git a/core/modules/aggregator/src/Entity/Item.php b/core/modules/aggregator/src/Entity/Item.php
index 84244b42d918ddecb2e9f8d9c697e1adef779862..5d6670cbd6cc0e8bbe23c6df709bddb50a030e26 100644
--- a/core/modules/aggregator/src/Entity/Item.php
+++ b/core/modules/aggregator/src/Entity/Item.php
@@ -12,7 +12,7 @@
 use Drupal\Core\Entity\EntityStorageInterface;
 use Drupal\aggregator\ItemInterface;
 use Drupal\Core\Entity\EntityTypeInterface;
-use Drupal\Core\Field\FieldDefinition;
+use Drupal\Core\Field\BaseFieldDefinition;
 use Drupal\Core\Url;
 
 /**
@@ -49,43 +49,43 @@ public function label() {
    * {@inheritdoc}
    */
   public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
-    $fields['iid'] = FieldDefinition::create('integer')
+    $fields['iid'] = BaseFieldDefinition::create('integer')
       ->setLabel(t('Aggregator item ID'))
       ->setDescription(t('The ID of the feed item.'))
       ->setReadOnly(TRUE)
       ->setSetting('unsigned', TRUE);
 
-    $fields['fid'] = FieldDefinition::create('entity_reference')
+    $fields['fid'] = BaseFieldDefinition::create('entity_reference')
       ->setLabel(t('Aggregator feed ID'))
       ->setDescription(t('The ID of the aggregator feed.'))
       ->setSetting('target_type', 'aggregator_feed');
 
-    $fields['title'] = FieldDefinition::create('string')
+    $fields['title'] = BaseFieldDefinition::create('string')
       ->setLabel(t('Title'))
       ->setDescription(t('The title of the feed item.'));
 
-    $fields['langcode'] = FieldDefinition::create('language')
+    $fields['langcode'] = BaseFieldDefinition::create('language')
       ->setLabel(t('Language code'))
       ->setDescription(t('The feed item language code.'));
 
-    $fields['link'] = FieldDefinition::create('uri')
+    $fields['link'] = BaseFieldDefinition::create('uri')
       ->setLabel(t('Link'))
       ->setDescription(t('The link of the feed item.'));
 
-    $fields['author'] = FieldDefinition::create('string')
+    $fields['author'] = BaseFieldDefinition::create('string')
       ->setLabel(t('Author'))
       ->setDescription(t('The author of the feed item.'));
 
-    $fields['description'] = FieldDefinition::create('string_long')
+    $fields['description'] = BaseFieldDefinition::create('string_long')
       ->setLabel(t('Description'))
       ->setDescription(t('The body of the feed item.'));
 
-    $fields['timestamp'] = FieldDefinition::create('created')
+    $fields['timestamp'] = BaseFieldDefinition::create('created')
       ->setLabel(t('Posted timestamp'))
       ->setDescription(t('Posted date of the feed item, as a Unix timestamp.'));
 
     // @todo Convert to a real UUID field in https://drupal.org/node/2149851.
-    $fields['guid'] = FieldDefinition::create('string_long')
+    $fields['guid'] = BaseFieldDefinition::create('string_long')
       ->setLabel(t('GUID'))
       ->setDescription(t('Unique identifier for the feed item.'));
 
diff --git a/core/modules/block_content/src/Entity/BlockContent.php b/core/modules/block_content/src/Entity/BlockContent.php
index c8256205cdbf986abb8c03db6dc063bd35651a9f..a7a991cc61a17a1aad2a8c1e405654b0619e2dc1 100644
--- a/core/modules/block_content/src/Entity/BlockContent.php
+++ b/core/modules/block_content/src/Entity/BlockContent.php
@@ -10,7 +10,7 @@
 use Drupal\Core\Entity\ContentEntityBase;
 use Drupal\Core\Entity\EntityStorageInterface;
 use Drupal\Core\Entity\EntityTypeInterface;
-use Drupal\Core\Field\FieldDefinition;
+use Drupal\Core\Field\BaseFieldDefinition;
 use Drupal\block_content\BlockContentInterface;
 
 /**
@@ -138,29 +138,29 @@ public function delete() {
    * {@inheritdoc}
    */
   public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
-    $fields['id'] = FieldDefinition::create('integer')
+    $fields['id'] = BaseFieldDefinition::create('integer')
       ->setLabel(t('Custom block ID'))
       ->setDescription(t('The custom block ID.'))
       ->setReadOnly(TRUE)
       ->setSetting('unsigned', TRUE);
 
-    $fields['uuid'] = FieldDefinition::create('uuid')
+    $fields['uuid'] = BaseFieldDefinition::create('uuid')
       ->setLabel(t('UUID'))
       ->setDescription(t('The custom block UUID.'))
       ->setReadOnly(TRUE);
 
-    $fields['revision_id'] = FieldDefinition::create('integer')
+    $fields['revision_id'] = BaseFieldDefinition::create('integer')
       ->setLabel(t('Revision ID'))
       ->setDescription(t('The revision ID.'))
       ->setReadOnly(TRUE)
       ->setSetting('unsigned', TRUE);
 
-    $fields['langcode'] = FieldDefinition::create('language')
+    $fields['langcode'] = BaseFieldDefinition::create('language')
       ->setLabel(t('Language code'))
       ->setDescription(t('The custom block language code.'))
       ->setRevisionable(TRUE);
 
-    $fields['info'] = FieldDefinition::create('string')
+    $fields['info'] = BaseFieldDefinition::create('string')
       ->setLabel(t('Block description'))
       ->setDescription(t('A brief description of your block.'))
       ->setRevisionable(TRUE)
@@ -172,17 +172,17 @@ public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
       ))
       ->setDisplayConfigurable('form', TRUE);
 
-    $fields['type'] = FieldDefinition::create('entity_reference')
+    $fields['type'] = BaseFieldDefinition::create('entity_reference')
       ->setLabel(t('Block type'))
       ->setDescription(t('The block type.'))
       ->setSetting('target_type', 'block_content_type');
 
-    $fields['revision_log'] = FieldDefinition::create('string_long')
+    $fields['revision_log'] = BaseFieldDefinition::create('string_long')
       ->setLabel(t('Revision log message'))
       ->setDescription(t('The log entry explaining the changes in this revision.'))
       ->setRevisionable(TRUE);
 
-    $fields['changed'] = FieldDefinition::create('changed')
+    $fields['changed'] = BaseFieldDefinition::create('changed')
       ->setLabel(t('Changed'))
       ->setDescription(t('The time that the custom block was last edited.'))
       ->setRevisionable(TRUE);
diff --git a/core/modules/comment/src/Entity/Comment.php b/core/modules/comment/src/Entity/Comment.php
index 3d3c42ff922b8276211e187d0d6572eae1da6311..1bb7ef0f254765a17d0798308b4eb3a2a66a6057 100644
--- a/core/modules/comment/src/Entity/Comment.php
+++ b/core/modules/comment/src/Entity/Comment.php
@@ -12,7 +12,7 @@
 use Drupal\comment\CommentInterface;
 use Drupal\Core\Entity\EntityStorageInterface;
 use Drupal\Core\Entity\EntityTypeInterface;
-use Drupal\Core\Field\FieldDefinition;
+use Drupal\Core\Field\BaseFieldDefinition;
 use Drupal\field\Entity\FieldStorageConfig;
 use Drupal\user\UserInterface;
 
@@ -198,32 +198,32 @@ public function permalink() {
    * {@inheritdoc}
    */
   public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
-    $fields['cid'] = FieldDefinition::create('integer')
+    $fields['cid'] = BaseFieldDefinition::create('integer')
       ->setLabel(t('Comment ID'))
       ->setDescription(t('The comment ID.'))
       ->setReadOnly(TRUE)
       ->setSetting('unsigned', TRUE);
 
-    $fields['uuid'] = FieldDefinition::create('uuid')
+    $fields['uuid'] = BaseFieldDefinition::create('uuid')
       ->setLabel(t('UUID'))
       ->setDescription(t('The comment UUID.'))
       ->setReadOnly(TRUE);
 
-    $fields['pid'] = FieldDefinition::create('entity_reference')
+    $fields['pid'] = BaseFieldDefinition::create('entity_reference')
       ->setLabel(t('Parent ID'))
       ->setDescription(t('The parent comment ID if this is a reply to a comment.'))
       ->setSetting('target_type', 'comment');
 
-    $fields['entity_id'] = FieldDefinition::create('entity_reference')
+    $fields['entity_id'] = BaseFieldDefinition::create('entity_reference')
       ->setLabel(t('Entity ID'))
       ->setDescription(t('The ID of the entity of which this comment is a reply.'))
       ->setRequired(TRUE);
 
-    $fields['langcode'] = FieldDefinition::create('language')
+    $fields['langcode'] = BaseFieldDefinition::create('language')
       ->setLabel(t('Language code'))
       ->setDescription(t('The comment language code.'));
 
-    $fields['subject'] = FieldDefinition::create('string')
+    $fields['subject'] = BaseFieldDefinition::create('string')
       ->setLabel(t('Subject'))
       ->setTranslatable(TRUE)
       ->setSetting('max_length', 64)
@@ -234,14 +234,14 @@ public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
       ))
       ->setDisplayConfigurable('form', TRUE);
 
-    $fields['uid'] = FieldDefinition::create('entity_reference')
+    $fields['uid'] = BaseFieldDefinition::create('entity_reference')
       ->setLabel(t('User ID'))
       ->setDescription(t('The user ID of the comment author.'))
       ->setTranslatable(TRUE)
       ->setSetting('target_type', 'user')
       ->setDefaultValue(0);
 
-    $fields['name'] = FieldDefinition::create('string')
+    $fields['name'] = BaseFieldDefinition::create('string')
       ->setLabel(t('Name'))
       ->setDescription(t("The comment author's name."))
       ->setTranslatable(TRUE)
@@ -249,12 +249,12 @@ public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
       ->setDefaultValue('')
       ->addConstraint('CommentName', array());
 
-    $fields['mail'] = FieldDefinition::create('email')
+    $fields['mail'] = BaseFieldDefinition::create('email')
       ->setLabel(t('Email'))
       ->setDescription(t("The comment author's email address."))
       ->setTranslatable(TRUE);
 
-    $fields['homepage'] = FieldDefinition::create('uri')
+    $fields['homepage'] = BaseFieldDefinition::create('uri')
       ->setLabel(t('Homepage'))
       ->setDescription(t("The comment author's home page address."))
       ->setTranslatable(TRUE)
@@ -262,44 +262,44 @@ public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
       // characters in our comment DB schema.
       ->setSetting('max_length', 255);
 
-    $fields['hostname'] = FieldDefinition::create('string')
+    $fields['hostname'] = BaseFieldDefinition::create('string')
       ->setLabel(t('Hostname'))
       ->setDescription(t("The comment author's hostname."))
       ->setTranslatable(TRUE)
       ->setSetting('max_length', 128);
 
-    $fields['created'] = FieldDefinition::create('created')
+    $fields['created'] = BaseFieldDefinition::create('created')
       ->setLabel(t('Created'))
       ->setDescription(t('The time that the comment was created.'))
       ->setTranslatable(TRUE);
 
-    $fields['changed'] = FieldDefinition::create('changed')
+    $fields['changed'] = BaseFieldDefinition::create('changed')
       ->setLabel(t('Changed'))
       ->setDescription(t('The time that the comment was last edited.'))
       ->setTranslatable(TRUE);
 
-    $fields['status'] = FieldDefinition::create('boolean')
+    $fields['status'] = BaseFieldDefinition::create('boolean')
       ->setLabel(t('Publishing status'))
       ->setDescription(t('A boolean indicating whether the comment is published.'))
       ->setTranslatable(TRUE)
       ->setDefaultValue(TRUE);
 
-    $fields['thread'] = FieldDefinition::create('string')
+    $fields['thread'] = BaseFieldDefinition::create('string')
       ->setLabel(t('Thread place'))
       ->setDescription(t("The alphadecimal representation of the comment's place in a thread, consisting of a base 36 string prefixed by an integer indicating its length."))
       ->setSetting('max_length', 255);
 
-    $fields['entity_type'] = FieldDefinition::create('string')
+    $fields['entity_type'] = BaseFieldDefinition::create('string')
       ->setLabel(t('Entity type'))
       ->setDescription(t('The entity type to which this comment is attached.'))
       ->setSetting('max_length', EntityTypeInterface::ID_MAX_LENGTH);
 
-    $fields['comment_type'] = FieldDefinition::create('entity_reference')
+    $fields['comment_type'] = BaseFieldDefinition::create('entity_reference')
       ->setLabel(t('Comment Type'))
       ->setDescription(t('The comment type.'))
       ->setSetting('target_type', 'comment_type');
 
-    $fields['field_name'] = FieldDefinition::create('string')
+    $fields['field_name'] = BaseFieldDefinition::create('string')
       ->setLabel(t('Comment field name'))
       ->setDescription(t('The field name through which this comment was added.'))
       ->setSetting('max_length', FieldStorageConfig::NAME_MAX_LENGTH);
diff --git a/core/modules/contact/src/Entity/Message.php b/core/modules/contact/src/Entity/Message.php
index b52b32acbd2180e75b60ba494c00eedb2202ed81..96d3630828f9c2250bafe7901e08e69123417e37 100644
--- a/core/modules/contact/src/Entity/Message.php
+++ b/core/modules/contact/src/Entity/Message.php
@@ -10,7 +10,7 @@
 use Drupal\Core\Entity\ContentEntityBase;
 use Drupal\contact\MessageInterface;
 use Drupal\Core\Entity\EntityTypeInterface;
-use Drupal\Core\Field\FieldDefinition;
+use Drupal\Core\Field\BaseFieldDefinition;
 
 /**
  * Defines the contact message entity.
@@ -135,31 +135,31 @@ public function getPersonalRecipient() {
    * {@inheritdoc}
    */
   public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
-    $fields['category'] = FieldDefinition::create('entity_reference')
+    $fields['category'] = BaseFieldDefinition::create('entity_reference')
       ->setLabel(t('Category ID'))
       ->setDescription(t('The ID of the associated category.'))
       ->setSetting('target_type', 'contact_category')
       ->setRequired(TRUE);
 
-    $fields['uuid'] = FieldDefinition::create('uuid')
+    $fields['uuid'] = BaseFieldDefinition::create('uuid')
       ->setLabel(t('UUID'))
       ->setDescription(t('The message UUID.'))
       ->setReadOnly(TRUE);
 
-    $fields['langcode'] = FieldDefinition::create('language')
+    $fields['langcode'] = BaseFieldDefinition::create('language')
       ->setLabel(t('Language code'))
       ->setDescription(t('The comment language code.'));
 
-    $fields['name'] = FieldDefinition::create('string')
+    $fields['name'] = BaseFieldDefinition::create('string')
       ->setLabel(t("The sender's name"))
       ->setDescription(t('The name of the person that is sending the contact message.'));
 
-    $fields['mail'] = FieldDefinition::create('email')
+    $fields['mail'] = BaseFieldDefinition::create('email')
       ->setLabel(t("The sender's email"))
       ->setDescription(t('The email of the person that is sending the contact message.'));
 
     // The subject of the contact message.
-    $fields['subject'] = FieldDefinition::create('string')
+    $fields['subject'] = BaseFieldDefinition::create('string')
       ->setLabel(t('Subject'))
       ->setRequired(TRUE)
       ->setSetting('max_length', 100)
@@ -170,7 +170,7 @@ public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
       ->setDisplayConfigurable('form', TRUE);
 
     // The text of the contact message.
-    $fields['message'] = FieldDefinition::create('string_long')
+    $fields['message'] = BaseFieldDefinition::create('string_long')
       ->setLabel(t('Message'))
       ->setRequired(TRUE)
       ->setDisplayOptions('form', array(
@@ -188,11 +188,11 @@ public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
       ))
       ->setDisplayConfigurable('view', TRUE);
 
-    $fields['copy'] = FieldDefinition::create('boolean')
+    $fields['copy'] = BaseFieldDefinition::create('boolean')
       ->setLabel(t('Copy'))
       ->setDescription(t('Whether to send a copy of the message to the sender.'));
 
-    $fields['recipient'] = FieldDefinition::create('entity_reference')
+    $fields['recipient'] = BaseFieldDefinition::create('entity_reference')
       ->setLabel(t('Recipient ID'))
       ->setDescription(t('The ID of the recipient user for personal contact messages.'))
       ->setSetting('target_type', 'user');
diff --git a/core/modules/contact/tests/modules/contact_storage_test/contact_storage_test.module b/core/modules/contact/tests/modules/contact_storage_test/contact_storage_test.module
index 65de9e56f23f075a5ad340a766ab061d3934213b..3ef9d226bf5a0c075823984ee39602335a489e4b 100644
--- a/core/modules/contact/tests/modules/contact_storage_test/contact_storage_test.module
+++ b/core/modules/contact/tests/modules/contact_storage_test/contact_storage_test.module
@@ -5,7 +5,7 @@
  * Contains custom contact message functionality for ContactStorageTest.
  */
 
-use Drupal\Core\Field\FieldDefinition;
+use Drupal\Core\Field\BaseFieldDefinition;
 
 /**
  * Implements hook_entity_base_field_info().
@@ -13,7 +13,7 @@
 function contact_storage_test_entity_base_field_info(\Drupal\Core\Entity\EntityTypeInterface $entity_type) {
   if ($entity_type->id() == 'contact_message') {
     $fields = array();
-    $fields['id'] = FieldDefinition::create('integer')
+    $fields['id'] = BaseFieldDefinition::create('integer')
       ->setLabel(t('Message ID'))
       ->setDescription(t('The message ID.'))
       ->setReadOnly(TRUE)
diff --git a/core/modules/field/src/Entity/FieldInstanceConfig.php b/core/modules/field/src/Entity/FieldInstanceConfig.php
index fb39fca2939b230f2ed0dee5f6eac91edb88db5e..5a1b951df57edde248ff07fbb0a498ff68a8402e 100644
--- a/core/modules/field/src/Entity/FieldInstanceConfig.php
+++ b/core/modules/field/src/Entity/FieldInstanceConfig.php
@@ -11,7 +11,7 @@
 use Drupal\Core\Config\Entity\ConfigEntityBase;
 use Drupal\Core\Entity\ContentEntityInterface;
 use Drupal\Core\Entity\EntityStorageInterface;
-use Drupal\Core\Field\FieldDefinition;
+use Drupal\Core\Field\BaseFieldDefinition;
 use Drupal\Core\Field\TypedData\FieldItemDataDefinition;
 use Drupal\field\FieldException;
 use Drupal\field\FieldStorageConfigInterface;
@@ -638,7 +638,7 @@ public function __sleep() {
   public static function createFromDataType($type) {
     // Forward to the field definition class for creating new data definitions
     // via the typed manager.
-    return FieldDefinition::createFromDataType($type);
+    return BaseFieldDefinition::createFromDataType($type);
   }
 
   /**
@@ -647,7 +647,7 @@ public static function createFromDataType($type) {
   public static function createFromItemType($item_type) {
     // Forward to the field definition class for creating new data definitions
     // via the typed manager.
-    return FieldDefinition::createFromItemType($item_type);
+    return BaseFieldDefinition::createFromItemType($item_type);
   }
 
   public function getDataType() {
diff --git a/core/modules/field/src/Plugin/views/field/Field.php b/core/modules/field/src/Plugin/views/field/Field.php
index 9605cf807d0631bc1992fb65d923f092a1de3ca0..4705437e2702fe6853528cd3489e41d258eab3de 100644
--- a/core/modules/field/src/Plugin/views/field/Field.php
+++ b/core/modules/field/src/Plugin/views/field/Field.php
@@ -13,7 +13,7 @@
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Entity\EntityManagerInterface;
 use Drupal\Core\Entity\EntityStorageInterface;
-use Drupal\Core\Field\FieldDefinition;
+use Drupal\Core\Field\BaseFieldDefinition;
 use Drupal\Core\Field\FieldStorageDefinitionInterface;
 use Drupal\Core\Field\FormatterPluginManager;
 use Drupal\Core\Form\FormStateInterface;
@@ -48,7 +48,7 @@ class Field extends FieldPluginBase {
    *
    * A field storage definition turned into a field definition, so it can be
    * used with widgets and formatters. See
-   * FieldDefinition::createFromFieldStorageDefinition().
+   * BaseFieldDefinition::createFromFieldStorageDefinition().
    *
    * @var \Drupal\Core\Field\FieldDefinitionInterface
    */
@@ -157,7 +157,7 @@ public static function create(ContainerInterface $container, array $configuratio
   protected function getFieldDefinition() {
     if (!$this->fieldDefinition) {
       $field_storage_config = $this->getFieldStorageConfig();
-      $this->fieldDefinition = FieldDefinition::createFromFieldStorageDefinition($field_storage_config);
+      $this->fieldDefinition = BaseFieldDefinition::createFromFieldStorageDefinition($field_storage_config);
     }
     return $this->fieldDefinition;
   }
diff --git a/core/modules/field/src/Tests/TestItemTest.php b/core/modules/field/src/Tests/TestItemTest.php
index 348a1fcc7b8bcc47fe968417b62750cc9dac0e0a..b1c9b6bf53a3de8d4567bc2a40b12da55390f11c 100644
--- a/core/modules/field/src/Tests/TestItemTest.php
+++ b/core/modules/field/src/Tests/TestItemTest.php
@@ -7,7 +7,7 @@
 
 namespace Drupal\field\Tests;
 
-use Drupal\Core\Field\FieldDefinition;
+use Drupal\Core\Field\BaseFieldDefinition;
 use Drupal\Core\Field\FieldItemInterface;
 use Drupal\Core\Field\FieldItemListInterface;
 
@@ -92,7 +92,7 @@ public function testTestItem() {
       ),
       'foreign keys' => array(),
     );
-    $field_schema = FieldDefinition::create('test_field')->getSchema();
+    $field_schema = BaseFieldDefinition::create('test_field')->getSchema();
     $this->assertEqual($field_schema, $expected_schema);
   }
 
diff --git a/core/modules/file/src/Entity/File.php b/core/modules/file/src/Entity/File.php
index 8f2bb271e77b52767e56552d375bef19a0e631e0..996eb872e851278c1882310064424918a2503075 100644
--- a/core/modules/file/src/Entity/File.php
+++ b/core/modules/file/src/Entity/File.php
@@ -10,7 +10,7 @@
 use Drupal\Core\Entity\ContentEntityBase;
 use Drupal\Core\Entity\EntityStorageInterface;
 use Drupal\Core\Entity\EntityTypeInterface;
-use Drupal\Core\Field\FieldDefinition;
+use Drupal\Core\Field\BaseFieldDefinition;
 use Drupal\Core\Language\LanguageInterface;
 use Drupal\file\FileInterface;
 use Drupal\user\UserInterface;
@@ -231,54 +231,54 @@ public static function preDelete(EntityStorageInterface $storage, array $entitie
    * {@inheritdoc}
    */
   public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
-    $fields['fid'] = FieldDefinition::create('integer')
+    $fields['fid'] = BaseFieldDefinition::create('integer')
       ->setLabel(t('File ID'))
       ->setDescription(t('The file ID.'))
       ->setReadOnly(TRUE)
       ->setSetting('unsigned', TRUE);
 
-    $fields['uuid'] = FieldDefinition::create('uuid')
+    $fields['uuid'] = BaseFieldDefinition::create('uuid')
       ->setLabel(t('UUID'))
       ->setDescription(t('The file UUID.'))
       ->setReadOnly(TRUE);
 
-    $fields['langcode'] = FieldDefinition::create('language')
+    $fields['langcode'] = BaseFieldDefinition::create('language')
       ->setLabel(t('Language code'))
       ->setDescription(t('The file language code.'));
 
-    $fields['uid'] = FieldDefinition::create('entity_reference')
+    $fields['uid'] = BaseFieldDefinition::create('entity_reference')
       ->setLabel(t('User ID'))
       ->setDescription(t('The user ID of the file.'))
       ->setSetting('target_type', 'user');
 
-    $fields['filename'] = FieldDefinition::create('string')
+    $fields['filename'] = BaseFieldDefinition::create('string')
       ->setLabel(t('Filename'))
       ->setDescription(t('Name of the file with no path components.'));
 
-    $fields['uri'] = FieldDefinition::create('uri')
+    $fields['uri'] = BaseFieldDefinition::create('uri')
       ->setLabel(t('URI'))
       ->setDescription(t('The URI to access the file (either local or remote).'))
       ->setSetting('max_length', 255);
 
-    $fields['filemime'] = FieldDefinition::create('string')
+    $fields['filemime'] = BaseFieldDefinition::create('string')
       ->setLabel(t('File MIME type'))
       ->setDescription(t("The file's MIME type."));
 
-    $fields['filesize'] = FieldDefinition::create('integer')
+    $fields['filesize'] = BaseFieldDefinition::create('integer')
       ->setLabel(t('File size'))
       ->setDescription(t('The size of the file in bytes.'))
       ->setSetting('unsigned', TRUE)
       ->setSetting('size', 'big');
 
-    $fields['status'] = FieldDefinition::create('boolean')
+    $fields['status'] = BaseFieldDefinition::create('boolean')
       ->setLabel(t('Status'))
       ->setDescription(t('The status of the file, temporary (FALSE) and permanent (TRUE).'));
 
-    $fields['created'] = FieldDefinition::create('created')
+    $fields['created'] = BaseFieldDefinition::create('created')
       ->setLabel(t('Created'))
       ->setDescription(t('The timestamp that the file was created.'));
 
-    $fields['changed'] = FieldDefinition::create('changed')
+    $fields['changed'] = BaseFieldDefinition::create('changed')
       ->setLabel(t('Changed'))
       ->setDescription(t('The timestamp that the file was last changed.'));
 
diff --git a/core/modules/menu_link_content/src/Entity/MenuLinkContent.php b/core/modules/menu_link_content/src/Entity/MenuLinkContent.php
index ae57007f0ed3a7698d84f9c9e1be28c5e64d5d02..162fd51427babc04bc1a420601df86f42da42cc5 100644
--- a/core/modules/menu_link_content/src/Entity/MenuLinkContent.php
+++ b/core/modules/menu_link_content/src/Entity/MenuLinkContent.php
@@ -10,7 +10,7 @@
 use Drupal\Core\Entity\ContentEntityBase;
 use Drupal\Core\Entity\EntityStorageInterface;
 use Drupal\Core\Entity\EntityTypeInterface;
-use Drupal\Core\Field\FieldDefinition;
+use Drupal\Core\Field\BaseFieldDefinition;
 use Drupal\Core\Url;
 use Drupal\menu_link_content\MenuLinkContentInterface;
 
@@ -255,24 +255,24 @@ public static function preDelete(EntityStorageInterface $storage, array $entitie
    * {@inheritdoc}
    */
   public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
-    $fields['id'] = FieldDefinition::create('integer')
+    $fields['id'] = BaseFieldDefinition::create('integer')
       ->setLabel(t('Entity ID'))
       ->setDescription(t('The entity ID for this menu link content entity.'))
       ->setReadOnly(TRUE)
       ->setSetting('unsigned', TRUE);
 
-    $fields['uuid'] = FieldDefinition::create('uuid')
+    $fields['uuid'] = BaseFieldDefinition::create('uuid')
       ->setLabel(t('UUID'))
       ->setDescription(t('The content menu link UUID.'))
       ->setReadOnly(TRUE);
 
-    $fields['bundle'] = FieldDefinition::create('string')
+    $fields['bundle'] = BaseFieldDefinition::create('string')
       ->setLabel(t('Bundle'))
       ->setDescription(t('The content menu link bundle.'))
       ->setSetting('max_length', EntityTypeInterface::BUNDLE_MAX_LENGTH)
       ->setReadOnly(TRUE);
 
-    $fields['title'] = FieldDefinition::create('string')
+    $fields['title'] = BaseFieldDefinition::create('string')
       ->setLabel(t('Menu link title'))
       ->setDescription(t('The text to be used for this link in the menu.'))
       ->setRequired(TRUE)
@@ -292,7 +292,7 @@ public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
       ))
       ->setDisplayConfigurable('form', TRUE);
 
-    $fields['description'] = FieldDefinition::create('string')
+    $fields['description'] = BaseFieldDefinition::create('string')
       ->setLabel(t('Description'))
       ->setDescription(t('Shown when hovering over the menu link.'))
       ->setTranslatable(TRUE)
@@ -310,35 +310,35 @@ public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
         'weight' => 0,
       ));
 
-    $fields['menu_name'] = FieldDefinition::create('string')
+    $fields['menu_name'] = BaseFieldDefinition::create('string')
       ->setLabel(t('Menu name'))
       ->setDescription(t('The menu name. All links with the same menu name (such as "tools") are part of the same menu.'))
       ->setSetting('default_value', 'tools');
 
     // @todo Use a link field https://www.drupal.org/node/2302205.
-    $fields['route_name'] = FieldDefinition::create('string')
+    $fields['route_name'] = BaseFieldDefinition::create('string')
       ->setLabel(t('Route name'))
       ->setDescription(t('The machine name of a defined Symfony Route this menu item represents.'));
 
-    $fields['route_parameters'] = FieldDefinition::create('map')
+    $fields['route_parameters'] = BaseFieldDefinition::create('map')
       ->setLabel(t('Route parameters'))
       ->setDescription(t('A serialized array of route parameters of this menu link.'));
 
-    $fields['url'] = FieldDefinition::create('uri')
+    $fields['url'] = BaseFieldDefinition::create('uri')
       ->setLabel(t('External link url'))
       ->setDescription(t('The url of the link, in case you have an external link.'));
 
-    $fields['options'] = FieldDefinition::create('map')
+    $fields['options'] = BaseFieldDefinition::create('map')
       ->setLabel(t('Options'))
       ->setDescription(t('A serialized array of options to be passed to the url() or l() function, such as a query string or HTML attributes.'))
       ->setSetting('default_value', array());
 
-    $fields['external'] = FieldDefinition::create('boolean')
+    $fields['external'] = BaseFieldDefinition::create('boolean')
       ->setLabel(t('External'))
       ->setDescription(t('A flag to indicate if the link points to a full URL starting with a protocol, like http:// (1 = external, 0 = internal).'))
       ->setSetting('default_value', FALSE);
 
-    $fields['weight'] = FieldDefinition::create('integer')
+    $fields['weight'] = BaseFieldDefinition::create('integer')
       ->setLabel(t('Weight'))
       ->setDescription(t('Link weight among links in the same menu at the same depth. In the menu, the links with high weight will sink and links with a low weight will be positioned nearer the top.'))
       ->setSetting('default_value', 0)
@@ -352,7 +352,7 @@ public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
         'weight' => 20,
       ));
 
-    $fields['expanded'] = FieldDefinition::create('boolean')
+    $fields['expanded'] = BaseFieldDefinition::create('boolean')
       ->setLabel(t('Show as expanded'))
       ->setDescription(t('If selected and this menu link has children, the menu will always appear expanded.'))
       ->setSetting('default_value', FALSE)
@@ -369,16 +369,16 @@ public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
     // @todo We manually create a form element for this, since the form logic is
     // is inverted to show enabled. Flip this to a status field and use the
     // normal entity Boolean widget. https://www.drupal.org/node/2305707
-    $fields['hidden'] = FieldDefinition::create('boolean')
+    $fields['hidden'] = BaseFieldDefinition::create('boolean')
       ->setLabel(t('Hidden'))
       ->setDescription(t('A flag for whether the link should be hidden in menus or rendered normally.'))
       ->setSetting('default_value', FALSE);
 
-    $fields['langcode'] = FieldDefinition::create('language')
+    $fields['langcode'] = BaseFieldDefinition::create('language')
       ->setLabel(t('Language code'))
       ->setDescription(t('The node language code.'));
 
-    $fields['parent'] = FieldDefinition::create('string')
+    $fields['parent'] = BaseFieldDefinition::create('string')
       ->setLabel(t('Parent plugin ID'))
       ->setDescription(t('The ID of the parent menu link plugin, or empty string when at the top level of the hierarchy.'));
 
diff --git a/core/modules/migrate/src/Plugin/migrate/id_map/Sql.php b/core/modules/migrate/src/Plugin/migrate/id_map/Sql.php
index 7977a0f05b6fd08dfdd3f96edb35b96a35da40fb..59e075c6dc988261f42f9900843d7df30f38d841 100644
--- a/core/modules/migrate/src/Plugin/migrate/id_map/Sql.php
+++ b/core/modules/migrate/src/Plugin/migrate/id_map/Sql.php
@@ -9,7 +9,7 @@
 
 use Drupal\Component\Utility\Unicode;
 use Drupal\Core\Database\Connection;
-use Drupal\Core\Field\FieldDefinition;
+use Drupal\Core\Field\BaseFieldDefinition;
 use Drupal\Core\Plugin\PluginBase;
 use Drupal\migrate\Entity\MigrationInterface;
 use Drupal\migrate\MigrateException;
@@ -386,7 +386,7 @@ protected function getFieldSchema(array $id_definition) {
     if (count($type_parts) == 1) {
       $type_parts[] = 'value';
     }
-    $schema = FieldDefinition::create($type_parts[0])->getColumns();
+    $schema = BaseFieldDefinition::create($type_parts[0])->getColumns();
     return $schema[$type_parts[1]];
   }
 
diff --git a/core/modules/node/src/Entity/Node.php b/core/modules/node/src/Entity/Node.php
index b9d5a53094eab1c7f4a6f250032812effcb70dce..1cdc5c058b9fd78e0e995445c34d7a5118e06b9e 100644
--- a/core/modules/node/src/Entity/Node.php
+++ b/core/modules/node/src/Entity/Node.php
@@ -10,7 +10,7 @@
 use Drupal\Core\Entity\ContentEntityBase;
 use Drupal\Core\Entity\EntityStorageInterface;
 use Drupal\Core\Entity\EntityTypeInterface;
-use Drupal\Core\Field\FieldDefinition;
+use Drupal\Core\Field\BaseFieldDefinition;
 use Drupal\Core\Language\LanguageInterface;
 use Drupal\Core\Session\AccountInterface;
 use Drupal\node\NodeInterface;
@@ -322,35 +322,35 @@ public function setRevisionAuthorId($uid) {
    * {@inheritdoc}
    */
   public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
-    $fields['nid'] = FieldDefinition::create('integer')
+    $fields['nid'] = BaseFieldDefinition::create('integer')
       ->setLabel(t('Node ID'))
       ->setDescription(t('The node ID.'))
       ->setReadOnly(TRUE)
       ->setSetting('unsigned', TRUE);
 
-    $fields['uuid'] = FieldDefinition::create('uuid')
+    $fields['uuid'] = BaseFieldDefinition::create('uuid')
       ->setLabel(t('UUID'))
       ->setDescription(t('The node UUID.'))
       ->setReadOnly(TRUE);
 
-    $fields['vid'] = FieldDefinition::create('integer')
+    $fields['vid'] = BaseFieldDefinition::create('integer')
       ->setLabel(t('Revision ID'))
       ->setDescription(t('The node revision ID.'))
       ->setReadOnly(TRUE)
       ->setSetting('unsigned', TRUE);
 
-    $fields['type'] = FieldDefinition::create('entity_reference')
+    $fields['type'] = BaseFieldDefinition::create('entity_reference')
       ->setLabel(t('Type'))
       ->setDescription(t('The node type.'))
       ->setSetting('target_type', 'node_type')
       ->setReadOnly(TRUE);
 
-    $fields['langcode'] = FieldDefinition::create('language')
+    $fields['langcode'] = BaseFieldDefinition::create('language')
       ->setLabel(t('Language code'))
       ->setDescription(t('The node language code.'))
       ->setRevisionable(TRUE);
 
-    $fields['title'] = FieldDefinition::create('string')
+    $fields['title'] = BaseFieldDefinition::create('string')
       ->setLabel(t('Title'))
       ->setDescription(t('The title of this node, always treated as non-markup plain text.'))
       ->setRequired(TRUE)
@@ -369,57 +369,57 @@ public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
       ))
       ->setDisplayConfigurable('form', TRUE);
 
-    $fields['uid'] = FieldDefinition::create('entity_reference')
+    $fields['uid'] = BaseFieldDefinition::create('entity_reference')
       ->setLabel(t('Author'))
       ->setDescription(t('The user that is the node author.'))
       ->setRevisionable(TRUE)
       ->setSetting('target_type', 'user')
       ->setTranslatable(TRUE);
 
-    $fields['status'] = FieldDefinition::create('boolean')
+    $fields['status'] = BaseFieldDefinition::create('boolean')
       ->setLabel(t('Publishing status'))
       ->setDescription(t('A boolean indicating whether the node is published.'))
       ->setRevisionable(TRUE)
       ->setTranslatable(TRUE);
 
-    $fields['created'] = FieldDefinition::create('created')
+    $fields['created'] = BaseFieldDefinition::create('created')
       ->setLabel(t('Created'))
       ->setDescription(t('The time that the node was created.'))
       ->setRevisionable(TRUE)
       ->setTranslatable(TRUE);
 
-    $fields['changed'] = FieldDefinition::create('changed')
+    $fields['changed'] = BaseFieldDefinition::create('changed')
       ->setLabel(t('Changed'))
       ->setDescription(t('The time that the node was last edited.'))
       ->setRevisionable(TRUE)
       ->setTranslatable(TRUE);
 
-    $fields['promote'] = FieldDefinition::create('boolean')
+    $fields['promote'] = BaseFieldDefinition::create('boolean')
       ->setLabel(t('Promote'))
       ->setDescription(t('A boolean indicating whether the node should be displayed on the front page.'))
       ->setRevisionable(TRUE)
       ->setTranslatable(TRUE);
 
-    $fields['sticky'] = FieldDefinition::create('boolean')
+    $fields['sticky'] = BaseFieldDefinition::create('boolean')
       ->setLabel(t('Sticky'))
       ->setDescription(t('A boolean indicating whether the node should be displayed at the top of lists in which it appears.'))
       ->setRevisionable(TRUE)
       ->setTranslatable(TRUE);
 
-    $fields['revision_timestamp'] = FieldDefinition::create('created')
+    $fields['revision_timestamp'] = BaseFieldDefinition::create('created')
       ->setLabel(t('Revision timestamp'))
       ->setDescription(t('The time that the current revision was created.'))
       ->setQueryable(FALSE)
       ->setRevisionable(TRUE);
 
-    $fields['revision_uid'] = FieldDefinition::create('entity_reference')
+    $fields['revision_uid'] = BaseFieldDefinition::create('entity_reference')
       ->setLabel(t('Revision user ID'))
       ->setDescription(t('The user ID of the author of the current revision.'))
       ->setSetting('target_type', 'user')
       ->setQueryable(FALSE)
       ->setRevisionable(TRUE);
 
-    $fields['revision_log'] = FieldDefinition::create('string_long')
+    $fields['revision_log'] = BaseFieldDefinition::create('string_long')
       ->setLabel(t('Revision log message'))
       ->setDescription(t('The log entry explaining the changes in this revision.'))
       ->setRevisionable(TRUE)
diff --git a/core/modules/path/path.module b/core/modules/path/path.module
index 7c4877253c2df0d9914b78467e318efea8645ed1..aeba50b294d7b8def4d788246b1d30e62fceb6eb 100644
--- a/core/modules/path/path.module
+++ b/core/modules/path/path.module
@@ -8,7 +8,7 @@
 use Drupal\Core\Entity\EntityTypeInterface;
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Entity\ContentEntityInterface;
-use Drupal\Core\Field\FieldDefinition;
+use Drupal\Core\Field\BaseFieldDefinition;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Routing\RouteMatchInterface;
 
@@ -80,7 +80,7 @@ function path_form_node_form_alter(&$form, FormStateInterface $form_state) {
  */
 function path_entity_base_field_info(EntityTypeInterface $entity_type) {
   if ($entity_type->id() === 'taxonomy_term' || $entity_type->id() === 'node') {
-    $fields['path'] = FieldDefinition::create('path')
+    $fields['path'] = BaseFieldDefinition::create('path')
       ->setLabel(t('URL alias'))
       ->setTranslatable(TRUE)
       ->setDisplayOptions('form', array(
diff --git a/core/modules/path/tests/src/Field/PathFieldDefinitionTest.php b/core/modules/path/tests/src/Field/PathFieldDefinitionTest.php
index a3adc6879a2581bb69e270552201b0e809970660..bd3efa76a1897c29cba0f9158ed4ad0a6bccc465 100644
--- a/core/modules/path/tests/src/Field/PathFieldDefinitionTest.php
+++ b/core/modules/path/tests/src/Field/PathFieldDefinitionTest.php
@@ -2,18 +2,18 @@
 
 /**
  * @file
- * Contains \Drupal\path\Tests\Plugin\Field\FieldType\PathFieldDefinitionTest
+ * Contains \Drupal\path\Tests\Plugin\Field\FieldType\PathFieldDefinitionTest.
  */
 
 namespace Drupal\path\Tests\Field;
 
-use Drupal\Tests\Core\Field\FieldDefinitionTestBase;
+use Drupal\Tests\Core\Field\BaseFieldDefinitionTestBase;
 
 /**
- * @coversDefaultClass \Drupal\Core\Field\FieldDefinition
+ * @coversDefaultClass \Drupal\Core\Field\BaseFieldDefinition
  * @group path
  */
-class PathFieldDefinitionTest extends FieldDefinitionTestBase {
+class PathFieldDefinitionTest extends BaseFieldDefinitionTestBase {
 
   /**
    * {@inheritdoc}
@@ -30,9 +30,9 @@ protected function getModuleAndPath() {
   }
 
   /**
-   * Tests FieldDefinition::getColumns().
+   * Tests BaseFieldDefinition::getColumns().
    *
-   * @covers \Drupal\Core\Field\FieldDefinition::getColumns
+   * @covers \Drupal\Core\Field\BaseFieldDefinition::getColumns
    * @covers \Drupal\path\Plugin\Field\FieldType\PathItem::schema
    */
   public function testGetColumns() {
diff --git a/core/modules/shortcut/src/Entity/Shortcut.php b/core/modules/shortcut/src/Entity/Shortcut.php
index bec4cb6bc8cef48d76131f7f2910e7b371358794..6a3ec86a31dcc9635017f0abecfe55a255b8cbd5 100644
--- a/core/modules/shortcut/src/Entity/Shortcut.php
+++ b/core/modules/shortcut/src/Entity/Shortcut.php
@@ -11,7 +11,7 @@
 use Drupal\Core\Entity\ContentEntityBase;
 use Drupal\Core\Entity\EntityStorageInterface;
 use Drupal\Core\Entity\EntityTypeInterface;
-use Drupal\Core\Field\FieldDefinition;
+use Drupal\Core\Field\BaseFieldDefinition;
 use Drupal\Core\Url;
 use Drupal\shortcut\ShortcutInterface;
 
@@ -152,24 +152,24 @@ public function postSave(EntityStorageInterface $storage, $update = TRUE) {
    * {@inheritdoc}
    */
   public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
-    $fields['id'] = FieldDefinition::create('integer')
+    $fields['id'] = BaseFieldDefinition::create('integer')
       ->setLabel(t('ID'))
       ->setDescription(t('The ID of the shortcut.'))
       ->setReadOnly(TRUE)
       ->setSetting('unsigned', TRUE);
 
-    $fields['uuid'] = FieldDefinition::create('uuid')
+    $fields['uuid'] = BaseFieldDefinition::create('uuid')
       ->setLabel(t('UUID'))
       ->setDescription(t('The UUID of the shortcut.'))
       ->setReadOnly(TRUE);
 
-    $fields['shortcut_set'] = FieldDefinition::create('entity_reference')
+    $fields['shortcut_set'] = BaseFieldDefinition::create('entity_reference')
       ->setLabel(t('Shortcut set'))
       ->setDescription(t('The bundle of the shortcut.'))
       ->setSetting('target_type', 'shortcut_set')
       ->setRequired(TRUE);
 
-    $fields['title'] = FieldDefinition::create('string')
+    $fields['title'] = BaseFieldDefinition::create('string')
       ->setLabel(t('Name'))
       ->setDescription(t('The name of the shortcut.'))
       ->setRequired(TRUE)
@@ -184,23 +184,23 @@ public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
         ),
       ));
 
-    $fields['weight'] = FieldDefinition::create('integer')
+    $fields['weight'] = BaseFieldDefinition::create('integer')
       ->setLabel(t('Weight'))
       ->setDescription(t('Weight among shortcuts in the same shortcut set.'));
 
-    $fields['route_name'] = FieldDefinition::create('string')
+    $fields['route_name'] = BaseFieldDefinition::create('string')
       ->setLabel(t('Route name'))
       ->setDescription(t('The machine name of a defined Route this shortcut represents.'));
 
-    $fields['route_parameters'] = FieldDefinition::create('map')
+    $fields['route_parameters'] = BaseFieldDefinition::create('map')
       ->setLabel(t('Route parameters'))
       ->setDescription(t('A serialized array of route parameters of this shortcut.'));
 
-    $fields['langcode'] = FieldDefinition::create('language')
+    $fields['langcode'] = BaseFieldDefinition::create('language')
       ->setLabel(t('Language code'))
       ->setDescription(t('The language code of the shortcut.'));
 
-    $fields['path'] = FieldDefinition::create('string')
+    $fields['path'] = BaseFieldDefinition::create('string')
       ->setLabel(t('Path'))
       ->setDescription(t('The computed shortcut path.'))
       ->setComputed(TRUE)
diff --git a/core/modules/system/entity.api.php b/core/modules/system/entity.api.php
index e80f34e41febb9847feac1e90958847dc68923cf..734814e4462e6120a00070ce1dc27c1684eafeda 100644
--- a/core/modules/system/entity.api.php
+++ b/core/modules/system/entity.api.php
@@ -7,7 +7,7 @@
 
 use Drupal\Component\Utility\String;
 use Drupal\Core\Entity\ContentEntityInterface;
-use Drupal\Core\Field\FieldDefinition;
+use Drupal\Core\Field\BaseFieldDefinition;
 use Drupal\Core\Render\Element;
 
 /**
@@ -1621,7 +1621,7 @@ function hook_entity_form_display_alter(\Drupal\Core\Entity\Display\EntityFormDi
 function hook_entity_base_field_info(\Drupal\Core\Entity\EntityTypeInterface $entity_type) {
   if ($entity_type->id() == 'node') {
     $fields = array();
-    $fields['mymodule_text'] = FieldDefinition::create('string')
+    $fields['mymodule_text'] = BaseFieldDefinition::create('string')
       ->setLabel(t('The text'))
       ->setDescription(t('A text property added by mymodule.'))
       ->setComputed(TRUE)
@@ -1679,7 +1679,7 @@ function hook_entity_bundle_field_info(\Drupal\Core\Entity\EntityTypeInterface $
   // Add a property only to nodes of the 'article' bundle.
   if ($entity_type->id() == 'node' && $bundle == 'article') {
     $fields = array();
-    $fields['mymodule_text_more'] = FieldDefinition::create('string')
+    $fields['mymodule_text_more'] = BaseFieldDefinition::create('string')
         ->setLabel(t('More text'))
         ->setComputed(TRUE)
         ->setClass('\Drupal\mymodule\EntityComputedMoreText');
diff --git a/core/modules/system/src/Tests/Entity/EntityFieldTest.php b/core/modules/system/src/Tests/Entity/EntityFieldTest.php
index 237195756c3c6093e455b42335dc2c93952e412b..c890ef3807cf746b9ef67cd2e2d51646ede66f5a 100644
--- a/core/modules/system/src/Tests/Entity/EntityFieldTest.php
+++ b/core/modules/system/src/Tests/Entity/EntityFieldTest.php
@@ -8,7 +8,7 @@
 namespace Drupal\system\Tests\Entity;
 
 use Drupal\Core\Entity\EntityInterface;
-use Drupal\Core\Field\FieldDefinition;
+use Drupal\Core\Field\BaseFieldDefinition;
 use Drupal\Core\Field\FieldDefinitionInterface;
 use Drupal\Core\Field\FieldItemListInterface;
 use Drupal\Core\Field\FieldItemInterface;
@@ -550,7 +550,7 @@ public function testEntityConstraintValidation() {
     $entity = $this->createTestEntity('entity_test');
     $entity->save();
     // Create a reference field item and let it reference the entity.
-    $definition = FieldDefinition::create('entity_reference')
+    $definition = BaseFieldDefinition::create('entity_reference')
       ->setLabel('Test entity')
       ->setSetting('target_type', 'entity_test');
     $reference_field = \Drupal::typedDataManager()->create($definition);
@@ -575,7 +575,7 @@ public function testEntityConstraintValidation() {
     // Test bundle validation.
     NodeType::create(array('type' => 'article'))
       ->save();
-    $definition = FieldDefinition::create('entity_reference')
+    $definition = BaseFieldDefinition::create('entity_reference')
       ->setLabel('Test entity')
       ->setSettings(array(
         'target_type' => 'node',
diff --git a/core/modules/system/src/Tests/Entity/EntityTypedDataDefinitionTest.php b/core/modules/system/src/Tests/Entity/EntityTypedDataDefinitionTest.php
index 04aaa668a394b01418c74616eea9eaa9e3e70f17..36150a4277b18ee022cc2bb5821871b885e534d3 100644
--- a/core/modules/system/src/Tests/Entity/EntityTypedDataDefinitionTest.php
+++ b/core/modules/system/src/Tests/Entity/EntityTypedDataDefinitionTest.php
@@ -9,7 +9,7 @@
 
 use Drupal\Core\Entity\TypedData\EntityDataDefinition;
 use Drupal\Core\Entity\TypedData\EntityDataDefinitionInterface;
-use Drupal\Core\Field\FieldDefinition;
+use Drupal\Core\Field\BaseFieldDefinition;
 use Drupal\Core\Field\FieldDefinitionInterface;
 use Drupal\Core\TypedData\ComplexDataDefinitionInterface;
 use Drupal\Core\TypedData\DataReferenceDefinition;
@@ -47,7 +47,7 @@ public function setUp() {
    * Tests deriving metadata about fields.
    */
   public function testFields() {
-    $field_definition = FieldDefinition::create('integer');
+    $field_definition = BaseFieldDefinition::create('integer');
     // Fields are lists of complex data.
     $this->assertTrue($field_definition instanceof ListDataDefinitionInterface);
     $this->assertFalse($field_definition instanceof ComplexDataDefinitionInterface);
diff --git a/core/modules/system/src/Tests/TypedData/TypedDataTest.php b/core/modules/system/src/Tests/TypedData/TypedDataTest.php
index bc9bd8c55b50613a126f2fc3d78bebe2c096cb1d..1adc2ffa208ef551d77e31da515833a5b33a198b 100644
--- a/core/modules/system/src/Tests/TypedData/TypedDataTest.php
+++ b/core/modules/system/src/Tests/TypedData/TypedDataTest.php
@@ -7,7 +7,7 @@
 
 namespace Drupal\system\Tests\TypedData;
 
-use Drupal\Core\Field\FieldDefinition;
+use Drupal\Core\Field\BaseFieldDefinition;
 use Drupal\Core\TypedData\DataDefinition;
 use Drupal\Core\TypedData\ListDataDefinition;
 use Drupal\Core\TypedData\MapDataDefinition;
@@ -539,7 +539,7 @@ public function testTypedDataValidation() {
 
     // Test validating property containers and make sure the NotNull and Null
     // constraints work with typed data containers.
-    $definition = FieldDefinition::create('integer')
+    $definition = BaseFieldDefinition::create('integer')
       ->setConstraints(array('NotNull' => array()));
     $field_item = $this->typedDataManager->create($definition, array('value' => 10));
     $violations = $field_item->validate();
@@ -556,7 +556,7 @@ public function testTypedDataValidation() {
     $this->assertEqual($violations->count(), 1);
 
     // Test the Null constraint with typed data containers.
-    $definition = FieldDefinition::create('float')
+    $definition = BaseFieldDefinition::create('float')
       ->setConstraints(array('Null' => array()));
     $field_item = $this->typedDataManager->create($definition, array('value' => 11.5));
     $violations = $field_item->validate();
@@ -586,7 +586,7 @@ public function testTypedDataValidation() {
 
     // Test validating a list of a values and make sure property paths starting
     // with "0" are created.
-    $definition = FieldDefinition::create('integer');
+    $definition = BaseFieldDefinition::create('integer');
     $violations = $this->typedDataManager->create($definition, array(array('value' => 10)))->validate();
     $this->assertEqual($violations->count(), 0);
     $violations = $this->typedDataManager->create($definition, array(array('value' => 'string')))->validate();
diff --git a/core/modules/system/tests/modules/entity_bundle_field_test/entity_bundle_field_test.module b/core/modules/system/tests/modules/entity_bundle_field_test/entity_bundle_field_test.module
index 55f5bff75db902843fe15eb1d64c3e3924e6680a..7a39717821c4dbaba67bd1eb78efa1345a6641c0 100644
--- a/core/modules/system/tests/modules/entity_bundle_field_test/entity_bundle_field_test.module
+++ b/core/modules/system/tests/modules/entity_bundle_field_test/entity_bundle_field_test.module
@@ -5,7 +5,7 @@
  * Test module for the entity API providing a bundle field.
  */
 
-use Drupal\Core\Field\FieldDefinition;
+use Drupal\Core\Field\BaseFieldDefinition;
 
 /**
  * Tracks whether the module is currently being uninstalled.
@@ -30,9 +30,9 @@ function entity_bundle_field_test_is_uninstalling($value = NULL) {
 function entity_bundle_field_test_entity_field_storage_info(\Drupal\Core\Entity\EntityTypeInterface $entity_type) {
   if ($entity_type->id() == 'entity_test' && !entity_bundle_field_test_is_uninstalling()) {
     // @todo: Make use of a FieldStorageDefinition class instead of
-    // FieldDefinition as this should not implement FieldDefinitionInterface.
+    // BaseFieldDefinition as this should not implement FieldDefinitionInterface.
     // See https://drupal.org/node/2280639.
-    $definitions['custom_field'] = FieldDefinition::create('string')
+    $definitions['custom_field'] = BaseFieldDefinition::create('string')
       ->setName('custom_field')
       ->setLabel(t('A custom field'))
       ->setTargetEntityTypeId($entity_type->id());
@@ -45,7 +45,7 @@ function entity_bundle_field_test_entity_field_storage_info(\Drupal\Core\Entity\
  */
 function entity_bundle_field_test_entity_bundle_field_info(\Drupal\Core\Entity\EntityTypeInterface $entity_type, $bundle, array $base_field_definitions) {
   if ($entity_type->id() == 'entity_test' && $bundle == 'custom' && !entity_bundle_field_test_is_uninstalling()) {
-    $definitions['custom_field'] = FieldDefinition::create('string')
+    $definitions['custom_field'] = BaseFieldDefinition::create('string')
       ->setName('custom_field')
       ->setLabel(t('A custom field'));
     return $definitions;
@@ -58,7 +58,7 @@ function entity_bundle_field_test_entity_bundle_field_info(\Drupal\Core\Entity\E
 function entity_bundle_field_test_entity_bundle_delete($entity_type_id, $bundle) {
   if ($entity_type_id == 'entity_test' && $bundle == 'custom') {
     // Notify the entity storage that our field is gone.
-    $field_definition = FieldDefinition::create('string')
+    $field_definition = BaseFieldDefinition::create('string')
       ->setTargetEntityTypeId($entity_type_id)
       ->setBundle($bundle)
       ->setName('custom_field')
diff --git a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTest.php b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTest.php
index 4e94184305cd551c54e7802ac4c6635be4f355d8..6831f1c089dc8916d152bfcbc832790bbbe29c09 100644
--- a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTest.php
+++ b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTest.php
@@ -9,7 +9,7 @@
 
 use Drupal\Core\Entity\ContentEntityBase;
 use Drupal\Core\Entity\EntityTypeInterface;
-use Drupal\Core\Field\FieldDefinition;
+use Drupal\Core\Field\BaseFieldDefinition;
 use Drupal\Core\Entity\EntityStorageInterface;
 use Drupal\user\EntityOwnerInterface;
 use Drupal\user\UserInterface;
@@ -63,22 +63,22 @@ public static function preCreate(EntityStorageInterface $storage, array &$values
    * {@inheritdoc}
    */
   public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
-    $fields['id'] = FieldDefinition::create('integer')
+    $fields['id'] = BaseFieldDefinition::create('integer')
       ->setLabel(t('ID'))
       ->setDescription(t('The ID of the test entity.'))
       ->setReadOnly(TRUE)
       ->setSetting('unsigned', TRUE);
 
-    $fields['uuid'] = FieldDefinition::create('uuid')
+    $fields['uuid'] = BaseFieldDefinition::create('uuid')
       ->setLabel(t('UUID'))
       ->setDescription(t('The UUID of the test entity.'))
       ->setReadOnly(TRUE);
 
-    $fields['langcode'] = FieldDefinition::create('language')
+    $fields['langcode'] = BaseFieldDefinition::create('language')
       ->setLabel(t('Language code'))
       ->setDescription(t('The language code of the test entity.'));
 
-    $fields['name'] = FieldDefinition::create('string')
+    $fields['name'] = BaseFieldDefinition::create('string')
       ->setLabel(t('Name'))
       ->setDescription(t('The name of the test entity.'))
       ->setTranslatable(TRUE)
@@ -90,12 +90,12 @@ public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
       ));
 
     // @todo: Add allowed values validation.
-    $fields['type'] = FieldDefinition::create('string')
+    $fields['type'] = BaseFieldDefinition::create('string')
       ->setLabel(t('Type'))
       ->setDescription(t('The bundle of the test entity.'))
       ->setRequired(TRUE);
 
-    $fields['user_id'] = FieldDefinition::create('entity_reference')
+    $fields['user_id'] = BaseFieldDefinition::create('entity_reference')
       ->setLabel(t('User ID'))
       ->setDescription(t('The ID of the associated user.'))
       ->setSettings(array('target_type' => 'user'))
diff --git a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestBaseFieldDisplay.php b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestBaseFieldDisplay.php
index e9e71234d962eac62d4fdc98c450f71dadd7ae44..e235f6c25a4aed73b385ca5c0d8a47f0cb0bb582 100644
--- a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestBaseFieldDisplay.php
+++ b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestBaseFieldDisplay.php
@@ -8,7 +8,7 @@
 namespace Drupal\entity_test\Entity;
 
 use Drupal\Core\Entity\EntityTypeInterface;
-use Drupal\Core\Field\FieldDefinition;
+use Drupal\Core\Field\BaseFieldDefinition;
 
 /**
  * Defines a test entity class for base fields display.
@@ -44,10 +44,10 @@ class EntityTestBaseFieldDisplay extends EntityTest {
   public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
     $fields = parent::baseFieldDefinitions($entity_type);
 
-    $fields['test_no_display'] = FieldDefinition::create('text')
+    $fields['test_no_display'] = BaseFieldDefinition::create('text')
       ->setLabel(t('Field with no display'));
 
-    $fields['test_display_configurable'] = FieldDefinition::create('text')
+    $fields['test_display_configurable'] = BaseFieldDefinition::create('text')
       ->setLabel(t('Field with configurable display'))
       ->setDisplayOptions('view', array(
         'type' => 'text_default',
@@ -60,7 +60,7 @@ public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
       ))
       ->setDisplayConfigurable('form', TRUE);
 
-    $fields['test_display_non_configurable'] = FieldDefinition::create('text')
+    $fields['test_display_non_configurable'] = BaseFieldDefinition::create('text')
       ->setLabel(t('Field with non-configurable display'))
       ->setDisplayOptions('view', array(
         'type' => 'text_default',
diff --git a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestDefaultValue.php b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestDefaultValue.php
index 89fc15b879e9a8091ceeacc5c2f77019693ebb9c..3779567fd3b62dd51c3a531da51b1ba16887f50c 100644
--- a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestDefaultValue.php
+++ b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestDefaultValue.php
@@ -8,7 +8,7 @@
 namespace Drupal\entity_test\Entity;
 
 use Drupal\Core\Entity\EntityTypeInterface;
-use Drupal\Core\Field\FieldDefinition;
+use Drupal\Core\Field\BaseFieldDefinition;
 
 /**
  * Defines a test entity class for testing default values.
@@ -33,7 +33,7 @@ class EntityTestDefaultValue extends EntityTest {
   public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
     $fields = parent::baseFieldDefinitions($entity_type);
 
-    $fields['description'] = FieldDefinition::create('string')
+    $fields['description'] = BaseFieldDefinition::create('string')
       ->setLabel(t('Some custom description'))
       ->setDefaultValueCallback('entity_test_field_default_value');
 
diff --git a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestMul.php b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestMul.php
index c5227e49b49afc2524db7f55f45eae164b52f191..b5ba803c46fd5f02fde2ac9605f56bde777cf1df 100644
--- a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestMul.php
+++ b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestMul.php
@@ -8,7 +8,7 @@
 namespace Drupal\entity_test\Entity;
 
 use Drupal\Core\Entity\EntityTypeInterface;
-use Drupal\Core\Field\FieldDefinition;
+use Drupal\Core\Field\BaseFieldDefinition;
 use Drupal\entity_test\Entity\EntityTest;
 
 /**
diff --git a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestMulRev.php b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestMulRev.php
index 477b651d40ee6e94f6b7e0bc2bd90928cdd4eba4..f4ee307275f85104fc6768b858a60f6789530359 100644
--- a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestMulRev.php
+++ b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestMulRev.php
@@ -8,7 +8,7 @@
 namespace Drupal\entity_test\Entity;
 
 use Drupal\Core\Entity\EntityTypeInterface;
-use Drupal\Core\Field\FieldDefinition;
+use Drupal\Core\Field\BaseFieldDefinition;
 use Drupal\entity_test\Entity\EntityTestRev;
 
 /**
diff --git a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestRev.php b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestRev.php
index 942424124fff2eac98d9eeaa4841c3232d5963be..5f74c59b2f43c8c7f9e0c2cc80ada61512597583 100644
--- a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestRev.php
+++ b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestRev.php
@@ -8,7 +8,7 @@
 namespace Drupal\entity_test\Entity;
 
 use Drupal\Core\Entity\EntityTypeInterface;
-use Drupal\Core\Field\FieldDefinition;
+use Drupal\Core\Field\BaseFieldDefinition;
 use Drupal\entity_test\Entity\EntityTest;
 
 /**
@@ -50,7 +50,7 @@ class EntityTestRev extends EntityTest {
   public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
     $fields = parent::baseFieldDefinitions($entity_type);
 
-    $fields['revision_id'] = FieldDefinition::create('integer')
+    $fields['revision_id'] = BaseFieldDefinition::create('integer')
       ->setLabel(t('Revision ID'))
       ->setDescription(t('The version id of the test entity.'))
       ->setReadOnly(TRUE)
diff --git a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestStringId.php b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestStringId.php
index dbe4a20230991957172a1859088c8266e1a38d01..de9e47a6d8bdfbbe440aa664adc9d1d165782887 100644
--- a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestStringId.php
+++ b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestStringId.php
@@ -6,7 +6,7 @@
  */
 
 namespace Drupal\entity_test\Entity;
-use Drupal\Core\Field\FieldDefinition;
+use Drupal\Core\Field\BaseFieldDefinition;
 use Drupal\Core\Entity\EntityTypeInterface;
 
 /**
@@ -44,7 +44,7 @@ class EntityTestStringId extends EntityTest {
    */
   public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
     $fields = parent::baseFieldDefinitions($entity_type);
-    $fields['id'] = FieldDefinition::create('string')
+    $fields['id'] = BaseFieldDefinition::create('string')
       ->setLabel(t('ID'))
       ->setDescription(t('The ID of the test entity.'))
       ->setReadOnly(TRUE);
diff --git a/core/modules/taxonomy/src/Entity/Term.php b/core/modules/taxonomy/src/Entity/Term.php
index d01759f0f45624bdb79322d0e2aafdc097f154dd..597518e1170e05ddde0eb59fe88f389792c00d28 100644
--- a/core/modules/taxonomy/src/Entity/Term.php
+++ b/core/modules/taxonomy/src/Entity/Term.php
@@ -10,7 +10,7 @@
 use Drupal\Core\Entity\ContentEntityBase;
 use Drupal\Core\Entity\EntityStorageInterface;
 use Drupal\Core\Entity\EntityTypeInterface;
-use Drupal\Core\Field\FieldDefinition;
+use Drupal\Core\Field\BaseFieldDefinition;
 use Drupal\taxonomy\TermInterface;
 
 /**
@@ -100,27 +100,27 @@ public function postSave(EntityStorageInterface $storage, $update = TRUE) {
    * {@inheritdoc}
    */
   public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
-    $fields['tid'] = FieldDefinition::create('integer')
+    $fields['tid'] = BaseFieldDefinition::create('integer')
       ->setLabel(t('Term ID'))
       ->setDescription(t('The term ID.'))
       ->setReadOnly(TRUE)
       ->setSetting('unsigned', TRUE);
 
-    $fields['uuid'] = FieldDefinition::create('uuid')
+    $fields['uuid'] = BaseFieldDefinition::create('uuid')
       ->setLabel(t('UUID'))
       ->setDescription(t('The term UUID.'))
       ->setReadOnly(TRUE);
 
-    $fields['vid'] = FieldDefinition::create('entity_reference')
+    $fields['vid'] = BaseFieldDefinition::create('entity_reference')
       ->setLabel(t('Vocabulary'))
       ->setDescription(t('The vocabulary to which the term is assigned.'))
       ->setSetting('target_type', 'taxonomy_vocabulary');
 
-    $fields['langcode'] = FieldDefinition::create('language')
+    $fields['langcode'] = BaseFieldDefinition::create('language')
       ->setLabel(t('Language code'))
       ->setDescription(t('The term language code.'));
 
-    $fields['name'] = FieldDefinition::create('string')
+    $fields['name'] = BaseFieldDefinition::create('string')
       ->setLabel(t('Name'))
       ->setDescription(t('The term name.'))
       ->setTranslatable(TRUE)
@@ -137,7 +137,7 @@ public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
       ))
       ->setDisplayConfigurable('form', TRUE);
 
-    $fields['description'] = FieldDefinition::create('text_long')
+    $fields['description'] = BaseFieldDefinition::create('text_long')
       ->setLabel(t('Description'))
       ->setDescription(t('A description of the term.'))
       ->setTranslatable(TRUE)
@@ -154,23 +154,23 @@ public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
       ))
       ->setDisplayConfigurable('form', TRUE);
 
-    $fields['weight'] = FieldDefinition::create('integer')
+    $fields['weight'] = BaseFieldDefinition::create('integer')
       ->setLabel(t('Weight'))
       ->setDescription(t('The weight of this term in relation to other terms.'))
       ->setDefaultValue(0);
 
     // @todo Convert this to an entity_reference field, see
     // https://drupal.org/node/1915056
-    $fields['parent'] = FieldDefinition::create('integer')
+    $fields['parent'] = BaseFieldDefinition::create('integer')
       ->setLabel(t('Term Parents'))
       ->setDescription(t('The parents of this term.'))
-      ->setCardinality(FieldDefinition::CARDINALITY_UNLIMITED)
+      ->setCardinality(BaseFieldDefinition::CARDINALITY_UNLIMITED)
       // Save new terms with no parents by default.
       ->setDefaultValue(0)
       ->setSetting('unsigned', TRUE)
       ->addConstraint('TermParent', array());
 
-    $fields['changed'] = FieldDefinition::create('changed')
+    $fields['changed'] = BaseFieldDefinition::create('changed')
       ->setLabel(t('Changed'))
       ->setDescription(t('The time that the term was last edited.'));
 
diff --git a/core/modules/user/src/Entity/User.php b/core/modules/user/src/Entity/User.php
index cd2fb481e9f1f2380f15341412beb3645ae902dd..979694b62fff6a74b119c8512da9fa1aa9592c09 100644
--- a/core/modules/user/src/Entity/User.php
+++ b/core/modules/user/src/Entity/User.php
@@ -11,7 +11,7 @@
 use Drupal\Core\Entity\EntityMalformedException;
 use Drupal\Core\Entity\EntityStorageInterface;
 use Drupal\Core\Entity\EntityTypeInterface;
-use Drupal\Core\Field\FieldDefinition;
+use Drupal\Core\Field\BaseFieldDefinition;
 use Drupal\user\UserInterface;
 
 /**
@@ -432,32 +432,32 @@ public function setUsername($username) {
    * {@inheritdoc}
    */
   public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
-    $fields['uid'] = FieldDefinition::create('integer')
+    $fields['uid'] = BaseFieldDefinition::create('integer')
       ->setLabel(t('User ID'))
       ->setDescription(t('The user ID.'))
       ->setReadOnly(TRUE)
       ->setSetting('unsigned', TRUE);
 
-    $fields['uuid'] = FieldDefinition::create('uuid')
+    $fields['uuid'] = BaseFieldDefinition::create('uuid')
       ->setLabel(t('UUID'))
       ->setDescription(t('The user UUID.'))
       ->setReadOnly(TRUE);
 
-    $fields['langcode'] = FieldDefinition::create('language')
+    $fields['langcode'] = BaseFieldDefinition::create('language')
       ->setLabel(t('Language code'))
       ->setDescription(t('The user language code.'));
 
-    $fields['preferred_langcode'] = FieldDefinition::create('language')
+    $fields['preferred_langcode'] = BaseFieldDefinition::create('language')
       ->setLabel(t('Preferred admin language code'))
       ->setDescription(t("The user's preferred language code for receiving emails and viewing the site."));
 
-    $fields['preferred_admin_langcode'] = FieldDefinition::create('language')
+    $fields['preferred_admin_langcode'] = BaseFieldDefinition::create('language')
       ->setLabel(t('Preferred language code'))
       ->setDescription(t("The user's preferred language code for viewing administration pages."));
 
     // The name should not vary per language. The username is the visual
     // identifier for a user and needs to be consistent in all languages.
-    $fields['name'] = FieldDefinition::create('string')
+    $fields['name'] = BaseFieldDefinition::create('string')
       ->setLabel(t('Name'))
       ->setDescription(t('The name of this user.'))
       ->setDefaultValue('')
@@ -468,59 +468,59 @@ public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
         'UserNameUnique' => array(),
       ));
 
-    $fields['pass'] = FieldDefinition::create('string')
+    $fields['pass'] = BaseFieldDefinition::create('string')
       ->setLabel(t('Password'))
       ->setDescription(t('The password of this user (hashed).'));
 
-    $fields['mail'] = FieldDefinition::create('email')
+    $fields['mail'] = BaseFieldDefinition::create('email')
       ->setLabel(t('Email'))
       ->setDescription(t('The email of this user.'))
       ->setDefaultValue('')
       ->setPropertyConstraints('value', array('UserMailUnique' => array()));
 
     // @todo Convert to a text field in https://drupal.org/node/1548204.
-    $fields['signature'] = FieldDefinition::create('string')
+    $fields['signature'] = BaseFieldDefinition::create('string')
       ->setLabel(t('Signature'))
       ->setDescription(t('The signature of this user.'));
-    $fields['signature_format'] = FieldDefinition::create('string')
+    $fields['signature_format'] = BaseFieldDefinition::create('string')
       ->setLabel(t('Signature format'))
       ->setDescription(t('The signature format of this user.'));
 
-    $fields['timezone'] = FieldDefinition::create('string')
+    $fields['timezone'] = BaseFieldDefinition::create('string')
       ->setLabel(t('Timezone'))
       ->setDescription(t('The timezone of this user.'))
       ->setSetting('max_length', 32);
 
-    $fields['status'] = FieldDefinition::create('boolean')
+    $fields['status'] = BaseFieldDefinition::create('boolean')
       ->setLabel(t('User status'))
       ->setDescription(t('Whether the user is active or blocked.'))
       ->setDefaultValue(FALSE);
 
-    $fields['created'] = FieldDefinition::create('created')
+    $fields['created'] = BaseFieldDefinition::create('created')
       ->setLabel(t('Created'))
       ->setDescription(t('The time that the user was created.'));
 
-    $fields['access'] = FieldDefinition::create('timestamp')
+    $fields['access'] = BaseFieldDefinition::create('timestamp')
       ->setLabel(t('Last access'))
       ->setDescription(t('The time that the user last accessed the site.'))
       ->setDefaultValue(0);
 
-    $fields['login'] = FieldDefinition::create('timestamp')
+    $fields['login'] = BaseFieldDefinition::create('timestamp')
       ->setLabel(t('Last login'))
       ->setDescription(t('The time that the user last logged in.'))
       ->setDefaultValue(0);
 
-    $fields['init'] = FieldDefinition::create('email')
+    $fields['init'] = BaseFieldDefinition::create('email')
       ->setLabel(t('Initial email'))
       ->setDescription(t('The email address used for initial account creation.'))
       ->setDefaultValue('');
 
     // @todo Convert this to entity_reference_field, see
     // https://drupal.org/node/2044859.
-    $fields['roles'] = FieldDefinition::create('string')
+    $fields['roles'] = BaseFieldDefinition::create('string')
       ->setCustomStorage(TRUE)
       ->setLabel(t('Roles'))
-      ->setCardinality(FieldDefinition::CARDINALITY_UNLIMITED)
+      ->setCardinality(BaseFieldDefinition::CARDINALITY_UNLIMITED)
       ->setDescription(t('The roles the user has.'));
 
     return $fields;
diff --git a/core/tests/Drupal/Tests/Core/Entity/FieldDefinitionTest.php b/core/tests/Drupal/Tests/Core/Entity/BaseFieldDefinitionTest.php
similarity index 85%
rename from core/tests/Drupal/Tests/Core/Entity/FieldDefinitionTest.php
rename to core/tests/Drupal/Tests/Core/Entity/BaseFieldDefinitionTest.php
index e206077e6491611f96b541da0508a70a678f4d0e..03f2e4d7d54a7534bc913c84ab360a665698a4ca 100644
--- a/core/tests/Drupal/Tests/Core/Entity/FieldDefinitionTest.php
+++ b/core/tests/Drupal/Tests/Core/Entity/BaseFieldDefinitionTest.php
@@ -2,22 +2,22 @@
 
 /**
  * @file
- * Contains \Drupal\Tests\Core\Entity\FieldDefinitionTest.
+ * Contains \Drupal\Tests\Core\Entity\BaseFieldDefinitionTest.
  */
 
 namespace Drupal\Tests\Core\Entity;
 
 use Drupal\Core\DependencyInjection\ContainerBuilder;
-use Drupal\Core\Field\FieldDefinition;
+use Drupal\Core\Field\BaseFieldDefinition;
 use Drupal\Core\Field\FieldStorageDefinitionInterface;
 use Drupal\Tests\UnitTestCase;
 
 /**
- * Unit test for FieldDefinition.
+ * Unit test for BaseFieldDefinition.
  *
  * @group Entity
  */
-class FieldDefinitionTest extends UnitTestCase {
+class BaseFieldDefinitionTest extends UnitTestCase {
 
   /**
    * A dummy field type name.
@@ -77,7 +77,7 @@ public function setUp() {
    * Tests field name methods.
    */
   public function testFieldName() {
-    $definition = FieldDefinition::create($this->fieldType);
+    $definition = BaseFieldDefinition::create($this->fieldType);
     $field_name = $this->randomMachineName();
     $definition->setName($field_name);
     $this->assertEquals($field_name, $definition->getName());
@@ -87,7 +87,7 @@ public function testFieldName() {
    * Tests field label methods.
    */
   public function testFieldLabel() {
-    $definition = FieldDefinition::create($this->fieldType);
+    $definition = BaseFieldDefinition::create($this->fieldType);
     $label = $this->randomMachineName();
     $definition->setLabel($label);
     $this->assertEquals($label, $definition->getLabel());
@@ -97,7 +97,7 @@ public function testFieldLabel() {
    * Tests field description methods.
    */
   public function testFieldDescription() {
-    $definition = FieldDefinition::create($this->fieldType);
+    $definition = BaseFieldDefinition::create($this->fieldType);
     $description = $this->randomMachineName();
     $definition->setDescription($description);
     $this->assertEquals($description, $definition->getDescription());
@@ -107,7 +107,7 @@ public function testFieldDescription() {
    * Tests field type methods.
    */
   public function testFieldType() {
-    $definition = FieldDefinition::create($this->fieldType);
+    $definition = BaseFieldDefinition::create($this->fieldType);
     $this->assertEquals($this->fieldType, $definition->getType());
   }
 
@@ -115,7 +115,7 @@ public function testFieldType() {
    * Tests field settings methods.
    */
   public function testFieldSettings() {
-    $definition = FieldDefinition::create($this->fieldType);
+    $definition = BaseFieldDefinition::create($this->fieldType);
     $setting = $this->randomMachineName();
     $value = $this->randomMachineName();
     $definition->setSetting($setting, $value);
@@ -128,7 +128,7 @@ public function testFieldSettings() {
    * Tests the initialization of default field settings.
    */
   public function testDefaultFieldSettings() {
-    $definition = FieldDefinition::create($this->fieldType);
+    $definition = BaseFieldDefinition::create($this->fieldType);
     $expected_settings = $this->fieldTypeDefinition['settings'] + $this->fieldTypeDefinition['instance_settings'];
     $this->assertEquals($expected_settings, $definition->getSettings());
     foreach ($expected_settings as $setting => $value) {
@@ -140,7 +140,7 @@ public function testDefaultFieldSettings() {
    * Tests field default value.
    */
   public function testFieldDefaultValue() {
-    $definition = FieldDefinition::create($this->fieldType);
+    $definition = BaseFieldDefinition::create($this->fieldType);
     $value = $this->randomMachineName();
     $definition->setDefaultValue($value);
     $entity = $this->getMockBuilder('Drupal\Core\Entity\ContentEntityBase')
@@ -156,7 +156,7 @@ public function testFieldDefaultValue() {
    * Tests field translatable methods.
    */
   public function testFieldTranslatable() {
-    $definition = FieldDefinition::create($this->fieldType);
+    $definition = BaseFieldDefinition::create($this->fieldType);
     $this->assertFalse($definition->isTranslatable());
     $definition->setTranslatable(TRUE);
     $this->assertTrue($definition->isTranslatable());
@@ -168,7 +168,7 @@ public function testFieldTranslatable() {
    * Tests field revisionable methods.
    */
   public function testFieldRevisionable() {
-    $definition = FieldDefinition::create($this->fieldType);
+    $definition = BaseFieldDefinition::create($this->fieldType);
     $this->assertFalse($definition->isRevisionable());
     $definition->setRevisionable(TRUE);
     $this->assertTrue($definition->isRevisionable());
@@ -180,7 +180,7 @@ public function testFieldRevisionable() {
    * Tests field cardinality.
    */
   public function testFieldCardinality() {
-    $definition = FieldDefinition::create($this->fieldType);
+    $definition = BaseFieldDefinition::create($this->fieldType);
     $this->assertEquals(1, $definition->getCardinality());
     $definition->setCardinality(2);
     $this->assertEquals(2, $definition->getCardinality());
@@ -192,7 +192,7 @@ public function testFieldCardinality() {
    * Tests required.
    */
   public function testFieldRequired() {
-    $definition = FieldDefinition::create($this->fieldType);
+    $definition = BaseFieldDefinition::create($this->fieldType);
     $this->assertFalse($definition->isRequired());
     $definition->setRequired(TRUE);
     $this->assertTrue($definition->isRequired());
@@ -204,7 +204,7 @@ public function testFieldRequired() {
    * Tests provider.
    */
   public function testFieldProvider() {
-    $definition = FieldDefinition::create($this->fieldType);
+    $definition = BaseFieldDefinition::create($this->fieldType);
     $provider = $this->randomMachineName();
     $definition->setProvider($provider);
     $this->assertEquals($provider, $definition->getProvider());
@@ -214,7 +214,7 @@ public function testFieldProvider() {
    * Tests custom storage.
    */
   public function testCustomStorage() {
-    $definition = FieldDefinition::create($this->fieldType);
+    $definition = BaseFieldDefinition::create($this->fieldType);
     $this->assertFalse($definition->hasCustomStorage());
     $definition->setCustomStorage(TRUE);
     $this->assertTrue($definition->hasCustomStorage());
diff --git a/core/tests/Drupal/Tests/Core/Entity/ContentEntityBaseUnitTest.php b/core/tests/Drupal/Tests/Core/Entity/ContentEntityBaseUnitTest.php
index aeee601a4bfc724519ea93afe0733ad3b0837bc3..cfa493382175a7b9a7f49647f678ba995f172e1c 100644
--- a/core/tests/Drupal/Tests/Core/Entity/ContentEntityBaseUnitTest.php
+++ b/core/tests/Drupal/Tests/Core/Entity/ContentEntityBaseUnitTest.php
@@ -8,7 +8,7 @@
 namespace Drupal\Tests\Core\Entity;
 
 use Drupal\Core\DependencyInjection\ContainerBuilder;
-use Drupal\Core\Field\FieldDefinition;
+use Drupal\Core\Field\BaseFieldDefinition;
 use Drupal\Core\Field\FieldItemBase;
 use Drupal\Tests\UnitTestCase;
 use Drupal\Core\Language\Language;
@@ -92,7 +92,7 @@ class ContentEntityBaseUnitTest extends UnitTestCase {
   /**
    * Field definitions.
    *
-   * @var \Drupal\Core\Field\FieldDefinition[]
+   * @var \Drupal\Core\Field\BaseFieldDefinition[]
    */
   protected $fieldDefinitions;
 
@@ -158,8 +158,8 @@ public function setUp() {
     \Drupal::setContainer($container);
 
     $this->fieldDefinitions = array(
-      'id' => FieldDefinition::create('integer'),
-      'revision_id' => FieldDefinition::create('integer'),
+      'id' => BaseFieldDefinition::create('integer'),
+      'revision_id' => BaseFieldDefinition::create('integer'),
     );
 
     $this->entityManager->expects($this->any())
diff --git a/core/tests/Drupal/Tests/Core/Entity/ContentEntityDatabaseStorageTest.php b/core/tests/Drupal/Tests/Core/Entity/ContentEntityDatabaseStorageTest.php
index 849d0630998eb426dd9b78b31d3fe69eb18ceb1b..64370377b69d92794fea047ee261e89c14d3a034 100644
--- a/core/tests/Drupal/Tests/Core/Entity/ContentEntityDatabaseStorageTest.php
+++ b/core/tests/Drupal/Tests/Core/Entity/ContentEntityDatabaseStorageTest.php
@@ -11,7 +11,7 @@
 use Drupal\Core\Entity\ContentEntityDatabaseStorage;
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Entity\EntityStorageInterface;
-use Drupal\Core\Field\FieldDefinition;
+use Drupal\Core\Field\BaseFieldDefinition;
 use Drupal\Tests\UnitTestCase;
 use Symfony\Component\DependencyInjection\ContainerBuilder;
 
@@ -38,7 +38,7 @@ class ContentEntityDatabaseStorageTest extends UnitTestCase {
   /**
    * An array of field definitions used for this test, keyed by field name.
    *
-   * @var \Drupal\Core\Field\FieldDefinition[]|\PHPUnit_Framework_MockObject_MockObject[]
+   * @var \Drupal\Core\Field\BaseFieldDefinition[]|\PHPUnit_Framework_MockObject_MockObject[]
    */
   protected $fieldDefinitions = array();
 
@@ -972,9 +972,9 @@ public function testFieldSqlSchemaForEntityWithStringIdentifier() {
       ->method('getDefaultInstanceSettings')
       ->will($this->returnValue(array()));
 
-    $this->fieldDefinitions['id'] = FieldDefinition::create('string')
+    $this->fieldDefinitions['id'] = BaseFieldDefinition::create('string')
       ->setName('id');
-    $this->fieldDefinitions['revision'] = FieldDefinition::create('string')
+    $this->fieldDefinitions['revision'] = BaseFieldDefinition::create('string')
       ->setName('revision');
 
     $this->entityManager->expects($this->any())
diff --git a/core/tests/Drupal/Tests/Core/Entity/Controller/EntityViewControllerTest.php b/core/tests/Drupal/Tests/Core/Entity/Controller/EntityViewControllerTest.php
index 6539a2b678c4bb46667729c0aafd6b963677b96a..3389858d2c2af3f9fb7899e95b1999e147023623 100644
--- a/core/tests/Drupal/Tests/Core/Entity/Controller/EntityViewControllerTest.php
+++ b/core/tests/Drupal/Tests/Core/Entity/Controller/EntityViewControllerTest.php
@@ -47,7 +47,7 @@ public function testView() {
       ->will($this->returnValue('name'));
 
     // Mock the 'name' field's definition.
-    $field_definition = $this->getMock('Drupal\Core\Field\FieldDefinition');
+    $field_definition = $this->getMock('Drupal\Core\Field\BaseFieldDefinition');
     $field_definition->expects($this->any())
       ->method('getDisplayOptions')
       ->with('view')
diff --git a/core/tests/Drupal/Tests/Core/Entity/EntityManagerTest.php b/core/tests/Drupal/Tests/Core/Entity/EntityManagerTest.php
index c86a29394dc5b774de44dfa07446519f8d21440e..7ec941e6314a73961ea5bc99e99289ef32874391 100644
--- a/core/tests/Drupal/Tests/Core/Entity/EntityManagerTest.php
+++ b/core/tests/Drupal/Tests/Core/Entity/EntityManagerTest.php
@@ -690,7 +690,7 @@ public function testGetFieldDefinitionsProvider() {
 
     // @todo Mock FieldDefinitionInterface once it exposes a proper provider
     //   setter. See https://drupal.org/node/2225961.
-    $field_definition = $this->getMockBuilder('Drupal\Core\Field\FieldDefinition')
+    $field_definition = $this->getMockBuilder('Drupal\Core\Field\BaseFieldDefinition')
       ->disableOriginalConstructor()
       ->getMock();
 
@@ -722,7 +722,7 @@ public function testGetFieldDefinitionsProvider() {
    * @param string $field_definition_id
    *   (optional) The ID to use for the field definition. Defaults to 'id'.
    *
-   * @return \Drupal\Core\Field\FieldDefinition|\PHPUnit_Framework_MockObject_MockObject
+   * @return \Drupal\Core\Field\BaseFieldDefinition|\PHPUnit_Framework_MockObject_MockObject
    *   A field definition object.
    */
   protected function setUpEntityWithFieldDefinition($custom_invoke_all = FALSE, $field_definition_id = 'id') {
@@ -742,7 +742,7 @@ protected function setUpEntityWithFieldDefinition($custom_invoke_all = FALSE, $f
       ->method('isSubclassOf')
       ->with($this->equalTo('\Drupal\Core\Entity\ContentEntityInterface'))
       ->will($this->returnValue(TRUE));
-    $field_definition = $this->getMockBuilder('Drupal\Core\Field\FieldDefinition')
+    $field_definition = $this->getMockBuilder('Drupal\Core\Field\BaseFieldDefinition')
       ->disableOriginalConstructor()
       ->getMock();
     $entity_class::$baseFieldDefinitions = array(
@@ -1080,7 +1080,7 @@ public function testGetFieldMap() {
 
 
     // Define an ID field definition as a base field.
-    $id_definition = $this->getMockBuilder('Drupal\Core\Field\FieldDefinition')
+    $id_definition = $this->getMockBuilder('Drupal\Core\Field\BaseFieldDefinition')
       ->disableOriginalConstructor()
       ->getMock();
     $id_definition->expects($this->exactly(2))
@@ -1092,7 +1092,7 @@ public function testGetFieldMap() {
     $entity_class::$baseFieldDefinitions = $base_field_definitions;
 
     // Set up a by bundle field definition that only exists on one bundle.
-    $bundle_definition = $this->getMockBuilder('Drupal\Core\Field\FieldDefinition')
+    $bundle_definition = $this->getMockBuilder('Drupal\Core\Field\BaseFieldDefinition')
       ->disableOriginalConstructor()
       ->getMock();
     $bundle_definition->expects($this->once())
@@ -1210,7 +1210,7 @@ public function testGetFieldMapByFieldType() {
 
 
     // Define an ID field definition as a base field.
-    $id_definition = $this->getMockBuilder('Drupal\Core\Field\FieldDefinition')
+    $id_definition = $this->getMockBuilder('Drupal\Core\Field\BaseFieldDefinition')
       ->disableOriginalConstructor()
       ->getMock();
     $id_definition->expects($this->exactly(2))
@@ -1222,7 +1222,7 @@ public function testGetFieldMapByFieldType() {
     $entity_class::$baseFieldDefinitions = $base_field_definitions;
 
     // Set up a by bundle field definition that only exists on one bundle.
-    $bundle_definition = $this->getMockBuilder('Drupal\Core\Field\FieldDefinition')
+    $bundle_definition = $this->getMockBuilder('Drupal\Core\Field\BaseFieldDefinition')
       ->disableOriginalConstructor()
       ->getMock();
     $bundle_definition->expects($this->once())
diff --git a/core/tests/Drupal/Tests/Core/Field/FieldDefinitionTestBase.php b/core/tests/Drupal/Tests/Core/Field/BaseFieldDefinitionTestBase.php
similarity index 83%
rename from core/tests/Drupal/Tests/Core/Field/FieldDefinitionTestBase.php
rename to core/tests/Drupal/Tests/Core/Field/BaseFieldDefinitionTestBase.php
index a77cc77c29e865474b2f39d05586994fb48f17da..ca0583f05d1dcb2dab021a616f6decb05014d713 100644
--- a/core/tests/Drupal/Tests/Core/Field/FieldDefinitionTestBase.php
+++ b/core/tests/Drupal/Tests/Core/Field/BaseFieldDefinitionTestBase.php
@@ -1,26 +1,26 @@
 <?php
+
 /**
  * @file
- * Contains \Drupal\Tests\Core\Fied\FieldDefinitionTestBase.
+ * Contains \Drupal\Tests\Core\Field\BaseFieldDefinitionTestBase.
  */
 
 namespace Drupal\Tests\Core\Field;
 
 use Drupal\Core\DependencyInjection\ContainerBuilder;
-use Drupal\Core\Field\FieldDefinition;
+use Drupal\Core\Field\BaseFieldDefinition;
 use Drupal\Core\Field\FieldTypePluginManager;
-use Drupal\Core\Language\Language;
 use Drupal\Tests\UnitTestCase;
 
 /**
- * Provides a test base class for testing field definitions.
+ * Provides setup method for testing base field definitions.
  */
-abstract class FieldDefinitionTestBase extends UnitTestCase {
+abstract class BaseFieldDefinitionTestBase extends UnitTestCase {
 
   /**
    * The field definition used in this test.
    *
-   * @var \Drupal\Core\Field\FieldDefinition
+   * @var \Drupal\Core\Field\BaseFieldDefinition
    */
   protected $definition;
 
@@ -52,7 +52,7 @@ public function setUp() {
     $container->set('string_translation', $this->getStringTranslationStub());
     \Drupal::setContainer($container);
 
-    $this->definition = FieldDefinition::create($this->getPluginId());
+    $this->definition = BaseFieldDefinition::create($this->getPluginId());
   }
 
   /**