diff --git a/core/includes/entity.api.php b/core/includes/entity.api.php
index 2219d40..b718a4e 100644
--- a/core/includes/entity.api.php
+++ b/core/includes/entity.api.php
@@ -589,7 +589,7 @@ function hook_entity_operation_alter(array &$operations, \Drupal\Core\Entity\Ent
  * @param string $operation
  *   The operation to be performed. See
  *   \Drupal\Core\TypedData\AccessibleInterface::access() for possible values.
- * @param \Drupal\Core\Entity\Field\Field $field
+ * @param \Drupal\Core\Entity\Field\FieldItemList $field
  *   The entity field object on which the operation is to be performed.
  * @param \Drupal\Core\Session\AccountInterface $account
  *   The user account to check.
diff --git a/core/lib/Drupal/Core/Entity/EntityManager.php b/core/lib/Drupal/Core/Entity/EntityManager.php
index 4766a91..e2cf3a0 100644
--- a/core/lib/Drupal/Core/Entity/EntityManager.php
+++ b/core/lib/Drupal/Core/Entity/EntityManager.php
@@ -393,12 +393,12 @@ public function getFieldDefinitions($entity_type, $bundle = NULL) {
         $hooks = array('entity_field_info', $entity_type . '_field_info');
         $this->moduleHandler->alter($hooks, $this->entityFieldInfo[$entity_type], $entity_type);
 
-        // Enforce fields to be multiple by default.
+        // Default to fields being multiple.
         foreach ($this->entityFieldInfo[$entity_type]['definitions'] as &$definition) {
-          $definition['list'] = TRUE;
+          $definition += array('list' => TRUE);
         }
         foreach ($this->entityFieldInfo[$entity_type]['optional'] as &$definition) {
-          $definition['list'] = TRUE;
+          $definition += array('list' => TRUE);
         }
         $this->cache->set($cid, $this->entityFieldInfo[$entity_type], CacheBackendInterface::CACHE_PERMANENT, array('entity_info' => TRUE, 'entity_field_info' => TRUE));
       }
diff --git a/core/lib/Drupal/Core/Entity/Field/FieldInterface.php b/core/lib/Drupal/Core/Entity/Field/FieldInterface.php
index c2dfbdb..6112ce4 100644
--- a/core/lib/Drupal/Core/Entity/Field/FieldInterface.php
+++ b/core/lib/Drupal/Core/Entity/Field/FieldInterface.php
@@ -8,78 +8,18 @@
 namespace Drupal\Core\Entity\Field;
 
 use Drupal\Core\TypedData\AccessibleInterface;
-use Drupal\Core\TypedData\ListInterface;
+use Drupal\Core\TypedData\TypedDataInterface;
 
 /**
- * Interface for fields, being lists of field items.
+ * Interface for entity fields.
  *
- * This interface must be implemented by every entity field, whereas contained
- * field items must implement the FieldItemInterface.
- * Some methods of the fields are delegated to the first contained item, in
- * particular get() and set() as well as their magic equivalences.
+ * This interface must be implemented by every entity field, which may be any
+ * typed data object.
  *
- * Optionally, a typed data object implementing
- * Drupal\Core\TypedData\TypedDataInterface may be passed to
- * ArrayAccess::offsetSet() instead of a plain value.
- *
- * When implementing this interface which extends Traversable, make sure to list
- * IteratorAggregate or Iterator before this interface in the implements clause.
+ * Fields that consist of any number of field items should implement
+ * \Drupal\Core\Entity\Field\FieldItemListInterface.
  */
-interface FieldInterface extends ListInterface, AccessibleInterface {
-
-  /**
-   * Filters out empty field items and re-numbers the item deltas.
-   */
-  public function filterEmptyValues();
-
-  /**
-   * Gets a property object from the first field item.
-   *
-   * @see \Drupal\Core\Entity\Field\FieldItemInterface::get()
-   */
-  public function get($property_name);
-
-  /**
-   * Magic method: Gets a property value of to the first field item.
-   *
-   * @see \Drupal\Core\Entity\Field\FieldItemInterface::__get()
-   */
-  public function __get($property_name);
-
-  /**
-   * Magic method: Sets a property value of the first field item.
-   *
-   * @see \Drupal\Core\Entity\Field\FieldItemInterface::__set()
-   */
-  public function __set($property_name, $value);
-
-  /**
-   * Magic method: Determines whether a property of the first field item is set.
-   *
-   * @see \Drupal\Core\Entity\Field\FieldItemInterface::__isset()
-   */
-  public function __isset($property_name);
-
-  /**
-   * Magic method: Unsets a property of the first field item.
-   *
-   * @see \Drupal\Core\Entity\Field\FieldItemInterface::__unset()
-   */
-  public function __unset($property_name);
-
-  /**
-   * Gets the definition of a property of the first field item.
-   *
-   * @see \Drupal\Core\Entity\Field\FieldItemInterface::getPropertyDefinition()
-   */
-  public function getPropertyDefinition($name);
-
-  /**
-   * Gets an array of property definitions of the first field item.
-   *
-   * @see \Drupal\Core\Entity\Field\FieldItemInterface::getPropertyDefinitions()
-   */
-  public function getPropertyDefinitions();
+interface FieldInterface extends TypedDataInterface, AccessibleInterface {
 
   /**
    * Defines custom presave behavior for field values.
diff --git a/core/lib/Drupal/Core/Entity/Field/Field.php b/core/lib/Drupal/Core/Entity/Field/FieldItemList.php
similarity index 99%
rename from core/lib/Drupal/Core/Entity/Field/Field.php
rename to core/lib/Drupal/Core/Entity/Field/FieldItemList.php
index 3948ddf..f41b01c 100644
--- a/core/lib/Drupal/Core/Entity/Field/Field.php
+++ b/core/lib/Drupal/Core/Entity/Field/FieldItemList.php
@@ -26,7 +26,7 @@
  *
  * @see \Drupal\Core\Entity\Field\FieldInterface
  */
-class Field extends ItemList implements FieldInterface {
+class FieldItemList extends ItemList implements FieldInterface {
 
   /**
    * Numerically indexed array of field items, implementing the
diff --git a/core/lib/Drupal/Core/Entity/Field/FieldItemListInterface.php b/core/lib/Drupal/Core/Entity/Field/FieldItemListInterface.php
new file mode 100644
index 0000000..95c9809
--- /dev/null
+++ b/core/lib/Drupal/Core/Entity/Field/FieldItemListInterface.php
@@ -0,0 +1,83 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Core\Entity\Field\FieldItemListInterface.
+ */
+
+namespace Drupal\Core\Entity\Field;
+
+use Drupal\Core\TypedData\ListInterface;
+
+/**
+ * Interface for fields, being lists of field items.
+ *
+ * Fields implementing this interface consist of any number of field items, each
+ * implementing the FieldItemInterface. Some methods of the fields are delegated
+ * to the first contained item, in particular get() and set() as well as their
+ * magic equivalences.
+ *
+ * Optionally, a typed data object implementing
+ * Drupal\Core\TypedData\TypedDataInterface may be passed to
+ * ArrayAccess::offsetSet() instead of a plain value.
+ *
+ * When implementing this interface which extends Traversable, make sure to list
+ * IteratorAggregate or Iterator before this interface in the implements clause.
+ */
+interface FieldItemListInterface extends ListInterface, FieldInterface {
+
+  /**
+   * Filters out empty field items and re-numbers the item deltas.
+   */
+  public function filterEmptyValues();
+
+  /**
+   * Gets a property object from the first field item.
+   *
+   * @see \Drupal\Core\Entity\Field\FieldItemInterface::get()
+   */
+  public function get($property_name);
+
+  /**
+   * Magic method: Gets a property value of to the first field item.
+   *
+   * @see \Drupal\Core\Entity\Field\FieldItemInterface::__get()
+   */
+  public function __get($property_name);
+
+  /**
+   * Magic method: Sets a property value of the first field item.
+   *
+   * @see \Drupal\Core\Entity\Field\FieldItemInterface::__set()
+   */
+  public function __set($property_name, $value);
+
+  /**
+   * Magic method: Determines whether a property of the first field item is set.
+   *
+   * @see \Drupal\Core\Entity\Field\FieldItemInterface::__isset()
+   */
+  public function __isset($property_name);
+
+  /**
+   * Magic method: Unsets a property of the first field item.
+   *
+   * @see \Drupal\Core\Entity\Field\FieldItemInterface::__unset()
+   */
+  public function __unset($property_name);
+
+  /**
+   * Gets the definition of a property of the first field item.
+   *
+   * @see \Drupal\Core\Entity\Field\FieldItemInterface::getPropertyDefinition()
+   */
+  public function getPropertyDefinition($name);
+
+  /**
+   * Gets an array of property definitions of the first field item.
+   *
+   * @see \Drupal\Core\Entity\Field\FieldItemInterface::getPropertyDefinitions()
+   */
+  public function getPropertyDefinitions();
+
+}
diff --git a/core/lib/Drupal/Core/Entity/Plugin/DataType/BooleanItem.php b/core/lib/Drupal/Core/Entity/Plugin/DataType/BooleanItem.php
index 367cc74..31e3ec8 100644
--- a/core/lib/Drupal/Core/Entity/Plugin/DataType/BooleanItem.php
+++ b/core/lib/Drupal/Core/Entity/Plugin/DataType/BooleanItem.php
@@ -18,7 +18,7 @@
  *   id = "boolean_field",
  *   label = @Translation("Boolean field item"),
  *   description = @Translation("An entity field containing a boolean value."),
- *   list_class = "\Drupal\Core\Entity\Field\Field"
+ *   list_class = "\Drupal\Core\Entity\Field\FieldItemList"
  * )
  */
 class BooleanItem extends FieldItemBase {
diff --git a/core/lib/Drupal/Core/Entity/Plugin/DataType/DateItem.php b/core/lib/Drupal/Core/Entity/Plugin/DataType/DateItem.php
index 3fd9aa6..e6f462f 100644
--- a/core/lib/Drupal/Core/Entity/Plugin/DataType/DateItem.php
+++ b/core/lib/Drupal/Core/Entity/Plugin/DataType/DateItem.php
@@ -18,7 +18,7 @@
  *   id = "date_field",
  *   label = @Translation("Date field item"),
  *   description = @Translation("An entity field containing a date value."),
- *   list_class = "\Drupal\Core\Entity\Field\Field"
+ *   list_class = "\Drupal\Core\Entity\Field\FieldItemList"
  * )
  */
 class DateItem extends FieldItemBase {
diff --git a/core/lib/Drupal/Core/Entity/Plugin/DataType/EmailItem.php b/core/lib/Drupal/Core/Entity/Plugin/DataType/EmailItem.php
index b147976..b09a9fd 100644
--- a/core/lib/Drupal/Core/Entity/Plugin/DataType/EmailItem.php
+++ b/core/lib/Drupal/Core/Entity/Plugin/DataType/EmailItem.php
@@ -19,7 +19,7 @@
  *   id = "email_field",
  *   label = @Translation("E-mail field item"),
  *   description = @Translation("An entity field containing an e-mail value."),
- *   list_class = "\Drupal\Core\Entity\Field\Field"
+ *   list_class = "\Drupal\Core\Entity\Field\FieldItemList"
  * )
  */
 class EmailItem extends LegacyConfigFieldItem {
diff --git a/core/lib/Drupal/Core/Entity/Plugin/DataType/EntityReferenceItem.php b/core/lib/Drupal/Core/Entity/Plugin/DataType/EntityReferenceItem.php
index 7f756ad..5c9e49b 100644
--- a/core/lib/Drupal/Core/Entity/Plugin/DataType/EntityReferenceItem.php
+++ b/core/lib/Drupal/Core/Entity/Plugin/DataType/EntityReferenceItem.php
@@ -22,7 +22,7 @@
  *   id = "entity_reference_field",
  *   label = @Translation("Entity reference field item"),
  *   description = @Translation("An entity field containing an entity reference."),
- *   list_class = "\Drupal\Core\Entity\Field\Field"
+ *   list_class = "\Drupal\Core\Entity\Field\FieldItemList"
  * )
  */
 class EntityReferenceItem extends FieldItemBase {
diff --git a/core/lib/Drupal/Core/Entity/Plugin/DataType/FieldItem.php b/core/lib/Drupal/Core/Entity/Plugin/DataType/FieldItem.php
index 73309d9..54f8714 100644
--- a/core/lib/Drupal/Core/Entity/Plugin/DataType/FieldItem.php
+++ b/core/lib/Drupal/Core/Entity/Plugin/DataType/FieldItem.php
@@ -17,7 +17,7 @@
  * @DataType(
  *   id = "field_item",
  *   label = @Translation("Field item"),
- *   list_class = "\Drupal\Core\Entity\Field\Field",
+ *   list_class = "\Drupal\Core\Entity\Field\FieldItemList",
  *   derivative = "Drupal\Core\Entity\Plugin\DataType\FieldDataTypeDerivative"
  * )
  */
diff --git a/core/lib/Drupal/Core/Entity/Plugin/DataType/IntegerItem.php b/core/lib/Drupal/Core/Entity/Plugin/DataType/IntegerItem.php
index 4eb4db3..6bd8cf8 100644
--- a/core/lib/Drupal/Core/Entity/Plugin/DataType/IntegerItem.php
+++ b/core/lib/Drupal/Core/Entity/Plugin/DataType/IntegerItem.php
@@ -18,7 +18,7 @@
  *   id = "integer_field",
  *   label = @Translation("Integer field item"),
  *   description = @Translation("An entity field containing an integer value."),
- *   list_class = "\Drupal\Core\Entity\Field\Field"
+ *   list_class = "\Drupal\Core\Entity\Field\FieldItemList"
  * )
  */
 class IntegerItem extends FieldItemBase {
diff --git a/core/lib/Drupal/Core/Entity/Plugin/DataType/LanguageItem.php b/core/lib/Drupal/Core/Entity/Plugin/DataType/LanguageItem.php
index 5338556..3fd370f 100644
--- a/core/lib/Drupal/Core/Entity/Plugin/DataType/LanguageItem.php
+++ b/core/lib/Drupal/Core/Entity/Plugin/DataType/LanguageItem.php
@@ -19,7 +19,7 @@
  *   id = "language_field",
  *   label = @Translation("Language field item"),
  *   description = @Translation("An entity field referencing a language."),
- *   list_class = "\Drupal\Core\Entity\Field\Field",
+ *   list_class = "\Drupal\Core\Entity\Field\FieldItemList",
  *   constraints = {
  *     "ComplexData" = {
  *       "value" = {"Length" = {"max" = 12}}
diff --git a/core/lib/Drupal/Core/Entity/Plugin/DataType/StringItem.php b/core/lib/Drupal/Core/Entity/Plugin/DataType/StringItem.php
index 1f22d49..a243567 100644
--- a/core/lib/Drupal/Core/Entity/Plugin/DataType/StringItem.php
+++ b/core/lib/Drupal/Core/Entity/Plugin/DataType/StringItem.php
@@ -18,7 +18,7 @@
  *   id = "string_field",
  *   label = @Translation("String field item"),
  *   description = @Translation("An entity field containing a string value."),
- *   list_class = "\Drupal\Core\Entity\Field\Field"
+ *   list_class = "\Drupal\Core\Entity\Field\FieldItemList"
  * )
  */
 class StringItem extends FieldItemBase {
diff --git a/core/lib/Drupal/Core/Entity/Plugin/DataType/UriItem.php b/core/lib/Drupal/Core/Entity/Plugin/DataType/UriItem.php
index 263ec22..d9cd766 100644
--- a/core/lib/Drupal/Core/Entity/Plugin/DataType/UriItem.php
+++ b/core/lib/Drupal/Core/Entity/Plugin/DataType/UriItem.php
@@ -18,7 +18,7 @@
  *   id = "uri_field",
  *   label = @Translation("URI field item"),
  *   description = @Translation("An entity field containing a URI."),
- *   list_class = "\Drupal\Core\Entity\Field\Field"
+ *   list_class = "\Drupal\Core\Entity\Field\FieldItemList"
  * )
  */
 class UriItem extends FieldItemBase {
diff --git a/core/lib/Drupal/Core/Entity/Plugin/DataType/UuidItem.php b/core/lib/Drupal/Core/Entity/Plugin/DataType/UuidItem.php
index 737409d..011673c 100644
--- a/core/lib/Drupal/Core/Entity/Plugin/DataType/UuidItem.php
+++ b/core/lib/Drupal/Core/Entity/Plugin/DataType/UuidItem.php
@@ -20,7 +20,7 @@
  *   id = "uuid_field",
  *   label = @Translation("UUID field item"),
  *   description = @Translation("An entity field containing a UUID."),
- *   list_class = "\Drupal\Core\Entity\Field\Field",
+ *   list_class = "\Drupal\Core\Entity\Field\FieldItemList",
  *   constraints = {
  *     "ComplexData" = {
  *       "value" = {"Length" = {"max" = 128}}
diff --git a/core/lib/Drupal/Core/TypedData/AccessibleInterface.php b/core/lib/Drupal/Core/TypedData/AccessibleInterface.php
index 2676006..dac4ae0 100644
--- a/core/lib/Drupal/Core/TypedData/AccessibleInterface.php
+++ b/core/lib/Drupal/Core/TypedData/AccessibleInterface.php
@@ -24,15 +24,13 @@
    *   - update
    *   - delete
    *   Defaults to 'view'.
-   * @param Drupal\Core\Session\AccountInterface $account
+   * @param \Drupal\Core\Session\AccountInterface $account
    *   (optional) The user for which to check access, or NULL to check access
    *   for the current user. Defaults to NULL.
    *
    * @return bool
    *   TRUE if the given user has access for the given operation, FALSE
    *   otherwise.
-   *
-   * @todo Don't depend on module level code.
    */
   public function access($operation = 'view', AccountInterface $account = NULL);
 
diff --git a/core/modules/field/lib/Drupal/field/Plugin/Type/FieldType/ConfigField.php b/core/modules/field/lib/Drupal/field/Plugin/Type/FieldType/ConfigField.php
index dfc4fba..186baf4 100644
--- a/core/modules/field/lib/Drupal/field/Plugin/Type/FieldType/ConfigField.php
+++ b/core/modules/field/lib/Drupal/field/Plugin/Type/FieldType/ConfigField.php
@@ -8,13 +8,13 @@
 namespace Drupal\field\Plugin\Type\FieldType;
 
 use Drupal\Core\TypedData\TypedDataInterface;
-use Drupal\Core\Entity\Field\Field;
+use Drupal\Core\Entity\Field\FieldItemList;
 use Drupal\field\Field as FieldAPI;
 
 /**
  * Represents a configurable entity field.
  */
-class ConfigField extends Field implements ConfigFieldInterface {
+class ConfigField extends FieldItemList implements ConfigFieldInterface {
 
   /**
    * The Field instance definition.
diff --git a/core/modules/path/lib/Drupal/path/Plugin/DataType/PathItem.php b/core/modules/path/lib/Drupal/path/Plugin/DataType/PathItem.php
index e72e3a7..11059b5 100644
--- a/core/modules/path/lib/Drupal/path/Plugin/DataType/PathItem.php
+++ b/core/modules/path/lib/Drupal/path/Plugin/DataType/PathItem.php
@@ -18,7 +18,7 @@
  *   id = "path_field",
  *   label = @Translation("Path field item"),
  *   description = @Translation("An entity field containing a path alias and related data."),
- *   list_class = "\Drupal\Core\Entity\Field\Field"
+ *   list_class = "\Drupal\Core\Entity\Field\FieldItemList"
  * )
  */
 class PathItem extends FieldItemBase {
