diff --git a/core/lib/Drupal/Core/Entity/DatabaseStorageController.php b/core/lib/Drupal/Core/Entity/DatabaseStorageController.php
index 60c078c..8f7b220 100644
--- a/core/lib/Drupal/Core/Entity/DatabaseStorageController.php
+++ b/core/lib/Drupal/Core/Entity/DatabaseStorageController.php
@@ -17,7 +17,7 @@
 use Drupal\field\FieldUpdateForbiddenException;
 use Drupal\field\FieldInterface;
 use Drupal\field\FieldInstanceInterface;
-use Drupal\field\Entity\Field;
+use Drupal\field\Entity\FieldConfig;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
@@ -1196,7 +1196,7 @@ static public function _fieldIndexName(FieldInterface $field, $index) {
    *   unique among all other fields.
    */
   static public function _fieldColumnName(FieldInterface $field, $column) {
-    return in_array($column, Field::getReservedColumns()) ? $column : $field->getFieldName() . '_' . $column;
+    return in_array($column, FieldConfig::getReservedColumns()) ? $column : $field->getFieldName() . '_' . $column;
   }
 
 }
diff --git a/core/lib/Drupal/Core/Entity/Field/FieldDefinitionInterface.php b/core/lib/Drupal/Core/Entity/Field/FieldDefinitionInterface.php
index b8dc354..1aec027 100644
--- a/core/lib/Drupal/Core/Entity/Field/FieldDefinitionInterface.php
+++ b/core/lib/Drupal/Core/Entity/Field/FieldDefinitionInterface.php
@@ -26,16 +26,16 @@
  * It is up to the class implementing this interface to manage where the
  * information comes from. For example, field.module provides an implementation
  * based on two levels of configuration. It allows the site administrator to add
- * custom fields to any entity type and bundle via the "field_entity" and
- * "field_instance" configuration entities. The former for storing configuration
+ * custom fields to any entity type and bundle via the "field_config" and
+ * "field_instance_config" configuration entities. The former for storing configuration
  * that is independent of which entity type and bundle the field is added to,
  * and the latter for storing configuration that is specific to the entity type
- * and bundle. The class that implements "field_instance" configuration entities
+ * and bundle. The class that implements "field_instance_config" configuration entities
  * also implements this interface, returning information from either itself, or
- * from the corresponding "field_entity" configuration, as appropriate.
+ * from the corresponding "field_config" configuration, as appropriate.
  *
  * However, entity base fields, such as $node->title, are not managed by
- * field.module and its "field_entity"/"field_instance" configuration entities.
+ * field.module and its "field_config"/"field_instance_config" configuration entities.
  * Therefore, their definitions are provided by different objects that implement
  * this interface.
  * @todo That is still in progress: https://drupal.org/node/1949932. Update this
diff --git a/core/lib/Drupal/Core/Entity/Query/Sql/Tables.php b/core/lib/Drupal/Core/Entity/Query/Sql/Tables.php
index 91cac04..5ff35a8 100644
--- a/core/lib/Drupal/Core/Entity/Query/Sql/Tables.php
+++ b/core/lib/Drupal/Core/Entity/Query/Sql/Tables.php
@@ -12,7 +12,7 @@
 use Drupal\Core\Entity\DatabaseStorageController;
 use Drupal\Core\Entity\Plugin\DataType\EntityReference;
 use Drupal\Core\Entity\Query\QueryException;
-use Drupal\field\Entity\Field;
+use Drupal\field\Entity\FieldConfig;
 use Drupal\field\Field as FieldInfo;
 
 /**
@@ -118,7 +118,7 @@ public function addField($field, $type, $langcode) {
           $next = $specifiers[$key + 1];
           // Is this a field column?
           $columns = $field->getColumns();
-          if (isset($columns[$next]) || in_array($next, Field::getReservedColumns())) {
+          if (isset($columns[$next]) || in_array($next, FieldConfig::getReservedColumns())) {
             // Use it.
             $column = $next;
             // Do not process it again.
diff --git a/core/modules/block/custom_block/custom_block.module b/core/modules/block/custom_block/custom_block.module
index 8e81778..480264f 100644
--- a/core/modules/block/custom_block/custom_block.module
+++ b/core/modules/block/custom_block/custom_block.module
@@ -205,7 +205,7 @@ function custom_block_add_body_field($block_type_id, $label = 'Block body') {
   $field = field_info_field('custom_block', 'body');
   $instance = field_info_instance('custom_block', 'body', $block_type_id);
   if (empty($field)) {
-    $field = entity_create('field_entity', array(
+    $field = entity_create('field_config', array(
       'name' => 'body',
       'entity_type' => 'custom_block',
       'type' => 'text_with_summary',
@@ -213,7 +213,7 @@ function custom_block_add_body_field($block_type_id, $label = 'Block body') {
     $field->save();
   }
   if (empty($instance)) {
-    $instance = entity_create('field_instance', array(
+    $instance = entity_create('field_instance_config', array(
       'field_name' => 'body',
       'entity_type' => 'custom_block',
       'bundle' => $block_type_id,
diff --git a/core/modules/block/custom_block/lib/Drupal/custom_block/Tests/CustomBlockFieldTest.php b/core/modules/block/custom_block/lib/Drupal/custom_block/Tests/CustomBlockFieldTest.php
index c51be01..4d86735 100644
--- a/core/modules/block/custom_block/lib/Drupal/custom_block/Tests/CustomBlockFieldTest.php
+++ b/core/modules/block/custom_block/lib/Drupal/custom_block/Tests/CustomBlockFieldTest.php
@@ -32,7 +32,7 @@ class CustomBlockFieldTest extends CustomBlockTestBase {
   /**
    * The created instance.
    *
-   * @var \Drupal\field\Entity\FieldInstance
+   * @var \Drupal\field\Entity\FieldInstanceConfig
    */
   protected $instance;
 
@@ -64,14 +64,14 @@ public function testBlockFields() {
     $this->blockType = $this->createCustomBlockType('link');
 
     // Create a field with settings to validate.
-    $this->field = entity_create('field_entity', array(
+    $this->field = entity_create('field_config', array(
       'name' => drupal_strtolower($this->randomName()),
       'entity_type' => 'custom_block',
       'type' => 'link',
       'cardinality' => 2,
     ));
     $this->field->save();
-    $this->instance = entity_create('field_instance', array(
+    $this->instance = entity_create('field_instance_config', array(
       'field_name' => $this->field->getFieldName(),
       'entity_type' => 'custom_block',
       'bundle' => 'link',
diff --git a/core/modules/block/custom_block/lib/Drupal/custom_block/Tests/CustomBlockTypeTest.php b/core/modules/block/custom_block/lib/Drupal/custom_block/Tests/CustomBlockTypeTest.php
index 18e55df..36cd1bb 100644
--- a/core/modules/block/custom_block/lib/Drupal/custom_block/Tests/CustomBlockTypeTest.php
+++ b/core/modules/block/custom_block/lib/Drupal/custom_block/Tests/CustomBlockTypeTest.php
@@ -143,8 +143,8 @@ public function testCustomBlockTypeDeletion() {
   public function testsCustomBlockAddTypes() {
     $this->drupalLogin($this->adminUser);
     // Create two block types programmatically.
-    $type = $this->createCustomBlockType('foo');
-    $type = $this->createCustomBlockType('bar');
+    $this->createCustomBlockType('foo');
+    $this->createCustomBlockType('bar');
 
     // Get the custom block storage controller.
     $storage_controller = $this->container
diff --git a/core/modules/comment/comment.install b/core/modules/comment/comment.install
index dfc462b..d5f9b4e 100644
--- a/core/modules/comment/comment.install
+++ b/core/modules/comment/comment.install
@@ -14,7 +14,7 @@
  */
 function comment_uninstall() {
   // Remove the comment fields.
-  $fields = entity_load_multiple_by_properties('field_entity', array(
+  $fields = entity_load_multiple_by_properties('field_config', array(
     'type' => 'comment',
     'include_inactive' => TRUE,
     'include_deleted' => FALSE,
@@ -47,13 +47,13 @@ function comment_install() {
  *   An array of comment fields keyed by field ID.
  */
 function _comment_get_comment_fields() {
-  $fields = entity_load_multiple_by_properties('field_entity', array(
+  $fields = entity_load_multiple_by_properties('field_config', array(
     'type' => 'comment',
     'include_inactive' => TRUE,
     'include_deleted' => FALSE,
   ));
   foreach ($fields as &$field) {
-    $instances = entity_load_multiple_by_properties('field_instance', array(
+    $instances = entity_load_multiple_by_properties('field_instance_config', array(
       'field_uuid' => $field->uuid,
       'include_inactive' => TRUE,
       'include_deleted' => FALSE,
diff --git a/core/modules/comment/comment.module b/core/modules/comment/comment.module
index 2034cda..70a8829 100644
--- a/core/modules/comment/comment.module
+++ b/core/modules/comment/comment.module
@@ -274,9 +274,9 @@ function comment_count_unpublished() {
 }
 
 /**
- * Implements hook_ENTITY_TYPE_create() for 'field_instance'.
+ * Implements hook_ENTITY_TYPE_create() for 'field_instance_config'.
  */
-function comment_field_instance_create(FieldInstanceInterface $instance) {
+function comment_field_instance_config_create(FieldInstanceInterface $instance) {
   if ($instance->getFieldType() == 'comment') {
     \Drupal::service('comment.manager')->addBodyField($instance->entity_type, $instance->getFieldName());
     \Drupal::cache()->delete('comment_entity_info');
@@ -293,18 +293,18 @@ function comment_field_instance_create(FieldInstanceInterface $instance) {
 }
 
 /**
- * Implements hook_ENTITY_TYPE_update() for 'field_instance'.
+ * Implements hook_ENTITY_TYPE_update() for 'field_instance_config'.
  */
-function comment_field_instance_update(FieldInstanceInterface $instance) {
+function comment_field_instance_config_update(FieldInstanceInterface $instance) {
   if ($instance->getFieldType() == 'comment') {
     \Drupal::entityManager()->getRenderController($instance->entity_type)->resetCache();
   }
 }
 
 /**
- * Implements hook_ENTITY_TYPE_delete() for 'field_entity'.
+ * Implements hook_ENTITY_TYPE_delete() for 'field_config'.
  */
-function comment_field_entity_delete(FieldInterface $field) {
+function comment_field_config_delete(FieldInterface $field) {
   if ($field->getFieldType() == 'comment') {
     // Delete all fields and displays attached to the comment bundle.
     entity_invoke_bundle_hook('delete', 'comment', $field->getFieldName());
@@ -313,9 +313,9 @@ function comment_field_entity_delete(FieldInterface $field) {
 }
 
 /**
- * Implements hook_ENTITY_TYPE_delete() for 'field_instance'.
+ * Implements hook_ENTITY_TYPE_delete() for 'field_instance_config'.
  */
-function comment_field_instance_delete(FieldInstanceInterface $instance) {
+function comment_field_instance_config_delete(FieldInstanceInterface $instance) {
   if ($instance->getFieldType() == 'comment') {
     // Delete all comments that used by the entity bundle.
     $comments = db_query("SELECT cid FROM {comment} WHERE entity_type = :entity_type AND field_id = :field_id", array(
diff --git a/core/modules/comment/lib/Drupal/comment/CommentManager.php b/core/modules/comment/lib/Drupal/comment/CommentManager.php
index 4b3ab0b..4e34d67 100644
--- a/core/modules/comment/lib/Drupal/comment/CommentManager.php
+++ b/core/modules/comment/lib/Drupal/comment/CommentManager.php
@@ -119,7 +119,7 @@ public function addDefaultField($entity_type, $bundle, $field_name = 'comment',
     // Make sure the field doesn't already exist.
     if (!$this->fieldInfo->getField($entity_type, $field_name)) {
       // Add a default comment field for existing node comments.
-      $field = $this->entityManager->getStorageController('field_entity')->create(array(
+      $field = $this->entityManager->getStorageController('field_config')->create(array(
         'entity_type' => $entity_type,
         'name' => $field_name,
         'type' => 'comment',
@@ -130,7 +130,7 @@ public function addDefaultField($entity_type, $bundle, $field_name = 'comment',
     }
     // Make sure the instance doesn't already exist.
     if (!$this->fieldInfo->getInstance($entity_type, $bundle, $field_name)) {
-      $instance = $this->entityManager->getStorageController('field_instance')->create(array(
+      $instance = $this->entityManager->getStorageController('field_instance_config')->create(array(
         'label' => 'Comment settings',
         'description' => '',
         'field_name' => $field_name,
@@ -179,9 +179,9 @@ public function addDefaultField($entity_type, $bundle, $field_name = 'comment',
    */
   public function addBodyField($entity_type, $field_name) {
     // Create the field if needed.
-    $field = $this->entityManager->getStorageController('field_entity')->load('comment.comment_body');
+    $field = $this->entityManager->getStorageController('field_config')->load('comment.comment_body');
     if (!$field) {
-      $field = $this->entityManager->getStorageController('field_entity')->create(array(
+      $field = $this->entityManager->getStorageController('field_config')->create(array(
         'name' => 'comment_body',
         'type' => 'text_long',
         'entity_type' => 'comment',
@@ -191,11 +191,11 @@ public function addBodyField($entity_type, $field_name) {
     // Create the instance if needed, field name defaults to 'comment'.
     $comment_bundle = $entity_type . '__' . $field_name;
     $field_instance = $this->entityManager
-      ->getStorageController('field_instance')
+      ->getStorageController('field_instance_config')
       ->load("comment.$comment_bundle.comment_body");
     if (!$field_instance) {
       // Attaches the body field by default.
-      $field_instance = $this->entityManager->getStorageController('field_instance')->create(array(
+      $field_instance = $this->entityManager->getStorageController('field_instance_config')->create(array(
         'field_name' => 'comment_body',
         'label' => 'Comment',
         'entity_type' => 'comment',
diff --git a/core/modules/comment/lib/Drupal/comment/Tests/CommentFieldsTest.php b/core/modules/comment/lib/Drupal/comment/Tests/CommentFieldsTest.php
index 8f34413..f51396f 100644
--- a/core/modules/comment/lib/Drupal/comment/Tests/CommentFieldsTest.php
+++ b/core/modules/comment/lib/Drupal/comment/Tests/CommentFieldsTest.php
@@ -68,7 +68,7 @@ function testCommentInstallAfterContentModule() {
     $this->drupalLogin($this->admin_user);
 
     // Drop default comment field added in CommentTestBase::setup().
-    entity_load('field_entity', 'node.comment')->delete();
+    entity_load('field_config', 'node.comment')->delete();
     if ($field = $this->container->get('field.info')->getField('node', 'comment_node_forum')) {
       $field->delete();
     }
diff --git a/core/modules/comment/lib/Drupal/comment/Tests/CommentNodeChangesTest.php b/core/modules/comment/lib/Drupal/comment/Tests/CommentNodeChangesTest.php
index 89abd33..a6c8129 100644
--- a/core/modules/comment/lib/Drupal/comment/Tests/CommentNodeChangesTest.php
+++ b/core/modules/comment/lib/Drupal/comment/Tests/CommentNodeChangesTest.php
@@ -31,11 +31,11 @@ function testNodeDeletion() {
     $this->assertFalse(comment_load($comment->id()), 'The comment could not be loaded after the node was deleted.');
     // Make sure the comment field and all its instances are deleted when node
     // type is deleted.
-    $this->assertNotNull(entity_load('field_entity', 'node.comment'), 'Comment field exists');
-    $this->assertNotNull(entity_load('field_instance', 'node.article.comment'), 'Comment instance exists');
+    $this->assertNotNull(entity_load('field_config', 'node.comment'), 'Comment field exists');
+    $this->assertNotNull(entity_load('field_instance_config', 'node.article.comment'), 'Comment instance exists');
     // Delete the node type.
     entity_delete_multiple('node_type', array($this->node->bundle()));
-    $this->assertNull(entity_load('field_entity', 'node.comment'), 'Comment field deleted');
-    $this->assertNull(entity_load('field_instance', 'node.article.comment'), 'Comment instance deleted');
+    $this->assertNull(entity_load('field_config', 'node.comment'), 'Comment field deleted');
+    $this->assertNull(entity_load('field_instance_config', 'node.article.comment'), 'Comment instance deleted');
   }
 }
diff --git a/core/modules/contact/lib/Drupal/contact/Tests/Views/ContactFieldsTest.php b/core/modules/contact/lib/Drupal/contact/Tests/Views/ContactFieldsTest.php
index 650a216..922e7b4 100644
--- a/core/modules/contact/lib/Drupal/contact/Tests/Views/ContactFieldsTest.php
+++ b/core/modules/contact/lib/Drupal/contact/Tests/Views/ContactFieldsTest.php
@@ -40,14 +40,14 @@ public static function getInfo() {
   protected function setUp() {
     parent::setUp();
 
-    $this->field = entity_create('field_entity', array(
+    $this->field = entity_create('field_config', array(
       'name' => strtolower($this->randomName()),
       'entity_type' => 'contact_message',
       'type' => 'text'
     ));
     $this->field->save();
 
-    entity_create('field_instance', array(
+    entity_create('field_instance_config', array(
       'field_name' => $this->field->name,
       'entity_type' => 'contact_message',
       'bundle' => 'contact_message',
diff --git a/core/modules/content_translation/lib/Drupal/content_translation/Form/TranslatableForm.php b/core/modules/content_translation/lib/Drupal/content_translation/Form/TranslatableForm.php
index 2907e47..e9b66ee 100644
--- a/core/modules/content_translation/lib/Drupal/content_translation/Form/TranslatableForm.php
+++ b/core/modules/content_translation/lib/Drupal/content_translation/Form/TranslatableForm.php
@@ -8,7 +8,7 @@
 namespace Drupal\content_translation\Form;
 
 use Drupal\Core\Form\ConfirmFormBase;
-use Drupal\field\Entity\Field;
+use Drupal\field\Entity\FieldConfig;
 use Drupal\field\Field as FieldInfo;
 
 /**
diff --git a/core/modules/content_translation/lib/Drupal/content_translation/Tests/ContentTranslationSyncImageTest.php b/core/modules/content_translation/lib/Drupal/content_translation/Tests/ContentTranslationSyncImageTest.php
index c813790..155df5d 100644
--- a/core/modules/content_translation/lib/Drupal/content_translation/Tests/ContentTranslationSyncImageTest.php
+++ b/core/modules/content_translation/lib/Drupal/content_translation/Tests/ContentTranslationSyncImageTest.php
@@ -56,7 +56,7 @@ protected function setupTestFields() {
     $this->fieldName = 'field_test_et_ui_image';
     $this->cardinality = 3;
 
-    entity_create('field_entity', array(
+    entity_create('field_config', array(
       'name' => $this->fieldName,
       'entity_type' => $this->entityType,
       'type' => 'image',
@@ -64,7 +64,7 @@ protected function setupTestFields() {
       'translatable' => TRUE,
     ))->save();
 
-    entity_create('field_instance', array(
+    entity_create('field_instance_config', array(
       'entity_type' => $this->entityType,
       'field_name' => $this->fieldName,
       'bundle' => $this->entityType,
diff --git a/core/modules/content_translation/lib/Drupal/content_translation/Tests/ContentTranslationTestBase.php b/core/modules/content_translation/lib/Drupal/content_translation/Tests/ContentTranslationTestBase.php
index b43d921..6e4236f 100644
--- a/core/modules/content_translation/lib/Drupal/content_translation/Tests/ContentTranslationTestBase.php
+++ b/core/modules/content_translation/lib/Drupal/content_translation/Tests/ContentTranslationTestBase.php
@@ -161,14 +161,14 @@ protected function enableTranslation() {
   protected function setupTestFields() {
     $this->fieldName = 'field_test_et_ui_test';
 
-    entity_create('field_entity', array(
+    entity_create('field_config', array(
       'name' => $this->fieldName,
       'type' => 'text',
       'entity_type' => $this->entityType,
       'cardinality' => 1,
       'translatable' => TRUE,
     ))->save();
-    entity_create('field_instance', array(
+    entity_create('field_instance_config', array(
       'entity_type' => $this->entityType,
       'field_name' => $this->fieldName,
       'bundle' => $this->bundle,
diff --git a/core/modules/datetime/lib/Drupal/datetime/Tests/DateTimeItemTest.php b/core/modules/datetime/lib/Drupal/datetime/Tests/DateTimeItemTest.php
index ba54348..3d107cf 100644
--- a/core/modules/datetime/lib/Drupal/datetime/Tests/DateTimeItemTest.php
+++ b/core/modules/datetime/lib/Drupal/datetime/Tests/DateTimeItemTest.php
@@ -35,14 +35,14 @@ public function setUp() {
     parent::setUp();
 
     // Create a field with settings to validate.
-    $this->field = entity_create('field_entity', array(
+    $this->field = entity_create('field_config', array(
       'name' => 'field_datetime',
       'type' => 'datetime',
       'entity_type' => 'entity_test',
       'settings' => array('datetime_type' => 'date'),
     ));
     $this->field->save();
-    $this->instance = entity_create('field_instance', array(
+    $this->instance = entity_create('field_instance_config', array(
       'field_name' => $this->field->getFieldName(),
       'entity_type' => 'entity_test',
       'bundle' => 'entity_test',
diff --git a/core/modules/datetime/lib/Drupal/datetime/Tests/DatetimeFieldTest.php b/core/modules/datetime/lib/Drupal/datetime/Tests/DatetimeFieldTest.php
index 5bee2e3..647652a 100644
--- a/core/modules/datetime/lib/Drupal/datetime/Tests/DatetimeFieldTest.php
+++ b/core/modules/datetime/lib/Drupal/datetime/Tests/DatetimeFieldTest.php
@@ -32,7 +32,7 @@ class DatetimeFieldTest extends WebTestBase {
   /**
    * The instance used in this test class.
    *
-   * @var \Drupal\field\Entity\FieldInstance
+   * @var \Drupal\field\Entity\FieldInstanceConfig
    */
   protected $instance;
 
@@ -55,14 +55,14 @@ function setUp() {
     $this->drupalLogin($web_user);
 
     // Create a field with settings to validate.
-    $this->field = entity_create('field_entity', array(
+    $this->field = entity_create('field_config', array(
       'name' => drupal_strtolower($this->randomName()),
       'entity_type' => 'entity_test',
       'type' => 'datetime',
       'settings' => array('datetime_type' => 'date'),
     ));
     $this->field->save();
-    $this->instance = entity_create('field_instance', array(
+    $this->instance = entity_create('field_instance_config', array(
       'field_name' => $this->field->name,
       'entity_type' => 'entity_test',
       'bundle' => 'entity_test',
diff --git a/core/modules/edit/lib/Drupal/edit/Tests/EditTestBase.php b/core/modules/edit/lib/Drupal/edit/Tests/EditTestBase.php
index eb7fef6..f838400 100644
--- a/core/modules/edit/lib/Drupal/edit/Tests/EditTestBase.php
+++ b/core/modules/edit/lib/Drupal/edit/Tests/EditTestBase.php
@@ -55,7 +55,7 @@ function setUp() {
    */
   function createFieldWithInstance($field_name, $type, $cardinality, $label, $instance_settings, $widget_type, $widget_settings, $formatter_type, $formatter_settings) {
     $field = $field_name . '_field';
-    $this->$field = entity_create('field_entity', array(
+    $this->$field = entity_create('field_config', array(
       'name' => $field_name,
       'entity_type' => 'entity_test',
       'type' => $type,
@@ -64,7 +64,7 @@ function createFieldWithInstance($field_name, $type, $cardinality, $label, $inst
     $this->$field->save();
 
     $instance = $field_name . '_instance';
-    $this->$instance = entity_create('field_instance', array(
+    $this->$instance = entity_create('field_instance_config', array(
       'field_name' => $field_name,
       'entity_type' => 'entity_test',
       'bundle' => 'entity_test',
diff --git a/core/modules/edit/lib/Drupal/edit/Tests/EditorSelectionTest.php b/core/modules/edit/lib/Drupal/edit/Tests/EditorSelectionTest.php
index c04733a..70f36cc 100644
--- a/core/modules/edit/lib/Drupal/edit/Tests/EditorSelectionTest.php
+++ b/core/modules/edit/lib/Drupal/edit/Tests/EditorSelectionTest.php
@@ -50,8 +50,8 @@ function setUp() {
    */
   protected function getSelectedEditor($items, $field_name, $view_mode = 'default') {
     $options = entity_get_display('entity_test', 'entity_test', $view_mode)->getComponent($field_name);
-    $field_instance = field_info_instance('entity_test', $field_name, 'entity_test');
-    return $this->editorSelector->getEditor($options['type'], $field_instance, $items);
+    $field_instance_config = field_info_instance('entity_test', $field_name, 'entity_test');
+    return $this->editorSelector->getEditor($options['type'], $field_instance_config, $items);
   }
 
   /**
diff --git a/core/modules/editor/lib/Drupal/editor/Tests/EditIntegrationTest.php b/core/modules/editor/lib/Drupal/editor/Tests/EditIntegrationTest.php
index 6be87d0..de3d60b 100644
--- a/core/modules/editor/lib/Drupal/editor/Tests/EditIntegrationTest.php
+++ b/core/modules/editor/lib/Drupal/editor/Tests/EditIntegrationTest.php
@@ -111,8 +111,8 @@ function setUp() {
    */
   protected function getSelectedEditor($items, $field_name, $view_mode = 'default') {
     $options = entity_get_display('entity_test', 'entity_test', $view_mode)->getComponent($field_name);
-    $field_instance = field_info_instance('entity_test', $field_name, 'entity_test');
-    return $this->editorSelector->getEditor($options['type'], $field_instance, $items);
+    $field_instance_config = field_info_instance('entity_test', $field_name, 'entity_test');
+    return $this->editorSelector->getEditor($options['type'], $field_instance_config, $items);
   }
 
   /**
diff --git a/core/modules/email/lib/Drupal/email/Tests/EmailFieldTest.php b/core/modules/email/lib/Drupal/email/Tests/EmailFieldTest.php
index 60fd532..b10d59c 100644
--- a/core/modules/email/lib/Drupal/email/Tests/EmailFieldTest.php
+++ b/core/modules/email/lib/Drupal/email/Tests/EmailFieldTest.php
@@ -32,7 +32,7 @@ class EmailFieldTest extends WebTestBase {
   /**
    * The instance used in this test class.
    *
-   * @var \Drupal\field\Entity\FieldInstance
+   * @var \Drupal\field\Entity\FieldInstanceConfig
    */
   protected $instance;
 
@@ -61,13 +61,13 @@ function setUp() {
   function testEmailField() {
     // Create a field with settings to validate.
     $field_name = drupal_strtolower($this->randomName());
-    $this->field = entity_create('field_entity', array(
+    $this->field = entity_create('field_config', array(
       'name' => $field_name,
       'entity_type' => 'entity_test',
       'type' => 'email',
     ));
     $this->field->save();
-    $this->instance = entity_create('field_instance', array(
+    $this->instance = entity_create('field_instance_config', array(
       'field_name' => $field_name,
       'entity_type' => 'entity_test',
       'bundle' => 'entity_test',
diff --git a/core/modules/email/lib/Drupal/email/Tests/EmailItemTest.php b/core/modules/email/lib/Drupal/email/Tests/EmailItemTest.php
index ab05590..bfdc4c4 100644
--- a/core/modules/email/lib/Drupal/email/Tests/EmailItemTest.php
+++ b/core/modules/email/lib/Drupal/email/Tests/EmailItemTest.php
@@ -35,12 +35,12 @@ public function setUp() {
     parent::setUp();
 
     // Create an email field and instance for validation.
-    entity_create('field_entity', array(
+    entity_create('field_config', array(
       'name' => 'field_email',
       'entity_type' => 'entity_test',
       'type' => 'email',
     ))->save();
-    entity_create('field_instance', array(
+    entity_create('field_instance_config', array(
       'entity_type' => 'entity_test',
       'field_name' => 'field_email',
       'bundle' => 'entity_test',
diff --git a/core/modules/entity/lib/Drupal/entity/Tests/EntityDisplayTest.php b/core/modules/entity/lib/Drupal/entity/Tests/EntityDisplayTest.php
index c8f38f7..13de75b 100644
--- a/core/modules/entity/lib/Drupal/entity/Tests/EntityDisplayTest.php
+++ b/core/modules/entity/lib/Drupal/entity/Tests/EntityDisplayTest.php
@@ -141,13 +141,13 @@ public function testFieldComponent() {
 
     $field_name = 'test_field';
     // Create a field and an instance.
-    $field = entity_create('field_entity', array(
+    $field = entity_create('field_config', array(
       'name' => $field_name,
       'entity_type' => 'entity_test',
       'type' => 'test_field'
     ));
     $field->save();
-    $instance = entity_create('field_instance', array(
+    $instance = entity_create('field_instance_config', array(
       'field_name' => $field_name,
       'entity_type' => 'entity_test',
       'bundle' => 'entity_test',
@@ -244,13 +244,13 @@ public function testDeleteFieldInstance() {
 
     $field_name = 'test_field';
     // Create a field and an instance.
-    $field = entity_create('field_entity', array(
+    $field = entity_create('field_config', array(
       'name' => $field_name,
       'entity_type' => 'entity_test',
       'type' => 'test_field'
     ));
     $field->save();
-    $instance = entity_create('field_instance', array(
+    $instance = entity_create('field_instance_config', array(
       'field_name' => $field_name,
       'entity_type' => 'entity_test',
       'bundle' => 'entity_test',
diff --git a/core/modules/entity/lib/Drupal/entity/Tests/EntityFormDisplayTest.php b/core/modules/entity/lib/Drupal/entity/Tests/EntityFormDisplayTest.php
index 84bbe11..5765f07 100644
--- a/core/modules/entity/lib/Drupal/entity/Tests/EntityFormDisplayTest.php
+++ b/core/modules/entity/lib/Drupal/entity/Tests/EntityFormDisplayTest.php
@@ -63,13 +63,13 @@ public function testFieldComponent() {
 
     // Create a field and an instance.
     $field_name = 'test_field';
-    $field = entity_create('field_entity', array(
+    $field = entity_create('field_config', array(
       'name' => $field_name,
       'entity_type' => 'entity_test',
       'type' => 'test_field'
     ));
     $field->save();
-    $instance = entity_create('field_instance', array(
+    $instance = entity_create('field_instance_config', array(
       'field_name' => $field_name,
       'entity_type' => 'entity_test',
       'bundle' => 'entity_test',
@@ -128,13 +128,13 @@ public function testDeleteFieldInstance() {
 
     $field_name = 'test_field';
     // Create a field and an instance.
-    $field = entity_create('field_entity', array(
+    $field = entity_create('field_config', array(
       'name' => $field_name,
       'entity_type' => 'entity_test',
       'type' => 'test_field'
     ));
     $field->save();
-    $instance = entity_create('field_instance', array(
+    $instance = entity_create('field_instance_config', array(
       'field_name' => $field_name,
       'entity_type' => 'entity_test',
       'bundle' => 'entity_test',
diff --git a/core/modules/entity_reference/entity_reference.module b/core/modules/entity_reference/entity_reference.module
index 7b379e4..37142cb 100644
--- a/core/modules/entity_reference/entity_reference.module
+++ b/core/modules/entity_reference/entity_reference.module
@@ -63,11 +63,11 @@ function entity_reference_field_widget_info_alter(&$info) {
 }
 
 /**
- * Implements hook_ENTITY_TYPE_update() for 'field_entity'.
+ * Implements hook_ENTITY_TYPE_update() for 'field_config'.
  *
  * Reset the instance handler settings, when the target type is changed.
  */
-function entity_reference_field_entity_update(FieldInterface $field) {
+function entity_reference_field_config_update(FieldInterface $field) {
   if ($field->type != 'entity_reference') {
     // Only act on entity reference fields.
     return;
@@ -236,7 +236,7 @@ function entity_reference_create_instance($entity_type, $bundle, $field_name, $f
         'target_type' => $target_entity_type,
       ),
     );
-    entity_create('field_entity', $field)->save();
+    entity_create('field_config', $field)->save();
   }
 
   if (empty($instance)) {
@@ -250,7 +250,7 @@ function entity_reference_create_instance($entity_type, $bundle, $field_name, $f
         'handler_settings' => $selection_handler_settings,
       ),
     );
-    entity_create('field_instance', $instance)->save();
+    entity_create('field_instance_config', $instance)->save();
   }
 }
 
diff --git a/core/modules/entity_reference/lib/Drupal/entity_reference/Plugin/field/field_type/ConfigurableEntityReferenceItem.php b/core/modules/entity_reference/lib/Drupal/entity_reference/Plugin/field/field_type/ConfigurableEntityReferenceItem.php
index 96dbdc3..ddd6b45 100644
--- a/core/modules/entity_reference/lib/Drupal/entity_reference/Plugin/field/field_type/ConfigurableEntityReferenceItem.php
+++ b/core/modules/entity_reference/lib/Drupal/entity_reference/Plugin/field/field_type/ConfigurableEntityReferenceItem.php
@@ -9,9 +9,7 @@
 
 use Drupal\Core\Annotation\Translation;
 use Drupal\Core\Entity\Annotation\FieldType;
-use Drupal\Core\Entity\Field\Type\EntityReferenceItem;
 use Drupal\field\Plugin\Type\FieldType\ConfigEntityReferenceItemBase;
-use Drupal\field\Plugin\Type\FieldType\ConfigFieldItemBase;
 use Drupal\field\Plugin\Type\FieldType\ConfigFieldItemInterface;
 use Drupal\field\FieldInterface;
 
diff --git a/core/modules/entity_reference/lib/Drupal/entity_reference/Tests/EntityReferenceAutoCreateTest.php b/core/modules/entity_reference/lib/Drupal/entity_reference/Tests/EntityReferenceAutoCreateTest.php
index f07a6ee..620c6ba 100644
--- a/core/modules/entity_reference/lib/Drupal/entity_reference/Tests/EntityReferenceAutoCreateTest.php
+++ b/core/modules/entity_reference/lib/Drupal/entity_reference/Tests/EntityReferenceAutoCreateTest.php
@@ -35,7 +35,7 @@ function setUp() {
     $referenced = $this->drupalCreateContentType();
     $this->referenced_type = $referenced->type;
 
-    entity_create('field_entity', array(
+    entity_create('field_config', array(
       'name' => 'test_field',
       'entity_type' => 'node',
       'translatable' => FALSE,
@@ -47,7 +47,7 @@ function setUp() {
       'cardinality' => FIELD_CARDINALITY_UNLIMITED,
     ))->save();
 
-    entity_create('field_instance', array(
+    entity_create('field_instance_config', array(
       'label' => 'Entity reference field',
       'field_name' => 'test_field',
       'entity_type' => 'node',
diff --git a/core/modules/entity_reference/lib/Drupal/entity_reference/Tests/EntityReferenceSelectionAccessTest.php b/core/modules/entity_reference/lib/Drupal/entity_reference/Tests/EntityReferenceSelectionAccessTest.php
index aba580c..1ef2a14 100644
--- a/core/modules/entity_reference/lib/Drupal/entity_reference/Tests/EntityReferenceSelectionAccessTest.php
+++ b/core/modules/entity_reference/lib/Drupal/entity_reference/Tests/EntityReferenceSelectionAccessTest.php
@@ -60,7 +60,7 @@ protected function assertReferenceable(FieldDefinitionInterface $field_definitio
    */
   public function testNodeHandler() {
     // Create a field and instance.
-    $field = entity_create('field_entity', array(
+    $field = entity_create('field_config', array(
       'name' => 'test_field',
       'entity_type' => 'entity_test',
       'translatable' => FALSE,
@@ -72,7 +72,7 @@ public function testNodeHandler() {
       'cardinality' => '1',
     ));
     $field->save();
-    $instance = entity_create('field_instance', array(
+    $instance = entity_create('field_instance_config', array(
       'field_name' => 'test_field',
       'entity_type' => 'entity_test',
       'bundle' => 'test_bundle',
@@ -205,7 +205,7 @@ public function testNodeHandler() {
    */
   public function testUserHandler() {
     // Create a field and instance.
-    $field = entity_create('field_entity', array(
+    $field = entity_create('field_config', array(
       'name' => 'test_field',
       'entity_type' => 'entity_test',
       'translatable' => FALSE,
@@ -216,7 +216,7 @@ public function testUserHandler() {
       'cardinality' => '1',
     ));
     $field->save();
-    $instance = entity_create('field_instance', array(
+    $instance = entity_create('field_instance_config', array(
       'field_name' => 'test_field',
       'entity_type' => 'entity_test',
       'bundle' => 'test_bundle',
@@ -351,7 +351,7 @@ public function testUserHandler() {
    */
   public function testCommentHandler() {
     // Create a field and instance.
-    $field = entity_create('field_entity', array(
+    $field = entity_create('field_config', array(
       'name' => 'test_field',
       'entity_type' => 'entity_test',
       'translatable' => FALSE,
@@ -363,7 +363,7 @@ public function testCommentHandler() {
       'cardinality' => '1',
     ));
     $field->save();
-    $instance = entity_create('field_instance', array(
+    $instance = entity_create('field_instance_config', array(
       'field_name' => 'test_field',
       'entity_type' => 'entity_test',
       'bundle' => 'test_bundle',
diff --git a/core/modules/entity_reference/lib/Drupal/entity_reference/Tests/EntityReferenceSelectionSortTest.php b/core/modules/entity_reference/lib/Drupal/entity_reference/Tests/EntityReferenceSelectionSortTest.php
index a93300e..43fd7ee 100644
--- a/core/modules/entity_reference/lib/Drupal/entity_reference/Tests/EntityReferenceSelectionSortTest.php
+++ b/core/modules/entity_reference/lib/Drupal/entity_reference/Tests/EntityReferenceSelectionSortTest.php
@@ -36,14 +36,14 @@ function setUp() {
    */
   public function testSort() {
     // Add text field to entity, to sort by.
-    entity_create('field_entity', array(
+    entity_create('field_config', array(
       'name' => 'field_text',
       'entity_type' => 'node',
       'type' => 'text',
       'entity_types' => array('node'),
     ))->save();
 
-    entity_create('field_instance', array(
+    entity_create('field_instance_config', array(
       'label' => 'Text Field',
       'field_name' => 'field_text',
       'entity_type' => 'node',
@@ -54,7 +54,7 @@ public function testSort() {
 
 
     // Create a field and instance.
-    $field = entity_create('field_entity', array(
+    $field = entity_create('field_config', array(
       'name' => 'test_field',
       'entity_type' => 'entity_test',
       'translatable' => FALSE,
@@ -65,7 +65,7 @@ public function testSort() {
       'cardinality' => 1,
     ));
     $field->save();
-    $instance = entity_create('field_instance', array(
+    $instance = entity_create('field_instance_config', array(
       'field_name' => 'test_field',
       'entity_type' => 'entity_test',
       'bundle' => 'test_bundle',
diff --git a/core/modules/entity_reference/lib/Drupal/entity_reference/Tests/Views/SelectionTest.php b/core/modules/entity_reference/lib/Drupal/entity_reference/Tests/Views/SelectionTest.php
index 7e6a652..ab740d1 100644
--- a/core/modules/entity_reference/lib/Drupal/entity_reference/Tests/Views/SelectionTest.php
+++ b/core/modules/entity_reference/lib/Drupal/entity_reference/Tests/Views/SelectionTest.php
@@ -40,7 +40,7 @@ public function testSelectionHandler() {
     }
 
     // Create a field and instance.
-    $field = entity_create('field_entity', array(
+    $field = entity_create('field_config', array(
       'name' => 'test_field',
       'entity_type' => 'entity_test',
       'translatable' => FALSE,
@@ -51,7 +51,7 @@ public function testSelectionHandler() {
       'cardinality' => '1',
     ));
     $field->save();
-    $instance = entity_create('field_instance', array(
+    $instance = entity_create('field_instance_config', array(
       'field_name' => 'test_field',
       'entity_type' => 'entity_test',
       'bundle' => 'test_bundle',
diff --git a/core/modules/field/field.api.php b/core/modules/field/field.api.php
index 161c230..5b2620d 100644
--- a/core/modules/field/field.api.php
+++ b/core/modules/field/field.api.php
@@ -563,7 +563,7 @@ function hook_field_purge_field($field) {
  *   The instance being purged.
  */
 function hook_field_purge_instance($instance) {
-  db_delete('my_module_field_instance_info')
+  db_delete('my_module_field_instance_config_info')
     ->condition('id', $instance['id'])
     ->execute();
 }
diff --git a/core/modules/field/field.deprecated.inc b/core/modules/field/field.deprecated.inc
index 6f4a643..0e48adf 100644
--- a/core/modules/field/field.deprecated.inc
+++ b/core/modules/field/field.deprecated.inc
@@ -351,7 +351,7 @@ function field_info_instance($entity_type, $field_name, $bundle_name) {
  *   A field definition array, or FALSE.
  *
  * @deprecated as of Drupal 8.0. Use
- *   entity_load('field_entity', 'field_name').
+ *   entity_load('field_config', 'field_name').
  */
 function field_read_field($entity_type, $field_name, $include_additional = array()) {
   $fields = field_read_fields(array('entity_type' => $entity_type, 'name' => $field_name), $include_additional);
@@ -376,7 +376,7 @@ function field_read_field($entity_type, $field_name, $include_additional = array
  *   field ID, otherwise it is keyed by field name.
  *
  * @deprecated as of Drupal 8.0. Use
- *   entity_load_multiple_by_properties('field_entity', $conditions).
+ *   entity_load_multiple_by_properties('field_config', $conditions).
  */
 function field_read_fields($conditions = array(), $include_additional = array()) {
   // Include inactive fields if specified in the $include_additional parameter.
@@ -389,7 +389,7 @@ function field_read_fields($conditions = array(), $include_additional = array())
   $conditions['include_inactive'] = $include_inactive;
   $conditions['include_deleted'] = $include_deleted;
 
-  return entity_load_multiple_by_properties('field_entity', $conditions);
+  return entity_load_multiple_by_properties('field_config', $conditions);
 }
 
 /**
@@ -415,7 +415,7 @@ function field_read_fields($conditions = array(), $include_additional = array())
  *   An instance structure, or FALSE.
  *
  * @deprecated as of Drupal 8.0. Use
- *   entity_load('field_instance', 'field_name').
+ *   entity_load('field_instance_config', 'field_name').
  */
 function field_read_instance($entity_type, $field_name, $bundle, $include_additional = array()) {
   $instances = field_read_instances(array('entity_type' => $entity_type, 'field_name' => $field_name, 'bundle' => $bundle), $include_additional);
@@ -439,7 +439,7 @@ function field_read_instance($entity_type, $field_name, $bundle, $include_additi
  *   An array of instances matching the arguments.
  *
  * @deprecated as of Drupal 8.0. Use
- *   entity_load_multiple_by_properties('field_instance', $conditions).
+ *   entity_load_multiple_by_properties('field_instance_config', $conditions).
  */
 function field_read_instances($conditions = array(), $include_additional = array()) {
   // Include instances of inactive fields if specified in the
@@ -453,7 +453,7 @@ function field_read_instances($conditions = array(), $include_additional = array
   $conditions['include_inactive'] = $include_inactive;
   $conditions['include_deleted'] = $include_deleted;
 
-  return entity_load_multiple_by_properties('field_instance', $conditions);
+  return entity_load_multiple_by_properties('field_instance_config', $conditions);
 }
 
 /**
diff --git a/core/modules/field/field.install b/core/modules/field/field.install
index 36eb926..23f0bc1 100644
--- a/core/modules/field/field.install
+++ b/core/modules/field/field.install
@@ -6,7 +6,7 @@
  */
 
 use Drupal\Core\Entity\DatabaseStorageController;
-use Drupal\field\Entity\Field;
+use Drupal\field\Entity\FieldConfig;
 
 /**
  * Creates a field by writing directly to configuration.
@@ -48,7 +48,7 @@ function _update_8003_field_create_field(array &$field_config) {
 
   // Create storage for the field. This requires a field entity, but cannot use
   // the regular entity_create() function here.
-  $schema = DatabaseStorageController::_fieldSqlSchema(new Field($field_config), $field_config['schema']);
+  $schema = DatabaseStorageController::_fieldSqlSchema(new FieldConfig($field_config), $field_config['schema']);
   foreach ($schema as $name => $table) {
     db_create_table($name, $table);
   }
@@ -116,7 +116,7 @@ function _update_8006_field_write_data_sql($entity_type, $bundle, $entity_id, $r
   }
 
   $field_config = \Drupal::config("field.field.$entity_type.$field_name");
-  $field = new Field($field_config);
+  $field = new FieldConfig($field_config);
 
   $table_name = DatabaseStorageController::_fieldTableName($field);
   $revision_name = DatabaseStorageController::_fieldRevisionTableName($field);
@@ -364,7 +364,7 @@ function field_update_8003() {
       $deleted_fields[$config['uuid']] = $config;
       // This will not be saved but the DatabaseStorageController helpers need
       // the field object.
-      $field = new Field($config);
+      $field = new FieldConfig($config);
       // Additionally, rename the data tables for deleted fields.
       $tables = array(
         "field_deleted_data_{$record['id']}" => 'old_' . DatabaseStorageController::_fieldTableName($field),
@@ -512,7 +512,7 @@ function field_update_8006(&$sandbox) {
   }
 
   // Prepare updated schema data structures.
-  $field = new Field($field_config);
+  $field = new FieldConfig($field_config);
   $tables = array(
     array(
       'old_table' => 'field_data_' . $field_config['name'],
diff --git a/core/modules/field/field.purge.inc b/core/modules/field/field.purge.inc
index a061b5f..b36995e 100644
--- a/core/modules/field/field.purge.inc
+++ b/core/modules/field/field.purge.inc
@@ -5,7 +5,7 @@
  * Provides support for field data purge after mass deletion.
  */
 
-use Drupal\field\Entity\Field;
+use Drupal\field\Entity\FieldConfig;
 use Drupal\field\FieldException;
 
 /**
@@ -121,7 +121,7 @@ function field_purge_batch($batch_size) {
   // Retrieve all deleted fields. Any that have no instances can be purged.
   $deleted_fields = \Drupal::state()->get('field.field.deleted') ?: array();
   foreach ($deleted_fields as $field) {
-    $field = new Field($field);
+    $field = new FieldConfig($field);
 
     // We cannot purge anything if the entity type is unknown (e.g. the
     // providing module was uninstalled).
diff --git a/core/modules/field/lib/Drupal/field/Entity/Field.php b/core/modules/field/lib/Drupal/field/Entity/Field.php
deleted file mode 100644
index 463f5cb..0000000
--- a/core/modules/field/lib/Drupal/field/Entity/Field.php
+++ /dev/null
@@ -1,679 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains \Drupal\field\Entity\Field.
- */
-
-namespace Drupal\field\Entity;
-
-use Drupal\Component\Utility\Unicode;
-use Drupal\Core\Entity\Annotation\EntityType;
-use Drupal\Core\Annotation\Translation;
-use Drupal\Core\Config\Entity\ConfigEntityBase;
-use Drupal\Core\Entity\EntityInterface;
-use Drupal\field\FieldException;
-use Drupal\field\FieldInterface;
-
-/**
- * Defines the Field entity.
- *
- * @todo use 'field' as the id once hook_field_load() and friends
- * are removed.
- *
- * @EntityType(
- *   id = "field_entity",
- *   label = @Translation("Field"),
- *   module = "field",
- *   controllers = {
- *     "storage" = "Drupal\field\FieldStorageController"
- *   },
- *   config_prefix = "field.field",
- *   entity_keys = {
- *     "id" = "id",
- *     "label" = "id",
- *     "uuid" = "uuid"
- *   }
- * )
- */
-class Field extends ConfigEntityBase implements FieldInterface {
-
-  /**
-   * The maximum length of the field name, in characters.
-   *
-   * For fields created through Field UI, this includes the 'field_' prefix.
-   */
-  const NAME_MAX_LENGTH = 32;
-
-  /**
-   * The field ID.
-   *
-   * The ID consists of 2 parts: the entity type and the field name.
-   *
-   * Example: node.body, user.field_main_image.
-   *
-   * @var string
-   */
-  public $id;
-
-  /**
-   * The field name.
-   *
-   * This is the name of the property under which the field values are placed in
-   * an entity: $entity->{$field_name}. The maximum length is
-   * Field:NAME_MAX_LENGTH.
-   *
-   * Example: body, field_main_image.
-   *
-   * @var string
-   */
-  public $name;
-
-  /**
-   * The field UUID.
-   *
-   * This is assigned automatically when the field is created.
-   *
-   * @var string
-   */
-  public $uuid;
-
-  /**
-   * The name of the entity type the field can be attached to.
-   *
-   * @var string
-   */
-  public $entity_type;
-
-  /**
-   * The field type.
-   *
-   * Example: text, number_integer.
-   *
-   * @var string
-   */
-  public $type;
-
-  /**
-   * The name of the module that provides the field type.
-   *
-   * @var string
-   */
-  public $module;
-
-  /**
-   * Flag indicating whether the field type module is enabled.
-   *
-   * @var bool
-   */
-  public $active;
-
-  /**
-   * Field-type specific settings.
-   *
-   * An array of key/value pairs, The keys and default values are defined by the
-   * field type.
-   *
-   * @var array
-   */
-  public $settings = array();
-
-  /**
-   * The field cardinality.
-   *
-   * The maximum number of values the field can hold. Possible values are
-   * positive integers or FIELD_CARDINALITY_UNLIMITED. Defaults to 1.
-   *
-   * @var integer
-   */
-  public $cardinality = 1;
-
-  /**
-   * Flag indicating whether the field is translatable.
-   *
-   * Defaults to FALSE.
-   *
-   * @var bool
-   */
-  public $translatable = FALSE;
-
-  /**
-   * Flag indicating whether the field is available for editing.
-   *
-   * If TRUE, some actions not available though the UI (but are still possible
-   * through direct API manipulation):
-   * - field settings cannot be changed,
-   * - new instances cannot be created
-   * - existing instances cannot be deleted.
-   * Defaults to FALSE.
-   *
-   * @var bool
-   */
-  public $locked = FALSE;
-
-  /**
-   * The custom storage indexes for the field data storage.
-   *
-   * This set of indexes is merged with the "default" indexes specified by the
-   * field type in hook_field_schema() to determine the actual set of indexes
-   * that get created.
-   *
-   * The indexes are defined using the same definition format as Schema API
-   * index specifications. Only columns that are part of the field schema, as
-   * defined by the field type in hook_field_schema(), are allowed.
-   *
-   * Some storage backends might not support indexes, and discard that
-   * information.
-   *
-   * @var array
-   */
-  public $indexes = array();
-
-  /**
-   * Flag indicating whether the field is deleted.
-   *
-   * The delete() method marks the field as "deleted" and removes the
-   * corresponding entry from the config storage, but keeps its definition in
-   * the state storage while field data is purged by a separate
-   * garbage-collection process.
-   *
-   * Deleted fields stay out of the regular entity lifecycle (notably, their
-   * values are not populated in loaded entities, and are not saved back).
-   *
-   * @var bool
-   */
-  public $deleted = FALSE;
-
-  /**
-   * The field schema.
-   *
-   * @var array
-   */
-  protected $schema;
-
-  /**
-   * The original field.
-   *
-   * @var \Drupal\field\Entity\Field
-   */
-  public $original = NULL;
-
-  /**
-   * Constructs a Field object.
-   *
-   * @param array $values
-   *   An array of field properties, keyed by property name. Most array
-   *   elements will be used to set the corresponding properties on the class;
-   *   see the class property documentation for details. Some array elements
-   *   have special meanings and a few are required. Special elements are:
-   *   - name: required. As a temporary Backwards Compatibility layer right now,
-   *     a 'field_name' property can be accepted in place of 'id'.
-   *   - entity_type: required.
-   *   - type: required.
-   *
-   * In most cases, Field entities are created via
-   * entity_create('field_entity', $values)), where $values is the same
-   * parameter as in this constructor.
-   *
-   * @see entity_create()
-   *
-   * @ingroup field_crud
-   */
-  public function __construct(array $values, $entity_type = 'field_entity') {
-    // Check required properties.
-    if (empty($values['name'])) {
-      throw new FieldException('Attempt to create an unnamed field.');
-    }
-    if (!preg_match('/^[_a-z]+[_a-z0-9]*$/', $values['name'])) {
-      throw new FieldException('Attempt to create a field with invalid characters. Only lowercase alphanumeric characters and underscores are allowed, and only lowercase letters and underscore are allowed as the first character');
-    }
-    if (empty($values['type'])) {
-      throw new FieldException('Attempt to create a field with no type.');
-    }
-    if (empty($values['entity_type'])) {
-      throw new FieldException('Attempt to create a field with no entity_type.');
-    }
-
-    parent::__construct($values, $entity_type);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function id() {
-    return $this->entity_type . '.' . $this->name;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getExportProperties() {
-    $names = array(
-      'id',
-      'uuid',
-      'status',
-      'langcode',
-      'name',
-      'entity_type',
-      'type',
-      'settings',
-      'module',
-      'active',
-      'locked',
-      'cardinality',
-      'translatable',
-      'indexes',
-    );
-    $properties = array();
-    foreach ($names as $name) {
-      $properties[$name] = $this->get($name);
-    }
-    return $properties;
-  }
-
-  /**
-   * Overrides \Drupal\Core\Entity\Entity::save().
-   *
-   * @return int
-   *   Either SAVED_NEW or SAVED_UPDATED, depending on the operation performed.
-   *
-   * @throws \Drupal\field\FieldException
-   *   If the field definition is invalid.
-   * @throws \Drupal\Core\Entity\EntityStorageException
-   *   In case of failures at the configuration storage level.
-   */
-  public function save() {
-    // Clear the derived data about the field.
-    unset($this->schema);
-
-    if ($this->isNew()) {
-      return $this->saveNew();
-    }
-    else {
-      return $this->saveUpdated();
-    }
-  }
-
-  /**
-   * Saves a new field definition.
-   *
-   * @return int
-   *   SAVED_NEW if the definition was saved.
-   *
-   * @throws \Drupal\field\FieldException
-   *   If the field definition is invalid.
-   * @throws \Drupal\Core\Entity\EntityStorageException
-   *   In case of failures at the configuration storage level.
-   */
-  protected function saveNew() {
-    $entity_manager = \Drupal::entityManager();
-    $storage_controller = $entity_manager->getStorageController($this->entityType);
-
-    // Assign the ID.
-    $this->id = $this->id();
-
-    // Field name cannot be longer than Field::NAME_MAX_LENGTH characters. We
-    // use Unicode::strlen() because the DB layer assumes that column widths
-    // are given in characters rather than bytes.
-    if (Unicode::strlen($this->name) > static::NAME_MAX_LENGTH) {
-      throw new FieldException(format_string(
-        'Attempt to create a field with an ID longer than @max characters: %name', array(
-          '@max' => static::NAME_MAX_LENGTH,
-          '%name' => $this->name,
-        )
-      ));
-    }
-
-    // Ensure the field name is unique (we do not care about deleted fields).
-    if ($prior_field = $storage_controller->load($this->id)) {
-      $message = $prior_field->active ?
-        'Attempt to create field name %name which already exists and is active.' :
-        'Attempt to create field name %name which already exists, although it is inactive.';
-      throw new FieldException(format_string($message, array('%name' => $this->name)));
-    }
-
-    // Disallow reserved field names. This can't prevent all field name
-    // collisions with existing entity properties, but some is better than
-    // none.
-    foreach ($entity_manager->getDefinitions() as $type => $info) {
-      if (in_array($this->name, $info['entity_keys'])) {
-        throw new FieldException(format_string('Attempt to create field %name which is reserved by entity type %type.', array('%name' => $this->name, '%type' => $type)));
-      }
-    }
-
-    // Check that the field type is known.
-    $field_type = \Drupal::service('plugin.manager.entity.field.field_type')->getDefinition($this->type);
-    if (!$field_type) {
-      throw new FieldException(format_string('Attempt to create a field of unknown type %type.', array('%type' => $this->type)));
-    }
-    $this->module = $field_type['provider'];
-    $this->active = TRUE;
-
-    // Make sure all settings are present, so that a complete field
-    // definition is passed to the various hooks and written to config.
-    $this->settings += $field_type['settings'];
-
-    // Notify the entity storage controller.
-    $entity_manager->getStorageController($this->entity_type)->onFieldCreate($this);
-
-    // Save the configuration.
-    $result = parent::save();
-    field_cache_clear();
-
-    return $result;
-  }
-
-  /**
-   * Saves an updated field definition.
-   *
-   * @return int
-   *   SAVED_UPDATED if the definition was saved.
-   *
-   * @throws \Drupal\field\FieldException
-   *   If the field definition is invalid.
-   * @throws \Drupal\Core\Entity\EntityStorageException
-   *   In case of failures at the configuration storage level.
-   */
-  protected function saveUpdated() {
-    $module_handler = \Drupal::moduleHandler();
-    $entity_manager = \Drupal::entityManager();
-    $storage_controller = $entity_manager->getStorageController($this->entityType);
-
-    $original = $storage_controller->loadUnchanged($this->id());
-    $this->original = $original;
-
-    // Some updates are always disallowed.
-    if ($this->type != $original->type) {
-      throw new FieldException("Cannot change an existing field's type.");
-    }
-    if ($this->entity_type != $original->entity_type) {
-      throw new FieldException("Cannot change an existing field's entity_type.");
-    }
-
-    // Make sure all settings are present, so that a complete field definition
-    // is saved. This allows calling code to perform partial updates on field
-    // objects.
-    $this->settings += $original->settings;
-
-    // See if any module forbids the update by throwing an exception. This
-    // invokes hook_field_update_forbid().
-    $module_handler->invokeAll('field_update_forbid', array($this, $original));
-
-    // Notify the storage controller. The controller can reject the definition
-    // update as invalid by raising an exception, which stops execution before
-    // the definition is written to config.
-    $entity_manager->getStorageController($this->entity_type)->onFieldUpdate($this, $original);
-
-    // Save the configuration.
-    $result = parent::save();
-    field_cache_clear();
-
-    return $result;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function delete() {
-    if (!$this->deleted) {
-      $instance_controller = \Drupal::entityManager()->getStorageController('field_instance');
-      $state = \Drupal::state();
-
-      // Delete all non-deleted instances.
-      $instance_ids = array();
-      foreach ($this->getBundles() as $bundle) {
-        $instance_ids[] = "{$this->entity_type}.$bundle.{$this->name}";
-      }
-      foreach ($instance_controller->loadMultiple($instance_ids) as $instance) {
-        // By default, FieldInstance::delete() will automatically try to delete
-        // a field definition when it is deleting the last instance of the
-        // field. Since the whole field is being deleted here, pass FALSE as
-        // the $field_cleanup parameter to prevent a loop.
-        $instance->delete(FALSE);
-      }
-
-      \Drupal::entityManager()->getStorageController($this->entity_type)->onFieldDelete($this);
-
-      // Delete the configuration of this field and save the field configuration
-      // in the key_value table so we can use it later during
-      // field_purge_batch(). This makes sure a new field can be created
-      // immediately with the same name.
-      $deleted_fields = $state->get('field.field.deleted') ?: array();
-      $config = $this->getExportProperties();
-      $config['deleted'] = TRUE;
-      $deleted_fields[$this->uuid] = $config;
-      $state->set('field.field.deleted', $deleted_fields);
-
-      parent::delete();
-
-      // Clear the cache.
-      field_cache_clear();
-    }
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getSchema() {
-    if (!isset($this->schema)) {
-      // Get the schema from the field item class.
-      $definition = \Drupal::service('plugin.manager.entity.field.field_type')->getDefinition($this->type);
-      $class = $definition['class'];
-      $schema = $class::schema($this);
-      // Fill in default values for optional entries.
-      $schema += array('indexes' => array(), 'foreign keys' => array());
-
-      // Check that the schema does not include forbidden column names.
-      if (array_intersect(array_keys($schema['columns']), static::getReservedColumns())) {
-        throw new FieldException('Illegal field type columns.');
-      }
-
-      // Merge custom indexes with those specified by the field type. Custom
-      // indexes prevail.
-      $schema['indexes'] = $this->indexes + $schema['indexes'];
-
-      $this->schema = $schema;
-    }
-
-    return $this->schema;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getColumns() {
-    $schema = $this->getSchema();
-    // A typical use case for the method is to iterate on the columns, while
-    // some other use cases rely on identifying the first column with the key()
-    // function. Since the schema is persisted in the Field object, we take care
-    // of resetting the array pointer so that the former does not interfere with
-    // the latter.
-    reset($schema['columns']);
-    return $schema['columns'];
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getBundles() {
-    if (empty($this->deleted)) {
-      $map = field_info_field_map();
-      if (isset($map[$this->entity_type][$this->name]['bundles'])) {
-        return $map[$this->entity_type][$this->name]['bundles'];
-      }
-    }
-    return array();
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getFieldName() {
-    return $this->name;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getFieldType() {
-    return $this->type;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getFieldSettings() {
-    // @todo field_info_field_types() calls _field_info_collate_types() which
-    //   maintains its own static cache. However, do some CPU and memory
-    //   profiling to see if it's worth statically caching $field_type_info, or
-    //   the default field and instance settings, within $this.
-    $field_type_info = \Drupal::service('plugin.manager.entity.field.field_type')->getDefinition($this->type);
-
-    $settings = $this->settings + $field_type_info['settings'] + $field_type_info['instance_settings'];
-    return $settings;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getFieldSetting($setting_name) {
-    // @todo See getFieldSettings() about potentially statically caching this.
-    $field_type_info = \Drupal::service('plugin.manager.entity.field.field_type')->getDefinition($this->type);
-
-    // We assume here that consecutive array_key_exists() is more efficient than
-    // calling getFieldSettings() when all we need is a single setting.
-    if (array_key_exists($setting_name, $this->settings)) {
-      return $this->settings[$setting_name];
-    }
-    elseif (array_key_exists($setting_name, $field_type_info['settings'])) {
-      return $field_type_info['settings'][$setting_name];
-    }
-    elseif (array_key_exists($setting_name, $field_type_info['instance_settings'])) {
-      return $field_type_info['instance_settings'][$setting_name];
-    }
-    else {
-      return NULL;
-    }
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getFieldPropertyNames() {
-    $schema = $this->getSchema();
-    return array_keys($schema['columns']);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function isFieldTranslatable() {
-    return $this->translatable;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getFieldLabel() {
-    return $this->label();
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getFieldDescription() {
-    return '';
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getFieldCardinality() {
-    return $this->cardinality;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function isFieldRequired() {
-    return FALSE;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getFieldDefaultValue(EntityInterface $entity) { }
-
-  /**
-   * A list of columns that can not be used as field type columns.
-   *
-   * @return array
-   */
-  public static function getReservedColumns() {
-    return array('deleted');
-  }
-
-  /**
-   * Determines whether a field has any data.
-   *
-   * @return
-   *   TRUE if the field has data for any entity; FALSE otherwise.
-   */
-  public function hasData() {
-    if ($this->getBundles()) {
-      $storage_details = $this->getSchema();
-      $columns = array_keys($storage_details['columns']);
-      $factory = \Drupal::service('entity.query');
-      // Entity Query throws an exception if there is no base table.
-      $entity_info = \Drupal::entityManager()->getDefinition($this->entity_type);
-      if (!isset($entity_info['base_table'])) {
-        return FALSE;
-      }
-      $query = $factory->get($this->entity_type);
-      $group = $query->orConditionGroup();
-      foreach ($columns as $column) {
-        $group->exists($this->name . '.' . $column);
-      }
-      $result = $query
-        ->condition($group)
-        ->count()
-        ->accessCheck(FALSE)
-        ->range(0, 1)
-        ->execute();
-      if ($result) {
-        return TRUE;
-      }
-    }
-
-    return FALSE;
-  }
-
-  /**
-   * Implements the magic __sleep() method.
-   *
-   * Using the Serialize interface and serialize() / unserialize() methods
-   * breaks entity forms in PHP 5.4.
-   * @todo Investigate in https://drupal.org/node/2074253.
-   */
-  public function __sleep() {
-    // Only serialize properties from getExportProperties().
-    return array_keys(array_intersect_key($this->getExportProperties(), get_object_vars($this)));
-  }
-
-  /**
-   * Implements the magic __wakeup() method.
-   */
-  public function __wakeup() {
-    // Run the values from getExportProperties() through __construct().
-    $values = array_intersect_key($this->getExportProperties(), get_object_vars($this));
-    $this->__construct($values);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function isFieldConfigurable() {
-    return TRUE;
-  }
-
-}
diff --git a/core/modules/field/lib/Drupal/field/Entity/FieldConfig.php b/core/modules/field/lib/Drupal/field/Entity/FieldConfig.php
new file mode 100644
index 0000000..294b619
--- /dev/null
+++ b/core/modules/field/lib/Drupal/field/Entity/FieldConfig.php
@@ -0,0 +1,724 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\field\Entity\FieldConfig.
+ */
+
+namespace Drupal\field\Entity;
+
+use Drupal\Component\Utility\Unicode;
+use Drupal\Core\Entity\Annotation\EntityType;
+use Drupal\Core\Annotation\Translation;
+use Drupal\Core\Config\Entity\ConfigEntityBase;
+use Drupal\Core\Entity\EntityInterface;
+use Drupal\field\FieldException;
+use Drupal\field\FieldInterface;
+
+/**
+ * Defines the Field entity.
+ *
+ * @EntityType(
+ *   id = "field_config",
+ *   label = @Translation("Field"),
+ *   module = "field",
+ *   controllers = {
+ *     "storage" = "Drupal\field\FieldStorageController"
+ *   },
+ *   config_prefix = "field.field",
+ *   entity_keys = {
+ *     "id" = "id",
+ *     "label" = "id",
+ *     "uuid" = "uuid"
+ *   }
+ * )
+ */
+class FieldConfig extends ConfigEntityBase implements FieldInterface {
+
+  /**
+   * The maximum length of the field name, in characters.
+   *
+   * For fields created through Field UI, this includes the 'field_' prefix.
+   */
+  const NAME_MAX_LENGTH = 32;
+
+  /**
+   * The field ID.
+   *
+   * The ID consists of 2 parts: the entity type and the field name.
+   *
+   * Example: node.body, user.field_main_image.
+   *
+   * @var string
+   */
+  public $id;
+
+  /**
+   * The field name.
+   *
+   * This is the name of the property under which the field values are placed in
+   * an entity: $entity->{$field_name}. The maximum length is
+   * Field:NAME_MAX_LENGTH.
+   *
+   * Example: body, field_main_image.
+   *
+   * @var string
+   */
+  public $name;
+
+  /**
+   * The field UUID.
+   *
+   * This is assigned automatically when the field is created.
+   *
+   * @var string
+   */
+  public $uuid;
+
+  /**
+   * The name of the entity type the field can be attached to.
+   *
+   * @var string
+   */
+  public $entity_type;
+
+  /**
+   * The field type.
+   *
+   * Example: text, number_integer.
+   *
+   * @var string
+   */
+  public $type;
+
+  /**
+   * The name of the module that provides the field type.
+   *
+   * @var string
+   */
+  public $module;
+
+  /**
+   * Flag indicating whether the field type module is enabled.
+   *
+   * @var bool
+   */
+  public $active;
+
+  /**
+   * Field-type specific settings.
+   *
+   * An array of key/value pairs, The keys and default values are defined by the
+   * field type.
+   *
+   * @var array
+   */
+  public $settings = array();
+
+  /**
+   * The field cardinality.
+   *
+   * The maximum number of values the field can hold. Possible values are
+   * positive integers or FIELD_CARDINALITY_UNLIMITED. Defaults to 1.
+   *
+   * @var integer
+   */
+  public $cardinality = 1;
+
+  /**
+   * Flag indicating whether the field is translatable.
+   *
+   * Defaults to FALSE.
+   *
+   * @var bool
+   */
+  public $translatable = FALSE;
+
+  /**
+   * Flag indicating whether the field is available for editing.
+   *
+   * If TRUE, some actions not available though the UI (but are still possible
+   * through direct API manipulation):
+   * - field settings cannot be changed,
+   * - new instances cannot be created
+   * - existing instances cannot be deleted.
+   * Defaults to FALSE.
+   *
+   * @var bool
+   */
+  public $locked = FALSE;
+
+  /**
+   * The custom storage indexes for the field data storage.
+   *
+   * This set of indexes is merged with the "default" indexes specified by the
+   * field type in hook_field_schema() to determine the actual set of indexes
+   * that get created.
+   *
+   * The indexes are defined using the same definition format as Schema API
+   * index specifications. Only columns that are part of the field schema, as
+   * defined by the field type in hook_field_schema(), are allowed.
+   *
+   * Some storage backends might not support indexes, and discard that
+   * information.
+   *
+   * @var array
+   */
+  public $indexes = array();
+
+  /**
+   * Flag indicating whether the field is deleted.
+   *
+   * The delete() method marks the field as "deleted" and removes the
+   * corresponding entry from the config storage, but keeps its definition in
+   * the state storage while field data is purged by a separate
+   * garbage-collection process.
+   *
+   * Deleted fields stay out of the regular entity lifecycle (notably, their
+   * values are not populated in loaded entities, and are not saved back).
+   *
+   * @var bool
+   */
+  public $deleted = FALSE;
+
+  /**
+   * The field schema.
+   *
+   * @var array
+   */
+  protected $schema;
+
+  /**
+   * The original field.
+   *
+   * @var \Drupal\field\Entity\Field
+   */
+  public $original = NULL;
+
+  /**
+   * Constructs a Field object.
+   *
+   * @param array $values
+   *   An array of field properties, keyed by property name. Most array
+   *   elements will be used to set the corresponding properties on the class;
+   *   see the class property documentation for details. Some array elements
+   *   have special meanings and a few are required. Special elements are:
+   *   - name: required. As a temporary Backwards Compatibility layer right now,
+   *     a 'field_name' property can be accepted in place of 'id'.
+   *   - entity_type: required.
+   *   - type: required.
+   *
+   * In most cases, Field entities are created via
+   * entity_create('field_config', $values)), where $values is the same
+   * parameter as in this constructor.
+   *
+   * @see entity_create()
+   *
+   * @ingroup field_crud
+   */
+  public function __construct(array $values, $entity_type = 'field_config') {
+    // Check required properties.
+    if (empty($values['name'])) {
+      throw new FieldException('Attempt to create an unnamed field.');
+    }
+    if (!preg_match('/^[_a-z]+[_a-z0-9]*$/', $values['name'])) {
+      throw new FieldException('Attempt to create a field with invalid characters. Only lowercase alphanumeric characters and underscores are allowed, and only lowercase letters and underscore are allowed as the first character');
+    }
+    if (empty($values['type'])) {
+      throw new FieldException('Attempt to create a field with no type.');
+    }
+    if (empty($values['entity_type'])) {
+      throw new FieldException('Attempt to create a field with no entity_type.');
+    }
+
+    parent::__construct($values, $entity_type);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function id() {
+    return $this->entity_type . '.' . $this->name;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getExportProperties() {
+    $names = array(
+      'id',
+      'uuid',
+      'status',
+      'langcode',
+      'name',
+      'entity_type',
+      'type',
+      'settings',
+      'module',
+      'active',
+      'locked',
+      'cardinality',
+      'translatable',
+      'indexes',
+    );
+    $properties = array();
+    foreach ($names as $name) {
+      $properties[$name] = $this->get($name);
+    }
+    return $properties;
+  }
+
+  /**
+   * Overrides \Drupal\Core\Entity\Entity::save().
+   *
+   * @return int
+   *   Either SAVED_NEW or SAVED_UPDATED, depending on the operation performed.
+   *
+   * @throws \Drupal\field\FieldException
+   *   If the field definition is invalid.
+   * @throws \Drupal\Core\Entity\EntityStorageException
+   *   In case of failures at the configuration storage level.
+   */
+  public function save() {
+    // Clear the derived data about the field.
+    unset($this->schema);
+
+    if ($this->isNew()) {
+      return $this->saveNew();
+    }
+    else {
+      return $this->saveUpdated();
+    }
+  }
+
+  /**
+   * Saves a new field definition.
+   *
+   * @return int
+   *   SAVED_NEW if the definition was saved.
+   *
+   * @throws \Drupal\field\FieldException
+   *   If the field definition is invalid.
+   * @throws \Drupal\Core\Entity\EntityStorageException
+   *   In case of failures at the configuration storage level.
+   */
+  protected function saveNew() {
+    $entity_manager = \Drupal::entityManager();
+    $storage_controller = $entity_manager->getStorageController($this->entityType);
+
+    // Assign the ID.
+    $this->id = $this->id();
+
+    // Field name cannot be longer than Field::NAME_MAX_LENGTH characters. We
+    // use Unicode::strlen() because the DB layer assumes that column widths
+    // are given in characters rather than bytes.
+    if (Unicode::strlen($this->name) > static::NAME_MAX_LENGTH) {
+      throw new FieldException(format_string(
+        'Attempt to create a field with an ID longer than @max characters: %name', array(
+          '@max' => static::NAME_MAX_LENGTH,
+          '%name' => $this->name,
+        )
+      ));
+    }
+
+    // Ensure the field name is unique (we do not care about deleted fields).
+    if ($prior_field = $storage_controller->load($this->id)) {
+      $message = $prior_field->active ?
+        'Attempt to create field name %name which already exists and is active.' :
+        'Attempt to create field name %name which already exists, although it is inactive.';
+      throw new FieldException(format_string($message, array('%name' => $this->name)));
+    }
+
+    // Disallow reserved field names. This can't prevent all field name
+    // collisions with existing entity properties, but some is better than
+    // none.
+    foreach ($entity_manager->getDefinitions() as $type => $info) {
+      if (in_array($this->name, $info['entity_keys'])) {
+        throw new FieldException(format_string('Attempt to create field %name which is reserved by entity type %type.', array('%name' => $this->name, '%type' => $type)));
+      }
+    }
+
+    // Check that the field type is known.
+    $field_type = \Drupal::service('plugin.manager.entity.field.field_type')->getDefinition($this->type);
+    if (!$field_type) {
+      throw new FieldException(format_string('Attempt to create a field of unknown type %type.', array('%type' => $this->type)));
+    }
+    $this->module = $field_type['provider'];
+    $this->active = TRUE;
+
+    // Make sure all settings are present, so that a complete field
+    // definition is passed to the various hooks and written to config.
+    $this->settings += $field_type['settings'];
+
+    // Notify the entity storage controller.
+    $entity_manager->getStorageController($this->entity_type)->onFieldCreate($this);
+
+    // Save the configuration.
+    $result = parent::save();
+    field_cache_clear();
+
+    return $result;
+  }
+
+  /**
+   * Saves an updated field definition.
+   *
+   * @return int
+   *   SAVED_UPDATED if the definition was saved.
+   *
+   * @throws \Drupal\field\FieldException
+   *   If the field definition is invalid.
+   * @throws \Drupal\Core\Entity\EntityStorageException
+   *   In case of failures at the configuration storage level.
+   */
+  protected function saveUpdated() {
+    $module_handler = \Drupal::moduleHandler();
+    $entity_manager = \Drupal::entityManager();
+    $storage_controller = $entity_manager->getStorageController($this->entityType);
+
+    $original = $storage_controller->loadUnchanged($this->id());
+    $this->original = $original;
+
+    // Some updates are always disallowed.
+    if ($this->type != $original->type) {
+      throw new FieldException("Cannot change an existing field's type.");
+    }
+    if ($this->entity_type != $original->entity_type) {
+      throw new FieldException("Cannot change an existing field's entity_type.");
+    }
+
+    // Make sure all settings are present, so that a complete field definition
+    // is saved. This allows calling code to perform partial updates on field
+    // objects.
+    $this->settings += $original->settings;
+
+    // See if any module forbids the update by throwing an exception. This
+    // invokes hook_field_update_forbid().
+    $module_handler->invokeAll('field_update_forbid', array($this, $original));
+
+    // Notify the storage controller. The controller can reject the definition
+    // update as invalid by raising an exception, which stops execution before
+    // the definition is written to config.
+    $entity_manager->getStorageController($this->entity_type)->onFieldUpdate($this, $original);
+
+    // Save the configuration.
+    $result = parent::save();
+    field_cache_clear();
+
+    return $result;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function delete() {
+    if (!$this->deleted) {
+      $instance_controller = \Drupal::entityManager()->getStorageController('field_instance_config');
+      $state = \Drupal::state();
+
+      // Delete all non-deleted instances.
+      $instance_ids = array();
+      foreach ($this->getBundles() as $bundle) {
+        $instance_ids[] = "{$this->entity_type}.$bundle.{$this->name}";
+      }
+      foreach ($instance_controller->loadMultiple($instance_ids) as $instance) {
+        // By default, FieldInstance::delete() will automatically try to delete
+        // a field definition when it is deleting the last instance of the
+        // field. Since the whole field is being deleted here, pass FALSE as
+        // the $field_cleanup parameter to prevent a loop.
+        $instance->delete(FALSE);
+      }
+
+      \Drupal::entityManager()->getStorageController($this->entity_type)->onFieldDelete($this);
+
+      // Delete the configuration of this field and save the field configuration
+      // in the key_value table so we can use it later during
+      // field_purge_batch(). This makes sure a new field can be created
+      // immediately with the same name.
+      $deleted_fields = $state->get('field.field.deleted') ?: array();
+      $config = $this->getExportProperties();
+      $config['deleted'] = TRUE;
+      $deleted_fields[$this->uuid] = $config;
+      $state->set('field.field.deleted', $deleted_fields);
+
+      parent::delete();
+
+      // Clear the cache.
+      field_cache_clear();
+    }
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getSchema() {
+    if (!isset($this->schema)) {
+      // Get the schema from the field item class.
+      $definition = \Drupal::service('plugin.manager.entity.field.field_type')->getDefinition($this->type);
+      $class = $definition['class'];
+      $schema = $class::schema($this);
+      // Fill in default values for optional entries.
+      $schema += array('indexes' => array(), 'foreign keys' => array());
+
+      // Check that the schema does not include forbidden column names.
+      if (array_intersect(array_keys($schema['columns']), static::getReservedColumns())) {
+        throw new FieldException('Illegal field type columns.');
+      }
+
+      // Merge custom indexes with those specified by the field type. Custom
+      // indexes prevail.
+      $schema['indexes'] = $this->indexes + $schema['indexes'];
+
+      $this->schema = $schema;
+    }
+
+    return $this->schema;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getColumns() {
+    $schema = $this->getSchema();
+    // A typical use case for the method is to iterate on the columns, while
+    // some other use cases rely on identifying the first column with the key()
+    // function. Since the schema is persisted in the Field object, we take care
+    // of resetting the array pointer so that the former does not interfere with
+    // the latter.
+    reset($schema['columns']);
+    return $schema['columns'];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getBundles() {
+    if (empty($this->deleted)) {
+      $map = field_info_field_map();
+      if (isset($map[$this->entity_type][$this->name]['bundles'])) {
+        return $map[$this->entity_type][$this->name]['bundles'];
+      }
+    }
+    return array();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getFieldName() {
+    return $this->name;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getFieldType() {
+    return $this->type;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getFieldSettings() {
+    // @todo field_info_field_types() calls _field_info_collate_types() which
+    //   maintains its own static cache. However, do some CPU and memory
+    //   profiling to see if it's worth statically caching $field_type_info, or
+    //   the default field and instance settings, within $this.
+    $field_type_info = \Drupal::service('plugin.manager.entity.field.field_type')->getDefinition($this->type);
+
+    $settings = $this->settings + $field_type_info['settings'] + $field_type_info['instance_settings'];
+    return $settings;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getFieldSetting($setting_name) {
+    // @todo See getFieldSettings() about potentially statically caching this.
+    $field_type_info = \Drupal::service('plugin.manager.entity.field.field_type')->getDefinition($this->type);
+
+    // We assume here that consecutive array_key_exists() is more efficient than
+    // calling getFieldSettings() when all we need is a single setting.
+    if (array_key_exists($setting_name, $this->settings)) {
+      return $this->settings[$setting_name];
+    }
+    elseif (array_key_exists($setting_name, $field_type_info['settings'])) {
+      return $field_type_info['settings'][$setting_name];
+    }
+    else {
+      return $field_type_info['instance_settings'][$setting_name];
+    }
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getFieldPropertyNames() {
+    $schema = $this->getSchema();
+    return array_keys($schema['columns']);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function isFieldTranslatable() {
+    return $this->translatable;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getFieldLabel() {
+    return $this->label();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getFieldDescription() {
+    return '';
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getFieldCardinality() {
+    return $this->cardinality;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function isFieldRequired() {
+    return FALSE;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getFieldDefaultValue(EntityInterface $entity) { }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function offsetExists($offset) {
+    return isset($this->{$offset}) || in_array($offset, array('columns', 'foreign keys', 'bundles', 'storage_details'));
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function &offsetGet($offset) {
+    switch ($offset) {
+      case 'id':
+        return $this->uuid;
+
+      case 'field_name':
+        return $this->name;
+
+      case 'columns':
+        $this->getSchema();
+        return $this->schema['columns'];
+
+      case 'foreign keys':
+        $this->getSchema();
+        return $this->schema['foreign keys'];
+
+      case 'bundles':
+        $bundles = $this->getBundles();
+        return $bundles;
+    }
+
+    return $this->{$offset};
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function offsetSet($offset, $value) {
+    if (!in_array($offset, array('columns', 'foreign keys', 'bundles', 'storage_details'))) {
+      $this->{$offset} = $value;
+    }
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function offsetUnset($offset) {
+    if (!in_array($offset, array('columns', 'foreign keys', 'bundles', 'storage_details'))) {
+      unset($this->{$offset});
+    }
+  }
+
+  /**
+   * A list of columns that can not be used as field type columns.
+   *
+   * @return array
+   */
+  public static function getReservedColumns() {
+    return array('deleted');
+  }
+
+  /**
+   * Determines whether a field has any data.
+   *
+   * @return
+   *   TRUE if the field has data for any entity; FALSE otherwise.
+   */
+  public function hasData() {
+    if ($this->getBundles()) {
+      $storage_details = $this->getSchema();
+      $columns = array_keys($storage_details['columns']);
+      $factory = \Drupal::service('entity.query');
+      // Entity Query throws an exception if there is no base table.
+      $entity_info = \Drupal::entityManager()->getDefinition($this->entity_type);
+      if (!isset($entity_info['base_table'])) {
+        return FALSE;
+      }
+      $query = $factory->get($this->entity_type);
+      $group = $query->orConditionGroup();
+      foreach ($columns as $column) {
+        $group->exists($this->name . '.' . $column);
+      }
+      $result = $query
+        ->condition($group)
+        ->count()
+        ->accessCheck(FALSE)
+        ->range(0, 1)
+        ->execute();
+      if ($result) {
+        return TRUE;
+      }
+    }
+
+    return FALSE;
+  }
+
+  /**
+   * Implements the magic __sleep() method.
+   *
+   * Using the Serialize interface and serialize() / unserialize() methods
+   * breaks entity forms in PHP 5.4.
+   * @todo Investigate in https://drupal.org/node/2074253.
+   */
+  public function __sleep() {
+    // Only serialize properties from getExportProperties().
+    return array_keys(array_intersect_key($this->getExportProperties(), get_object_vars($this)));
+  }
+
+  /**
+   * Implements the magic __wakeup() method.
+   */
+  public function __wakeup() {
+    // Run the values from getExportProperties() through __construct().
+    $values = array_intersect_key($this->getExportProperties(), get_object_vars($this));
+    $this->__construct($values);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function isFieldConfigurable() {
+    return TRUE;
+  }
+}
diff --git a/core/modules/field/lib/Drupal/field/Entity/FieldInstance.php b/core/modules/field/lib/Drupal/field/Entity/FieldInstance.php
deleted file mode 100644
index d038977..0000000
--- a/core/modules/field/lib/Drupal/field/Entity/FieldInstance.php
+++ /dev/null
@@ -1,638 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains \Drupal\field\Entity\FieldInstance.
- */
-
-namespace Drupal\field\Entity;
-
-use Drupal\Component\Utility\String;
-use Drupal\Core\Entity\Annotation\EntityType;
-use Drupal\Core\Annotation\Translation;
-use Drupal\Core\Config\Entity\ConfigEntityBase;
-use Drupal\Core\Entity\EntityInterface;
-use Drupal\field\FieldException;
-use Drupal\field\FieldInstanceInterface;
-
-/**
- * Defines the Field instance entity.
- *
- * @EntityType(
- *   id = "field_instance",
- *   label = @Translation("Field instance"),
- *   module = "field",
- *   controllers = {
- *     "storage" = "Drupal\field\FieldInstanceStorageController"
- *   },
- *   config_prefix = "field.instance",
- *   entity_keys = {
- *     "id" = "id",
- *     "label" = "label",
- *     "uuid" = "uuid"
- *   }
- * )
- */
-class FieldInstance extends ConfigEntityBase implements FieldInstanceInterface {
-
-  /**
-   * The instance ID.
-   *
-   * The ID consists of 3 parts: the entity type, bundle and the field name.
-   *
-   * Example: node.article.body, user.user.field_main_image.
-   *
-   * @var string
-   */
-  public $id;
-
-  /**
-   * The instance UUID.
-   *
-   * This is assigned automatically when the instance is created.
-   *
-   * @var string
-   */
-  public $uuid;
-
-  /**
-   * The UUID of the field attached to the bundle by this instance.
-   *
-   * @var string
-   */
-  public $field_uuid;
-
-  /**
-   * The name of the entity type the instance is attached to.
-   *
-   * @var string
-   */
-  public $entity_type;
-
-  /**
-   * The name of the bundle the instance is attached to.
-   *
-   * @var string
-   */
-  public $bundle;
-
-  /**
-   * The human-readable label for the instance.
-   *
-   * This will be used as the title of Form API elements for the field in entity
-   * edit forms, or as the label for the field values in displayed entities.
-   *
-   * If not specified, this defaults to the field_name (mostly useful for field
-   * instances created in tests).
-   *
-   * @var string
-   */
-  public $label;
-
-  /**
-   * The instance description.
-   *
-   * A human-readable description for the field when used with this bundle.
-   * For example, the description will be the help text of Form API elements for
-   * this instance in entity edit forms.
-   *
-   * @var string
-   */
-  public $description = '';
-
-  /**
-   * Field-type specific settings.
-   *
-   * An array of key/value pairs. The keys and default values are defined by the
-   * field type.
-   *
-   * @var array
-   */
-  public $settings = array();
-
-  /**
-   * Flag indicating whether the field is required.
-   *
-   * TRUE if a value for this field is required when used with this bundle,
-   * FALSE otherwise. Currently, required-ness is only enforced at the Form API
-   * level in entity edit forms, not during direct API saves.
-   *
-   * @var bool
-   */
-  public $required = FALSE;
-
-  /**
-   * Default field value.
-   *
-   * The default value is used when an entity is created, either:
-   * - through an entity creation form; the form elements for the field are
-   *   prepopulated with the default value.
-   * - through direct API calls (i.e. $entity->save()); the default value is
-   *   added if the $entity object provides no explicit entry (actual values or
-   *   "the field is empty") for the field.
-   *
-   * The default value is expressed as a numerically indexed array of items,
-   * each item being an array of key/value pairs matching the set of 'columns'
-   * defined by the "field schema" for the field type, as exposed in
-   * hook_field_schema(). If the number of items exceeds the cardinality of the
-   * field, extraneous items will be ignored.
-   *
-   * This property is overlooked if the $default_value_function is non-empty.
-   *
-   * Example for a number_integer field:
-   * @code
-   * array(
-   *   array('value' => 1),
-   *   array('value' => 2),
-   * )
-   * @endcode
-   *
-   * @var array
-   */
-  public $default_value = array();
-
-  /**
-   * The name of a callback function that returns default values.
-   *
-   * The function will be called with the following arguments:
-   * - \Drupal\Core\Entity\EntityInterface $entity
-   *   The entity being created.
-   * - \Drupal\field\Entity\Field $field
-   *   The field object.
-   * - \Drupal\field\Entity\FieldInstance $instance
-   *   The field instance object.
-   * - string $langcode
-   *   The language of the entity being created.
-   * It should return an array of default values, in the same format as the
-   * $default_value property.
-   *
-   * This property takes precedence on the list of fixed values specified in the
-   * $default_value property.
-   *
-   * @var string
-   */
-  public $default_value_function = '';
-
-  /**
-   * Flag indicating whether the instance is deleted.
-   *
-   * The delete() method marks the instance as "deleted" and removes the
-   * corresponding entry from the config storage, but keeps its definition in
-   * the state storage while field data is purged by a separate
-   * garbage-collection process.
-   *
-   * Deleted instances stay out of the regular entity lifecycle (notably, their
-   * values are not populated in loaded entities, and are not saved back).
-   *
-   * @var bool
-   */
-  public $deleted = FALSE;
-
-  /**
-   * The field ConfigEntity object corresponding to $field_uuid.
-   *
-   * @var \Drupal\field\Entity\Field
-   */
-  protected $field;
-
-  /**
-   * Flag indicating whether the bundle name can be renamed or not.
-   *
-   * @var bool
-   */
-  protected $bundle_rename_allowed = FALSE;
-
-  /**
-   * The original instance.
-   *
-   * @var \Drupal\field\Entity\FieldInstance
-   */
-  public $original = NULL;
-
-  /**
-   * Constructs a FieldInstance object.
-   *
-   * @param array $values
-   *   An array of field instance properties, keyed by property name. Most
-   *   array elements will be used to set the corresponding properties on the
-   *   class; see the class property documentation for details. Some array
-   *   elements have special meanings and a few are required; these special
-   *   elements are:
-   *   - field_name: optional. The name of the field this is an instance of.
-   *   - field_uuid: optional. Either field_uuid or field_name is required
-   *     to build field instance. field_name will gain higher priority.
-   *     If field_name is not provided, field_uuid will be checked then.
-   *   - entity_type: required.
-   *   - bundle: required.
-   *
-   * In most cases, Field instance entities are created via
-   * entity_create('field_instance', $values)), where $values is the same
-   * parameter as in this constructor.
-   *
-   * @see entity_create()
-   *
-   * @ingroup field_crud
-   */
-  public function __construct(array $values, $entity_type = 'field_instance') {
-    // Accept incoming 'field_name' instead of 'field_uuid', for easier DX on
-    // creation of new instances.
-    if (isset($values['field_name']) && isset($values['entity_type']) && !isset($values['field_uuid'])) {
-      $field = field_info_field($values['entity_type'], $values['field_name']);
-      if (!$field) {
-        throw new FieldException(format_string('Attempt to create an instance of field @field_name that does not exist on entity type @entity_type.', array('@field_name' => $values['field_name'], '@entity_type' => $values['entity_type'])));
-      }
-      $values['field_uuid'] = $field->uuid;
-    }
-    elseif (isset($values['field_uuid'])) {
-      $field = field_info_field_by_id($values['field_uuid']);
-      // field_info_field_by_id() will not find the field if it is inactive.
-      if (!$field) {
-        $field = current(field_read_fields(array('uuid' => $values['field_uuid']), array('include_inactive' => TRUE, 'include_deleted' => TRUE)));
-      }
-      if (!$field) {
-        throw new FieldException(format_string('Attempt to create an instance of unknown field @uuid', array('@uuid' => $values['field_uuid'])));
-      }
-    }
-    else {
-      throw new FieldException('Attempt to create an instance of an unspecified field.');
-    }
-
-    // At this point, we should have a 'field_uuid' and a Field. Ditch the
-    // 'field_name' property if it was provided, and assign the $field property.
-    unset($values['field_name']);
-    $this->field = $field;
-
-    // Discard the 'field_type' entry that is added in config records to ease
-    // schema generation. See getExportProperties().
-    unset($values['field_type']);
-
-    // Check required properties.
-    if (empty($values['entity_type'])) {
-      throw new FieldException(format_string('Attempt to create an instance of field @field_name without an entity_type.', array('@field_name' => $this->field->name)));
-    }
-    if (empty($values['bundle'])) {
-      throw new FieldException(format_string('Attempt to create an instance of field @field_name without a bundle.', array('@field_name' => $this->field->name)));
-    }
-
-    // 'Label' defaults to the field name (mostly useful for field instances
-    // created in tests).
-    $values += array(
-      'label' => $this->field->name,
-    );
-    parent::__construct($values, $entity_type);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function id() {
-    return $this->entity_type . '.' . $this->bundle . '.' . $this->field->name;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getExportProperties() {
-    $names = array(
-      'id',
-      'uuid',
-      'status',
-      'langcode',
-      'field_uuid',
-      'entity_type',
-      'bundle',
-      'label',
-      'description',
-      'required',
-      'default_value',
-      'default_value_function',
-      'settings',
-    );
-    $properties = array();
-    foreach ($names as $name) {
-      $properties[$name] = $this->get($name);
-    }
-
-    // Additionally, include the field type, that is needed to be able to
-    // generate the field-type-dependant parts of the config schema.
-    if (isset($this->field->type)) {
-      $properties['field_type'] = $this->field->type;
-    }
-
-    return $properties;
-  }
-
-  /**
-   * Overrides \Drupal\Core\Entity\Entity::save().
-   *
-   * @return
-   *   Either SAVED_NEW or SAVED_UPDATED, depending on the operation performed.
-   *
-   * @throws \Drupal\field\FieldException
-   *   If the field instance definition is invalid.
-   *
-   * @throws \Drupal\Core\Entity\EntityStorageException
-   *   In case of failures at the configuration storage level.
-   */
-  public function save() {
-    if ($this->isNew()) {
-      return $this->saveNew();
-    }
-    else {
-      return $this->saveUpdated();
-    }
-  }
-
-  /**
-   * Saves a new field instance definition.
-   *
-   * @return
-   *   SAVED_NEW if the definition was saved.
-   *
-   * @throws \Drupal\field\FieldException
-   *   If the field instance definition is invalid.
-   *
-   * @throws \Drupal\Core\Entity\EntityStorageException
-   *   In case of failures at the configuration storage level.
-   */
-  protected function saveNew() {
-    $instance_controller = \Drupal::entityManager()->getStorageController($this->entityType);
-
-    // Ensure the field instance is unique within the bundle.
-    if ($prior_instance = $instance_controller->load($this->id())) {
-      throw new FieldException(format_string('Attempt to create an instance of field %name on bundle @bundle that already has an instance of that field.', array('%name' => $this->field->name, '@bundle' => $this->bundle)));
-    }
-
-    // Set the field UUID.
-    $this->field_uuid = $this->field->uuid;
-
-    // Ensure default values are present.
-    $this->prepareSave();
-
-    // Save the configuration.
-    $result = parent::save();
-    field_cache_clear();
-
-    return $result;
-  }
-
-  /**
-   * Saves an updated field instance definition.
-   *
-   * @return
-   *   SAVED_UPDATED if the definition was saved.
-   *
-   * @throws \Drupal\field\FieldException
-   *   If the field instance definition is invalid.
-   *
-   * @throws \Drupal\Core\Entity\EntityStorageException
-   *   In case of failures at the configuration storage level.
-   */
-  protected function saveUpdated() {
-    $instance_controller = \Drupal::entityManager()->getStorageController($this->entityType);
-
-    $original = $instance_controller->loadUnchanged($this->getOriginalID());
-    $this->original = $original;
-
-    // Some updates are always disallowed.
-    if ($this->entity_type != $original->entity_type) {
-      throw new FieldException("Cannot change an existing instance's entity_type.");
-    }
-    if ($this->bundle != $original->bundle && empty($this->bundle_rename_allowed)) {
-      throw new FieldException("Cannot change an existing instance's bundle.");
-    }
-    if ($this->field_uuid != $original->field_uuid) {
-      throw new FieldException("Cannot change an existing instance's field.");
-    }
-
-    // Ensure default values are present.
-    $this->prepareSave();
-
-    // Notify the entity storage controller.
-    \Drupal::entityManager()->getStorageController($this->entity_type)->onInstanceUpdate($this);
-
-    // Save the configuration.
-    $result = parent::save();
-    field_cache_clear();
-
-    return $result;
-  }
-
-  /**
-   * Prepares the instance definition for saving.
-   */
-  protected function prepareSave() {
-    $field_type_info = \Drupal::service('plugin.manager.entity.field.field_type')->getDefinition($this->field->type);
-
-    // Set the default instance settings.
-    $this->settings += $field_type_info['instance_settings'];
-  }
-
-  /**
-   * Overrides \Drupal\Core\Entity\Entity::delete().
-   *
-   * @param bool $field_cleanup
-   *   (optional) If TRUE, the field will be deleted as well if its last
-   *   instance is being deleted. If FALSE, it is the caller's responsibility to
-   *   handle the case of fields left without instances. Defaults to TRUE.
-   */
-  public function delete($field_cleanup = TRUE) {
-    if (!$this->deleted) {
-      $state = \Drupal::state();
-
-      // Delete the configuration of this instance and save the configuration
-      // in the key_value table so we can use it later during
-      // field_purge_batch().
-      $deleted_instances = $state->get('field.instance.deleted') ?: array();
-      $config = $this->getExportProperties();
-      $config['deleted'] = TRUE;
-      $deleted_instances[$this->uuid] = $config;
-      $state->set('field.instance.deleted', $deleted_instances);
-
-      parent::delete();
-
-      // Notify the entity storage controller.
-      \Drupal::entityManager()->getStorageController($this->entity_type)->onInstanceDelete($this);
-
-      // Clear the cache.
-      field_cache_clear();
-
-      // Remove the instance from the entity form displays.
-      $ids = array();
-      $form_modes = array('default' => array()) + entity_get_form_modes($this->entity_type);
-      foreach (array_keys($form_modes) as $form_mode) {
-        $ids[] = $this->entity_type . '.' . $this->bundle . '.' . $form_mode;
-      }
-      foreach (entity_load_multiple('entity_form_display', $ids) as $form_display) {
-        $form_display->removeComponent($this->field->name)->save();
-      }
-
-      // Remove the instance from the entity displays.
-      $ids = array();
-      $view_modes = array('default' => array()) + entity_get_view_modes($this->entity_type);
-      foreach (array_keys($view_modes) as $view_mode) {
-        $ids[] = $this->entity_type . '.' . $this->bundle . '.' . $view_mode;
-      }
-      foreach (entity_load_multiple('entity_display', $ids) as $display) {
-        $display->removeComponent($this->field->name)->save();
-      }
-
-      // Delete the field itself if we just deleted its last instance.
-      if ($field_cleanup && count($this->field->getBundles()) == 0) {
-        $this->field->delete();
-      }
-    }
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getField() {
-    return $this->field;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getFieldName() {
-    return $this->field->name;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getFieldType() {
-    return $this->field->type;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getFieldSettings() {
-    return $this->settings + $this->field->getFieldSettings();
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getFieldSetting($setting_name) {
-    if (array_key_exists($setting_name, $this->settings)) {
-      return $this->settings[$setting_name];
-    }
-    else {
-      return $this->field->getFieldSetting($setting_name);
-    }
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getFieldPropertyNames() {
-    $schema = $this->field->getSchema();
-    return array_keys($schema['columns']);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function isFieldTranslatable() {
-    return $this->field->translatable;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function uri() {
-    $path = \Drupal::entityManager()->getAdminPath($this->entity_type, $this->bundle);
-
-    // Use parent URI as fallback, if path is empty.
-    if (empty($path)) {
-      return parent::uri();
-    }
-
-    return array(
-      'path' => $path . '/fields/' . $this->id(),
-      'options' => array(
-        'entity_type' => $this->entityType,
-        'entity' => $this,
-      ),
-    );
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getFieldLabel() {
-    return $this->label();
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getFieldDescription() {
-    return $this->description;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getFieldCardinality() {
-    return $this->field->cardinality;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function isFieldRequired() {
-    return $this->required;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getFieldDefaultValue(EntityInterface $entity) {
-    if (!empty($this->default_value_function)) {
-      $function = $this->default_value_function;
-      return $function($entity, $this->getField(), $this, $entity->language()->id);
-    }
-    elseif (!empty($this->default_value)) {
-      return $this->default_value;
-    }
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function allowBundleRename() {
-    $this->bundle_rename_allowed = TRUE;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function isFieldConfigurable() {
-    return TRUE;
-  }
-
-  /*
-   * Implements the magic __sleep() method.
-   *
-   * Using the Serialize interface and serialize() / unserialize() methods
-   * breaks entity forms in PHP 5.4.
-   * @todo Investigate in https://drupal.org/node/2074253.
-   */
-  public function __sleep() {
-    // Only serialize properties from getExportProperties().
-    return array_keys(array_intersect_key($this->getExportProperties(), get_object_vars($this)));
-  }
-
-  /**
-   * Implements the magic __wakeup() method.
-   */
-  public function __wakeup() {
-    // Run the values from getExportProperties() through __construct().
-    $values = array_intersect_key($this->getExportProperties(), get_object_vars($this));
-    $this->__construct($values);
-  }
-
-}
diff --git a/core/modules/field/lib/Drupal/field/Entity/FieldInstanceConfig.php b/core/modules/field/lib/Drupal/field/Entity/FieldInstanceConfig.php
new file mode 100644
index 0000000..5ccfd3f
--- /dev/null
+++ b/core/modules/field/lib/Drupal/field/Entity/FieldInstanceConfig.php
@@ -0,0 +1,678 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\field\Entity\FieldInstanceConfig.
+ */
+
+namespace Drupal\field\Entity;
+
+use Drupal\Component\Utility\String;
+use Drupal\Core\Entity\Annotation\EntityType;
+use Drupal\Core\Annotation\Translation;
+use Drupal\Core\Config\Entity\ConfigEntityBase;
+use Drupal\Core\Entity\EntityInterface;
+use Drupal\field\FieldException;
+use Drupal\field\FieldInstanceInterface;
+
+/**
+ * Defines the Field instance entity.
+ *
+ * @EntityType(
+ *   id = "field_instance_config",
+ *   label = @Translation("Field instance"),
+ *   module = "field",
+ *   controllers = {
+ *     "storage" = "Drupal\field\FieldInstanceStorageController"
+ *   },
+ *   config_prefix = "field.instance",
+ *   entity_keys = {
+ *     "id" = "id",
+ *     "label" = "label",
+ *     "uuid" = "uuid"
+ *   }
+ * )
+ */
+class FieldInstanceConfig extends ConfigEntityBase implements FieldInstanceInterface {
+
+  /**
+   * The instance ID.
+   *
+   * The ID consists of 3 parts: the entity type, bundle and the field name.
+   *
+   * Example: node.article.body, user.user.field_main_image.
+   *
+   * @var string
+   */
+  public $id;
+
+  /**
+   * The instance UUID.
+   *
+   * This is assigned automatically when the instance is created.
+   *
+   * @var string
+   */
+  public $uuid;
+
+  /**
+   * The UUID of the field attached to the bundle by this instance.
+   *
+   * @var string
+   */
+  public $field_uuid;
+
+  /**
+   * The name of the entity type the instance is attached to.
+   *
+   * @var string
+   */
+  public $entity_type;
+
+  /**
+   * The name of the bundle the instance is attached to.
+   *
+   * @var string
+   */
+  public $bundle;
+
+  /**
+   * The human-readable label for the instance.
+   *
+   * This will be used as the title of Form API elements for the field in entity
+   * edit forms, or as the label for the field values in displayed entities.
+   *
+   * If not specified, this defaults to the field_name (mostly useful for field
+   * instances created in tests).
+   *
+   * @var string
+   */
+  public $label;
+
+  /**
+   * The instance description.
+   *
+   * A human-readable description for the field when used with this bundle.
+   * For example, the description will be the help text of Form API elements for
+   * this instance in entity edit forms.
+   *
+   * @var string
+   */
+  public $description = '';
+
+  /**
+   * Field-type specific settings.
+   *
+   * An array of key/value pairs. The keys and default values are defined by the
+   * field type.
+   *
+   * @var array
+   */
+  public $settings = array();
+
+  /**
+   * Flag indicating whether the field is required.
+   *
+   * TRUE if a value for this field is required when used with this bundle,
+   * FALSE otherwise. Currently, required-ness is only enforced at the Form API
+   * level in entity edit forms, not during direct API saves.
+   *
+   * @var bool
+   */
+  public $required = FALSE;
+
+  /**
+   * Default field value.
+   *
+   * The default value is used when an entity is created, either:
+   * - through an entity creation form; the form elements for the field are
+   *   prepopulated with the default value.
+   * - through direct API calls (i.e. $entity->save()); the default value is
+   *   added if the $entity object provides no explicit entry (actual values or
+   *   "the field is empty") for the field.
+   *
+   * The default value is expressed as a numerically indexed array of items,
+   * each item being an array of key/value pairs matching the set of 'columns'
+   * defined by the "field schema" for the field type, as exposed in
+   * hook_field_schema(). If the number of items exceeds the cardinality of the
+   * field, extraneous items will be ignored.
+   *
+   * This property is overlooked if the $default_value_function is non-empty.
+   *
+   * Example for a number_integer field:
+   * @code
+   * array(
+   *   array('value' => 1),
+   *   array('value' => 2),
+   * )
+   * @endcode
+   *
+   * @var array
+   */
+  public $default_value = array();
+
+  /**
+   * The name of a callback function that returns default values.
+   *
+   * The function will be called with the following arguments:
+   * - \Drupal\Core\Entity\EntityInterface $entity
+   *   The entity being created.
+   * - \Drupal\field\Entity\Field $field
+   *   The field object.
+   * - \Drupal\field\Entity\FieldInstanceConfig $instance
+   *   The field instance object.
+   * - string $langcode
+   *   The language of the entity being created.
+   * It should return an array of default values, in the same format as the
+   * $default_value property.
+   *
+   * This property takes precedence on the list of fixed values specified in the
+   * $default_value property.
+   *
+   * @var string
+   */
+  public $default_value_function = '';
+
+  /**
+   * Flag indicating whether the instance is deleted.
+   *
+   * The delete() method marks the instance as "deleted" and removes the
+   * corresponding entry from the config storage, but keeps its definition in
+   * the state storage while field data is purged by a separate
+   * garbage-collection process.
+   *
+   * Deleted instances stay out of the regular entity lifecycle (notably, their
+   * values are not populated in loaded entities, and are not saved back).
+   *
+   * @var bool
+   */
+  public $deleted = FALSE;
+
+  /**
+   * The field ConfigEntity object corresponding to $field_uuid.
+   *
+   * @var \Drupal\field\Entity\Field
+   */
+  protected $field;
+
+  /**
+   * Flag indicating whether the bundle name can be renamed or not.
+   *
+   * @var bool
+   */
+  protected $bundle_rename_allowed = FALSE;
+
+  /**
+   * The original instance.
+   *
+   * @var \Drupal\field\Entity\FieldInstanceConfig
+   */
+  public $original = NULL;
+
+  /**
+   * Constructs a FieldInstance object.
+   *
+   * @param array $values
+   *   An array of field instance properties, keyed by property name. Most
+   *   array elements will be used to set the corresponding properties on the
+   *   class; see the class property documentation for details. Some array
+   *   elements have special meanings and a few are required; these special
+   *   elements are:
+   *   - field_name: optional. The name of the field this is an instance of.
+   *   - field_uuid: optional. Either field_uuid or field_name is required
+   *     to build field instance. field_name will gain higher priority.
+   *     If field_name is not provided, field_uuid will be checked then.
+   *   - entity_type: required.
+   *   - bundle: required.
+   *
+   * In most cases, Field instance entities are created via
+   * entity_create('field_instance_config', $values)), where $values is the same
+   * parameter as in this constructor.
+   *
+   * @see entity_create()
+   *
+   * @ingroup field_crud
+   */
+  public function __construct(array $values, $entity_type = 'field_instance_config') {
+    // Accept incoming 'field_name' instead of 'field_uuid', for easier DX on
+    // creation of new instances.
+    if (isset($values['field_name']) && isset($values['entity_type']) && !isset($values['field_uuid'])) {
+      $field = field_info_field($values['entity_type'], $values['field_name']);
+      if (!$field) {
+        throw new FieldException(format_string('Attempt to create an instance of field @field_name that does not exist on entity type @entity_type.', array('@field_name' => $values['field_name'], '@entity_type' => $values['entity_type'])));
+      }
+      $values['field_uuid'] = $field->uuid;
+    }
+    elseif (isset($values['field_uuid'])) {
+      $field = field_info_field_by_id($values['field_uuid']);
+      // field_info_field_by_id() will not find the field if it is inactive.
+      if (!$field) {
+        $field = current(field_read_fields(array('uuid' => $values['field_uuid']), array('include_inactive' => TRUE, 'include_deleted' => TRUE)));
+      }
+      if (!$field) {
+        throw new FieldException(format_string('Attempt to create an instance of unknown field @uuid', array('@uuid' => $values['field_uuid'])));
+      }
+    }
+    else {
+      throw new FieldException('Attempt to create an instance of an unspecified field.');
+    }
+
+    // At this point, we should have a 'field_uuid' and a Field. Ditch the
+    // 'field_name' property if it was provided, and assign the $field property.
+    unset($values['field_name']);
+    $this->field = $field;
+
+    // Discard the 'field_type' entry that is added in config records to ease
+    // schema generation. See getExportProperties().
+    unset($values['field_type']);
+
+    // Check required properties.
+    if (empty($values['entity_type'])) {
+      throw new FieldException(format_string('Attempt to create an instance of field @field_name without an entity_type.', array('@field_name' => $this->field->name)));
+    }
+    if (empty($values['bundle'])) {
+      throw new FieldException(format_string('Attempt to create an instance of field @field_name without a bundle.', array('@field_name' => $this->field->name)));
+    }
+
+    // 'Label' defaults to the field name (mostly useful for field instances
+    // created in tests).
+    $values += array(
+      'label' => $this->field->name,
+    );
+    parent::__construct($values, $entity_type);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function id() {
+    return $this->entity_type . '.' . $this->bundle . '.' . $this->field->name;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getExportProperties() {
+    $names = array(
+      'id',
+      'uuid',
+      'status',
+      'langcode',
+      'field_uuid',
+      'entity_type',
+      'bundle',
+      'label',
+      'description',
+      'required',
+      'default_value',
+      'default_value_function',
+      'settings',
+    );
+    $properties = array();
+    foreach ($names as $name) {
+      $properties[$name] = $this->get($name);
+    }
+
+    // Additionally, include the field type, that is needed to be able to
+    // generate the field-type-dependant parts of the config schema.
+    if (isset($this->field->type)) {
+      $properties['field_type'] = $this->field->type;
+    }
+
+    return $properties;
+  }
+
+  /**
+   * Overrides \Drupal\Core\Entity\Entity::save().
+   *
+   * @return
+   *   Either SAVED_NEW or SAVED_UPDATED, depending on the operation performed.
+   *
+   * @throws \Drupal\field\FieldException
+   *   If the field instance definition is invalid.
+   *
+   * @throws \Drupal\Core\Entity\EntityStorageException
+   *   In case of failures at the configuration storage level.
+   */
+  public function save() {
+    if ($this->isNew()) {
+      return $this->saveNew();
+    }
+    else {
+      return $this->saveUpdated();
+    }
+  }
+
+  /**
+   * Saves a new field instance definition.
+   *
+   * @return
+   *   SAVED_NEW if the definition was saved.
+   *
+   * @throws \Drupal\field\FieldException
+   *   If the field instance definition is invalid.
+   *
+   * @throws \Drupal\Core\Entity\EntityStorageException
+   *   In case of failures at the configuration storage level.
+   */
+  protected function saveNew() {
+    $instance_controller = \Drupal::entityManager()->getStorageController($this->entityType);
+
+    // Ensure the field instance is unique within the bundle.
+    if ($prior_instance = $instance_controller->load($this->id())) {
+      throw new FieldException(format_string('Attempt to create an instance of field %name on bundle @bundle that already has an instance of that field.', array('%name' => $this->field->name, '@bundle' => $this->bundle)));
+    }
+
+    // Set the field UUID.
+    $this->field_uuid = $this->field->uuid;
+
+    // Ensure default values are present.
+    $this->prepareSave();
+
+    // Save the configuration.
+    $result = parent::save();
+    field_cache_clear();
+
+    return $result;
+  }
+
+  /**
+   * Saves an updated field instance definition.
+   *
+   * @return
+   *   SAVED_UPDATED if the definition was saved.
+   *
+   * @throws \Drupal\field\FieldException
+   *   If the field instance definition is invalid.
+   *
+   * @throws \Drupal\Core\Entity\EntityStorageException
+   *   In case of failures at the configuration storage level.
+   */
+  protected function saveUpdated() {
+    $instance_controller = \Drupal::entityManager()->getStorageController($this->entityType);
+
+    $original = $instance_controller->loadUnchanged($this->getOriginalID());
+    $this->original = $original;
+
+    // Some updates are always disallowed.
+    if ($this->entity_type != $original->entity_type) {
+      throw new FieldException("Cannot change an existing instance's entity_type.");
+    }
+    if ($this->bundle != $original->bundle && empty($this->bundle_rename_allowed)) {
+      throw new FieldException("Cannot change an existing instance's bundle.");
+    }
+    if ($this->field_uuid != $original->field_uuid) {
+      throw new FieldException("Cannot change an existing instance's field.");
+    }
+
+    // Ensure default values are present.
+    $this->prepareSave();
+
+    // Notify the entity storage controller.
+    \Drupal::entityManager()->getStorageController($this->entity_type)->onInstanceUpdate($this);
+
+    // Save the configuration.
+    $result = parent::save();
+    field_cache_clear();
+
+    return $result;
+  }
+
+  /**
+   * Prepares the instance definition for saving.
+   */
+  protected function prepareSave() {
+    $field_type_info = \Drupal::service('plugin.manager.entity.field.field_type')->getDefinition($this->field->type);
+
+    // Set the default instance settings.
+    $this->settings += $field_type_info['instance_settings'];
+  }
+
+  /**
+   * Overrides \Drupal\Core\Entity\Entity::delete().
+   *
+   * @param bool $field_cleanup
+   *   (optional) If TRUE, the field will be deleted as well if its last
+   *   instance is being deleted. If FALSE, it is the caller's responsibility to
+   *   handle the case of fields left without instances. Defaults to TRUE.
+   */
+  public function delete($field_cleanup = TRUE) {
+    if (!$this->deleted) {
+      $state = \Drupal::state();
+
+      // Delete the configuration of this instance and save the configuration
+      // in the key_value table so we can use it later during
+      // field_purge_batch().
+      $deleted_instances = $state->get('field.instance.deleted') ?: array();
+      $config = $this->getExportProperties();
+      $config['deleted'] = TRUE;
+      $deleted_instances[$this->uuid] = $config;
+      $state->set('field.instance.deleted', $deleted_instances);
+
+      parent::delete();
+
+      // Notify the entity storage controller.
+      \Drupal::entityManager()->getStorageController($this->entity_type)->onInstanceDelete($this);
+
+      // Clear the cache.
+      field_cache_clear();
+
+      // Remove the instance from the entity form displays.
+      $ids = array();
+      $form_modes = array('default' => array()) + entity_get_form_modes($this->entity_type);
+      foreach (array_keys($form_modes) as $form_mode) {
+        $ids[] = $this->entity_type . '.' . $this->bundle . '.' . $form_mode;
+      }
+      foreach (entity_load_multiple('entity_form_display', $ids) as $form_display) {
+        $form_display->removeComponent($this->field->name)->save();
+      }
+
+      // Remove the instance from the entity displays.
+      $ids = array();
+      $view_modes = array('default' => array()) + entity_get_view_modes($this->entity_type);
+      foreach (array_keys($view_modes) as $view_mode) {
+        $ids[] = $this->entity_type . '.' . $this->bundle . '.' . $view_mode;
+      }
+      foreach (entity_load_multiple('entity_display', $ids) as $display) {
+        $display->removeComponent($this->field->name)->save();
+      }
+
+      // Delete the field itself if we just deleted its last instance.
+      if ($field_cleanup && count($this->field->getBundles()) == 0) {
+        $this->field->delete();
+      }
+    }
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getField() {
+    return $this->field;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getFieldName() {
+    return $this->field->name;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getFieldType() {
+    return $this->field->type;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getFieldSettings() {
+    return $this->settings + $this->field->getFieldSettings();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getFieldSetting($setting_name) {
+    if (array_key_exists($setting_name, $this->settings)) {
+      return $this->settings[$setting_name];
+    }
+    else {
+      return $this->field->getFieldSetting($setting_name);
+    }
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getFieldPropertyNames() {
+    $schema = $this->field->getSchema();
+    return array_keys($schema['columns']);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function isFieldTranslatable() {
+    return $this->field->translatable;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function uri() {
+    $path = \Drupal::entityManager()->getAdminPath($this->entity_type, $this->bundle);
+
+    // Use parent URI as fallback, if path is empty.
+    if (empty($path)) {
+      return parent::uri();
+    }
+
+    return array(
+      'path' => $path . '/fields/' . $this->id(),
+      'options' => array(
+        'entity_type' => $this->entityType,
+        'entity' => $this,
+      ),
+    );
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getFieldLabel() {
+    return $this->label();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getFieldDescription() {
+    return $this->description;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getFieldCardinality() {
+    return $this->field->cardinality;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function isFieldRequired() {
+    return $this->required;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getFieldDefaultValue(EntityInterface $entity) {
+    if (!empty($this->default_value_function)) {
+      $function = $this->default_value_function;
+      return $function($entity, $this->getField(), $this, $entity->language()->id);
+    }
+    elseif (!empty($this->default_value)) {
+      return $this->default_value;
+    }
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function allowBundleRename() {
+    $this->bundle_rename_allowed = TRUE;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function isFieldConfigurable() {
+    return TRUE;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function offsetExists($offset) {
+    return (isset($this->{$offset}) || $offset == 'field_id' || $offset == 'field_name');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function &offsetGet($offset) {
+    if ($offset == 'field_id') {
+      return $this->field_uuid;
+    }
+    if ($offset == 'field_name') {
+      return $this->field->name;
+    }
+    return $this->{$offset};
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function offsetSet($offset, $value) {
+    if ($offset == 'field_id') {
+      $offset = 'field_uuid';
+    }
+    $this->{$offset} = $value;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function offsetUnset($offset) {
+    if ($offset == 'field_id') {
+      $offset = 'field_uuid';
+    }
+    unset($this->{$offset});
+  }
+
+  /**
+   * Implements the magic __sleep() method.
+   *
+   * Using the Serialize interface and serialize() / unserialize() methods
+   * breaks entity forms in PHP 5.4.
+   * @todo Investigate in https://drupal.org/node/2074253.
+   */
+  public function __sleep() {
+    // Only serialize properties from getExportProperties().
+    return array_keys(array_intersect_key($this->getExportProperties(), get_object_vars($this)));
+  }
+
+  /**
+   * Implements the magic __wakeup() method.
+   */
+  public function __wakeup() {
+    // Run the values from getExportProperties() through __construct().
+    $values = array_intersect_key($this->getExportProperties(), get_object_vars($this));
+    $this->__construct($values);
+  }
+
+}
diff --git a/core/modules/field/lib/Drupal/field/FieldInfo.php b/core/modules/field/lib/Drupal/field/FieldInfo.php
index 240bd48..d8758a3 100644
--- a/core/modules/field/lib/Drupal/field/FieldInfo.php
+++ b/core/modules/field/lib/Drupal/field/FieldInfo.php
@@ -327,7 +327,7 @@ public function getField($entity_type, $field_name) {
     // Do not check the (large) persistent cache, but read the definition.
 
     // Cache miss: read from definition.
-    if ($field = entity_load('field_entity', $entity_type . '.' . $field_name)) {
+    if ($field = entity_load('field_config', $entity_type . '.' . $field_name)) {
       $field = $this->prepareField($field);
 
       // Save in the "static" cache.
@@ -458,7 +458,7 @@ public function getBundleInstances($entity_type, $bundle) {
       // Load and prepare the corresponding fields and instances entities.
       if ($config_ids) {
         // Place the fields in our global "static".
-        $loaded_fields = entity_load_multiple('field_entity', array_keys($config_ids));
+        $loaded_fields = entity_load_multiple('field_config', array_keys($config_ids));
         foreach ($loaded_fields as $field) {
           if (!isset($this->fieldsById[$field->uuid()])) {
             $field = $this->prepareField($field);
@@ -471,7 +471,7 @@ public function getBundleInstances($entity_type, $bundle) {
         }
 
         // Then collect the instances.
-        $loaded_instances = entity_load_multiple('field_instance', array_values($config_ids));
+        $loaded_instances = entity_load_multiple('field_instance_config', array_values($config_ids));
         foreach ($loaded_instances as $instance) {
           $instance = $this->prepareInstance($instance);
           $instances[$instance->getFieldName()] = $instance;
diff --git a/core/modules/field/lib/Drupal/field/FieldInstanceInterface.php b/core/modules/field/lib/Drupal/field/FieldInstanceInterface.php
index 6c57fa6..72dfa26 100644
--- a/core/modules/field/lib/Drupal/field/FieldInstanceInterface.php
+++ b/core/modules/field/lib/Drupal/field/FieldInstanceInterface.php
@@ -27,7 +27,7 @@ public function getField();
    * Allows a bundle to be renamed.
    *
    * Renaming a bundle on the instance is allowed when an entity's bundle
-   * is renamed and when field_entity_bundle_rename() does internal
+   * is renamed and when field_config_bundle_rename() does internal
    * housekeeping.
    */
   public function allowBundleRename();
diff --git a/core/modules/field/lib/Drupal/field/Plugin/Type/Formatter/FormatterPluginManager.php b/core/modules/field/lib/Drupal/field/Plugin/Type/Formatter/FormatterPluginManager.php
index f663959..3924561 100644
--- a/core/modules/field/lib/Drupal/field/Plugin/Type/Formatter/FormatterPluginManager.php
+++ b/core/modules/field/lib/Drupal/field/Plugin/Type/Formatter/FormatterPluginManager.php
@@ -17,7 +17,7 @@
 use Drupal\Core\Plugin\Discovery\CacheDecorator;
 use Drupal\Core\Plugin\Discovery\AnnotatedClassDiscovery;
 use Drupal\Core\Plugin\Discovery\AlterDecorator;
-use Drupal\field\Entity\FieldInstance;
+use Drupal\field\Entity\FieldInstanceConfig;
 
 /**
  * Plugin type manager for field formatters.
diff --git a/core/modules/field/lib/Drupal/field/Tests/BulkDeleteTest.php b/core/modules/field/lib/Drupal/field/Tests/BulkDeleteTest.php
index d015ffa..d8156f1 100644
--- a/core/modules/field/lib/Drupal/field/Tests/BulkDeleteTest.php
+++ b/core/modules/field/lib/Drupal/field/Tests/BulkDeleteTest.php
@@ -113,7 +113,7 @@ function setUp() {
     }
 
     // Create two fields.
-    $field = entity_create('field_entity', array(
+    $field = entity_create('field_config', array(
       'name' => 'bf_1',
       'entity_type' => $this->entity_type,
       'type' => 'test_field',
@@ -121,7 +121,7 @@ function setUp() {
     ));
     $field->save();
     $this->fields[] = $field;
-    $field = entity_create('field_entity', array(
+    $field = entity_create('field_config', array(
       'name' => 'bf_2',
       'entity_type' => $this->entity_type,
       'type' => 'test_field',
@@ -134,7 +134,7 @@ function setUp() {
     // entities with values for each field.
     foreach ($this->bundles as $bundle) {
       foreach ($this->fields as $field) {
-        entity_create('field_instance', array(
+        entity_create('field_instance_config', array(
           'field_name' => $field->name,
           'entity_type' => $this->entity_type,
           'bundle' => $bundle,
diff --git a/core/modules/field/lib/Drupal/field/Tests/CrudTest.php b/core/modules/field/lib/Drupal/field/Tests/CrudTest.php
index d050f59..a9152e7 100644
--- a/core/modules/field/lib/Drupal/field/Tests/CrudTest.php
+++ b/core/modules/field/lib/Drupal/field/Tests/CrudTest.php
@@ -41,11 +41,11 @@ function testCreateField() {
       'type' => 'test_field',
     );
     field_test_memorize();
-    $field = entity_create('field_entity', $field_definition);
+    $field = entity_create('field_config', $field_definition);
     $field->save();
     $mem = field_test_memorize();
-    $this->assertIdentical($mem['field_test_field_entity_create'][0][0]->getFieldName(), $field_definition['name'], 'hook_entity_create() called with correct arguments.');
-    $this->assertIdentical($mem['field_test_field_entity_create'][0][0]->getFieldType(), $field_definition['type'], 'hook_entity_create() called with correct arguments.');
+    $this->assertIdentical($mem['field_test_field_config_create'][0][0]->getFieldName(), $field_definition['name'], 'hook_entity_create() called with correct arguments.');
+    $this->assertIdentical($mem['field_test_field_config_create'][0][0]->getFieldType(), $field_definition['type'], 'hook_entity_create() called with correct arguments.');
 
     // Read the configuration. Check against raw configuration data rather than
     // the loaded ConfigEntity, to be sure we check that the defaults are
@@ -67,7 +67,7 @@ function testCreateField() {
 
     // Guarantee that the name is unique.
     try {
-      entity_create('field_entity', $field_definition)->save();
+      entity_create('field_config', $field_definition)->save();
       $this->fail(t('Cannot create two fields with the same name.'));
     }
     catch (FieldException $e) {
@@ -80,7 +80,7 @@ function testCreateField() {
         'name' => 'field_1',
         'entity_type' => 'entity_type',
       );
-      entity_create('field_entity', $field_definition)->save();
+      entity_create('field_config', $field_definition)->save();
       $this->fail(t('Cannot create a field with no type.'));
     }
     catch (FieldException $e) {
@@ -93,7 +93,7 @@ function testCreateField() {
         'type' => 'test_field',
         'entity_type' => 'entity_test',
       );
-      entity_create('field_entity', $field_definition)->save();
+      entity_create('field_config', $field_definition)->save();
       $this->fail(t('Cannot create an unnamed field.'));
     }
     catch (FieldException $e) {
@@ -105,7 +105,7 @@ function testCreateField() {
         'name' => 'test_field',
         'type' => 'test_field'
       );
-      entity_create('field_entity', $field_definition)->save();
+      entity_create('field_config', $field_definition)->save();
       $this->fail('Cannot create a field without an entity type.');
     }
     catch (FieldException $e) {
@@ -119,7 +119,7 @@ function testCreateField() {
         'entity_type' => 'entity_test',
         'type' => 'test_field',
       );
-      entity_create('field_entity', $field_definition)->save();
+      entity_create('field_config', $field_definition)->save();
       $this->fail(t('Cannot create a field with a name starting with a digit.'));
     }
     catch (FieldException $e) {
@@ -133,7 +133,7 @@ function testCreateField() {
         'entity_type' => 'entity_test',
         'type' => 'test_field',
       );
-      entity_create('field_entity', $field_definition)->save();
+      entity_create('field_config', $field_definition)->save();
       $this->fail(t('Cannot create a field with a name containing an illegal character.'));
     }
     catch (FieldException $e) {
@@ -147,7 +147,7 @@ function testCreateField() {
         'entity_type' => 'entity_test',
         'type' => 'test_field',
       );
-      entity_create('field_entity', $field_definition)->save();
+      entity_create('field_config', $field_definition)->save();
       $this->fail(t('Cannot create a field with a name longer than 32 characters.'));
     }
     catch (FieldException $e) {
@@ -162,7 +162,7 @@ function testCreateField() {
         'name' => 'id',
         'entity_type' => 'entity_test',
       );
-      entity_create('field_entity', $field_definition)->save();
+      entity_create('field_config', $field_definition)->save();
       $this->fail(t('Cannot create a field bearing the name of an entity key.'));
     }
     catch (FieldException $e) {
@@ -185,7 +185,7 @@ function testCreateFieldWithExplicitSchema() {
         'dummy' => 'foobar'
       ),
     );
-    $field = entity_create('field_entity', $field_definition);
+    $field = entity_create('field_config', $field_definition);
     $this->assertEqual($field->getSchema(), $field_definition['schema']);
   }
 
@@ -198,7 +198,7 @@ function testReadFields() {
       'entity_type' => 'entity_test',
       'type' => 'test_field',
     );
-    $field = entity_create('field_entity', $field_definition);
+    $field = entity_create('field_config', $field_definition);
     $field->save();
     $id = $field->id();
 
@@ -218,7 +218,7 @@ function testReadFields() {
       'entity_type' => 'entity_test',
       'bundle' => 'entity_test',
     );
-    entity_create('field_instance', $instance_definition)->save();
+    entity_create('field_instance_config', $instance_definition)->save();
   }
 
   /**
@@ -231,10 +231,10 @@ function testFieldIndexes() {
       'entity_type' => 'entity_test',
       'type' => 'test_field',
     );
-    $field = entity_create('field_entity', $field_definition);
+    $field = entity_create('field_config', $field_definition);
     $field->save();
     field_cache_clear();
-    $field = entity_load('field_entity', $field->id());
+    $field = entity_load('field_config', $field->id());
     $schema = $field->getSchema();
     $expected_indexes = array('value' => array('value'));
     $this->assertEqual($schema['indexes'], $expected_indexes, 'Field type indexes saved by default');
@@ -249,10 +249,10 @@ function testFieldIndexes() {
         'value' => array(),
       ),
     );
-    $field = entity_create('field_entity', $field_definition);
+    $field = entity_create('field_config', $field_definition);
     $field->save();
     field_cache_clear();
-    $field = entity_load('field_entity', $field->id());
+    $field = entity_load('field_config', $field->id());
     $schema = $field->getSchema();
     $expected_indexes = array('value' => array());
     $this->assertEqual($schema['indexes'], $expected_indexes, 'Field definition indexes override field type indexes');
@@ -267,11 +267,11 @@ function testFieldIndexes() {
         'value_2' => array('value'),
       ),
     );
-    $field = entity_create('field_entity', $field_definition);
+    $field = entity_create('field_config', $field_definition);
     $field->save();
     $id = $field->id();
     field_cache_clear();
-    $field = entity_load('field_entity', $id);
+    $field = entity_load('field_config', $id);
     $schema = $field->getSchema();
     $expected_indexes = array('value' => array('value'), 'value_2' => array('value'));
     $this->assertEqual($schema['indexes'], $expected_indexes, 'Field definition indexes are merged with field type indexes');
@@ -289,13 +289,13 @@ function testDeleteField() {
       'type' => 'test_field',
       'entity_type' => 'entity_test',
     );
-    entity_create('field_entity', $this->field)->save();
+    entity_create('field_config', $this->field)->save();
     $this->another_field = array(
       'name' => 'field_2',
       'type' => 'test_field',
       'entity_type' => 'entity_test',
     );
-    entity_create('field_entity', $this->another_field)->save();
+    entity_create('field_config', $this->another_field)->save();
 
     // Create instances for each.
     $this->instance_definition = array(
@@ -303,10 +303,10 @@ function testDeleteField() {
       'entity_type' => 'entity_test',
       'bundle' => 'entity_test',
     );
-    entity_create('field_instance', $this->instance_definition)->save();
+    entity_create('field_instance_config', $this->instance_definition)->save();
     $another_instance_definition = $this->instance_definition;
     $another_instance_definition['field_name'] = $this->another_field['name'];
-    entity_create('field_instance', $another_instance_definition)->save();
+    entity_create('field_instance_config', $another_instance_definition)->save();
 
     // Test that the first field is not deleted, and then delete it.
     $field = field_read_field('entity_test', $this->field['name'], array('include_deleted' => TRUE));
@@ -339,8 +339,8 @@ function testDeleteField() {
 
     // Try to create a new field the same name as a deleted field and
     // write data into it.
-    entity_create('field_entity', $this->field)->save();
-    entity_create('field_instance', $this->instance_definition)->save();
+    entity_create('field_config', $this->field)->save();
+    entity_create('field_instance_config', $this->instance_definition)->save();
     $field = field_read_field('entity_test', $this->field['name']);
     $this->assertTrue(!empty($field) && empty($field->deleted), 'A new field with a previously used name is created.');
     $instance = field_read_instance('entity_test', $this->instance_definition['field_name'], $this->instance_definition['bundle']);
@@ -365,7 +365,7 @@ function testUpdateFieldType() {
       'entity_type' => 'entity_test',
       'type' => 'number_decimal',
     );
-    $field = entity_create('field_entity', $field_definition);
+    $field = entity_create('field_config', $field_definition);
     $field->save();
 
     try {
@@ -386,14 +386,14 @@ function testUpdateField() {
     // respected. Since cardinality enforcement is consistent across database
     // systems, it makes a good test case.
     $cardinality = 4;
-    $field = entity_create('field_entity', array(
+    $field = entity_create('field_config', array(
       'name' => 'field_update',
       'entity_type' => 'entity_test',
       'type' => 'test_field',
       'cardinality' => $cardinality,
     ));
     $field->save();
-    $instance = entity_create('field_instance', array(
+    $instance = entity_create('field_instance_config', array(
       'field_name' => 'field_update',
       'entity_type' => 'entity_test',
       'bundle' => 'entity_test',
@@ -424,7 +424,7 @@ function testUpdateField() {
    * Test field type modules forbidding an update.
    */
   function testUpdateFieldForbid() {
-    $field = entity_create('field_entity', array(
+    $field = entity_create('field_config', array(
       'name' => 'forbidden',
       'entity_type' => 'entity_test',
       'type' => 'test_field',
diff --git a/core/modules/field/lib/Drupal/field/Tests/DisplayApiTest.php b/core/modules/field/lib/Drupal/field/Tests/DisplayApiTest.php
index fc0a55a..8c3cd96 100644
--- a/core/modules/field/lib/Drupal/field/Tests/DisplayApiTest.php
+++ b/core/modules/field/lib/Drupal/field/Tests/DisplayApiTest.php
@@ -97,8 +97,8 @@ function setUp() {
       ),
     );
 
-    entity_create('field_entity', $field)->save();
-    entity_create('field_instance', $instance)->save();
+    entity_create('field_config', $field)->save();
+    entity_create('field_instance_config', $instance)->save();
     // Create a display for the default view mode.
     entity_get_display($instance['entity_type'], $instance['bundle'], 'default')
       ->setComponent($this->field_name, $this->display_options['default'])
diff --git a/core/modules/field/lib/Drupal/field/Tests/FieldAccessTest.php b/core/modules/field/lib/Drupal/field/Tests/FieldAccessTest.php
index 81eb005..59b0cba 100644
--- a/core/modules/field/lib/Drupal/field/Tests/FieldAccessTest.php
+++ b/core/modules/field/lib/Drupal/field/Tests/FieldAccessTest.php
@@ -56,13 +56,13 @@ function setUp() {
       'entity_type' => 'node',
       'type' => 'text',
     );
-    entity_create('field_entity', $field)->save();
+    entity_create('field_config', $field)->save();
     $instance = array(
       'field_name' => $field['name'],
       'entity_type' => 'node',
       'bundle' => $content_type,
     );
-    entity_create('field_instance', $instance)->save();
+    entity_create('field_instance_config', $instance)->save();
 
     // Assign display properties for the 'default' and 'teaser' view modes.
     foreach (array('default', 'teaser') as $view_mode) {
diff --git a/core/modules/field/lib/Drupal/field/Tests/FieldAttachOtherTest.php b/core/modules/field/lib/Drupal/field/Tests/FieldAttachOtherTest.php
index 23e7fd1..a7d1ddb 100644
--- a/core/modules/field/lib/Drupal/field/Tests/FieldAttachOtherTest.php
+++ b/core/modules/field/lib/Drupal/field/Tests/FieldAttachOtherTest.php
@@ -190,7 +190,7 @@ function testFieldAttachPrepareViewMultiple() {
     $formatter_setting = $this->randomName();
     $instance_definition = $this->instance_definition;
     $instance_definition['bundle'] = 'test_bundle_2';
-    $this->instance2 = entity_create('field_instance', $instance_definition);
+    $this->instance2 = entity_create('field_instance_config', $instance_definition);
     $this->instance2->save();
 
     $display_2 = entity_get_display('entity_test', 'test_bundle_2', 'full')
diff --git a/core/modules/field/lib/Drupal/field/Tests/FieldAttachStorageTest.php b/core/modules/field/lib/Drupal/field/Tests/FieldAttachStorageTest.php
index 5ee57a0..1229e7f 100644
--- a/core/modules/field/lib/Drupal/field/Tests/FieldAttachStorageTest.php
+++ b/core/modules/field/lib/Drupal/field/Tests/FieldAttachStorageTest.php
@@ -15,7 +15,7 @@ class FieldAttachStorageTest extends FieldUnitTestBase {
   /**
    * The field instance.
    *
-   * @var \Drupal\field\Entity\FieldInstance
+   * @var \Drupal\field\Entity\FieldInstanceConfig
    */
   protected $instance;
 
@@ -119,7 +119,7 @@ function testFieldAttachLoadMultiple() {
     );
     for ($i = 1; $i <= 3; $i++) {
       $field_names[$i] = 'field_' . $i;
-      $field = entity_create('field_entity', array(
+      $field = entity_create('field_config', array(
         'name' => $field_names[$i],
         'entity_type' => $entity_type,
         'type' => 'test_field',
@@ -127,7 +127,7 @@ function testFieldAttachLoadMultiple() {
       $field->save();
       $field_ids[$i] = $field->uuid();
       foreach ($field_bundles_map[$i] as $bundle) {
-        entity_create('field_instance', array(
+        entity_create('field_instance_config', array(
           'field_name' => $field_names[$i],
           'entity_type' => $entity_type,
           'bundle' => $bundles[$bundle],
@@ -351,7 +351,7 @@ function testEntityDeleteBundle() {
 
     // Add an instance to that bundle.
     $this->instance_definition['bundle'] = $new_bundle;
-    entity_create('field_instance', $this->instance_definition)->save();
+    entity_create('field_instance_config', $this->instance_definition)->save();
 
     // Create a second field for the test bundle
     $field_name = drupal_strtolower($this->randomName() . '_field_name');
@@ -361,7 +361,7 @@ function testEntityDeleteBundle() {
       'type' => 'test_field',
       'cardinality' => 1,
     );
-    entity_create('field_entity', $field)->save();
+    entity_create('field_config', $field)->save();
     $instance = array(
       'field_name' => $field_name,
       'entity_type' => $entity_type,
diff --git a/core/modules/field/lib/Drupal/field/Tests/FieldImportCreateTest.php b/core/modules/field/lib/Drupal/field/Tests/FieldImportCreateTest.php
index ff1c584..5fb5bb2 100644
--- a/core/modules/field/lib/Drupal/field/Tests/FieldImportCreateTest.php
+++ b/core/modules/field/lib/Drupal/field/Tests/FieldImportCreateTest.php
@@ -35,11 +35,11 @@ function testImportCreateDefault() {
     $instance_id_2b = "entity_test.test_bundle.$field_name_2";
 
     // Check that the fields and instances do not exist yet.
-    $this->assertFalse(entity_load('field_entity', $field_id));
-    $this->assertFalse(entity_load('field_instance', $instance_id));
-    $this->assertFalse(entity_load('field_entity', $field_id_2));
-    $this->assertFalse(entity_load('field_instance', $instance_id_2a));
-    $this->assertFalse(entity_load('field_instance', $instance_id_2b));
+    $this->assertFalse(entity_load('field_config', $field_id));
+    $this->assertFalse(entity_load('field_instance_config', $instance_id));
+    $this->assertFalse(entity_load('field_config', $field_id_2));
+    $this->assertFalse(entity_load('field_instance_config', $instance_id_2a));
+    $this->assertFalse(entity_load('field_instance_config', $instance_id_2b));
 
     // Create a second bundle for the 'Entity test' entity type.
     entity_test_create_bundle('test_bundle');
@@ -49,13 +49,13 @@ function testImportCreateDefault() {
     \Drupal::moduleHandler()->install(array('field_test_config'));
 
     // A field with one instance.
-    $field = entity_load('field_entity', $field_id);
+    $field = entity_load('field_config', $field_id);
     $this->assertTrue($field, 'The field was created.');
-    $instance = entity_load('field_instance', $instance_id);
+    $instance = entity_load('field_instance_config', $instance_id);
     $this->assertTrue($instance, 'The field instance was deleted.');
 
     // A field with multiple instances.
-    $field_2 = entity_load('field_entity', $field_id_2);
+    $field_2 = entity_load('field_config', $field_id_2);
     $this->assertTrue($field_2, 'The second field was created.');
     $this->assertTrue($instance->bundle, 'test_bundle', 'The second field instance was created on bundle test_bundle.');
     $this->assertTrue($instance->bundle, 'test_bundle_2', 'The second field instance was created on bundle test_bundle_2.');
@@ -105,15 +105,15 @@ function testImportCreate() {
     $this->configImporter()->import();
 
     // Check that the field and instance were created.
-    $field = entity_load('field_entity', $field_id);
+    $field = entity_load('field_config', $field_id);
     $this->assertTrue($field, 'Test import field from staging exists');
-    $instance = entity_load('field_instance', $instance_id);
+    $instance = entity_load('field_instance_config', $instance_id);
     $this->assertTrue($instance, 'Test import field instance from staging exists');
-    $field = entity_load('field_entity', $field_id_2);
+    $field = entity_load('field_config', $field_id_2);
     $this->assertTrue($field, 'Test import field 2 from staging exists');
-    $instance = entity_load('field_instance', $instance_id_2a);
+    $instance = entity_load('field_instance_config', $instance_id_2a);
     $this->assertTrue($instance, 'Test import field instance 2a from staging exists');
-    $instance = entity_load('field_instance', $instance_id_2b);
+    $instance = entity_load('field_instance_config', $instance_id_2b);
     $this->assertTrue($instance, 'Test import field instance 2b from staging exists');
   }
 }
diff --git a/core/modules/field/lib/Drupal/field/Tests/FieldImportDeleteTest.php b/core/modules/field/lib/Drupal/field/Tests/FieldImportDeleteTest.php
index 23ae199..d2388f7 100644
--- a/core/modules/field/lib/Drupal/field/Tests/FieldImportDeleteTest.php
+++ b/core/modules/field/lib/Drupal/field/Tests/FieldImportDeleteTest.php
@@ -51,8 +51,8 @@ public function testImportDelete() {
     $this->installConfig(array('field_test_config'));
 
     // Get the uuid's for the fields.
-    $field_uuid = entity_load('field_entity', $field_id)->uuid();
-    $field_uuid_2 = entity_load('field_entity', $field_id_2)->uuid();
+    $field_uuid = entity_load('field_config', $field_id)->uuid();
+    $field_uuid_2 = entity_load('field_config', $field_id_2)->uuid();
 
     $active = $this->container->get('config.storage');
     $staging = $this->container->get('config.storage.staging');
@@ -67,15 +67,15 @@ public function testImportDelete() {
     $this->configImporter()->import();
 
     // Check that the fields and instances are gone.
-    $field = entity_load('field_entity', $field_id, TRUE);
+    $field = entity_load('field_config', $field_id, TRUE);
     $this->assertFalse($field, 'The field was deleted.');
-    $field_2 = entity_load('field_entity', $field_id_2, TRUE);
+    $field_2 = entity_load('field_config', $field_id_2, TRUE);
     $this->assertFalse($field_2, 'The second field was deleted.');
-    $instance = entity_load('field_instance', $instance_id, TRUE);
+    $instance = entity_load('field_instance_config', $instance_id, TRUE);
     $this->assertFalse($instance, 'The field instance was deleted.');
-    $instance_2a = entity_load('field_instance', $instance_id_2a, TRUE);
+    $instance_2a = entity_load('field_instance_config', $instance_id_2a, TRUE);
     $this->assertFalse($instance_2a, 'The second field instance on test bundle was deleted.');
-    $instance_2b = entity_load('field_instance', $instance_id_2b, TRUE);
+    $instance_2b = entity_load('field_instance_config', $instance_id_2b, TRUE);
     $this->assertFalse($instance_2b, 'The second field instance on test bundle 2 was deleted.');
 
     // Check that all config files are gone.
diff --git a/core/modules/field/lib/Drupal/field/Tests/FieldInfoTest.php b/core/modules/field/lib/Drupal/field/Tests/FieldInfoTest.php
index 637aacf..623107c 100644
--- a/core/modules/field/lib/Drupal/field/Tests/FieldInfoTest.php
+++ b/core/modules/field/lib/Drupal/field/Tests/FieldInfoTest.php
@@ -41,7 +41,7 @@ function testFieldInfo() {
 
     // Create a field, verify it shows up.
     $core_fields = field_info_fields();
-    $field = entity_create('field_entity', array(
+    $field = entity_create('field_config', array(
       'name' => drupal_strtolower($this->randomName()),
       'entity_type' => 'entity_test',
       'type' => 'test_field',
@@ -68,7 +68,7 @@ function testFieldInfo() {
       'description' => $this->randomName(),
       'weight' => mt_rand(0, 127),
     );
-    $instance = entity_create('field_instance', $instance_definition);
+    $instance = entity_create('field_instance_config', $instance_definition);
     $instance->save();
 
     $info = entity_get_info('entity_test');
@@ -117,7 +117,7 @@ function testFieldPrepare() {
       'entity_type' => 'entity_test',
       'type' => 'test_field',
     );
-    $field = entity_create('field_entity', $field_definition);
+    $field = entity_create('field_config', $field_definition);
     $field->save();
 
     // Simulate a stored field definition missing a field setting (e.g. a
@@ -145,13 +145,13 @@ function testInstancePrepare() {
       'entity_type' => 'entity_test',
       'type' => 'test_field',
     );
-    entity_create('field_entity', $field_definition)->save();
+    entity_create('field_config', $field_definition)->save();
     $instance_definition = array(
       'field_name' => $field_definition['name'],
       'entity_type' => 'entity_test',
       'bundle' => 'entity_test',
     );
-    $instance = entity_create('field_instance', $instance_definition);
+    $instance = entity_create('field_instance_config', $instance_definition);
     $instance->save();
 
     // Simulate a stored instance definition missing various settings (e.g. a
@@ -182,13 +182,13 @@ function testInstanceDisabledEntityType() {
       'entity_type' => 'comment',
       'type' => 'test_field',
     );
-    entity_create('field_entity', $field_definition)->save();
+    entity_create('field_config', $field_definition)->save();
     $instance_definition = array(
       'field_name' => 'field',
       'entity_type' => 'comment',
       'bundle' => 'comment_node_article',
     );
-    entity_create('field_instance', $instance_definition);
+    entity_create('field_instance_config', $instance_definition);
 
     // Disable coment module. This clears field_info cache.
     module_uninstall(array('comment'));
@@ -224,7 +224,7 @@ function testFieldMap() {
       ),
     );
     foreach ($fields as $field) {
-      entity_create('field_entity', $field)->save();
+      entity_create('field_config', $field)->save();
     }
 
     // Create a couple instances.
@@ -251,7 +251,7 @@ function testFieldMap() {
       ),
     );
     foreach ($instances as $instance) {
-      entity_create('field_instance', $instance)->save();
+      entity_create('field_instance_config', $instance)->save();
     }
 
     $expected = array(
@@ -298,7 +298,7 @@ function testFieldInfoCache() {
     // Create a test field and ensure it's in the array returned by
     // field_info_fields().
     $field_name = drupal_strtolower($this->randomName());
-    $field = entity_create('field_entity', array(
+    $field = entity_create('field_config', array(
       'name' => $field_name,
       'entity_type' => 'entity_test',
       'type' => 'test_field',
diff --git a/core/modules/field/lib/Drupal/field/Tests/FieldInstanceCrudTest.php b/core/modules/field/lib/Drupal/field/Tests/FieldInstanceCrudTest.php
index 6c7209e..5b49bed 100644
--- a/core/modules/field/lib/Drupal/field/Tests/FieldInstanceCrudTest.php
+++ b/core/modules/field/lib/Drupal/field/Tests/FieldInstanceCrudTest.php
@@ -48,7 +48,7 @@ function setUp() {
       'entity_type' => 'entity_test',
       'type' => 'test_field',
     );
-    $this->field = entity_create('field_entity', $this->field_definition);
+    $this->field = entity_create('field_config', $this->field_definition);
     $this->field->save();
     $this->instance_definition = array(
       'field_name' => $this->field->getFieldName(),
@@ -67,7 +67,7 @@ function setUp() {
    * Test the creation of a field instance.
    */
   function testCreateFieldInstance() {
-    $instance = entity_create('field_instance', $this->instance_definition);
+    $instance = entity_create('field_instance_config', $this->instance_definition);
     $instance->save();
 
     // Read the configuration. Check against raw configuration data rather than
@@ -87,7 +87,7 @@ function testCreateFieldInstance() {
 
     // Guarantee that the field/bundle combination is unique.
     try {
-      entity_create('field_instance', $this->instance_definition)->save();
+      entity_create('field_instance_config', $this->instance_definition)->save();
       $this->fail(t('Cannot create two instances with the same field / bundle combination.'));
     }
     catch (FieldException $e) {
@@ -97,7 +97,7 @@ function testCreateFieldInstance() {
     // Check that the specified field exists.
     try {
       $this->instance_definition['field_name'] = $this->randomName();
-      entity_create('field_instance', $this->instance_definition)->save();
+      entity_create('field_instance_config', $this->instance_definition)->save();
       $this->fail(t('Cannot create an instance of a non-existing field.'));
     }
     catch (FieldException $e) {
@@ -111,7 +111,7 @@ function testCreateFieldInstance() {
    * Test reading back an instance definition.
    */
   function testReadFieldInstance() {
-    entity_create('field_instance', $this->instance_definition)->save();
+    entity_create('field_instance_config', $this->instance_definition)->save();
 
     // Read the instance back.
     $instance = field_read_instance('entity_test', $this->instance_definition['field_name'], $this->instance_definition['bundle']);
@@ -124,7 +124,7 @@ function testReadFieldInstance() {
    * Test the update of a field instance.
    */
   function testUpdateFieldInstance() {
-    entity_create('field_instance', $this->instance_definition)->save();
+    entity_create('field_instance_config', $this->instance_definition)->save();
 
     // Check that basic changes are saved.
     $instance = field_read_instance('entity_test', $this->instance_definition['field_name'], $this->instance_definition['bundle']);
@@ -152,10 +152,10 @@ function testDeleteFieldInstance() {
 
     // Create two instances for the same field so we can test that only one
     // is deleted.
-    entity_create('field_instance', $this->instance_definition)->save();
+    entity_create('field_instance_config', $this->instance_definition)->save();
     $another_instance_definition = $this->instance_definition;
     $another_instance_definition['bundle'] .= '_another_bundle';
-    entity_create('field_instance', $another_instance_definition)->save();
+    entity_create('field_instance_config', $another_instance_definition)->save();
 
     // Test that the first instance is not deleted, and then delete it.
     $instance = field_read_instance('entity_test', $this->instance_definition['field_name'], $this->instance_definition['bundle'], array('include_deleted' => TRUE));
diff --git a/core/modules/field/lib/Drupal/field/Tests/FieldUnitTestBase.php b/core/modules/field/lib/Drupal/field/Tests/FieldUnitTestBase.php
index d9a776b..7326fcc 100644
--- a/core/modules/field/lib/Drupal/field/Tests/FieldUnitTestBase.php
+++ b/core/modules/field/lib/Drupal/field/Tests/FieldUnitTestBase.php
@@ -67,7 +67,7 @@ function createFieldWithInstance($suffix = '', $entity_type = 'entity_test', $bu
     $instance_definition = 'instance_definition' . $suffix;
 
     $this->$field_name = drupal_strtolower($this->randomName() . '_field_name' . $suffix);
-    $this->$field = entity_create('field_entity', array(
+    $this->$field = entity_create('field_config', array(
       'name' => $this->$field_name,
       'entity_type' => $entity_type,
       'type' => 'test_field',
@@ -85,7 +85,7 @@ function createFieldWithInstance($suffix = '', $entity_type = 'entity_test', $bu
         'test_instance_setting' => $this->randomName(),
       ),
     );
-    $this->$instance = entity_create('field_instance', $this->$instance_definition);
+    $this->$instance = entity_create('field_instance_config', $this->$instance_definition);
     $this->$instance->save();
 
     entity_get_form_display($entity_type, $bundle, 'default')
diff --git a/core/modules/field/lib/Drupal/field/Tests/FormTest.php b/core/modules/field/lib/Drupal/field/Tests/FormTest.php
index f9b37d5..51ad630 100644
--- a/core/modules/field/lib/Drupal/field/Tests/FormTest.php
+++ b/core/modules/field/lib/Drupal/field/Tests/FormTest.php
@@ -92,8 +92,8 @@ function testFieldFormSingle() {
     $field = $this->field_single;
     $field_name = $field['name'];
     $this->instance['field_name'] = $field_name;
-    entity_create('field_entity', $field)->save();
-    entity_create('field_instance', $this->instance)->save();
+    entity_create('field_config', $field)->save();
+    entity_create('field_instance_config', $this->instance)->save();
     entity_get_form_display($this->instance['entity_type'], $this->instance['bundle'], 'default')
       ->setComponent($field_name)
       ->save();
@@ -176,8 +176,8 @@ function testFieldFormDefaultValue() {
     $this->instance['field_name'] = $field_name;
     $default = rand(1, 127);
     $this->instance['default_value'] = array(array('value' => $default));
-    entity_create('field_entity', $field)->save();
-    entity_create('field_instance', $this->instance)->save();
+    entity_create('field_config', $field)->save();
+    entity_create('field_instance_config', $this->instance)->save();
     entity_get_form_display($this->instance['entity_type'], $this->instance['bundle'], 'default')
       ->setComponent($field_name)
       ->save();
@@ -206,8 +206,8 @@ function testFieldFormSingleRequired() {
     $field_name = $field['name'];
     $this->instance['field_name'] = $field_name;
     $this->instance['required'] = TRUE;
-    entity_create('field_entity', $field)->save();
-    entity_create('field_instance', $this->instance)->save();
+    entity_create('field_config', $field)->save();
+    entity_create('field_instance_config', $this->instance)->save();
     entity_get_form_display($this->instance['entity_type'], $this->instance['bundle'], 'default')
       ->setComponent($field_name)
       ->save();
@@ -246,16 +246,16 @@ function testFieldFormSingleRequired() {
 //    $this->field = $this->field_multiple;
 //    $field_name = $this->field['field_name'];
 //    $this->instance['field_name'] = $field_name;
-//    entity_create('field_entity', $this->field)->save();
-//    entity_create('field_instance', $this->instance)->save();
+//    entity_create('field_config', $this->field)->save();
+//    entity_create('field_instance_config', $this->instance)->save();
 //  }
 
   function testFieldFormUnlimited() {
     $field = $this->field_unlimited;
     $field_name = $field['name'];
     $this->instance['field_name'] = $field_name;
-    entity_create('field_entity', $field)->save();
-    entity_create('field_instance', $this->instance)->save();
+    entity_create('field_config', $field)->save();
+    entity_create('field_instance_config', $this->instance)->save();
     entity_get_form_display($this->instance['entity_type'], $this->instance['bundle'], 'default')
       ->setComponent($field_name)
       ->save();
@@ -340,14 +340,14 @@ function testFieldFormMultivalueWithRequiredRadio() {
     $field = $this->field_unlimited;
     $field_name = $field['name'];
     $this->instance['field_name'] = $field_name;
-    entity_create('field_entity', $field)->save();
-    entity_create('field_instance', $this->instance)->save();
+    entity_create('field_config', $field)->save();
+    entity_create('field_instance_config', $this->instance)->save();
     entity_get_form_display($this->instance['entity_type'], $this->instance['bundle'], 'default')
       ->setComponent($field_name)
       ->save();
 
     // Add a required radio field.
-    entity_create('field_entity', array(
+    entity_create('field_config', array(
       'name' => 'required_radio_test',
       'entity_type' => 'entity_test',
       'type' => 'list_text',
@@ -361,7 +361,7 @@ function testFieldFormMultivalueWithRequiredRadio() {
       'bundle' => 'entity_test',
       'required' => TRUE,
     );
-    entity_create('field_instance', $instance)->save();
+    entity_create('field_instance_config', $instance)->save();
     entity_get_form_display($instance['entity_type'], $instance['bundle'], 'default')
       ->setComponent($instance['field_name'], array(
         'type' => 'options_buttons',
@@ -387,8 +387,8 @@ function testFieldFormJSAddMore() {
     $field = $this->field_unlimited;
     $field_name = $field['name'];
     $this->instance['field_name'] = $field_name;
-    entity_create('field_entity', $field)->save();
-    entity_create('field_instance', $this->instance)->save();
+    entity_create('field_config', $field)->save();
+    entity_create('field_instance_config', $this->instance)->save();
     entity_get_form_display($this->instance['entity_type'], $this->instance['bundle'], 'default')
       ->setComponent($field_name)
       ->save();
@@ -448,8 +448,8 @@ function testFieldFormMultipleWidget() {
     $field = $this->field_multiple;
     $field_name = $field['name'];
     $this->instance['field_name'] = $field_name;
-    entity_create('field_entity', $field)->save();
-    entity_create('field_instance', $this->instance)->save();
+    entity_create('field_config', $field)->save();
+    entity_create('field_instance_config', $this->instance)->save();
     entity_get_form_display($this->instance['entity_type'], $this->instance['bundle'], 'default')
       ->setComponent($field_name, array(
         'type' => 'test_field_widget_multiple',
@@ -499,8 +499,8 @@ function testFieldFormAccess() {
     $instance['field_name'] = $field_name;
     $instance['entity_type'] = $entity_type;
     $instance['bundle'] = $entity_type;
-    entity_create('field_entity', $field)->save();
-    entity_create('field_instance', $instance)->save();
+    entity_create('field_config', $field)->save();
+    entity_create('field_instance_config', $instance)->save();
     entity_get_form_display($entity_type, $entity_type, 'default')
       ->setComponent($field_name)
       ->save();
@@ -519,8 +519,8 @@ function testFieldFormAccess() {
       'bundle' => $entity_type,
       'default_value' => array(0 => array('value' => 99)),
     );
-    entity_create('field_entity', $field_no_access)->save();
-    entity_create('field_instance', $instance_no_access)->save();
+    entity_create('field_config', $field_no_access)->save();
+    entity_create('field_instance_config', $instance_no_access)->save();
     entity_get_form_display($instance_no_access['entity_type'], $instance_no_access['bundle'], 'default')
       ->setComponent($field_name_no_access)
       ->save();
@@ -589,8 +589,8 @@ function testFieldFormHiddenWidget() {
     $this->instance['default_value'] = array(0 => array('value' => 99));
     $this->instance['entity_type'] = $entity_type;
     $this->instance['bundle'] = $entity_type;
-    entity_create('field_entity', $field)->save();
-    $this->instance = entity_create('field_instance', $this->instance);
+    entity_create('field_config', $field)->save();
+    $this->instance = entity_create('field_instance_config', $this->instance);
     $this->instance->save();
     entity_get_form_display($this->instance->entity_type, $this->instance->bundle, 'default')
       ->setComponent($this->instance->getFieldName(), array(
diff --git a/core/modules/field/lib/Drupal/field/Tests/NestedFormTest.php b/core/modules/field/lib/Drupal/field/Tests/NestedFormTest.php
index ad2b958..8f28358 100644
--- a/core/modules/field/lib/Drupal/field/Tests/NestedFormTest.php
+++ b/core/modules/field/lib/Drupal/field/Tests/NestedFormTest.php
@@ -59,17 +59,17 @@ public function setUp() {
    */
   function testNestedFieldForm() {
     // Add two instances on the 'entity_test'
-    entity_create('field_entity', $this->field_single)->save();
-    entity_create('field_entity', $this->field_unlimited)->save();
+    entity_create('field_config', $this->field_single)->save();
+    entity_create('field_config', $this->field_unlimited)->save();
     $this->instance['field_name'] = 'field_single';
     $this->instance['label'] = 'Single field';
-    entity_create('field_instance', $this->instance)->save();
+    entity_create('field_instance_config', $this->instance)->save();
     entity_get_form_display($this->instance['entity_type'], $this->instance['bundle'], 'default')
       ->setComponent($this->instance['field_name'])
       ->save();
     $this->instance['field_name'] = 'field_unlimited';
     $this->instance['label'] = 'Unlimited field';
-    entity_create('field_instance', $this->instance)->save();
+    entity_create('field_instance_config', $this->instance)->save();
     entity_get_form_display($this->instance['entity_type'], $this->instance['bundle'], 'default')
       ->setComponent($this->instance['field_name'])
       ->save();
diff --git a/core/modules/field/lib/Drupal/field/Tests/ShapeItemTest.php b/core/modules/field/lib/Drupal/field/Tests/ShapeItemTest.php
index 993dbff..503d080 100644
--- a/core/modules/field/lib/Drupal/field/Tests/ShapeItemTest.php
+++ b/core/modules/field/lib/Drupal/field/Tests/ShapeItemTest.php
@@ -46,13 +46,13 @@ public function setUp() {
       'entity_type' => 'entity_test',
       'type' => 'shape',
     );
-    entity_create('field_entity', $field)->save();
+    entity_create('field_config', $field)->save();
     $instance = array(
       'entity_type' => 'entity_test',
       'field_name' => $this->field_name,
       'bundle' => 'entity_test',
     );
-    entity_create('field_instance', $instance)->save();
+    entity_create('field_instance_config', $instance)->save();
   }
 
   /**
diff --git a/core/modules/field/lib/Drupal/field/Tests/TestItemTest.php b/core/modules/field/lib/Drupal/field/Tests/TestItemTest.php
index 707ddd0..771eec1 100644
--- a/core/modules/field/lib/Drupal/field/Tests/TestItemTest.php
+++ b/core/modules/field/lib/Drupal/field/Tests/TestItemTest.php
@@ -46,13 +46,13 @@ public function setUp() {
       'entity_type' => 'entity_test',
       'type' => 'test_field',
     );
-    entity_create('field_entity', $field)->save();
+    entity_create('field_config', $field)->save();
     $instance = array(
       'entity_type' => 'entity_test',
       'field_name' => $this->field_name,
       'bundle' => 'entity_test',
     );
-    entity_create('field_instance', $instance)->save();
+    entity_create('field_instance_config', $instance)->save();
   }
 
   /**
diff --git a/core/modules/field/lib/Drupal/field/Tests/TranslationTest.php b/core/modules/field/lib/Drupal/field/Tests/TranslationTest.php
index b381cf5..ce37561 100644
--- a/core/modules/field/lib/Drupal/field/Tests/TranslationTest.php
+++ b/core/modules/field/lib/Drupal/field/Tests/TranslationTest.php
@@ -65,7 +65,7 @@ class TranslationTest extends FieldUnitTestBase {
   /**
    * The field instance to use in this test.
    *
-   * @var \Drupal\field\Entity\FieldInstance
+   * @var \Drupal\field\Entity\FieldInstanceConfig
    */
   protected $instance;
 
@@ -91,7 +91,7 @@ function setUp() {
       'cardinality' => 4,
       'translatable' => TRUE,
     );
-    entity_create('field_entity', $this->field_definition)->save();
+    entity_create('field_config', $this->field_definition)->save();
     $this->field = field_read_field($this->entity_type, $this->field_name);
 
     $this->instance_definition = array(
@@ -99,7 +99,7 @@ function setUp() {
       'entity_type' => $this->entity_type,
       'bundle' => 'entity_test',
     );
-    entity_create('field_instance', $this->instance_definition)->save();
+    entity_create('field_instance_config', $this->instance_definition)->save();
     $this->instance = field_read_instance($this->entity_type, $this->field_name, $this->entity_type);
 
     for ($i = 0; $i < 3; ++$i) {
@@ -181,12 +181,12 @@ function testTranslatableFieldSaveLoad() {
     $field_name_default = drupal_strtolower($this->randomName() . '_field_name');
     $field_definition = $this->field_definition;
     $field_definition['name'] = $field_name_default;
-    entity_create('field_entity', $field_definition)->save();
+    entity_create('field_config', $field_definition)->save();
 
     $instance_definition = $this->instance_definition;
     $instance_definition['field_name'] = $field_name_default;
     $instance_definition['default_value'] = array(array('value' => rand(1, 127)));
-    $instance = entity_create('field_instance', $instance_definition);
+    $instance = entity_create('field_instance_config', $instance_definition);
     $instance->save();
 
     entity_info_cache_clear();
@@ -245,14 +245,14 @@ function testFieldDisplayLanguage() {
       'cardinality' => 2,
       'translatable' => TRUE,
     );
-    entity_create('field_entity', $field)->save();
+    entity_create('field_config', $field)->save();
 
     $instance = array(
       'field_name' => $field['name'],
       'entity_type' => $entity_type,
       'bundle' => $bundle,
     );
-    entity_create('field_instance', $instance)->save();
+    entity_create('field_instance_config', $instance)->save();
 
     $enabled_langcodes = field_content_languages();
     $entity = entity_create($entity_type, array('id' => 1, 'revision_id' => 1, 'type' => $this->instance->bundle));;
diff --git a/core/modules/field/lib/Drupal/field/Tests/TranslationWebTest.php b/core/modules/field/lib/Drupal/field/Tests/TranslationWebTest.php
index 8ddb73a..e6e3fe4 100644
--- a/core/modules/field/lib/Drupal/field/Tests/TranslationWebTest.php
+++ b/core/modules/field/lib/Drupal/field/Tests/TranslationWebTest.php
@@ -45,7 +45,7 @@ class TranslationWebTest extends FieldTestBase {
   /**
    * The field instance to use in this test.
    *
-   * @var \Drupal\field\Entity\FieldInstance
+   * @var \Drupal\field\Entity\FieldInstanceConfig
    */
   protected $instance;
 
@@ -69,7 +69,7 @@ function setUp() {
       'cardinality' => 4,
       'translatable' => TRUE,
     );
-    entity_create('field_entity', $field)->save();
+    entity_create('field_config', $field)->save();
     $this->field = field_read_field($this->entity_type, $this->field_name);
 
     $instance = array(
@@ -77,7 +77,7 @@ function setUp() {
       'entity_type' => $this->entity_type,
       'bundle' => $this->entity_type,
     );
-    entity_create('field_instance', $instance)->save();
+    entity_create('field_instance_config', $instance)->save();
     $this->instance = field_read_instance($this->entity_type, $this->field_name, $this->entity_type);
 
     entity_get_form_display($this->entity_type, $this->entity_type, 'default')
diff --git a/core/modules/field/lib/Drupal/field/Tests/Views/ApiDataTest.php b/core/modules/field/lib/Drupal/field/Tests/Views/ApiDataTest.php
index 1f60380..ab643e5 100644
--- a/core/modules/field/lib/Drupal/field/Tests/Views/ApiDataTest.php
+++ b/core/modules/field/lib/Drupal/field/Tests/Views/ApiDataTest.php
@@ -37,7 +37,7 @@ function setUp() {
       'entity_type' => 'node',
       'bundle' => 'page',
     );
-    entity_create('field_instance', $instance)->save();
+    entity_create('field_instance_config', $instance)->save();
 
     // Now create some example nodes/users for the view result.
     for ($i = 0; $i < 5; $i++) {
diff --git a/core/modules/field/lib/Drupal/field/Tests/Views/FieldTestBase.php b/core/modules/field/lib/Drupal/field/Tests/Views/FieldTestBase.php
index 3d78899..57476d5 100644
--- a/core/modules/field/lib/Drupal/field/Tests/Views/FieldTestBase.php
+++ b/core/modules/field/lib/Drupal/field/Tests/Views/FieldTestBase.php
@@ -65,7 +65,7 @@ function setUpFields($amount = 3) {
         'type' => 'text',
       );
 
-      $this->fields[$i] = $field = entity_create('field_entity', $field);
+      $this->fields[$i] = $field = entity_create('field_config', $field);
       $field->save();
     }
     return $field_names;
@@ -78,7 +78,7 @@ function setUpInstances($bundle = 'page') {
         'entity_type' => 'node',
         'bundle' => 'page',
       );
-      $this->instances[$key] = entity_create('field_instance', $instance);
+      $this->instances[$key] = entity_create('field_instance_config', $instance);
       $this->instances[$key]->save();
     }
   }
diff --git a/core/modules/field/lib/Drupal/field/Tests/Views/HandlerFieldFieldTest.php b/core/modules/field/lib/Drupal/field/Tests/Views/HandlerFieldFieldTest.php
index 7f157e2..7aa31a0 100644
--- a/core/modules/field/lib/Drupal/field/Tests/Views/HandlerFieldFieldTest.php
+++ b/core/modules/field/lib/Drupal/field/Tests/Views/HandlerFieldFieldTest.php
@@ -47,7 +47,7 @@ protected function setUp() {
     $this->setUpFields(3);
 
     // Setup a field with cardinality > 1.
-    $this->fields[3] = $field = entity_create('field_entity', array(
+    $this->fields[3] = $field = entity_create('field_config', array(
       'name' => 'field_name_3',
       'entity_type' => 'node',
       'type' => 'text',
@@ -55,7 +55,7 @@ protected function setUp() {
     ));
     $field->save();
     // Setup a field that will have no value.
-    $this->fields[4] = $field = entity_create('field_entity', array(
+    $this->fields[4] = $field = entity_create('field_config', array(
       'name' => 'field_name_4',
       'entity_type' => 'node',
       'type' => 'text',
diff --git a/core/modules/field/lib/Drupal/field/Tests/reEnableModuleFieldTest.php b/core/modules/field/lib/Drupal/field/Tests/reEnableModuleFieldTest.php
index 928adbb..9cbaf76 100644
--- a/core/modules/field/lib/Drupal/field/Tests/reEnableModuleFieldTest.php
+++ b/core/modules/field/lib/Drupal/field/Tests/reEnableModuleFieldTest.php
@@ -49,13 +49,13 @@ function setUp() {
   function testReEnabledField() {
 
     // Add a telephone field to the article content type.
-    $field = entity_create('field_entity', array(
+    $field = entity_create('field_config', array(
       'name' => 'field_telephone',
       'entity_type' => 'node',
       'type' => 'telephone',
     ));
     $field->save();
-    entity_create('field_instance', array(
+    entity_create('field_instance_config', array(
       'field_name' => 'field_telephone',
       'label' => 'Telephone Number',
       'entity_type' => 'node',
diff --git a/core/modules/field/tests/modules/field_test/field_test.module b/core/modules/field/tests/modules/field_test/field_test.module
index a95d457..be562cb 100644
--- a/core/modules/field/tests/modules/field_test/field_test.module
+++ b/core/modules/field/tests/modules/field_test/field_test.module
@@ -97,14 +97,14 @@ function field_test_field_language_alter(&$display_langcode, $context) {
  *   field_test_memorize();
  *
  *   // call some Field API functions that invoke field_test hooks
- *   entity_create('field_entity', $field_definition)->save();
+ *   entity_create('field_config', $field_definition)->save();
  *
  *   // retrieve and reset the memorized hook call data
  *   $mem = field_test_memorize();
  *
  *   // make sure hook_field_create_field() is invoked correctly
- *   assertEqual(count($mem['field_test_field_entity_create']), 1);
- *   assertEqual($mem['field_test_field_entity_create'][0], array($field));
+ *   assertEqual(count($mem['field_test_field_config_create']), 1);
+ *   assertEqual($mem['field_test_field_config_create'][0], array($field));
  * @endcode
  *
  * @param $key
@@ -129,9 +129,9 @@ function field_test_memorize($key = NULL, $value = NULL) {
 }
 
 /**
- * Memorize calls to field_test_field_entity_create() for field creation.
+ * Memorize calls to field_test_field_config_create() for field creation.
  */
-function field_test_field_entity_create(FieldInterface $field) {
+function field_test_field_config_create(FieldInterface $field) {
   $args = func_get_args();
   field_test_memorize(__FUNCTION__, $args);
 }
diff --git a/core/modules/field_ui/field_ui.module b/core/modules/field_ui/field_ui.module
index 0d81232..34b6fd6 100644
--- a/core/modules/field_ui/field_ui.module
+++ b/core/modules/field_ui/field_ui.module
@@ -254,8 +254,8 @@ function field_ui_element_info() {
  * Implements hook_entity_info().
  */
 function field_ui_entity_info(&$entity_info) {
-  $entity_info['field_instance']['controllers']['form']['delete'] = 'Drupal\field_ui\Form\FieldDeleteForm';
-  $entity_info['field_entity']['controllers']['list'] = 'Drupal\field_ui\FieldListController';
+  $entity_info['field_instance_config']['controllers']['form']['delete'] = 'Drupal\field_ui\Form\FieldDeleteForm';
+  $entity_info['field_config']['controllers']['list'] = 'Drupal\field_ui\FieldListController';
 }
 
 /**
diff --git a/core/modules/field_ui/field_ui.routing.yml b/core/modules/field_ui/field_ui.routing.yml
index fc3990b..4506dbc 100644
--- a/core/modules/field_ui/field_ui.routing.yml
+++ b/core/modules/field_ui/field_ui.routing.yml
@@ -1,6 +1,6 @@
 field_ui.list:
   path: 'admin/reports/fields'
   defaults:
-    _entity_list: 'field_entity'
+    _entity_list: 'field_config'
   requirements:
     _permission: 'administer content types'
diff --git a/core/modules/field_ui/lib/Drupal/field_ui/FieldOverview.php b/core/modules/field_ui/lib/Drupal/field_ui/FieldOverview.php
index 13c96b5..fcb58da 100644
--- a/core/modules/field_ui/lib/Drupal/field_ui/FieldOverview.php
+++ b/core/modules/field_ui/lib/Drupal/field_ui/FieldOverview.php
@@ -12,7 +12,7 @@
 use Drupal\Core\Extension\ModuleHandlerInterface;
 use Drupal\field_ui\OverviewBase;
 use Symfony\Component\DependencyInjection\ContainerInterface;
-use Drupal\field\Entity\Field;
+use Drupal\field\Entity\FieldConfig;
 
 /**
  * Field UI field overview form.
@@ -202,7 +202,7 @@ public function buildForm(array $form, array &$form_state, $entity_type = NULL,
           '#description' => $this->t('A unique machine-readable name containing letters, numbers, and underscores.'),
           // Calculate characters depending on the length of the field prefix
           // setting. Maximum length is 32.
-          '#maxlength' => Field::NAME_MAX_LENGTH - strlen($field_prefix),
+          '#maxlength' => FieldConfig::NAME_MAX_LENGTH - strlen($field_prefix),
           '#prefix' => '<div class="add-new-placeholder">&nbsp;</div>',
           '#machine_name' => array(
             'source' => array('fields', $name, 'label'),
@@ -396,8 +396,8 @@ public function submitForm(array &$form, array &$form_state) {
 
       // Create the field and instance.
       try {
-        $this->entityManager->getStorageController('field_entity')->create($field)->save();
-        $new_instance = $this->entityManager->getStorageController('field_instance')->create($instance);
+        $this->entityManager->getStorageController('field_config')->create($field)->save();
+        $new_instance = $this->entityManager->getStorageController('field_instance_config')->create($instance);
         $new_instance->save();
 
         // Make sure the field is displayed in the 'default' form mode (using
@@ -444,7 +444,7 @@ public function submitForm(array &$form, array &$form_state) {
         );
 
         try {
-          $new_instance = $this->entityManager->getStorageController('field_instance')->create($instance);
+          $new_instance = $this->entityManager->getStorageController('field_instance_config')->create($instance);
           $new_instance->save();
 
           // Make sure the field is displayed in the 'default' form mode (using
@@ -510,7 +510,7 @@ protected function getExistingFieldOptions() {
     // Load the instances and build the list of options.
     if ($instance_ids) {
       $field_types = $this->fieldTypeManager->getDefinitions();
-      $instances = $this->entityManager->getStorageController('field_instance')->loadMultiple($instance_ids);
+      $instances = $this->entityManager->getStorageController('field_instance_config')->loadMultiple($instance_ids);
       foreach ($instances as $instance) {
         // Do not show:
         // - locked fields,
diff --git a/core/modules/field_ui/lib/Drupal/field_ui/Form/FieldEditForm.php b/core/modules/field_ui/lib/Drupal/field_ui/Form/FieldEditForm.php
index 337fdce..c6aa6aa 100644
--- a/core/modules/field_ui/lib/Drupal/field_ui/Form/FieldEditForm.php
+++ b/core/modules/field_ui/lib/Drupal/field_ui/Form/FieldEditForm.php
@@ -7,7 +7,6 @@
 
 namespace Drupal\field_ui\Form;
 
-use Drupal\Core\Entity\ContentEntityInterface;
 use Drupal\Core\Entity\EntityManager;
 use Drupal\Core\Form\FormBase;
 use Drupal\Core\TypedData\TypedDataManager;
@@ -86,8 +85,8 @@ public static function create(ContainerInterface $container) {
   /**
    * {@inheritdoc}
    */
-  public function buildForm(array $form, array &$form_state, FieldInstanceInterface $field_instance = NULL) {
-    $this->instance = $form_state['instance'] = $field_instance;
+  public function buildForm(array $form, array &$form_state, FieldInstanceInterface $field_instance_config = NULL) {
+    $this->instance = $form_state['instance'] = $field_instance_config;
 
     $field = $this->instance->getField();
     $form['#field'] = $field;
diff --git a/core/modules/field_ui/lib/Drupal/field_ui/Routing/RouteSubscriber.php b/core/modules/field_ui/lib/Drupal/field_ui/Routing/RouteSubscriber.php
index 456e1fd..10a353f 100644
--- a/core/modules/field_ui/lib/Drupal/field_ui/Routing/RouteSubscriber.php
+++ b/core/modules/field_ui/lib/Drupal/field_ui/Routing/RouteSubscriber.php
@@ -54,22 +54,22 @@ public function routes(RouteBuildEvent $event) {
         $path = $entity_info['route_base_path'];
 
         $route = new Route(
-          "$path/fields/{field_instance}",
+          "$path/fields/{field_instance_config}",
           array('_form' => '\Drupal\field_ui\Form\FieldInstanceEditForm'),
           array('_permission' => 'administer ' . $entity_type . ' fields')
         );
         $collection->add("field_ui.instance_edit_$entity_type", $route);
 
         $route = new Route(
-          "$path/fields/{field_instance}/field",
+          "$path/fields/{field_instance_config}/field",
           array('_form' => '\Drupal\field_ui\Form\FieldEditForm'),
           array('_permission' => 'administer ' . $entity_type . ' fields')
         );
         $collection->add("field_ui.field_edit_$entity_type", $route);
 
         $route = new Route(
-          "$path/fields/{field_instance}/delete",
-          array('_entity_form' => 'field_instance.delete'),
+          "$path/fields/{field_instance_config}/delete",
+          array('_entity_form' => 'field_instance_config.delete'),
           array('_permission' => 'administer ' . $entity_type . ' fields')
         );
         $collection->add("field_ui.delete_$entity_type", $route);
diff --git a/core/modules/field_ui/lib/Drupal/field_ui/Tests/ManageFieldsTest.php b/core/modules/field_ui/lib/Drupal/field_ui/Tests/ManageFieldsTest.php
index 1a8f65e..12c5079 100644
--- a/core/modules/field_ui/lib/Drupal/field_ui/Tests/ManageFieldsTest.php
+++ b/core/modules/field_ui/lib/Drupal/field_ui/Tests/ManageFieldsTest.php
@@ -46,7 +46,7 @@ function setUp() {
       'entity_type' => 'node',
       'type' => 'taxonomy_term_reference',
     );
-    entity_create('field_entity', $field)->save();
+    entity_create('field_config', $field)->save();
 
     $instance = array(
       'field_name' => 'field_' . $vocabulary->id(),
@@ -54,7 +54,7 @@ function setUp() {
       'label' => 'Tags',
       'bundle' => 'article',
     );
-    entity_create('field_instance', $instance)->save();
+    entity_create('field_instance_config', $instance)->save();
 
     entity_get_form_display('node', 'article', 'default')
       ->setComponent('field_' . $vocabulary->id())
@@ -268,12 +268,12 @@ function testFieldPrefix() {
   function testDefaultValue() {
     // Create a test field and instance.
     $field_name = 'test';
-    entity_create('field_entity', array(
+    entity_create('field_config', array(
       'name' => $field_name,
       'entity_type' => 'node',
       'type' => 'test_field'
     ))->save();
-    $instance = entity_create('field_instance', array(
+    $instance = entity_create('field_instance_config', array(
       'field_name' => $field_name,
       'entity_type' => 'node',
       'bundle' => $this->type,
@@ -374,7 +374,7 @@ function testDeleteField() {
   function testLockedField() {
     // Create a locked field and attach it to a bundle. We need to do this
     // programatically as there's no way to create a locked field through UI.
-    $field = entity_create('field_entity', array(
+    $field = entity_create('field_config', array(
       'name' => strtolower($this->randomName(8)),
       'entity_type' => 'node',
       'type' => 'test_field',
@@ -382,7 +382,7 @@ function testLockedField() {
       'locked' => TRUE
     ));
     $field->save();
-    entity_create('field_instance', array(
+    entity_create('field_instance_config', array(
       'field_uuid' => $field->uuid,
       'entity_type' => 'node',
       'bundle' => $this->type,
@@ -415,7 +415,7 @@ function testHiddenFields() {
 
     // Create a field and an instance programmatically.
     $field_name = 'hidden_test_field';
-    entity_create('field_entity', array(
+    entity_create('field_config', array(
       'name' => $field_name,
       'entity_type' => 'node',
       'type' => $field_name,
@@ -426,7 +426,7 @@ function testHiddenFields() {
       'entity_type' => 'node',
       'label' => t('Hidden field'),
     );
-    entity_create('field_instance', $instance)->save();
+    entity_create('field_instance_config', $instance)->save();
     entity_get_form_display('node', $this->type, 'default')
       ->setComponent($field_name)
       ->save();
@@ -503,13 +503,13 @@ function testDeleteTaxonomyField() {
    */
   function testHelpDescriptions() {
     // Create an image field
-    entity_create('field_entity', array(
+    entity_create('field_config', array(
       'name' => 'field_image',
       'entity_type' => 'node',
       'type' => 'image',
     ))->save();
 
-    entity_create('field_instance', array(
+    entity_create('field_instance_config', array(
       'field_name' => 'field_image',
       'entity_type' => 'node',
       'label' => 'Image',
diff --git a/core/modules/file/file.install b/core/modules/file/file.install
index 7fb5772..8244ffc 100644
--- a/core/modules/file/file.install
+++ b/core/modules/file/file.install
@@ -6,7 +6,7 @@
  */
 
 use Drupal\Core\Entity\DatabaseStorageController;
-use Drupal\field\Entity\Field;
+use Drupal\field\Entity\FieldConfig;
 
 /**
  * Implements hook_schema().
@@ -269,7 +269,7 @@ function file_update_8003() {
     $field_config = \Drupal::config($config_name);
     // Only update file fields that use the default SQL storage.
     if (in_array($field_config->get('type'), array('file', 'image'))) {
-      $field = new Field($field_config->get());
+      $field = new FieldConfig($field_config->get());
 
       if (db_table_exists(DatabaseStorageController::_fieldTableName($field))) {
         $tables = array(
diff --git a/core/modules/file/lib/Drupal/file/Tests/FileFieldTestBase.php b/core/modules/file/lib/Drupal/file/Tests/FileFieldTestBase.php
index 7edeec7..fa0fcc5 100644
--- a/core/modules/file/lib/Drupal/file/Tests/FileFieldTestBase.php
+++ b/core/modules/file/lib/Drupal/file/Tests/FileFieldTestBase.php
@@ -76,7 +76,7 @@ function createFileField($name, $entity_type, $bundle, $field_settings = array()
       'cardinality' => !empty($field_settings['cardinality']) ? $field_settings['cardinality'] : 1,
     );
     $field_definition['settings'] = array_merge($field_definition['settings'], $field_settings);
-    $field = entity_create('field_entity', $field_definition);
+    $field = entity_create('field_config', $field_definition);
     $field->save();
 
     $this->attachFileField($name, $entity_type, $bundle, $instance_settings, $widget_settings);
@@ -109,7 +109,7 @@ function attachFileField($name, $entity_type, $bundle, $instance_settings = arra
       'settings' => array(),
     );
     $instance['settings'] = array_merge($instance['settings'], $instance_settings);
-    entity_create('field_instance', $instance)->save();
+    entity_create('field_instance_config', $instance)->save();
 
     entity_get_form_display($entity_type, $bundle, 'default')
       ->setComponent($name, array(
diff --git a/core/modules/file/lib/Drupal/file/Tests/FileItemTest.php b/core/modules/file/lib/Drupal/file/Tests/FileItemTest.php
index ceea4bc..9de76aa 100644
--- a/core/modules/file/lib/Drupal/file/Tests/FileItemTest.php
+++ b/core/modules/file/lib/Drupal/file/Tests/FileItemTest.php
@@ -44,13 +44,13 @@ public function setUp() {
     $this->installSchema('file', 'file_managed');
     $this->installSchema('file', 'file_usage');
 
-    entity_create('field_entity', array(
+    entity_create('field_config', array(
       'name' => 'file_test',
       'entity_type' => 'entity_test',
       'type' => 'file',
       'cardinality' => FIELD_CARDINALITY_UNLIMITED,
     ))->save();
-    entity_create('field_instance', array(
+    entity_create('field_instance_config', array(
       'entity_type' => 'entity_test',
       'field_name' => 'file_test',
       'bundle' => 'entity_test',
diff --git a/core/modules/forum/forum.install b/core/modules/forum/forum.install
index 9b9eca4..55c43c8 100644
--- a/core/modules/forum/forum.install
+++ b/core/modules/forum/forum.install
@@ -49,7 +49,7 @@ function forum_install() {
   // is being enabled at the same time as taxonomy after both modules have been
   // enabled, the field might exist but still be marked inactive.
   if (!field_read_field('node', 'taxonomy_forums', array('include_inactive' => TRUE))) {
-    entity_create('field_entity', array(
+    entity_create('field_config', array(
       'name' => 'taxonomy_forums',
       'entity_type' => 'node',
       'type' => 'taxonomy_term_reference',
@@ -75,7 +75,7 @@ function forum_install() {
     $term->save();
 
     // Create the instance on the bundle.
-    entity_create('field_instance', array(
+    entity_create('field_instance_config', array(
       'field_name' => 'taxonomy_forums',
       'entity_type' => 'node',
       'label' => $vocabulary->name,
@@ -105,7 +105,7 @@ function forum_install() {
       ->save();
   }
   // Add the comment field to the forum node type.
-  $fields = entity_load_multiple_by_properties('field_entity', array(
+  $fields = entity_load_multiple_by_properties('field_config', array(
     'type' => 'comment',
     'name' => 'comment_forum',
     'include_inactive' => TRUE,
diff --git a/core/modules/hal/lib/Drupal/hal/Tests/NormalizerTestBase.php b/core/modules/hal/lib/Drupal/hal/Tests/NormalizerTestBase.php
index 414a284..53cac78 100644
--- a/core/modules/hal/lib/Drupal/hal/Tests/NormalizerTestBase.php
+++ b/core/modules/hal/lib/Drupal/hal/Tests/NormalizerTestBase.php
@@ -77,33 +77,33 @@ function setUp() {
     language_save($german);
 
     // Create the test text field.
-    entity_create('field_entity', array(
+    entity_create('field_config', array(
       'name' => 'field_test_text',
       'entity_type' => 'entity_test',
       'type' => 'text',
       'translatable' => FALSE,
     ))->save();
-    entity_create('field_instance', array(
+    entity_create('field_instance_config', array(
       'entity_type' => 'entity_test',
       'field_name' => 'field_test_text',
       'bundle' => 'entity_test',
     ))->save();
 
     // Create the test translatable field.
-    entity_create('field_entity', array(
+    entity_create('field_config', array(
       'name' => 'field_test_translatable_text',
       'entity_type' => 'entity_test',
       'type' => 'text',
       'translatable' => TRUE,
     ))->save();
-    entity_create('field_instance', array(
+    entity_create('field_instance_config', array(
       'entity_type' => 'entity_test',
       'field_name' => 'field_test_translatable_text',
       'bundle' => 'entity_test',
     ))->save();
 
     // Create the test entity reference field.
-    entity_create('field_entity', array(
+    entity_create('field_config', array(
       'name' => 'field_test_entity_reference',
       'entity_type' => 'entity_test',
       'type' => 'entity_reference',
@@ -112,7 +112,7 @@ function setUp() {
         'target_type' => 'entity_test',
       ),
     ))->save();
-    entity_create('field_instance', array(
+    entity_create('field_instance_config', array(
       'entity_type' => 'entity_test',
       'field_name' => 'field_test_entity_reference',
       'bundle' => 'entity_test',
diff --git a/core/modules/image/image.module b/core/modules/image/image.module
index 76d0bd7..bce14da 100644
--- a/core/modules/image/image.module
+++ b/core/modules/image/image.module
@@ -6,8 +6,8 @@
  */
 
 use Drupal\Core\Entity\EntityInterface;
-use Drupal\field\Entity\Field;
-use Drupal\field\Entity\FieldInstance;
+use Drupal\field\Entity\FieldConfig;
+use Drupal\field\Entity\FieldInstanceConfig;
 use Drupal\file\Entity\File;
 use Drupal\image\Entity\ImageStyle;
 use Drupal\field\FieldInterface;
@@ -431,9 +431,9 @@ function image_entity_presave(EntityInterface $entity, $type) {
 }
 
 /**
- * Implements hook_ENTITY_TYPE_update() for 'field_entity'.
+ * Implements hook_ENTITY_TYPE_update() for 'field_config'.
  */
-function image_field_entity_update(FieldInterface $field) {
+function image_field_config_update(FieldInterface $field) {
   if ($field->type != 'image') {
     // Only act on image fields.
     return;
@@ -475,20 +475,20 @@ function image_field_entity_update(FieldInterface $field) {
 }
 
 /**
- * Implements hook_ENTITY_TYPE_update() for 'field_instance'.
+ * Implements hook_ENTITY_TYPE_update() for 'field_instance_config'.
  */
-function image_field_instance_update(FieldInstanceInterface $field_instance) {
-  $field = $field_instance->getField();
+function image_field_instance_config_update(FieldInstanceInterface $field_instance_config) {
+  $field = $field_instance_config->getField();
   if ($field->type != 'image') {
     // Only act on image fields.
     return;
   }
 
-  $prior_instance = $field_instance->original;
+  $prior_instance = $field_instance_config->original;
 
   // The value of a managed_file element can be an array if the #extended
   // property is set to TRUE.
-  $fid_new = $field_instance->settings['default_image'];
+  $fid_new = $field_instance_config->settings['default_image'];
   if (isset($fid_new['fids'])) {
     $fid_new = $fid_new['fids'];
   }
@@ -504,11 +504,11 @@ function image_field_instance_update(FieldInstanceInterface $field_instance) {
     if ($file_new) {
       $file_new->status = FILE_STATUS_PERMANENT;
       $file_new->save();
-      file_usage()->add($file_new, 'image', 'default_image', $field_instance->uuid);
+      file_usage()->add($file_new, 'image', 'default_image', $field_instance_config->uuid);
     }
     // Delete the old file, if present.
     if ($fid_old && ($file_old = file_load($fid_old[0]))) {
-      file_usage()->delete($file_old, 'image', 'default_image', $field_instance->uuid);
+      file_usage()->delete($file_old, 'image', 'default_image', $field_instance_config->uuid);
     }
   }
 
@@ -521,9 +521,9 @@ function image_field_instance_update(FieldInstanceInterface $field_instance) {
 }
 
 /**
- * Implements hook_ENTITY_TYPE_delete() for 'field_entity'.
+ * Implements hook_ENTITY_TYPE_delete() for 'field_config'.
  */
-function image_field_entity_delete(FieldInterface $field) {
+function image_field_config_delete(FieldInterface $field) {
   if ($field->type != 'image') {
     // Only act on image fields.
     return;
@@ -537,10 +537,10 @@ function image_field_entity_delete(FieldInterface $field) {
 }
 
 /**
- * Implements hook_ENTITY_TYPE_delete() for 'field_instance'.
+ * Implements hook_ENTITY_TYPE_delete() for 'field_instance_config'.
  */
-function image_field_instance_delete(FieldInstanceInterface $field_instance) {
-  $field = $field_instance->getField();
+function image_field_instance_config_delete(FieldInstanceInterface $field_instance_config) {
+  $field = $field_instance_config->getField();
   if ($field->type != 'image') {
     // Only act on image fields.
     return;
@@ -548,13 +548,13 @@ function image_field_instance_delete(FieldInstanceInterface $field_instance) {
 
   // The value of a managed_file element can be an array if the #extended
   // property is set to TRUE.
-  $fid = $field_instance->settings['default_image'];
+  $fid = $field_instance_config->settings['default_image'];
   if (is_array($fid)) {
     $fid = $fid['fid'];
   }
 
   // Remove the default image when the instance is deleted.
   if ($fid && ($file = file_load($fid))) {
-    file_usage()->delete($file, 'image', 'default_image', $field_instance->uuid);
+    file_usage()->delete($file, 'image', 'default_image', $field_instance_config->uuid);
   }
 }
diff --git a/core/modules/image/lib/Drupal/image/Tests/ImageFieldDefaultImagesTest.php b/core/modules/image/lib/Drupal/image/Tests/ImageFieldDefaultImagesTest.php
index 698b34b..8598c76 100644
--- a/core/modules/image/lib/Drupal/image/Tests/ImageFieldDefaultImagesTest.php
+++ b/core/modules/image/lib/Drupal/image/Tests/ImageFieldDefaultImagesTest.php
@@ -56,7 +56,7 @@ public function testDefaultImages() {
     // The instance default image id should be 2.
     $this->assertEqual($instance->getFieldSetting('default_image'), $default_images['instance']->id());
 
-    // Also test \Drupal\field\Entity\FieldInstance::getFieldSetting().
+    // Also test \Drupal\field\Entity\FieldInstanceConfig::getFieldSetting().
     $instance_field_settings = $instance->getFieldSettings();
     $this->assertEqual($instance_field_settings['default_image'], $default_images['instance']->id());
 
@@ -70,7 +70,7 @@ public function testDefaultImages() {
     $this->assertEqual($field_field_settings['default_image'], $default_images['field']->id());
 
     // Add another instance with another default image to the page content type.
-    $instance2 = entity_create('field_instance', array(
+    $instance2 = entity_create('field_instance_config', array(
       'field_name' => $field->name,
       'entity_type' => 'node',
       'bundle' => 'page',
diff --git a/core/modules/image/lib/Drupal/image/Tests/ImageFieldTestBase.php b/core/modules/image/lib/Drupal/image/Tests/ImageFieldTestBase.php
index 64523a1..daf8ac4 100644
--- a/core/modules/image/lib/Drupal/image/Tests/ImageFieldTestBase.php
+++ b/core/modules/image/lib/Drupal/image/Tests/ImageFieldTestBase.php
@@ -72,7 +72,7 @@ function createImageField($name, $type_name, $field_settings = array(), $instanc
       'cardinality' => !empty($field_settings['cardinality']) ? $field_settings['cardinality'] : 1,
     );
     $field['settings'] = array_merge($field['settings'], $field_settings);
-    entity_create('field_entity', $field)->save();
+    entity_create('field_config', $field)->save();
 
     $instance = array(
       'field_name' => $field['name'],
@@ -84,8 +84,8 @@ function createImageField($name, $type_name, $field_settings = array(), $instanc
       'settings' => array(),
     );
     $instance['settings'] = array_merge($instance['settings'], $instance_settings);
-    $field_instance = entity_create('field_instance', $instance);
-    $field_instance->save();
+    $field_instance_config = entity_create('field_instance_config', $instance);
+    $field_instance_config->save();
 
     entity_get_form_display('node', $type_name, 'default')
       ->setComponent($field['name'], array(
@@ -98,7 +98,7 @@ function createImageField($name, $type_name, $field_settings = array(), $instanc
       ->setComponent($field['name'])
       ->save();
 
-    return $field_instance;
+    return $field_instance_config;
 
   }
 
diff --git a/core/modules/image/lib/Drupal/image/Tests/ImageItemTest.php b/core/modules/image/lib/Drupal/image/Tests/ImageItemTest.php
index 4fd70f7..a7db05f 100644
--- a/core/modules/image/lib/Drupal/image/Tests/ImageItemTest.php
+++ b/core/modules/image/lib/Drupal/image/Tests/ImageItemTest.php
@@ -48,13 +48,13 @@ public function setUp() {
 
     $this->installSchema('file', array('file_managed', 'file_usage'));
 
-    entity_create('field_entity', array(
+    entity_create('field_config', array(
       'name' => 'image_test',
       'entity_type' => 'entity_test',
       'type' => 'image',
       'cardinality' => FIELD_CARDINALITY_UNLIMITED,
     ))->save();
-    entity_create('field_instance', array(
+    entity_create('field_instance_config', array(
       'entity_type' => 'entity_test',
       'field_name' => 'image_test',
       'bundle' => 'entity_test',
diff --git a/core/modules/link/lib/Drupal/link/Tests/LinkFieldTest.php b/core/modules/link/lib/Drupal/link/Tests/LinkFieldTest.php
index e71beac..0e2c4a2 100644
--- a/core/modules/link/lib/Drupal/link/Tests/LinkFieldTest.php
+++ b/core/modules/link/lib/Drupal/link/Tests/LinkFieldTest.php
@@ -31,7 +31,7 @@ class LinkFieldTest extends WebTestBase {
   /**
    * The instance used in this test class.
    *
-   * @var \Drupal\field\Entity\FieldInstance
+   * @var \Drupal\field\Entity\FieldInstanceConfig
    */
   protected $instance;
 
@@ -66,13 +66,13 @@ function setUp() {
   function testURLValidation() {
     $field_name = drupal_strtolower($this->randomName());
     // Create a field with settings to validate.
-    $this->field = entity_create('field_entity', array(
+    $this->field = entity_create('field_config', array(
       'name' => $field_name,
       'entity_type' => 'entity_test',
       'type' => 'link',
     ));
     $this->field->save();
-    entity_create('field_instance', array(
+    entity_create('field_instance_config', array(
       'field_name' => $field_name,
       'entity_type' => 'entity_test',
       'bundle' => 'entity_test',
@@ -139,13 +139,13 @@ function testURLValidation() {
   function testLinkTitle() {
     $field_name = drupal_strtolower($this->randomName());
     // Create a field with settings to validate.
-    $this->field = entity_create('field_entity', array(
+    $this->field = entity_create('field_config', array(
       'name' => $field_name,
       'entity_type' => 'entity_test',
       'type' => 'link',
     ));
     $this->field->save();
-    $this->instance = entity_create('field_instance', array(
+    $this->instance = entity_create('field_instance_config', array(
       'field_name' => $field_name,
       'entity_type' => 'entity_test',
       'bundle' => 'entity_test',
@@ -257,14 +257,14 @@ function testLinkTitle() {
   function testLinkFormatter() {
     $field_name = drupal_strtolower($this->randomName());
     // Create a field with settings to validate.
-    $this->field = entity_create('field_entity', array(
+    $this->field = entity_create('field_config', array(
       'name' => $field_name,
       'entity_type' => 'entity_test',
       'type' => 'link',
       'cardinality' => 2,
     ));
     $this->field->save();
-    entity_create('field_instance', array(
+    entity_create('field_instance_config', array(
       'field_name' => $field_name,
       'entity_type' => 'entity_test',
       'label' => 'Read more about this entity',
@@ -399,14 +399,14 @@ function testLinkFormatter() {
   function testLinkSeparateFormatter() {
     $field_name = drupal_strtolower($this->randomName());
     // Create a field with settings to validate.
-    $this->field = entity_create('field_entity', array(
+    $this->field = entity_create('field_config', array(
       'name' => $field_name,
       'entity_type' => 'entity_test',
       'type' => 'link',
       'cardinality' => 2,
     ));
     $this->field->save();
-    entity_create('field_instance', array(
+    entity_create('field_instance_config', array(
       'field_name' => $field_name,
       'entity_type' => 'entity_test',
       'bundle' => 'entity_test',
diff --git a/core/modules/link/lib/Drupal/link/Tests/LinkItemTest.php b/core/modules/link/lib/Drupal/link/Tests/LinkItemTest.php
index 00fc51b..e26dee5 100644
--- a/core/modules/link/lib/Drupal/link/Tests/LinkItemTest.php
+++ b/core/modules/link/lib/Drupal/link/Tests/LinkItemTest.php
@@ -35,12 +35,12 @@ public function setUp() {
     parent::setUp();
 
     // Create an link field and instance for validation.
-    entity_create('field_entity', array(
+    entity_create('field_config', array(
       'name' => 'field_test',
       'entity_type' => 'entity_test',
       'type' => 'link',
     ))->save();
-    entity_create('field_instance', array(
+    entity_create('field_instance_config', array(
       'entity_type' => 'entity_test',
       'field_name' => 'field_test',
       'bundle' => 'entity_test',
diff --git a/core/modules/node/lib/Drupal/node/Tests/MultiStepNodeFormBasicOptionsTest.php b/core/modules/node/lib/Drupal/node/Tests/MultiStepNodeFormBasicOptionsTest.php
index 25036b9..ca2a94c 100644
--- a/core/modules/node/lib/Drupal/node/Tests/MultiStepNodeFormBasicOptionsTest.php
+++ b/core/modules/node/lib/Drupal/node/Tests/MultiStepNodeFormBasicOptionsTest.php
@@ -37,7 +37,7 @@ function testMultiStepNodeFormBasicOptions() {
 
     // Create an unlimited cardinality field.
     $this->field_name = drupal_strtolower($this->randomName());
-    entity_create('field_entity', array(
+    entity_create('field_config', array(
       'name' => $this->field_name,
       'entity_type' => 'node',
       'type' => 'text',
@@ -45,7 +45,7 @@ function testMultiStepNodeFormBasicOptions() {
     ))->save();
 
     // Attach an instance of the field to the page content type.
-    entity_create('field_instance', array(
+    entity_create('field_instance_config', array(
       'field_name' => $this->field_name,
       'entity_type' => 'node',
       'bundle' => 'page',
diff --git a/core/modules/node/lib/Drupal/node/Tests/NodeAccessFieldTest.php b/core/modules/node/lib/Drupal/node/Tests/NodeAccessFieldTest.php
index e9952fa..dfcb72f 100644
--- a/core/modules/node/lib/Drupal/node/Tests/NodeAccessFieldTest.php
+++ b/core/modules/node/lib/Drupal/node/Tests/NodeAccessFieldTest.php
@@ -59,12 +59,12 @@ public function setUp() {
 
     // Add a custom field to the page content type.
     $this->field_name = drupal_strtolower($this->randomName() . '_field_name');
-    entity_create('field_entity', array(
+    entity_create('field_config', array(
       'name' => $this->field_name,
       'entity_type' => 'node',
       'type' => 'text'
     ))->save();
-    entity_create('field_instance', array(
+    entity_create('field_instance_config', array(
       'field_name' => $this->field_name,
       'entity_type' => 'node',
       'bundle' => 'page',
diff --git a/core/modules/node/lib/Drupal/node/Tests/PagePreviewTest.php b/core/modules/node/lib/Drupal/node/Tests/PagePreviewTest.php
index 8bd1081..d150f3b 100644
--- a/core/modules/node/lib/Drupal/node/Tests/PagePreviewTest.php
+++ b/core/modules/node/lib/Drupal/node/Tests/PagePreviewTest.php
@@ -67,7 +67,7 @@ function setUp() {
 
     // Set up a field and instance.
     $this->field_name = drupal_strtolower($this->randomName());
-    entity_create('field_entity', array(
+    entity_create('field_config', array(
       'name' => $this->field_name,
       'entity_type' => 'node',
       'type' => 'taxonomy_term_reference',
@@ -81,7 +81,7 @@ function setUp() {
       ),
       'cardinality' => '-1',
     ))->save();
-    entity_create('field_instance', array(
+    entity_create('field_instance_config', array(
       'field_name' => $this->field_name,
       'entity_type' => 'node',
       'bundle' => 'page',
diff --git a/core/modules/node/node.module b/core/modules/node/node.module
index 4e42006..4e57dbd 100644
--- a/core/modules/node/node.module
+++ b/core/modules/node/node.module
@@ -396,7 +396,7 @@ function node_add_body_field(NodeTypeInterface $type, $label = 'Body') {
   $field = field_info_field('node', 'body');
   $instance = field_info_instance('node', 'body', $type->id());
   if (empty($field)) {
-    $field = entity_create('field_entity', array(
+    $field = entity_create('field_config', array(
       'name' => 'body',
       'entity_type' => 'node',
       'type' => 'text_with_summary',
@@ -404,7 +404,7 @@ function node_add_body_field(NodeTypeInterface $type, $label = 'Body') {
     $field->save();
   }
   if (empty($instance)) {
-    $instance = entity_create('field_instance', array(
+    $instance = entity_create('field_instance_config', array(
       'field_name' => 'body',
       'entity_type' => 'node',
       'bundle' => $type->id(),
diff --git a/core/modules/node/tests/modules/node_access_test_language/node_access_test_language.install b/core/modules/node/tests/modules/node_access_test_language/node_access_test_language.install
index c8643a1..4cd3165 100644
--- a/core/modules/node/tests/modules/node_access_test_language/node_access_test_language.install
+++ b/core/modules/node/tests/modules/node_access_test_language/node_access_test_language.install
@@ -13,7 +13,7 @@
  * (restricted access) in a given translation.
  */
 function node_access_test_language_install() {
-  $field_private = entity_create('field_entity', array(
+  $field_private = entity_create('field_config', array(
     'name' => 'field_private',
     'entity_type' => 'node',
     'type' => 'list_boolean',
@@ -25,7 +25,7 @@ function node_access_test_language_install() {
   ));
   $field_private->save();
 
-  entity_create('field_instance', array(
+  entity_create('field_instance_config', array(
     'field_name' => $field_private->name,
     'entity_type' => 'node',
     'bundle' => 'page',
diff --git a/core/modules/number/lib/Drupal/number/Tests/NumberFieldTest.php b/core/modules/number/lib/Drupal/number/Tests/NumberFieldTest.php
index 8a1d9b2..b6ce0d2 100644
--- a/core/modules/number/lib/Drupal/number/Tests/NumberFieldTest.php
+++ b/core/modules/number/lib/Drupal/number/Tests/NumberFieldTest.php
@@ -31,7 +31,7 @@ class NumberFieldTest extends WebTestBase {
   /**
    * A field instance to use in this test class.
    *
-   * @var \Drupal\field\Entity\FieldInstance
+   * @var \Drupal\field\Entity\FieldInstanceConfig
    */
   protected $instance;
 
@@ -63,7 +63,7 @@ function setUp() {
   function testNumberDecimalField() {
     // Create a field with settings to validate.
     $field_name = drupal_strtolower($this->randomName());
-    entity_create('field_entity', array(
+    entity_create('field_config', array(
       'name' => $field_name,
       'entity_type' => 'entity_test',
       'type' => 'number_decimal',
@@ -71,7 +71,7 @@ function testNumberDecimalField() {
         'precision' => 8, 'scale' => 4, 'decimal_separator' => '.',
       )
     ))->save();
-    entity_create('field_instance', array(
+    entity_create('field_instance_config', array(
       'field_name' => $field_name,
       'entity_type' => 'entity_test',
       'bundle' => 'entity_test',
diff --git a/core/modules/number/lib/Drupal/number/Tests/NumberItemTest.php b/core/modules/number/lib/Drupal/number/Tests/NumberItemTest.php
index 96022e7..e69bab4 100644
--- a/core/modules/number/lib/Drupal/number/Tests/NumberItemTest.php
+++ b/core/modules/number/lib/Drupal/number/Tests/NumberItemTest.php
@@ -36,12 +36,12 @@ public function setUp() {
 
     // Create number fields and instances for validation.
     foreach (array('integer', 'float', 'decimal') as $type) {
-      entity_create('field_entity', array(
+      entity_create('field_config', array(
         'name' => 'field_' . $type,
         'entity_type' => 'entity_test',
         'type' => 'number_' . $type,
       ))->save();
-      entity_create('field_instance', array(
+      entity_create('field_instance_config', array(
         'entity_type' => 'entity_test',
         'field_name' => 'field_' . $type,
         'bundle' => 'entity_test',
diff --git a/core/modules/options/lib/Drupal/options/Tests/OptionsDynamicValuesTest.php b/core/modules/options/lib/Drupal/options/Tests/OptionsDynamicValuesTest.php
index 6607332..f8d9193 100644
--- a/core/modules/options/lib/Drupal/options/Tests/OptionsDynamicValuesTest.php
+++ b/core/modules/options/lib/Drupal/options/Tests/OptionsDynamicValuesTest.php
@@ -32,7 +32,7 @@ function setUp() {
     parent::setUp();
 
     $this->field_name = 'test_options';
-    entity_create('field_entity', array(
+    entity_create('field_config', array(
       'name' => $this->field_name,
       'entity_type' => 'entity_test_rev',
       'type' => 'list_text',
@@ -41,7 +41,7 @@ function setUp() {
         'allowed_values_function' => 'options_test_dynamic_values_callback',
       ),
     ))->save();
-    $this->instance = entity_create('field_instance', array(
+    $this->instance = entity_create('field_instance_config', array(
       'field_name' => $this->field_name,
       'entity_type' => 'entity_test_rev',
       'bundle' => 'entity_test_rev',
diff --git a/core/modules/options/lib/Drupal/options/Tests/OptionsFieldTest.php b/core/modules/options/lib/Drupal/options/Tests/OptionsFieldTest.php
index c00cc63..ac9518e 100644
--- a/core/modules/options/lib/Drupal/options/Tests/OptionsFieldTest.php
+++ b/core/modules/options/lib/Drupal/options/Tests/OptionsFieldTest.php
@@ -81,8 +81,8 @@ function testUpdateAllowedValues() {
 
     // Options are reset when a new field with the same name is created.
     $this->field->delete();
-    entity_create('field_entity', $this->fieldDefinition)->save();
-    entity_create('field_instance', array(
+    entity_create('field_config', $this->fieldDefinition)->save();
+    entity_create('field_instance_config', array(
       'field_name' => $this->fieldName,
       'entity_type' => 'entity_test',
       'bundle' => 'entity_test',
diff --git a/core/modules/options/lib/Drupal/options/Tests/OptionsFieldUITest.php b/core/modules/options/lib/Drupal/options/Tests/OptionsFieldUITest.php
index 7f18ec2..09aaa07 100644
--- a/core/modules/options/lib/Drupal/options/Tests/OptionsFieldUITest.php
+++ b/core/modules/options/lib/Drupal/options/Tests/OptionsFieldUITest.php
@@ -258,12 +258,12 @@ function testOptionsTrimmedValuesText() {
    */
   protected function createOptionsField($type) {
     // Create a test field and instance.
-    entity_create('field_entity', array(
+    entity_create('field_config', array(
       'name' => $this->field_name,
       'entity_type' => 'node',
       'type' => $type,
     ))->save();
-    entity_create('field_instance', array(
+    entity_create('field_instance_config', array(
       'field_name' => $this->field_name,
       'entity_type' => 'node',
       'bundle' => $this->type,
diff --git a/core/modules/options/lib/Drupal/options/Tests/OptionsFieldUnitTestBase.php b/core/modules/options/lib/Drupal/options/Tests/OptionsFieldUnitTestBase.php
index 2b70634..57effb4 100644
--- a/core/modules/options/lib/Drupal/options/Tests/OptionsFieldUnitTestBase.php
+++ b/core/modules/options/lib/Drupal/options/Tests/OptionsFieldUnitTestBase.php
@@ -46,7 +46,7 @@ class OptionsFieldUnitTestBase extends FieldUnitTestBase {
   /**
    * The list field instance used in the test.
    *
-   * @var \Drupal\field\Entity\FieldInstance
+   * @var \Drupal\field\Entity\FieldInstanceConfig
    */
   protected $instance;
 
@@ -66,7 +66,7 @@ public function setUp() {
         'allowed_values' => array(1 => 'One', 2 => 'Two', 3 => 'Three'),
       ),
     );
-    $this->field = entity_create('field_entity', $this->fieldDefinition);
+    $this->field = entity_create('field_config', $this->fieldDefinition);
     $this->field->save();
 
     $instance = array(
@@ -74,7 +74,7 @@ public function setUp() {
       'entity_type' => 'entity_test',
       'bundle' => 'entity_test',
     );
-    $this->instance = entity_create('field_instance', $instance);
+    $this->instance = entity_create('field_instance_config', $instance);
     $this->instance->save();
 
     entity_get_form_display('entity_test', 'entity_test', 'default')
diff --git a/core/modules/options/lib/Drupal/options/Tests/OptionsWidgetsTest.php b/core/modules/options/lib/Drupal/options/Tests/OptionsWidgetsTest.php
index 877148c..44b1978 100644
--- a/core/modules/options/lib/Drupal/options/Tests/OptionsWidgetsTest.php
+++ b/core/modules/options/lib/Drupal/options/Tests/OptionsWidgetsTest.php
@@ -62,7 +62,7 @@ function setUp() {
     parent::setUp();
 
     // Field with cardinality 1.
-    $this->card_1 = entity_create('field_entity', array(
+    $this->card_1 = entity_create('field_config', array(
       'name' => 'card_1',
       'entity_type' => 'entity_test',
       'type' => 'list_integer',
@@ -75,7 +75,7 @@ function setUp() {
     $this->card_1->save();
 
     // Field with cardinality 2.
-    $this->card_2 = entity_create('field_entity', array(
+    $this->card_2 = entity_create('field_config', array(
       'name' => 'card_2',
       'entity_type' => 'entity_test',
       'type' => 'list_integer',
@@ -88,7 +88,7 @@ function setUp() {
     $this->card_2->save();
 
     // Boolean field.
-    $this->bool = entity_create('field_entity', array(
+    $this->bool = entity_create('field_config', array(
       'name' => 'bool',
       'entity_type' => 'entity_test',
       'type' => 'list_boolean',
@@ -109,7 +109,7 @@ function setUp() {
    */
   function testRadioButtons() {
     // Create an instance of the 'single value' field.
-    $instance = entity_create('field_instance', array(
+    $instance = entity_create('field_instance_config', array(
       'field_name' => $this->card_1->getFieldName(),
       'entity_type' => 'entity_test',
       'bundle' => 'entity_test',
@@ -166,7 +166,7 @@ function testRadioButtons() {
    */
   function testCheckBoxes() {
     // Create an instance of the 'multiple values' field.
-    $instance = entity_create('field_instance', array(
+    $instance = entity_create('field_instance_config', array(
       'field_name' => $this->card_2->getFieldName(),
       'entity_type' => 'entity_test',
       'bundle' => 'entity_test',
@@ -256,7 +256,7 @@ function testCheckBoxes() {
    */
   function testSelectListSingle() {
     // Create an instance of the 'single value' field.
-    $instance = entity_create('field_instance', array(
+    $instance = entity_create('field_instance_config', array(
       'field_name' => $this->card_1->getFieldName(),
       'entity_type' => 'entity_test',
       'bundle' => 'entity_test',
@@ -356,7 +356,7 @@ function testSelectListSingle() {
    */
   function testSelectListMultiple() {
     // Create an instance of the 'multiple values' field.
-    $instance = entity_create('field_instance', array(
+    $instance = entity_create('field_instance_config', array(
       'field_name' => $this->card_2->getFieldName(),
       'entity_type' => 'entity_test',
       'bundle' => 'entity_test',
@@ -476,7 +476,7 @@ function testSelectListMultiple() {
    */
   function testOnOffCheckbox() {
     // Create an instance of the 'boolean' field.
-    entity_create('field_instance', array(
+    entity_create('field_instance_config', array(
       'field_name' => $this->bool->getFieldName(),
       'entity_type' => 'entity_test',
       'bundle' => 'entity_test',
@@ -532,7 +532,7 @@ function testOnOffCheckboxLabelSetting() {
 
     // Create a test field instance.
     $field_name = 'bool';
-    entity_create('field_entity', array(
+    entity_create('field_config', array(
       'name' => $field_name,
       'entity_type' => 'node',
       'type' => 'list_boolean',
@@ -541,7 +541,7 @@ function testOnOffCheckboxLabelSetting() {
         'allowed_values' => array(0 => 'Zero', 1 => 'Some <script>dangerous</script> & unescaped <strong>markup</strong>'),
       ),
     ))->save();
-    entity_create('field_instance', array(
+    entity_create('field_instance_config', array(
       'field_name' => $field_name,
       'entity_type' => 'node',
       'bundle' => 'page',
diff --git a/core/modules/options/options.module b/core/modules/options/options.module
index 5ab2241..09cc14c 100644
--- a/core/modules/options/options.module
+++ b/core/modules/options/options.module
@@ -212,16 +212,16 @@ function options_field_settings_form_value_boolean_allowed_values($element, $inp
 }
 
 /**
- * Implements hook_ENTITY_TYPE_update() for 'field_entity'.
+ * Implements hook_ENTITY_TYPE_update() for 'field_config'.
  */
-function options_field_entity_update(FieldInterface $field) {
+function options_field_config_update(FieldInterface $field) {
   drupal_static_reset('options_allowed_values');
 }
 
 /**
- * Implements hook_ENTITY_TYPE_delete() for 'field_entity'.
+ * Implements hook_ENTITY_TYPE_delete() for 'field_config'.
  */
-function options_field_entity_delete(FieldInterface $field) {
+function options_field_config_delete(FieldInterface $field) {
   drupal_static_reset('options_allowed_values');
 }
 
diff --git a/core/modules/rdf/lib/Drupal/rdf/Tests/Field/FieldRdfaTestBase.php b/core/modules/rdf/lib/Drupal/rdf/Tests/Field/FieldRdfaTestBase.php
index dd77f6a..9c119c5 100644
--- a/core/modules/rdf/lib/Drupal/rdf/Tests/Field/FieldRdfaTestBase.php
+++ b/core/modules/rdf/lib/Drupal/rdf/Tests/Field/FieldRdfaTestBase.php
@@ -78,12 +78,12 @@ protected function assertFormatterRdfa($formatter, $property, $value, $object_ty
    * Creates the field for testing.
    */
   protected function createTestField() {
-    entity_create('field_entity', array(
+    entity_create('field_config', array(
       'name' => $this->fieldName,
       'entity_type' => 'entity_test_render',
       'type' => $this->fieldType,
     ))->save();
-    entity_create('field_instance', array(
+    entity_create('field_instance_config', array(
       'entity_type' => 'entity_test_render',
       'field_name' => $this->fieldName,
       'bundle' => 'entity_test_render',
diff --git a/core/modules/rdf/lib/Drupal/rdf/Tests/Field/TaxonomyTermReferenceRdfaTest.php b/core/modules/rdf/lib/Drupal/rdf/Tests/Field/TaxonomyTermReferenceRdfaTest.php
index 38ee919..a8c766e 100644
--- a/core/modules/rdf/lib/Drupal/rdf/Tests/Field/TaxonomyTermReferenceRdfaTest.php
+++ b/core/modules/rdf/lib/Drupal/rdf/Tests/Field/TaxonomyTermReferenceRdfaTest.php
@@ -58,7 +58,7 @@ public function setUp() {
     ));
     $vocabulary->save();
 
-    entity_create('field_entity', array(
+    entity_create('field_config', array(
       'name' => $this->fieldName,
       'entity_type' => 'entity_test_render',
       'type' => 'taxonomy_term_reference',
@@ -72,7 +72,7 @@ public function setUp() {
         ),
       ),
     ))->save();
-    entity_create('field_instance', array(
+    entity_create('field_instance_config', array(
       'entity_type' => 'entity_test_render',
       'field_name' => $this->fieldName,
       'bundle' => 'entity_test_render',
diff --git a/core/modules/rdf/lib/Drupal/rdf/Tests/TaxonomyTermFieldAttributesTest.php b/core/modules/rdf/lib/Drupal/rdf/Tests/TaxonomyTermFieldAttributesTest.php
index 9d62168..c870746 100644
--- a/core/modules/rdf/lib/Drupal/rdf/Tests/TaxonomyTermFieldAttributesTest.php
+++ b/core/modules/rdf/lib/Drupal/rdf/Tests/TaxonomyTermFieldAttributesTest.php
@@ -154,7 +154,7 @@ function testNodeTeaser() {
    * @todo Move this to TaxonomyTestBase, like the other field modules.
    */
   protected function createTaxonomyTermReferenceField($field_name, $vocabulary) {
-    entity_create('field_entity', array(
+    entity_create('field_config', array(
       'name' => $field_name,
       'entity_type' => 'node',
       'type' => 'taxonomy_term_reference',
@@ -168,7 +168,7 @@ protected function createTaxonomyTermReferenceField($field_name, $vocabulary) {
         ),
       ),
     ))->save();
-    entity_create('field_instance', array(
+    entity_create('field_instance_config', array(
       'field_name' => $field_name,
       'entity_type' => 'node',
       'bundle' => 'article',
diff --git a/core/modules/serialization/lib/Drupal/serialization/Tests/EntityResolverTest.php b/core/modules/serialization/lib/Drupal/serialization/Tests/EntityResolverTest.php
index 73c515c..e11fa5b 100644
--- a/core/modules/serialization/lib/Drupal/serialization/Tests/EntityResolverTest.php
+++ b/core/modules/serialization/lib/Drupal/serialization/Tests/EntityResolverTest.php
@@ -34,7 +34,7 @@ protected function setUp() {
     parent::setUp();
 
     // Create the test field.
-    entity_create('field_entity', array(
+    entity_create('field_config', array(
       'settings' => array(
         'target_type' => 'entity_test_mulrev',
       ),
@@ -44,7 +44,7 @@ protected function setUp() {
     ))->save();
 
     // Create the test field instance.
-    entity_create('field_instance', array(
+    entity_create('field_instance_config', array(
       'entity_type' => 'entity_test_mulrev',
       'field_name' => 'field_test_entity_reference',
       'bundle' => 'entity_test_mulrev',
diff --git a/core/modules/serialization/lib/Drupal/serialization/Tests/NormalizerTestBase.php b/core/modules/serialization/lib/Drupal/serialization/Tests/NormalizerTestBase.php
index 977437b..1e6152c 100644
--- a/core/modules/serialization/lib/Drupal/serialization/Tests/NormalizerTestBase.php
+++ b/core/modules/serialization/lib/Drupal/serialization/Tests/NormalizerTestBase.php
@@ -27,14 +27,14 @@ protected function setUp() {
     $this->installConfig(array('field'));
 
     // Auto-create a field for testing.
-    entity_create('field_entity', array(
+    entity_create('field_config', array(
       'name' => 'field_test_text',
       'entity_type' => 'entity_test_mulrev',
       'type' => 'text',
       'cardinality' => 1,
       'translatable' => FALSE,
     ))->save();
-    entity_create('field_instance', array(
+    entity_create('field_instance_config', array(
       'entity_type' => 'entity_test_mulrev',
       'field_name' => 'field_test_text',
       'bundle' => 'entity_test_mulrev',
diff --git a/core/modules/simpletest/lib/Drupal/simpletest/Tests/DrupalUnitTestBaseTest.php b/core/modules/simpletest/lib/Drupal/simpletest/Tests/DrupalUnitTestBaseTest.php
index 4e598bf..5071dc4 100644
--- a/core/modules/simpletest/lib/Drupal/simpletest/Tests/DrupalUnitTestBaseTest.php
+++ b/core/modules/simpletest/lib/Drupal/simpletest/Tests/DrupalUnitTestBaseTest.php
@@ -234,13 +234,13 @@ function testEnableModulesFixedList() {
       'bundle' => 'entity_test',
       'mode' => 'default',
     ));
-    $field = entity_create('field_entity', array(
+    $field = entity_create('field_config', array(
       'name' => 'test_field',
       'entity_type' => 'entity_test',
       'type' => 'test_field'
     ));
     $field->save();
-    entity_create('field_instance', array(
+    entity_create('field_instance_config', array(
       'field_name' => $field->name,
       'entity_type' => 'entity_test',
       'bundle' => 'entity_test',
diff --git a/core/modules/system/lib/Drupal/system/Tests/Ajax/MultiFormTest.php b/core/modules/system/lib/Drupal/system/Tests/Ajax/MultiFormTest.php
index 7709d64..b0a3c80 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Ajax/MultiFormTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Ajax/MultiFormTest.php
@@ -34,13 +34,13 @@ function setUp() {
 
     // Create a multi-valued field for 'page' nodes to use for Ajax testing.
     $field_name = 'field_ajax_test';
-    entity_create('field_entity', array(
+    entity_create('field_config', array(
       'name' => $field_name,
       'entity_type' => 'node',
       'type' => 'text',
       'cardinality' => FIELD_CARDINALITY_UNLIMITED,
     ))->save();
-    entity_create('field_instance', array(
+    entity_create('field_instance_config', array(
       'field_name' => $field_name,
       'entity_type' => 'node',
       'bundle' => 'page',
diff --git a/core/modules/system/lib/Drupal/system/Tests/Entity/EntityQueryAggregateTest.php b/core/modules/system/lib/Drupal/system/Tests/Entity/EntityQueryAggregateTest.php
index 7f7d2c4..ea75ff7 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Entity/EntityQueryAggregateTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Entity/EntityQueryAggregateTest.php
@@ -58,13 +58,13 @@ public function setUp() {
     // Add some fieldapi fields to be used in the test.
     for ($i = 1; $i <= 2; $i++) {
       $field_name = 'field_test_' . $i;
-      entity_create('field_entity', array(
+      entity_create('field_config', array(
         'name' => $field_name,
         'entity_type' => 'entity_test',
         'type' => 'number_integer',
         'cardinality' => 2,
       ))->save();
-      entity_create('field_instance', array(
+      entity_create('field_instance_config', array(
         'field_name' => $field_name,
         'entity_type' => 'entity_test',
         'bundle' => 'entity_test',
diff --git a/core/modules/system/lib/Drupal/system/Tests/Entity/EntityQueryRelationshipTest.php b/core/modules/system/lib/Drupal/system/Tests/Entity/EntityQueryRelationshipTest.php
index 4a417f8..e5d8cf4 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Entity/EntityQueryRelationshipTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Entity/EntityQueryRelationshipTest.php
@@ -86,10 +86,10 @@ public function setUp() {
       'type' => 'taxonomy_term_reference',
     );
     $field['settings']['allowed_values']['vocabulary'] = $vocabulary->id();
-    entity_create('field_entity', $field)->save();
+    entity_create('field_config', $field)->save();
     entity_test_create_bundle('test_bundle');
     // Third, create the instance.
-    entity_create('field_instance', array(
+    entity_create('field_instance_config', array(
       'entity_type' => 'entity_test',
       'field_name' => $this->fieldName,
       'bundle' => 'test_bundle',
diff --git a/core/modules/system/lib/Drupal/system/Tests/Entity/EntityQueryTest.php b/core/modules/system/lib/Drupal/system/Tests/Entity/EntityQueryTest.php
index bdc3cc9..7960753 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Entity/EntityQueryTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Entity/EntityQueryTest.php
@@ -64,7 +64,7 @@ function setUp() {
     $figures = drupal_strtolower($this->randomName());
     $greetings = drupal_strtolower($this->randomName());
     foreach (array($figures => 'shape', $greetings => 'text') as $field_name => $field_type) {
-      $field = entity_create('field_entity', array(
+      $field = entity_create('field_config', array(
         'name' => $field_name,
         'entity_type' => 'entity_test_mulrev',
         'type' => $field_type,
@@ -83,7 +83,7 @@ function setUp() {
       } while ($bundles && strtolower($bundles[0]) >= strtolower($bundle));
       entity_test_create_bundle($bundle);
       foreach ($fields as $field) {
-        entity_create('field_instance', array(
+        entity_create('field_instance_config', array(
           'field_name' => $field->name,
           'entity_type' => 'entity_test_mulrev',
           'bundle' => $bundle,
@@ -430,7 +430,7 @@ protected function testTableSort() {
   protected function testCount() {
     // Create a field with the same name in a different entity type.
     $field_name = $this->figures;
-    $field = entity_create('field_entity', array(
+    $field = entity_create('field_config', array(
       'name' => $field_name,
       'entity_type' => 'entity_test',
       'type' => 'shape',
@@ -439,7 +439,7 @@ protected function testCount() {
     ));
     $field->save();
     $bundle = $this->randomName();
-    entity_create('field_instance', array(
+    entity_create('field_instance_config', array(
       'field_name' => $field_name,
       'entity_type' => 'entity_test',
       'bundle' => $bundle,
diff --git a/core/modules/system/lib/Drupal/system/Tests/Entity/EntityTranslationTest.php b/core/modules/system/lib/Drupal/system/Tests/Entity/EntityTranslationTest.php
index 5e663ca..e1a4437 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Entity/EntityTranslationTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Entity/EntityTranslationTest.php
@@ -53,14 +53,14 @@ function setUp() {
 
     // Create instance in all entity variations.
     foreach (entity_test_entity_types() as $entity_type) {
-      entity_create('field_entity', array(
+      entity_create('field_config', array(
         'name' => $this->field_name,
         'entity_type' => $entity_type,
         'type' => 'text',
         'cardinality' => 4,
         'translatable' => TRUE,
       ))->save();
-      entity_create('field_instance', array(
+      entity_create('field_instance_config', array(
         'field_name' => $this->field_name,
         'entity_type' => $entity_type,
         'bundle' => $entity_type,
@@ -482,7 +482,7 @@ function testEntityTranslationAPI() {
     // Check that per-language defaults are properly populated.
     $entity = $this->reloadEntity($entity);
     $instance_id = implode('.', array($entity->entityType(), $entity->bundle(), $this->field_name));
-    $instance = $this->entityManager->getStorageController('field_instance')->load($instance_id);
+    $instance = $this->entityManager->getStorageController('field_instance_config')->load($instance_id);
     $instance->default_value_function = 'entity_test_field_default_value';
     $instance->save();
     $translation = $entity->addTranslation($langcode2);
diff --git a/core/modules/system/lib/Drupal/system/Tests/Entity/EntityViewControllerTest.php b/core/modules/system/lib/Drupal/system/Tests/Entity/EntityViewControllerTest.php
index ca3ac07..5266563 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Entity/EntityViewControllerTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Entity/EntityViewControllerTest.php
@@ -74,12 +74,12 @@ function testEntityViewController() {
    */
   public function testFieldItemAttributes() {
     // Create a text field which will be rendered with custom item attributes.
-    entity_create('field_entity', array(
+    entity_create('field_config', array(
       'name' => 'field_test_text',
       'entity_type' => 'entity_test_render',
       'type' => 'text',
     ))->save();
-    entity_create('field_instance', array(
+    entity_create('field_instance_config', array(
       'entity_type' => 'entity_test_render',
       'field_name' => 'field_test_text',
       'bundle' => 'entity_test_render',
diff --git a/core/modules/system/lib/Drupal/system/Tests/Entity/FieldSqlStorageTest.php b/core/modules/system/lib/Drupal/system/Tests/Entity/FieldSqlStorageTest.php
index 956e995..e2e6e25 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Entity/FieldSqlStorageTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Entity/FieldSqlStorageTest.php
@@ -10,7 +10,7 @@
 use Drupal\Core\Database\Database;
 use Drupal\Core\Entity\DatabaseStorageController;
 use Drupal\field\FieldException;
-use Drupal\field\Entity\Field;
+use Drupal\field\Entity\FieldConfig;
 use Drupal\system\Tests\Entity\EntityUnitTestBase;
 
 /**
@@ -45,7 +45,7 @@ class FieldSqlStorageTest extends EntityUnitTestBase {
   /**
    * A field instance to use in this test class.
    *
-   * @var \Drupal\field\Entity\FieldInstance
+   * @var \Drupal\field\Entity\FieldInstanceConfig
    */
   protected $instance;
 
@@ -71,14 +71,14 @@ function setUp() {
 
     $this->field_name = strtolower($this->randomName());
     $this->field_cardinality = 4;
-    $this->field = entity_create('field_entity', array(
+    $this->field = entity_create('field_config', array(
       'name' => $this->field_name,
       'entity_type' => $entity_type,
       'type' => 'test_field',
       'cardinality' => $this->field_cardinality,
     ));
     $this->field->save();
-    $this->instance = entity_create('field_instance', array(
+    $this->instance = entity_create('field_instance_config', array(
       'field_name' => $this->field_name,
       'entity_type' => $entity_type,
       'bundle' => $entity_type
@@ -267,12 +267,12 @@ function testLongNames() {
     $values = array();
     for ($i = 0; $i < 2; $i++) {
       $field_names[$i] = $name_base . $i;
-      entity_create('field_entity', array(
+      entity_create('field_config', array(
         'name' => $field_names[$i],
         'entity_type' => $entity_type,
         'type' => 'test_field',
       ))->save();
-      entity_create('field_instance', array(
+      entity_create('field_instance_config', array(
         'field_name' => $field_names[$i],
         'entity_type' => $entity_type,
         'bundle' => $bundle,
@@ -297,14 +297,14 @@ function testLongNames() {
   function testUpdateFieldSchemaWithData() {
     $entity_type = 'entity_test_rev';
     // Create a decimal 5.2 field and add some data.
-    $field = entity_create('field_entity', array(
+    $field = entity_create('field_config', array(
       'name' => 'decimal52',
       'entity_type' => $entity_type,
       'type' => 'number_decimal',
       'settings' => array('precision' => 5, 'scale' => 2),
     ));
     $field->save();
-    $instance = entity_create('field_instance', array(
+    $instance = entity_create('field_instance_config', array(
       'field_name' => 'decimal52',
       'entity_type' => $entity_type,
       'bundle' => $entity_type,
@@ -333,7 +333,7 @@ function testUpdateFieldSchemaWithData() {
    */
   function testFieldUpdateFailure() {
     // Create a text field.
-    $field = entity_create('field_entity', array(
+    $field = entity_create('field_config', array(
       'name' => 'test_text',
       'entity_type' => 'entity_test',
       'type' => 'text',
@@ -365,13 +365,13 @@ function testFieldUpdateIndexesWithData() {
     // Create a decimal field.
     $field_name = 'testfield';
     $entity_type = 'entity_test_rev';
-    $field = entity_create('field_entity', array(
+    $field = entity_create('field_config', array(
       'name' => $field_name,
       'entity_type' => $entity_type,
       'type' => 'text',
     ));
     $field->save();
-    $instance = entity_create('field_instance', array(
+    $instance = entity_create('field_instance_config', array(
       'field_name' => $field_name,
       'entity_type' => $entity_type,
       'bundle' => $entity_type,
@@ -423,7 +423,7 @@ function testFieldSqlStorageForeignKeys() {
     // field_test_field_schema()).
     $field_name = 'testfield';
     $foreign_key_name = 'shape';
-    $field = entity_create('field_entity', array(
+    $field = entity_create('field_config', array(
       'name' => $field_name,
       'entity_type' => 'entity_test',
       'type' => 'shape',
@@ -498,7 +498,7 @@ public function testTableNames() {
     // Short entity type and field name.
     $entity_type = 'short_entity_type';
     $field_name = 'short_field_name';
-    $field = entity_create('field_entity', array(
+    $field = entity_create('field_config', array(
       'entity_type' => $entity_type,
       'name' => $field_name,
       'type' => 'test_field',
@@ -511,7 +511,7 @@ public function testTableNames() {
     // Short entity type, long field name
     $entity_type = 'short_entity_type';
     $field_name = 'long_field_name_abcdefghijklmnopqrstuvwxyz';
-    $field = entity_create('field_entity', array(
+    $field = entity_create('field_config', array(
       'entity_type' => $entity_type,
       'name' => $field_name,
       'type' => 'test_field',
@@ -524,7 +524,7 @@ public function testTableNames() {
     // Long entity type, short field name
     $entity_type = 'long_entity_type_abcdefghijklmnopqrstuvwxyz';
     $field_name = 'short_field_name';
-    $field = entity_create('field_entity', array(
+    $field = entity_create('field_config', array(
       'entity_type' => $entity_type,
       'name' => $field_name,
       'type' => 'test_field',
@@ -537,7 +537,7 @@ public function testTableNames() {
     // Long entity type and field name.
     $entity_type = 'long_entity_type_abcdefghijklmnopqrstuvwxyz';
     $field_name = 'long_field_name_abcdefghijklmnopqrstuvwxyz';
-    $field = entity_create('field_entity', array(
+    $field = entity_create('field_config', array(
       'entity_type' => $entity_type,
       'name' => $field_name,
       'type' => 'test_field',
@@ -547,7 +547,7 @@ public function testTableNames() {
     $expected = 'long_entity_type_abcdefghijklmnopq_r__' . substr(hash('sha256', $field->uuid), 0, 10);
     $this->assertEqual(DatabaseStorageController::_fieldRevisionTableName($field), $expected);
     // Try creating a second field and check there are no clashes.
-    $field2 = entity_create('field_entity', array(
+    $field2 = entity_create('field_config', array(
       'entity_type' => $entity_type,
       'name' => $field_name . '2',
       'type' => 'test_field',
@@ -556,7 +556,7 @@ public function testTableNames() {
     $this->assertNotEqual(DatabaseStorageController::_fieldRevisionTableName($field), DatabaseStorageController::_fieldRevisionTableName($field2));
 
     // Deleted field.
-    $field = entity_create('field_entity', array(
+    $field = entity_create('field_config', array(
       'entity_type' => 'some_entity_type',
       'name' => 'some_field_name',
       'type' => 'test_field',
diff --git a/core/modules/system/lib/Drupal/system/Tests/Form/ArbitraryRebuildTest.php b/core/modules/system/lib/Drupal/system/Tests/Form/ArbitraryRebuildTest.php
index b09fc9b..986bbb5 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Form/ArbitraryRebuildTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Form/ArbitraryRebuildTest.php
@@ -33,14 +33,14 @@ function setUp() {
     parent::setUp();
 
     // Auto-create a field for testing.
-    entity_create('field_entity', array(
+    entity_create('field_config', array(
       'name' => 'test_multiple',
       'entity_type' => 'user',
       'type' => 'text',
       'cardinality' => -1,
       'translatable' => FALSE,
     ))->save();
-    entity_create('field_instance', array(
+    entity_create('field_instance_config', array(
       'entity_type' => 'user',
       'field_name' => 'test_multiple',
       'bundle' => 'user',
diff --git a/core/modules/system/lib/Drupal/system/Tests/Form/RebuildTest.php b/core/modules/system/lib/Drupal/system/Tests/Form/RebuildTest.php
index 163e5df..241436c 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Form/RebuildTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Form/RebuildTest.php
@@ -77,13 +77,13 @@ function testPreserveFormActionAfterAJAX() {
       'type' => 'text',
       'cardinality' => FIELD_CARDINALITY_UNLIMITED,
     );
-    entity_create('field_entity', $field)->save();
+    entity_create('field_config', $field)->save();
     $instance = array(
       'field_name' => $field_name,
       'entity_type' => 'node',
       'bundle' => 'page',
     );
-    entity_create('field_instance', $instance)->save();
+    entity_create('field_instance_config', $instance)->save();
     entity_get_form_display('node', 'page', 'default')
       ->setComponent($field_name, array('type' => 'text_test'))
       ->save();
diff --git a/core/modules/system/lib/Drupal/system/Tests/Upgrade/FieldUpgradePathTest.php b/core/modules/system/lib/Drupal/system/Tests/Upgrade/FieldUpgradePathTest.php
index 5e9c255..841e2e4 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Upgrade/FieldUpgradePathTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Upgrade/FieldUpgradePathTest.php
@@ -8,7 +8,7 @@
 namespace Drupal\system\Tests\Upgrade;
 
 use Drupal\Core\Entity\DatabaseStorageController;
-use Drupal\field\Entity\Field;
+use Drupal\field\Entity\FieldConfig;
 
 /**
  * Tests upgrade of system variables.
@@ -277,8 +277,8 @@ function testFieldUpgradeToConfig() {
     $this->assertEqual($deleted_field['uuid'], $deleted_instance['field_uuid']);
 
     // Check that pre-existing deleted field table is renamed correctly.
-    $field_entity = new Field($deleted_field);
-    $table_name = DatabaseStorageController::_fieldTableName($field_entity);
+    $field_config = new FieldConfig($deleted_field);
+    $table_name = DatabaseStorageController::_fieldTableName($field_config);
     $this->assertEqual("field_deleted_data_" . substr(hash('sha256', $deleted_field['uuid']), 0, 10), $table_name);
     $this->assertTrue(db_table_exists($table_name));
 
diff --git a/core/modules/system/tests/modules/entity_test/entity_test.install b/core/modules/system/tests/modules/entity_test/entity_test.install
index 346eccb..201d5ed 100644
--- a/core/modules/system/tests/modules/entity_test/entity_test.install
+++ b/core/modules/system/tests/modules/entity_test/entity_test.install
@@ -17,14 +17,14 @@ function entity_test_install() {
   );
   foreach ($entity_types as $entity_type) {
     // Auto-create fields for testing.
-    entity_create('field_entity', array(
+    entity_create('field_config', array(
       'name' => 'field_test_text',
       'entity_type' => $entity_type,
       'type' => 'text',
       'cardinality' => 1,
       'translatable' => FALSE,
     ))->save();
-    entity_create('field_instance', array(
+    entity_create('field_instance_config', array(
       'entity_type' => $entity_type,
       'field_name' => 'field_test_text',
       'bundle' => $entity_type,
diff --git a/core/modules/system/tests/modules/entity_test/entity_test.module b/core/modules/system/tests/modules/entity_test/entity_test.module
index cc8800e..31a0e07 100644
--- a/core/modules/system/tests/modules/entity_test/entity_test.module
+++ b/core/modules/system/tests/modules/entity_test/entity_test.module
@@ -10,8 +10,8 @@
 use Drupal\Core\Entity\Field\FieldItemListInterface;
 use Drupal\Core\Session\AccountInterface;
 use Drupal\entity\Entity\EntityFormDisplay;
-use Drupal\field\Entity\Field;
-use Drupal\field\Entity\FieldInstance;
+use Drupal\field\Entity\FieldConfig;
+use Drupal\field\Entity\FieldInstanceConfig;
 
 /**
  * Filter that limits test entity list to revisable ones.
@@ -509,14 +509,14 @@ function entity_test_entity_test_mul_translation_delete(EntityInterface $transla
  *
  * @param \Drupal\Core\Entity\EntityInterface $entity
  *   The entity the field belongs to.
- * @param \Drupal\field\Entity\Field $field
+ * @param \Drupal\field\Entity\FieldConfig $field
  *   The field for which default values should be provided.
- * @param \Drupal\field\Entity\FieldInstance $instance
+ * @param \Drupal\field\Entity\FieldInstanceConfig $instance
  *   The field instance for which default values should be provided.
  * @param string $langcode
  *   The field language code to fill-in with the default value.
  */
-function entity_test_field_default_value(EntityInterface $entity, Field $field, FieldInstance $instance, $langcode) {
+function entity_test_field_default_value(EntityInterface $entity, FieldConfig $field, FieldInstanceConfig $instance, $langcode) {
   return array(array('value' => $field->getFieldName() . '_' . $langcode));
 }
 
diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/RssTest.php b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/RssTest.php
index 654ea15..d7922b4 100644
--- a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/RssTest.php
+++ b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/RssTest.php
@@ -35,7 +35,7 @@ function setUp() {
     $this->vocabulary = $this->createVocabulary();
     $this->field_name = 'taxonomy_' . $this->vocabulary->id();
 
-    $this->field = entity_create('field_entity', array(
+    $this->field = entity_create('field_config', array(
       'name' => $this->field_name,
       'entity_type' => 'node',
       'type' => 'taxonomy_term_reference',
@@ -50,7 +50,7 @@ function setUp() {
       ),
     ));
     $this->field->save();
-    entity_create('field_instance', array(
+    entity_create('field_instance_config', array(
       'field_name' => $this->field_name,
       'bundle' => 'article',
       'entity_type' => 'node',
diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TaxonomyImageTest.php b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TaxonomyImageTest.php
index db00705..c12c9bf 100644
--- a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TaxonomyImageTest.php
+++ b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TaxonomyImageTest.php
@@ -44,7 +44,7 @@ public function setUp() {
     // Add a field instance to the vocabulary.
     $entity_type = 'taxonomy_term';
     $name = 'field_test';
-    entity_create('field_entity', array(
+    entity_create('field_config', array(
       'name' => $name,
       'entity_type' => $entity_type,
       'type' => 'image',
@@ -52,7 +52,7 @@ public function setUp() {
         'uri_scheme' => 'private',
       ),
     ))->save();
-    entity_create('field_instance', array(
+    entity_create('field_instance_config', array(
       'field_name' => $name,
       'entity_type' => $entity_type,
       'bundle' => $this->vocabulary->id(),
diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TaxonomyTermReferenceItemTest.php b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TaxonomyTermReferenceItemTest.php
index 6c5f1ea..0934ddd 100644
--- a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TaxonomyTermReferenceItemTest.php
+++ b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TaxonomyTermReferenceItemTest.php
@@ -44,7 +44,7 @@ public function setUp() {
     ));
     $vocabulary->save();
 
-    entity_create('field_entity', array(
+    entity_create('field_config', array(
       'name' => 'field_test_taxonomy',
       'entity_type' => 'entity_test',
       'type' => 'taxonomy_term_reference',
@@ -58,7 +58,7 @@ public function setUp() {
         ),
       ),
     ))->save();
-    entity_create('field_instance', array(
+    entity_create('field_instance_config', array(
       'entity_type' => 'entity_test',
       'field_name' => 'field_test_taxonomy',
       'bundle' => 'entity_test',
diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermFieldMultipleVocabularyTest.php b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermFieldMultipleVocabularyTest.php
index 9ddb3c4..ffc6226 100644
--- a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermFieldMultipleVocabularyTest.php
+++ b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermFieldMultipleVocabularyTest.php
@@ -40,7 +40,7 @@ function setUp() {
 
     // Set up a field and instance.
     $this->field_name = drupal_strtolower($this->randomName());
-    entity_create('field_entity', array(
+    entity_create('field_config', array(
       'name' => $this->field_name,
       'entity_type' => 'entity_test',
       'type' => 'taxonomy_term_reference',
@@ -58,7 +58,7 @@ function setUp() {
         ),
       )
     ))->save();
-    entity_create('field_instance', array(
+    entity_create('field_instance_config', array(
       'field_name' => $this->field_name,
       'entity_type' => 'entity_test',
       'bundle' => 'entity_test',
diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermFieldTest.php b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermFieldTest.php
index d289a2c..45237cf 100644
--- a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermFieldTest.php
+++ b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermFieldTest.php
@@ -43,7 +43,7 @@ function setUp() {
 
     // Setup a field and instance.
     $this->field_name = drupal_strtolower($this->randomName());
-    $this->field = entity_create('field_entity', array(
+    $this->field = entity_create('field_config', array(
       'name' => $this->field_name,
       'entity_type' => 'entity_test',
       'type' => 'taxonomy_term_reference',
@@ -57,7 +57,7 @@ function setUp() {
       )
     ));
     $this->field->save();
-    entity_create('field_instance', array(
+    entity_create('field_instance_config', array(
       'field_name' => $this->field_name,
       'entity_type' => 'entity_test',
       'bundle' => 'entity_test',
diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermIndexTest.php b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermIndexTest.php
index 686b4eb..7161a65 100644
--- a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermIndexTest.php
+++ b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermIndexTest.php
@@ -31,7 +31,7 @@ function setUp() {
     $this->vocabulary = $this->createVocabulary();
 
     $this->field_name_1 = drupal_strtolower($this->randomName());
-    entity_create('field_entity', array(
+    entity_create('field_config', array(
       'name' => $this->field_name_1,
       'entity_type' => 'node',
       'type' => 'taxonomy_term_reference',
@@ -45,7 +45,7 @@ function setUp() {
         ),
       ),
     ))->save();
-    entity_create('field_instance', array(
+    entity_create('field_instance_config', array(
       'field_name' => $this->field_name_1,
       'bundle' => 'article',
       'entity_type' => 'node',
@@ -62,7 +62,7 @@ function setUp() {
       ->save();
 
     $this->field_name_2 = drupal_strtolower($this->randomName());
-    entity_create('field_entity', array(
+    entity_create('field_config', array(
       'name' => $this->field_name_2,
       'entity_type' => 'node',
       'type' => 'taxonomy_term_reference',
@@ -76,7 +76,7 @@ function setUp() {
         ),
       ),
     ))->save();
-    entity_create('field_instance', array(
+    entity_create('field_instance_config', array(
       'field_name' => $this->field_name_2,
       'bundle' => 'article',
       'entity_type' => 'node',
diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermTest.php b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermTest.php
index d11eefe..0213684 100644
--- a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermTest.php
+++ b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermTest.php
@@ -41,9 +41,9 @@ function setUp() {
         ),
       ),
     );
-    entity_create('field_entity', $field)->save();
+    entity_create('field_config', $field)->save();
 
-    $this->instance = entity_create('field_instance', array(
+    $this->instance = entity_create('field_instance_config', array(
       'field_name' => $field_name,
       'bundle' => 'article',
       'entity_type' => 'node',
diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TokenReplaceTest.php b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TokenReplaceTest.php
index fb501e5..b95e5ad 100644
--- a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TokenReplaceTest.php
+++ b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TokenReplaceTest.php
@@ -28,7 +28,7 @@ function setUp() {
     $this->drupalLogin($this->admin_user);
     $this->vocabulary = $this->createVocabulary();
     $this->field_name = 'taxonomy_' . $this->vocabulary->id();
-    entity_create('field_entity', array(
+    entity_create('field_config', array(
       'name' => $this->field_name,
       'entity_type' => 'node',
       'type' => 'taxonomy_term_reference',
@@ -43,7 +43,7 @@ function setUp() {
       ),
     ))->save();
 
-    entity_create('field_instance', array(
+    entity_create('field_instance_config', array(
       'field_name' => $this->field_name,
       'bundle' => 'article',
       'entity_type' => 'node',
diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/Views/TaxonomyTestBase.php b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/Views/TaxonomyTestBase.php
index 6e7d393..f1f1438 100644
--- a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/Views/TaxonomyTestBase.php
+++ b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/Views/TaxonomyTestBase.php
@@ -77,7 +77,7 @@ protected function mockStandardInstall() {
     ));
     $this->vocabulary->save();
     $this->field_name = 'field_' . $this->vocabulary->id();
-    entity_create('field_entity', array(
+    entity_create('field_config', array(
       'name' => $this->field_name,
       'entity_type' => 'node',
       'type' => 'taxonomy_term_reference',
@@ -92,7 +92,7 @@ protected function mockStandardInstall() {
         ),
       ),
     ))->save();
-    $instance = entity_create('field_instance', array(
+    $instance = entity_create('field_instance_config', array(
       'field_name' => $this->field_name,
       'entity_type' => 'node',
       'label' => 'Tags',
diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/VocabularyUnitTest.php b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/VocabularyUnitTest.php
index 33c49cd..991cec0 100644
--- a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/VocabularyUnitTest.php
+++ b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/VocabularyUnitTest.php
@@ -154,12 +154,12 @@ function testTaxonomyVocabularyLoadMultiple() {
    */
   function testTaxonomyVocabularyChangeMachineName() {
     // Add a field instance to the vocabulary.
-    entity_create('field_entity', array(
+    entity_create('field_config', array(
       'name' => 'field_test',
       'entity_type' => 'taxonomy_term',
       'type' => 'test_field',
     ))->save();
-    entity_create('field_instance', array(
+    entity_create('field_instance_config', array(
       'field_name' => 'field_test',
       'entity_type' => 'taxonomy_term',
       'bundle' => $this->vocabulary->id(),
@@ -193,14 +193,14 @@ function testUninstallReinstall() {
       'type' => 'text',
       'cardinality' => 4
     );
-    entity_create('field_entity', $this->field_definition)->save();
+    entity_create('field_config', $this->field_definition)->save();
     $this->instance_definition = array(
       'field_name' => $this->field_name,
       'entity_type' => 'taxonomy_term',
       'bundle' => $this->vocabulary->id(),
       'label' => $this->randomName() . '_label',
     );
-    entity_create('field_instance', $this->instance_definition)->save();
+    entity_create('field_instance_config', $this->instance_definition)->save();
 
     require_once DRUPAL_ROOT . '/core/includes/install.inc';
     module_uninstall(array('taxonomy'));
@@ -212,7 +212,7 @@ function testUninstallReinstall() {
     // an instance of this field on the same bundle name should be successful.
     $this->vocabulary->enforceIsNew();
     $this->vocabulary->save();
-    entity_create('field_entity', $this->field_definition)->save();
-    entity_create('field_instance', $this->instance_definition)->save();
+    entity_create('field_config', $this->field_definition)->save();
+    entity_create('field_instance_config', $this->instance_definition)->save();
   }
 }
diff --git a/core/modules/taxonomy/taxonomy.install b/core/modules/taxonomy/taxonomy.install
index 34899c3..5f350c7 100644
--- a/core/modules/taxonomy/taxonomy.install
+++ b/core/modules/taxonomy/taxonomy.install
@@ -6,7 +6,7 @@
  */
 
 use Drupal\Core\Entity\DatabaseStorageController;
-use Drupal\field\Entity\Field;
+use Drupal\field\Entity\FieldConfig;
 
 /**
  * Implements hook_schema().
@@ -351,7 +351,7 @@ function taxonomy_update_8007() {
     $field_config = \Drupal::config($config_name);
     // Only update taxonomy reference fields that use the default SQL storage.
     if ($field_config->get('type') == 'taxonomy_term_reference') {
-      $field = new Field($field_config->get());
+      $field = new FieldConfig($field_config->get());
 
       if (db_table_exists(DatabaseStorageController::_fieldTableName($field))) {
         $tables = array(
diff --git a/core/modules/telephone/lib/Drupal/telephone/Tests/TelephoneFieldTest.php b/core/modules/telephone/lib/Drupal/telephone/Tests/TelephoneFieldTest.php
index 1f5ab23..171f6f4 100644
--- a/core/modules/telephone/lib/Drupal/telephone/Tests/TelephoneFieldTest.php
+++ b/core/modules/telephone/lib/Drupal/telephone/Tests/TelephoneFieldTest.php
@@ -52,12 +52,12 @@ function setUp() {
   function testTelephoneField() {
 
     // Add the telepone field to the article content type.
-    entity_create('field_entity', array(
+    entity_create('field_config', array(
       'name' => 'field_telephone',
       'entity_type' => 'node',
       'type' => 'telephone',
     ))->save();
-    entity_create('field_instance', array(
+    entity_create('field_instance_config', array(
       'field_name' => 'field_telephone',
       'label' => 'Telephone Number',
       'entity_type' => 'node',
diff --git a/core/modules/telephone/lib/Drupal/telephone/Tests/TelephoneItemTest.php b/core/modules/telephone/lib/Drupal/telephone/Tests/TelephoneItemTest.php
index 80b004f..fe42bb2 100644
--- a/core/modules/telephone/lib/Drupal/telephone/Tests/TelephoneItemTest.php
+++ b/core/modules/telephone/lib/Drupal/telephone/Tests/TelephoneItemTest.php
@@ -35,12 +35,12 @@ public function setUp() {
     parent::setUp();
 
     // Create a telephone field and instance for validation.
-    entity_create('field_entity', array(
+    entity_create('field_config', array(
       'name' => 'field_test',
       'entity_type' => 'entity_test',
       'type' => 'telephone',
     ))->save();
-    entity_create('field_instance', array(
+    entity_create('field_instance_config', array(
       'entity_type' => 'entity_test',
       'field_name' => 'field_test',
       'bundle' => 'entity_test',
diff --git a/core/modules/text/lib/Drupal/text/Tests/Formatter/TextPlainUnitTest.php b/core/modules/text/lib/Drupal/text/Tests/Formatter/TextPlainUnitTest.php
index 1ef1d3b..462df1a 100644
--- a/core/modules/text/lib/Drupal/text/Tests/Formatter/TextPlainUnitTest.php
+++ b/core/modules/text/lib/Drupal/text/Tests/Formatter/TextPlainUnitTest.php
@@ -67,7 +67,7 @@ function setUp() {
     $this->formatter_type = 'text_plain';
     $this->formatter_settings = array();
 
-    $this->field = entity_create('field_entity', array(
+    $this->field = entity_create('field_config', array(
       'name' => $this->field_name,
       'entity_type' => $this->entity_type,
       'type' => $this->field_type,
@@ -75,7 +75,7 @@ function setUp() {
     ));
     $this->field->save();
 
-    $this->instance = entity_create('field_instance', array(
+    $this->instance = entity_create('field_instance_config', array(
       'entity_type' => $this->entity_type,
       'bundle' => $this->bundle,
       'field_name' => $this->field_name,
diff --git a/core/modules/text/lib/Drupal/text/Tests/TextFieldTest.php b/core/modules/text/lib/Drupal/text/Tests/TextFieldTest.php
index f209a44..7dfe0ff 100644
--- a/core/modules/text/lib/Drupal/text/Tests/TextFieldTest.php
+++ b/core/modules/text/lib/Drupal/text/Tests/TextFieldTest.php
@@ -48,7 +48,7 @@ function setUp() {
   function testTextFieldValidation() {
     // Create a field with settings to validate.
     $max_length = 3;
-    $this->field = entity_create('field_entity', array(
+    $this->field = entity_create('field_config', array(
       'name' => drupal_strtolower($this->randomName()),
       'entity_type' => 'entity_test',
       'type' => 'text',
@@ -57,7 +57,7 @@ function testTextFieldValidation() {
       )
     ));
     $this->field->save();
-    entity_create('field_instance', array(
+    entity_create('field_instance_config', array(
       'field_name' => $this->field->name,
       'entity_type' => 'entity_test',
       'bundle' => 'entity_test',
@@ -91,13 +91,13 @@ function testTextfieldWidgets() {
   function _testTextfieldWidgets($field_type, $widget_type) {
     // Setup a field and instance
     $this->field_name = drupal_strtolower($this->randomName());
-    $this->field = entity_create('field_entity', array(
+    $this->field = entity_create('field_config', array(
       'name' => $this->field_name,
       'entity_type' => 'entity_test',
       'type' => $field_type
     ));
     $this->field->save();
-    entity_create('field_instance', array(
+    entity_create('field_instance_config', array(
       'field_name' => $this->field_name,
       'entity_type' => 'entity_test',
       'bundle' => 'entity_test',
@@ -158,13 +158,13 @@ function testTextfieldWidgetsFormatted() {
   function _testTextfieldWidgetsFormatted($field_type, $widget_type) {
     // Setup a field and instance
     $this->field_name = drupal_strtolower($this->randomName());
-    $this->field = entity_create('field_entity', array(
+    $this->field = entity_create('field_config', array(
       'name' => $this->field_name,
       'entity_type' => 'entity_test',
       'type' => $field_type
     ));
     $this->field->save();
-    entity_create('field_instance', array(
+    entity_create('field_instance_config', array(
       'field_name' => $this->field_name,
       'entity_type' => 'entity_test',
       'bundle' => 'entity_test',
diff --git a/core/modules/text/lib/Drupal/text/Tests/TextWithSummaryItemTest.php b/core/modules/text/lib/Drupal/text/Tests/TextWithSummaryItemTest.php
index 6309c98..fdd9ee0 100644
--- a/core/modules/text/lib/Drupal/text/Tests/TextWithSummaryItemTest.php
+++ b/core/modules/text/lib/Drupal/text/Tests/TextWithSummaryItemTest.php
@@ -34,7 +34,7 @@ class TextWithSummaryItemTest extends FieldUnitTestBase {
   /**
    * Field instance.
    *
-   * @var \Drupal\field\Entity\FieldInstance
+   * @var \Drupal\field\Entity\FieldInstanceConfig
    */
   protected $instance;
 
@@ -175,7 +175,7 @@ function testProcessedCache() {
    */
   protected function createField($entity_type) {
     // Create a field .
-    $this->field = entity_create('field_entity', array(
+    $this->field = entity_create('field_config', array(
       'name' => 'summary_field',
       'entity_type' => $entity_type,
       'type' => 'text_with_summary',
@@ -184,7 +184,7 @@ protected function createField($entity_type) {
       )
     ));
     $this->field->save();
-    $this->instance = entity_create('field_instance', array(
+    $this->instance = entity_create('field_instance_config', array(
       'field_name' => $this->field->name,
       'entity_type' => $entity_type,
       'bundle' => $entity_type,
diff --git a/core/modules/user/lib/Drupal/user/Tests/UserCreateTest.php b/core/modules/user/lib/Drupal/user/Tests/UserCreateTest.php
index 8d13347..cc6d2ad 100644
--- a/core/modules/user/lib/Drupal/user/Tests/UserCreateTest.php
+++ b/core/modules/user/lib/Drupal/user/Tests/UserCreateTest.php
@@ -52,7 +52,7 @@ protected function testUserAdd() {
         'default_image' => FALSE,
       ),
     );
-    entity_create('field_entity', $field)->save();
+    entity_create('field_config', $field)->save();
 
     $instance = array(
       'field_name' => $field_name,
@@ -72,7 +72,7 @@ protected function testUserAdd() {
         'default_image' => 0,
       ),
     );
-    entity_create('field_instance', $instance)->save();
+    entity_create('field_instance_config', $instance)->save();
 
     // Test user creation page for valid fields.
     $this->drupalGet('admin/people/create');
diff --git a/core/modules/user/lib/Drupal/user/Tests/UserRegistrationTest.php b/core/modules/user/lib/Drupal/user/Tests/UserRegistrationTest.php
index 34b348b..2ed4330 100644
--- a/core/modules/user/lib/Drupal/user/Tests/UserRegistrationTest.php
+++ b/core/modules/user/lib/Drupal/user/Tests/UserRegistrationTest.php
@@ -195,14 +195,14 @@ function testRegistrationDefaultValues() {
    */
   function testRegistrationWithUserFields() {
     // Create a field, and an instance on 'user' entity type.
-    $field = entity_create('field_entity', array(
+    $field = entity_create('field_config', array(
       'name' => 'test_user_field',
       'entity_type' => 'user',
       'type' => 'test_field',
       'cardinality' => 1,
     ));
     $field->save();
-    $instance = entity_create('field_instance', array(
+    $instance = entity_create('field_instance_config', array(
       'field_name' => 'test_user_field',
       'entity_type' => 'user',
       'label' => 'Some user field',
diff --git a/core/modules/user/user.install b/core/modules/user/user.install
index 7620ee5..f216e17 100644
--- a/core/modules/user/user.install
+++ b/core/modules/user/user.install
@@ -275,7 +275,7 @@ function user_install_picture_field() {
       'default_image' => FALSE,
     ),
   );
-  entity_create('field_entity', $field)->save();
+  entity_create('field_config', $field)->save();
 
   $instance = array(
     'field_name' => 'user_picture',
@@ -295,7 +295,7 @@ function user_install_picture_field() {
       'default_image' => 0,
     ),
   );
-  entity_create('field_instance', $instance)->save();
+  entity_create('field_instance_config', $instance)->save();
 
   // Assign form display settings for the 'default' view mode.
   entity_get_form_display('user', 'user', 'default')
diff --git a/core/modules/views/lib/Drupal/views/Tests/DefaultViewsTest.php b/core/modules/views/lib/Drupal/views/Tests/DefaultViewsTest.php
index 1e61836..c19fd4a 100644
--- a/core/modules/views/lib/Drupal/views/Tests/DefaultViewsTest.php
+++ b/core/modules/views/lib/Drupal/views/Tests/DefaultViewsTest.php
@@ -61,7 +61,7 @@ protected function setUp() {
 
     // Setup a field and instance.
     $this->field_name = drupal_strtolower($this->randomName());
-    entity_create('field_entity', array(
+    entity_create('field_config', array(
       'name' => $this->field_name,
       'entity_type' => 'node',
       'type' => 'taxonomy_term_reference',
@@ -74,7 +74,7 @@ protected function setUp() {
         ),
       )
     ))->save();
-    entity_create('field_instance', array(
+    entity_create('field_instance_config', array(
       'field_name' => $this->field_name,
       'entity_type' => 'node',
       'bundle' => 'page',
diff --git a/core/modules/views/lib/Drupal/views/Tests/Wizard/TaggedWithTest.php b/core/modules/views/lib/Drupal/views/Tests/Wizard/TaggedWithTest.php
index 497af62..426016d 100644
--- a/core/modules/views/lib/Drupal/views/Tests/Wizard/TaggedWithTest.php
+++ b/core/modules/views/lib/Drupal/views/Tests/Wizard/TaggedWithTest.php
@@ -53,7 +53,7 @@ function setUp() {
     $this->tag_vocabulary->save();
 
     // Create the tag field itself.
-    $this->tag_field = entity_create('field_entity', array(
+    $this->tag_field = entity_create('field_config', array(
       'name' => 'field_views_testing_tags',
       'entity_type' => 'node',
       'type' => 'taxonomy_term_reference',
@@ -76,7 +76,7 @@ function setUp() {
       'entity_type' => 'node',
       'bundle' => $this->node_type_with_tags->type,
     );
-    entity_create('field_instance', $this->tag_instance)->save();
+    entity_create('field_instance_config', $this->tag_instance)->save();
 
     entity_get_form_display('node', $this->node_type_with_tags->type, 'default')
       ->setComponent('field_views_testing_tags', array(
@@ -187,7 +187,7 @@ function testTaggedWithByNodeType() {
     // "tagged with" form element should not appear for it too.
     $instance = $this->tag_instance;
     $instance['bundle'] = $this->node_type_without_tags->type;
-    entity_create('field_instance', $instance)->save();
+    entity_create('field_instance_config', $instance)->save();
     entity_get_form_display('node', $this->node_type_without_tags->type, 'default')
       ->setComponent('field_views_testing_tags', array(
         'type' => 'taxonomy_autocomplete',
diff --git a/core/modules/views/views.module b/core/modules/views/views.module
index 11af316..0aa8fba 100644
--- a/core/modules/views/views.module
+++ b/core/modules/views/views.module
@@ -668,25 +668,25 @@ function views_language_list($field = 'name', $flags = Language::STATE_ALL) {
 }
 
 /**
- * Implements hook_ENTITY_TYPE_create() for 'field_instance'.
+ * Implements hook_ENTITY_TYPE_create() for 'field_instance_config'.
  */
-function views_field_instance_create(FieldInstanceInterface $field_instance) {
+function views_field_instance_config_create(FieldInstanceInterface $field_instance) {
   cache('views_info')->deleteAll();
   cache('views_results')->deleteAll();
 }
 
 /**
- * Implements hook_ENTITY_TYPE_update() for 'field_instance'.
+ * Implements hook_ENTITY_TYPE_update() for 'field_instance_config'.
  */
-function views_field_instance_update(FieldInstanceInterface $field_instance) {
+function views_field_instance_config_update(FieldInstanceInterface $field_instance) {
   cache('views_info')->deleteAll();
   cache('views_results')->deleteAll();
 }
 
 /**
- * Implements hook_ENTITY_TYPE_delete() for 'field_instance'.
+ * Implements hook_ENTITY_TYPE_delete() for 'field_instance_config'.
  */
-function views_field_instance_delete(FieldInstanceInterface $field_instance) {
+function views_field_instance_config_delete(FieldInstanceInterface $field_instance) {
   cache('views_info')->deleteAll();
   cache('views_results')->deleteAll();
 }
diff --git a/core/scripts/generate-d7-content.sh b/core/scripts/generate-d7-content.sh
index 87ec22a..3aa5455 100644
--- a/core/scripts/generate-d7-content.sh
+++ b/core/scripts/generate-d7-content.sh
@@ -93,7 +93,7 @@
       ),
     ),
   );
-  entity_create('field_entity', $field)->save();
+  entity_create('field_config', $field)->save();
   $node_types = $i > 11 ? array('page') : array_keys(node_type_get_types());
   foreach ($node_types as $bundle) {
     $instance = array(
@@ -132,7 +132,7 @@
         'settings' => array(),
       );
     }
-    entity_create('field_instance', $instance)->save();
+    entity_create('field_instance_config', $instance)->save();
   }
   $parents = array();
   // Vocabularies without hierarchy get one term, single parent vocabularies get
