diff --git a/core/modules/comment/comment.module b/core/modules/comment/comment.module
index e309ec7..6e06260 100644
--- a/core/modules/comment/comment.module
+++ b/core/modules/comment/comment.module
@@ -344,7 +344,7 @@ function comment_node_type_delete($info) {
  */
 function _comment_body_field_create($info) {
   // Create the field if needed.
-  if (!field_read_field('comment_body', array('include_inactive' => TRUE))) {
+  if (!entity_load_multiple_by_properties('field_entity', array('field_name' => 'comment_body', 'include_inactive' => TRUE))) {
     $field = array(
       'field_name' => 'comment_body',
       'type' => 'text_long',
@@ -353,7 +353,7 @@ function _comment_body_field_create($info) {
     field_create_field($field);
   }
   // Create the instance if needed.
-  if (!field_read_instance('comment', 'comment_body', 'comment_node_' . $info->type, array('include_inactive' => TRUE))) {
+  if (!entity_load_multiple_by_properties('field_instance', array('entity_type' => 'comment', 'field_name' => 'comment_body', 'bundle' => 'comment_node_' . $info->type, 'include_inactive' => TRUE))) {
     entity_invoke_bundle_hook('create', 'comment', 'comment_node_' . $info->type);
     // Attaches the body field by default.
     $instance = array(
diff --git a/core/modules/field/field.attach.inc b/core/modules/field/field.attach.inc
index 76fe855..4e3baeb 100644
--- a/core/modules/field/field.attach.inc
+++ b/core/modules/field/field.attach.inc
@@ -669,15 +669,15 @@ function _field_invoke_multiple_default($op, $entity_type, $entities, &$a = NULL
 function _field_invoke_get_instances($entity_type, $bundle, $options) {
   if ($options['deleted']) {
     // Deleted fields are not included in field_info_instances(), and need to
-    // be fetched from the database with field_read_instances().
-    $params = array('entity_type' => $entity_type, 'bundle' => $bundle);
+    // be fetched from the database with entity_load_multiple_by_properties().
+    $params = array('entity_type' => $entity_type, 'bundle' => $bundle, 'include_deleted' => TRUE);
     if (isset($options['field_id'])) {
-      // Single-field mode by field id: field_read_instances() does the filtering.
-      // Single-field mode by field name is not compatible with the 'deleted'
-      // option.
+      // Single-field mode by field id: entity_load_multiple_by_properties()
+      // does the filtering. Single-field mode by field name is not compatible
+      // with the 'deleted' option.
       $params['field_id'] = $options['field_id'];
     }
-    $instances = field_read_instances($params, array('include_deleted' => TRUE));
+    $instances = entity_load_multiple_by_properties('field_instance', $params);
   }
   elseif (isset($options['field_name'])) {
     // Single-field mode by field name: field_info_instance() does the
@@ -1553,7 +1553,7 @@ function field_entity_bundle_create($entity_type, $bundle) {
  * Implements hook_entity_bundle_rename().
  */
 function field_entity_bundle_rename($entity_type, $bundle_old, $bundle_new) {
-  $instances = field_read_instances();
+  $instances = entity_load_multiple('field_instance');
   foreach ($instances as $instance) {
     if ($instance->entity_type == $entity_type && $instance->bundle == $bundle_old) {
       $id_new = $instance['entity_type'] . '.' . $bundle_new . '.' . $instance['field_name'];
@@ -1584,10 +1584,10 @@ function field_entity_bundle_rename($entity_type, $bundle_old, $bundle_new) {
  * simple DELETE query).
  */
 function field_entity_bundle_delete($entity_type, $bundle) {
-  // Get the instances on the bundle. field_read_instances() must be used
-  // here since field_info_instances() does not return instances for disabled
+  // Get the instances on the bundle. entity_load_multiple_by_properties() must be
+  // used here since field_info_instances() does not return instances for disabled
   // entity types or bundles.
-  $instances = field_read_instances(array('entity_type' => $entity_type, 'bundle' => $bundle), array('include_inactive' => TRUE));
+  $instances = entity_load_multiple_by_properties('field_instance', array('entity_type' => $entity_type, 'bundle' => $bundle, 'include_inactive' => TRUE));
   foreach ($instances as $instance) {
     field_delete_instance($instance);
   }
diff --git a/core/modules/field/field.crud.inc b/core/modules/field/field.crud.inc
index bbd0d45..66e0180 100644
--- a/core/modules/field/field.crud.inc
+++ b/core/modules/field/field.crud.inc
@@ -108,60 +108,6 @@ function field_update_field($field) {
 }
 
 /**
- * Reads a single field record directly from the database.
- *
- * Generally, you should use the field_info_field() instead.
- *
- * This function will not return deleted fields. Use field_read_fields() instead
- * for this purpose.
- *
- * @param $field_name
- *   The field name to read.
- * @param array $include_additional
- *   The default behavior of this function is to not return a field that is
- *   inactive. Setting $include_additional['include_inactive'] to TRUE will
- *   override this behavior.
- *
- * @return
- *   A field definition array, or FALSE.
- */
-function field_read_field($field_name, $include_additional = array()) {
-  $fields = field_read_fields(array('field_name' => $field_name), $include_additional);
-  return $fields ? current($fields) : FALSE;
-}
-
-/**
- * Reads in fields that match an array of conditions.
- *
- * @param array $conditions
- *   An array of conditions to match against. Keys are names of properties found
- *   in field configuration files, and values are conditions to match.
- * @param array $include_additional
- *   The default behavior of this function is to not return fields that are
- *   inactive or have been deleted. Setting
- *   $include_additional['include_inactive'] or
- *   $include_additional['include_deleted'] to TRUE will override this behavior.
- *
- * @return
- *   An array of fields matching $params. If
- *   $include_additional['include_deleted'] is TRUE, the array is keyed by
- *   field ID, otherwise it is keyed by field name.
- */
-function field_read_fields($conditions = array(), $include_additional = array()) {
-  // Include inactive fields if specified in the $include_additional parameter.
-  $include_inactive = isset($include_additional['include_inactive']) && $include_additional['include_inactive'];
-  // Include deleted fields if specified either in the $include_additional or
-  // the $conditions parameters.
-  $include_deleted = (isset($include_additional['include_deleted']) && $include_additional['include_deleted']) || (isset($conditions['deleted']) && $conditions['deleted']);
-
-  // Pass include_inactive and include_deleted to the $conditions array.
-  $conditions['include_inactive'] = $include_inactive;
-  $conditions['include_deleted'] = $include_deleted;
-
-  return entity_load_multiple_by_properties('field_entity', $conditions);
-}
-
-/**
  * Marks a field and its instances and data for deletion.
  *
  * @param $field_name
@@ -259,64 +205,6 @@ function field_update_instance($instance) {
 }
 
 /**
- * Reads a single instance record from the database.
- *
- * Generally, you should use field_info_instance() instead, as it provides
- * caching and allows other modules the opportunity to append additional
- * formatters, widgets, and other information.
- *
- * @param $entity_type
- *   The type of entity to which the field is bound.
- * @param $field_name
- *   The field name to read.
- * @param $bundle
- *   The bundle to which the field is bound.
- * @param array $include_additional
- *   The default behavior of this function is to not return an instance that has
- *   been deleted, or whose field is inactive. Setting
- *   $include_additional['include_inactive'] or
- *   $include_additional['include_deleted'] to TRUE will override this behavior.
- *
- * @return
- *   An instance structure, or FALSE.
- */
-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);
-  return $instances ? current($instances) : FALSE;
-}
-
-/**
- * Reads in field instances that match an array of conditions.
- *
- * @param $param
- *   An array of properties to use in selecting a field instance. Keys are names
- *   of properties found in field instance configuration files, and values are
- *   conditions to match.
- * @param $include_additional
- *   The default behavior of this function is to not return field instances that
- *   have been marked deleted, or whose field is inactive. Setting
- *   $include_additional['include_inactive'] or
- *   $include_additional['include_deleted'] to TRUE will override this behavior.
- *
- * @return
- *   An array of instances matching the arguments.
- */
-function field_read_instances($conditions = array(), $include_additional = array()) {
-  // Include instances of inactive fields if specified in the
-  // $include_additional parameter.
-  $include_inactive = isset($include_additional['include_inactive']) && $include_additional['include_inactive'];
-  // Include deleted instances if specified either in the $include_additional
-  // or the $conditions parameters.
-  $include_deleted = (isset($include_additional['include_deleted']) && $include_additional['include_deleted']) || (isset($conditions['deleted']) && $conditions['deleted']);
-
-  // Pass include_inactive and include_deleted to the $conditions array.
-  $conditions['include_inactive'] = $include_inactive;
-  $conditions['include_deleted'] = $include_deleted;
-
-  return entity_load_multiple_by_properties('field_instance', $conditions);
-}
-
-/**
  * Marks a field instance and its data for deletion.
  *
  * @param \Drupal\field\Plugin\Core\Entity\FieldInstance $instance
@@ -421,7 +309,7 @@ function field_delete_instance(FieldInstance $instance, $field_cleanup = TRUE) {
 function field_purge_batch($batch_size) {
   // Retrieve all deleted field instances. We cannot use field_info_instances()
   // because that function does not return deleted instances.
-  $instances = field_read_instances(array('deleted' => TRUE), array('include_deleted' => TRUE));
+  $instances = entity_load_multiple_by_properties('field_instance', array('deleted' => TRUE, 'include_deleted' => TRUE));
   $factory = Drupal::service('entity.query');
   $info = entity_get_info();
   foreach ($instances as $instance) {
@@ -475,7 +363,7 @@ function field_purge_batch($batch_size) {
   $deleted_fields = Drupal::state()->get('field.field.deleted') ?: array();
   foreach ($deleted_fields as $field) {
     $field = new Field($field);
-    $instances = field_read_instances(array('field_id' => $field['uuid']), array('include_deleted' => 1));
+    $instances = entity_load_multiple_by_properties('field_instance', array('field_id' => $field['uuid'], 'include_deleted' => 1));
     if (empty($instances)) {
       field_purge_field($field);
     }
@@ -548,7 +436,7 @@ function field_purge_instance($instance) {
  *   The field record to purge.
  */
 function field_purge_field($field) {
-  $instances = field_read_instances(array('field_id' => $field['uuid']), array('include_deleted' => 1));
+  $instances = entity_load_multiple_by_properties('field_instance', array('field_id' => $field['uuid'], 'include_deleted' => 1));
   if (count($instances) > 0) {
     throw new FieldException(t('Attempt to purge a field @field_name that still has instances.', array('@field_name' => $field['field_name'])));
   }
diff --git a/core/modules/field/field.info.inc b/core/modules/field/field.info.inc
index f69649d..c31bd5b 100644
--- a/core/modules/field/field.info.inc
+++ b/core/modules/field/field.info.inc
@@ -304,13 +304,13 @@ function field_info_fields() {
  *   The name of the field to retrieve. $field_name can only refer to a
  *   non-deleted, active field. For deleted fields, use
  *   field_info_field_by_id(). To retrieve information about inactive fields,
- *   use field_read_fields().
+ *   use entity_load_multiple_by_properties().
  *
  * @return
- *   The field array, as returned by field_read_fields(), with an
- *   additional element 'bundles', whose value is an array of all the bundles
- *   this field belongs to keyed by entity type. NULL if the field was not
- *   found.
+ *   The field array, as returned by entity_load_multiple_by_properties(), with
+ *   an additional element 'bundles', whose value is an array of all the
+ *   bundles this field belongs to keyed by entity type. NULL if the field was
+ *   not found.
  *
  * @see field_info_field_by_id()
  */
@@ -326,9 +326,9 @@ function field_info_field($field_name) {
  *   but not an inactive one.
  *
  * @return
- *   The field array, as returned by field_read_fields(), with an additional
- *   element 'bundles', whose value is an array of all the bundles this field
- *   belongs to.
+ *   The field array, as returned by entity_load_multiple_by_properties(), with
+ *   an additional element 'bundles', whose value is an array of all the
+ *   bundles this field belongs to.
  *
  * @see field_info_field()
  */
@@ -348,8 +348,9 @@ function field_info_field_by_id($field_id) {
  *
  * @return
  *   An array, each key is a field ID and the values are field arrays as
- *   returned by field_read_fields(), with an additional element 'bundles',
- *   whose value is an array of all the bundle this field belongs to.
+ *   returned by entity_load_multiple_by_properties(), with an additional
+ *   element 'bundles', whose value is an array of all the bundle this field
+ *   belongs to.
  *
  * @see field_info_field()
  * @see field_info_field_by_id()
diff --git a/core/modules/field/field.module b/core/modules/field/field.module
index 798d604..1444699 100644
--- a/core/modules/field/field.module
+++ b/core/modules/field/field.module
@@ -197,9 +197,10 @@ function field_cron() {
  * required if there are any active fields of that type.
  */
 function field_system_info_alter(&$info, $file, $type) {
-  // It is not safe to call field_read_fields() during maintenance mode.
+  // It is not safe to call entity_load_multiple_by_properties() during
+  // maintenance mode.
   if ($type == 'module' && module_hook($file->name, 'field_info') && !defined('MAINTENANCE_MODE')) {
-    $fields = field_read_fields(array('module' => $file->name), array('include_deleted' => TRUE));
+    $fields = entity_load_multiple_by_properties('field_entity', array('module' => $file->name, 'include_deleted' => TRUE));
     if ($fields) {
       $info['required'] = TRUE;
 
@@ -437,6 +438,7 @@ function field_sync_field_status() {
         if (isset($storage_types[$field['storage']['type']]) && ($field['storage']['module'] !== $module || !$field['storage']['active'])) {
           $field['storage']['module'] = $module;
           $field['storage']['active'] = TRUE;
+          $field['active'] = TRUE;
           $changed[$uuid] = $field;
         }
       }
@@ -445,12 +447,13 @@ function field_sync_field_status() {
 
   // Set fields with missing field type or storage modules to inactive.
   foreach ($fields as $uuid => &$field) {
-    if (!isset($modules[$field['module']]) && $field['active']) {
+    if (!isset($modules[$field['module']])) {
       $field['active'] = FALSE;
       $changed[$uuid] = $field;
     }
-    if (!isset($modules[$field['storage']['module']]) && $field['storage']['active']) {
+    if (!isset($modules[$field['storage']['module']])) {
       $field['storage']['active'] = FALSE;
+      $field['active'] = FALSE;
       $changed[$uuid] = $field;
     }
   }
diff --git a/core/modules/field/lib/Drupal/field/FieldInfo.php b/core/modules/field/lib/Drupal/field/FieldInfo.php
index 6d95788..5843763 100644
--- a/core/modules/field/lib/Drupal/field/FieldInfo.php
+++ b/core/modules/field/lib/Drupal/field/FieldInfo.php
@@ -222,7 +222,7 @@ public function getFields() {
     }
     else {
       // Collect and prepare fields.
-      foreach (field_read_fields(array(), array('include_deleted' => TRUE)) as $field) {
+      foreach (entity_load_multiple_by_properties('field_entity', array('include_deleted' => TRUE)) as $field) {
         $this->fieldsById[$field['uuid']] = $this->prepareField($field);
       }
 
@@ -268,7 +268,7 @@ public function getInstances($entity_type = NULL) {
         // be set by subsequent getBundleInstances() calls.
         $this->getFields();
 
-        foreach (field_read_instances() as $instance) {
+        foreach (entity_load_multiple('field_instance') as $instance) {
           $field = $this->getField($instance['field_name']);
           $instance = $this->prepareInstance($instance, $field['type']);
           $this->bundleInstances[$instance['entity_type']][$instance['bundle']][$instance['field_name']] = $instance;
@@ -313,7 +313,7 @@ public function getField($field_name) {
     // Do not check the (large) persistent cache, but read the definition.
 
     // Cache miss: read from definition.
-    if ($field = field_read_field($field_name)) {
+    if ($field = entity_load('field_entity', $field_name)) {
       $field = $this->prepareField($field);
 
       // Save in the "static" cache.
@@ -351,7 +351,7 @@ public function getFieldById($field_id) {
     // bundle.
 
     // Cache miss: read from definition.
-    if ($fields = field_read_fields(array('uuid' => $field_id), array('include_deleted' => TRUE))) {
+    if ($fields = entity_load_multiple_by_properties('field_entity', array('uuid' => $field_id, 'include_deleted' => TRUE))) {
       $field = current($fields);
       $field = $this->prepareField($field);
 
diff --git a/core/modules/field/lib/Drupal/field/FieldInstanceStorageController.php b/core/modules/field/lib/Drupal/field/FieldInstanceStorageController.php
index cb412ef..4ba760d 100644
--- a/core/modules/field/lib/Drupal/field/FieldInstanceStorageController.php
+++ b/core/modules/field/lib/Drupal/field/FieldInstanceStorageController.php
@@ -104,13 +104,20 @@ public function importDelete($name, Config $new_config, Config $old_config) {
    * {@inheritdoc}
    */
   public function loadByProperties(array $conditions = array()) {
+    $include_inactive = $include_deleted = FALSE;
+
     // Include instances of inactive fields if specified in the
     // $conditions parameters.
-    $include_inactive = $conditions['include_inactive'];
-    unset($conditions['include_inactive']);
+    if (isset($conditions['include_inactive'])) {
+      $include_inactive = $conditions['include_inactive'];
+      unset($conditions['include_inactive']);
+    }
+
     // Include deleted instances if specified in the $conditions parameters.
-    $include_deleted = $conditions['include_deleted'];
-    unset($conditions['include_deleted']);
+    if (isset($conditions['include_deleted'])) {
+      $include_deleted = $conditions['include_deleted'];
+      unset($conditions['include_deleted']);
+    }
 
     // Get instances stored in configuration.
     if (isset($conditions['entity_type']) && isset($conditions['bundle']) && isset($conditions['field_name'])) {
diff --git a/core/modules/field/lib/Drupal/field/FieldStorageController.php b/core/modules/field/lib/Drupal/field/FieldStorageController.php
index 4eb2c89..2913d23 100644
--- a/core/modules/field/lib/Drupal/field/FieldStorageController.php
+++ b/core/modules/field/lib/Drupal/field/FieldStorageController.php
@@ -86,13 +86,19 @@ public static function createInstance(ContainerInterface $container, $entity_typ
    * {@inheritdoc}
    */
   public function loadByProperties(array $conditions = array()) {
-    // Include instances of inactive fields if specified in the
-    // $conditions parameters.
-    $include_inactive = $conditions['include_inactive'];
-    unset($conditions['include_inactive']);
-    // Include deleted instances if specified in the $conditions parameters.
-    $include_deleted = $conditions['include_deleted'];
-    unset($conditions['include_deleted']);
+    $include_inactive = $include_deleted = FALSE;
+
+    // Include inactive fields if specified in the $conditions parameters.
+    if (isset($conditions['include_inactive'])) {
+      $include_inactive = $conditions['include_inactive'];
+      unset($conditions['include_inactive']);
+    }
+
+    // Include deleted fields if specified in the $conditions parameters.
+    if (isset($conditions['include_deleted'])) {
+      $include_deleted = $conditions['include_deleted'];
+      unset($conditions['include_deleted']);
+    }
 
     // Get fields stored in configuration.
     if (isset($conditions['field_name'])) {
diff --git a/core/modules/field/lib/Drupal/field/Plugin/Core/Entity/FieldInstance.php b/core/modules/field/lib/Drupal/field/Plugin/Core/Entity/FieldInstance.php
index 8dfc1e0..05fade7 100644
--- a/core/modules/field/lib/Drupal/field/Plugin/Core/Entity/FieldInstance.php
+++ b/core/modules/field/lib/Drupal/field/Plugin/Core/Entity/FieldInstance.php
@@ -238,7 +238,7 @@ public function __construct(array $values, $entity_type = 'field_instance') {
       $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)));
+        $field = current(entity_load_multiple_by_properties('field_entity', array('uuid' => $values['field_uuid'], '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'])));
diff --git a/core/modules/field/lib/Drupal/field/Plugin/views/field/Field.php b/core/modules/field/lib/Drupal/field/Plugin/views/field/Field.php
index 6fb9295..f56e6e7 100644
--- a/core/modules/field/lib/Drupal/field/Plugin/views/field/Field.php
+++ b/core/modules/field/lib/Drupal/field/Plugin/views/field/Field.php
@@ -472,7 +472,7 @@ public function buildOptionsForm(&$form, &$form_state) {
    */
   function fakeFieldInstance($formatter, $formatter_settings) {
     $field_name = $this->definition['field_name'];
-    $field = field_read_field($field_name);
+    $field = entity_load('field_entity', $field_name);
 
     $field_type = field_info_field_types($field['type']);
 
diff --git a/core/modules/field/lib/Drupal/field/Tests/ActiveTest.php b/core/modules/field/lib/Drupal/field/Tests/ActiveTest.php
index c555dc8..ab28b25 100644
--- a/core/modules/field/lib/Drupal/field/Tests/ActiveTest.php
+++ b/core/modules/field/lib/Drupal/field/Tests/ActiveTest.php
@@ -63,27 +63,28 @@ function _testActiveHelper($field_definition, $modules) {
     $field_name = $field_definition['field_name'];
 
     // Read the field.
-    $field = field_read_field($field_name);
+    $field = entity_load('field_entity', $field_name);
     $this->assertTrue($field_definition <= $field, 'The field was properly read.');
 
     module_disable($modules, FALSE);
 
-    $fields = field_read_fields(array('field_name' => $field_name), array('include_inactive' => TRUE));
+    $fields = entity_load_multiple_by_properties('field_entity', array('field_name' => $field_name, 'include_inactive' => TRUE));
     $this->assertTrue(isset($fields[$field_name]) && $field_definition < $field, 'The field is properly read when explicitly fetching inactive fields.');
 
     // Re-enable modules one by one, and check that the field is still inactive
     // while some modules remain disabled.
     while ($modules) {
-      $field = field_read_field($field_name);
-      $this->assertTrue(empty($field), format_string('%modules disabled. The field is marked inactive.', array('%modules' => implode(', ', $modules))));
+      $field = entity_load('field_entity', $field_name);
+      $this->assertTrue(($field->active == 0), format_string('%modules disabled. The field is marked inactive.', array('%modules' => implode(', ', $modules))));
 
       $module = array_shift($modules);
       module_enable(array($module), FALSE);
+      field_cache_clear();
     }
 
     // Check that the field is active again after all modules have been
     // enabled.
-    $field = field_read_field($field_name);
+    $field = entity_load('field_entity', $field_name);
     $this->assertTrue($field_definition <= $field, 'The field was was marked active.');
   }
 }
diff --git a/core/modules/field/lib/Drupal/field/Tests/BulkDeleteTest.php b/core/modules/field/lib/Drupal/field/Tests/BulkDeleteTest.php
index d27bd7d..0b52c35 100644
--- a/core/modules/field/lib/Drupal/field/Tests/BulkDeleteTest.php
+++ b/core/modules/field/lib/Drupal/field/Tests/BulkDeleteTest.php
@@ -165,7 +165,7 @@ function testDeleteFieldInstance() {
     field_delete_instance($instance);
 
     // The instance still exists, deleted.
-    $instances = field_read_instances(array('field_id' => $field['uuid'], 'deleted' => TRUE), array('include_deleted' => TRUE, 'include_inactive' => TRUE));
+    $instances = entity_load_multiple_by_properties('field_instance', array('field_id' => $field['uuid'], 'deleted' => TRUE, 'include_deleted' => TRUE, 'include_inactive' => TRUE));
     $this->assertEqual(count($instances), 1, 'There is one deleted instance');
     $this->assertEqual($instances[0]['bundle'], $bundle, 'The deleted instance is for the correct bundle');
 
@@ -248,18 +248,18 @@ function testPurgeInstance() {
     $this->checkHooksInvocations($hooks, $actual_hooks);
 
     // The instance still exists, deleted.
-    $instances = field_read_instances(array('field_id' => $field['uuid'], 'deleted' => TRUE), array('include_deleted' => TRUE, 'include_inactive' => TRUE));
+    $instances = entity_load_multiple_by_properties('field_instance', array('field_id' => $field['uuid'], 'deleted' => TRUE, 'include_deleted' => TRUE, 'include_inactive' => TRUE));
     $this->assertEqual(count($instances), 1, 'There is one deleted instance');
 
     // Purge the instance.
     field_purge_batch($batch_size);
 
     // The instance is gone.
-    $instances = field_read_instances(array('field_id' => $field['uuid'], 'deleted' => TRUE), array('include_deleted' => TRUE, 'include_inactive' => TRUE));
+    $instances = entity_load_multiple_by_properties('field_instance', array('field_id' => $field['uuid'], 'deleted' => TRUE, 'include_deleted' => TRUE, 'include_inactive' => TRUE));
     $this->assertEqual(count($instances), 0, 'The instance is gone');
 
     // The field still exists, not deleted, because it has a second instance.
-    $fields = field_read_fields(array('uuid' => $field['uuid']), array('include_deleted' => TRUE, 'include_inactive' => TRUE));
+    $fields = entity_load_multiple_by_properties('field_entity', array('uuid' => $field['uuid'], 'include_deleted' => TRUE, 'include_inactive' => TRUE));
     $this->assertTrue(isset($fields[$field['uuid']]), 'The field exists and is not deleted');
   }
 
@@ -301,7 +301,7 @@ function testPurgeField() {
     field_purge_batch(0);
 
     // The field still exists, not deleted.
-    $fields = field_read_fields(array('uuid' => $field['uuid']), array('include_deleted' => TRUE));
+    $fields = entity_load_multiple_by_properties('field_entity', array('uuid' => $field['uuid'], 'include_deleted' => TRUE));
     $this->assertTrue(isset($fields[$field['uuid']]) && !$fields[$field['uuid']]->deleted, 'The field exists and is not deleted');
 
     // Delete the second instance.
@@ -325,14 +325,14 @@ function testPurgeField() {
     $this->checkHooksInvocations($hooks, $actual_hooks);
 
     // The field still exists, deleted.
-    $fields = field_read_fields(array('uuid' => $field['uuid']), array('include_deleted' => TRUE));
+    $fields = entity_load_multiple_by_properties('field_entity', array('uuid' => $field['uuid'], 'include_deleted' => TRUE));
     $this->assertTrue(isset($fields[$field['uuid']]) && $fields[$field['uuid']]->deleted, 'The field exists and is deleted');
 
     // Purge again to purge the instance and the field.
     field_purge_batch(0);
 
     // The field is gone.
-    $fields = field_read_fields(array('uuid' => $field['uuid']), array('include_deleted' => TRUE, 'include_inactive' => TRUE));
+    $fields = entity_load_multiple_by_properties('field_entity', array('uuid' => $field['uuid'], 'include_deleted' => TRUE, 'include_inactive' => TRUE));
     $this->assertEqual(count($fields), 0, 'The field is purged.');
   }
 }
diff --git a/core/modules/field/lib/Drupal/field/Tests/CrudTest.php b/core/modules/field/lib/Drupal/field/Tests/CrudTest.php
index 7960f82..298abc1 100644
--- a/core/modules/field/lib/Drupal/field/Tests/CrudTest.php
+++ b/core/modules/field/lib/Drupal/field/Tests/CrudTest.php
@@ -188,7 +188,7 @@ function testReadField() {
     field_create_field($field_definition);
 
     // Read the field back.
-    $field = field_read_field($field_definition['field_name']);
+    $field = entity_load('field_entity', $field_definition['field_name']);
     $this->assertTrue($field_definition < $field, 'The field was properly read.');
   }
 
@@ -203,13 +203,13 @@ function testReadFields() {
     field_create_field($field_definition);
 
     // Check that 'single column' criteria works.
-    $fields = field_read_fields(array('field_name' => $field_definition['field_name']));
+    $fields = entity_load_multiple_by_properties('field_entity', array('field_name' => $field_definition['field_name']));
     $this->assertTrue(count($fields) == 1 && isset($fields[$field_definition['field_name']]), 'The field was properly read.');
 
     // Check that 'multi column' criteria works.
-    $fields = field_read_fields(array('field_name' => $field_definition['field_name'], 'type' => $field_definition['type']));
+    $fields = entity_load_multiple_by_properties('field_entity', array('field_name' => $field_definition['field_name'], 'type' => $field_definition['type']));
     $this->assertTrue(count($fields) == 1 && isset($fields[$field_definition['field_name']]), 'The field was properly read.');
-    $fields = field_read_fields(array('field_name' => $field_definition['field_name'], 'type' => 'foo'));
+    $fields = entity_load_multiple_by_properties('field_entity', array('field_name' => $field_definition['field_name'], 'type' => 'foo'));
     $this->assertTrue(empty($fields), 'No field was found.');
 
     // Create an instance of the field.
@@ -231,7 +231,7 @@ function testFieldIndexes() {
       'type' => 'test_field',
     );
     field_create_field($field_definition);
-    $field = field_read_field($field_definition['field_name']);
+    $field = entity_load('field_entity', $field_definition['field_name']);
     $schema = $field->getSchema();
     $expected_indexes = array('value' => array('value'));
     $this->assertEqual($schema['indexes'], $expected_indexes, 'Field type indexes saved by default');
@@ -246,7 +246,7 @@ function testFieldIndexes() {
       ),
     );
     field_create_field($field_definition);
-    $field = field_read_field($field_definition['field_name']);
+    $field = entity_load('field_entity', $field_definition['field_name']);
     $schema = $field->getSchema();
     $expected_indexes = array('value' => array());
     $this->assertEqual($schema['indexes'], $expected_indexes, 'Field definition indexes override field type indexes');
@@ -261,7 +261,7 @@ function testFieldIndexes() {
       ),
     );
     field_create_field($field_definition);
-    $field = field_read_field($field_definition['field_name']);
+    $field = entity_load('field_entity', $field_definition['field_name']);
     $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');
@@ -291,41 +291,41 @@ function testDeleteField() {
     field_create_instance($this->another_instance_definition);
 
     // Test that the first field is not deleted, and then delete it.
-    $field = field_read_field($this->field['field_name'], array('include_deleted' => TRUE));
+    $field = entity_load_multiple_by_properties('field_entity', array('field_name' => $this->field['field_name'], 'include_deleted' => TRUE));
     $this->assertTrue(!empty($field) && empty($field['deleted']), 'A new field is not marked for deletion.');
     field_delete_field($this->field['field_name']);
 
     // Make sure that the field is marked as deleted when it is specifically
     // loaded.
-    $field = field_read_field($this->field['field_name'], array('include_deleted' => TRUE));
+    $field = current(entity_load_multiple_by_properties('field_entity', array('field_name' => $this->field['field_name'], 'include_deleted' => TRUE)));
     $this->assertTrue(!empty($field['deleted']), 'A deleted field is marked for deletion.');
 
     // Make sure that this field's instance is marked as deleted when it is
     // specifically loaded.
-    $instance = field_read_instance('test_entity', $this->instance_definition['field_name'], $this->instance_definition['bundle'], array('include_deleted' => TRUE));
+    $instance = current(entity_load_multiple_by_properties('field_instance', array('entity_type' => 'test_entity', 'field_name' => $this->instance_definition['field_name'], 'bundle' => $this->instance_definition['bundle'], 'include_deleted' => TRUE)));
     $this->assertTrue(!empty($instance['deleted']), 'An instance for a deleted field is marked for deletion.');
 
     // Try to load the field normally and make sure it does not show up.
-    $field = field_read_field($this->field['field_name']);
+    $field = entity_load('field_entity', $this->field['field_name']);
     $this->assertTrue(empty($field), 'A deleted field is not loaded by default.');
 
     // Try to load the instance normally and make sure it does not show up.
-    $instance = field_read_instance('test_entity', $this->instance_definition['field_name'], $this->instance_definition['bundle']);
+    $instance = entity_load('field_instance', 'test_entity.' . '.' . $this->instance_definition['bundle'] . '.' . $this->instance_definition['field_name']);
     $this->assertTrue(empty($instance), 'An instance for a deleted field is not loaded by default.');
 
     // Make sure the other field (and its field instance) are not deleted.
-    $another_field = field_read_field($this->another_field['field_name']);
+    $another_field = entity_load('field_entity', $this->another_field['field_name']);
     $this->assertTrue(!empty($another_field) && empty($another_field['deleted']), 'A non-deleted field is not marked for deletion.');
-    $another_instance = field_read_instance('test_entity', $this->another_instance_definition['field_name'], $this->another_instance_definition['bundle']);
+    $another_instance = entity_load('field_instance', 'test_entity.' . $this->another_instance_definition['bundle'] . '.' . $this->another_instance_definition['field_name']);
     $this->assertTrue(!empty($another_instance) && empty($another_instance['deleted']), 'An instance of a non-deleted field is not marked for deletion.');
 
     // Try to create a new field the same name as a deleted field and
     // write data into it.
     field_create_field($this->field);
     field_create_instance($this->instance_definition);
-    $field = field_read_field($this->field['field_name']);
+    $field = entity_load('field_entity', $this->field['field_name']);
     $this->assertTrue(!empty($field) && empty($field['deleted']), 'A new field with a previously used name is created.');
-    $instance = field_read_instance('test_entity', $this->instance_definition['field_name'], $this->instance_definition['bundle']);
+    $instance = entity_load('field_instance', 'test_entity.' . $this->instance_definition['bundle'] . '.' . $this->instance_definition['field_name'] );
     $this->assertTrue(!empty($instance) && empty($instance['deleted']), 'A new instance for a previously used field name is created.');
 
     // Save an entity with data for the field
diff --git a/core/modules/field/lib/Drupal/field/Tests/FieldAttachStorageTest.php b/core/modules/field/lib/Drupal/field/Tests/FieldAttachStorageTest.php
index 7192067..77c39e1 100644
--- a/core/modules/field/lib/Drupal/field/Tests/FieldAttachStorageTest.php
+++ b/core/modules/field/lib/Drupal/field/Tests/FieldAttachStorageTest.php
@@ -524,7 +524,7 @@ function testEntityDeleteBundle() {
     $this->assertFalse(isset($entity->{$field_name}[$langcode]), 'No data for second field');
 
     // Verify that the instances are gone
-    $this->assertFalse(field_read_instance('test_entity', $this->field_name, $this->instance['bundle']), "First field is deleted");
-    $this->assertFalse(field_read_instance('test_entity', $field_name, $instance['bundle']), "Second field is deleted");
+    $this->assertFalse(entity_load('field_instance', 'test_entity.' . '.' . $this->instance['bundle'] . '.' . $this->field_name), "First field is deleted");
+    $this->assertFalse(entity_load('field_instance', 'test_entity' . '.' . $instance['bundle']. '.' . $field_name), "Second field is deleted");
   }
 }
diff --git a/core/modules/field/lib/Drupal/field/Tests/FieldInstanceCrudTest.php b/core/modules/field/lib/Drupal/field/Tests/FieldInstanceCrudTest.php
index 5f9578a..5afb25f 100644
--- a/core/modules/field/lib/Drupal/field/Tests/FieldInstanceCrudTest.php
+++ b/core/modules/field/lib/Drupal/field/Tests/FieldInstanceCrudTest.php
@@ -126,7 +126,7 @@ function testReadFieldInstance() {
     field_create_instance($this->instance_definition);
 
     // Read the instance back.
-    $instance = field_read_instance('test_entity', $this->instance_definition['field_name'], $this->instance_definition['bundle']);
+    $instance = entity_load('field_instance', 'test_entity.' . $this->instance_definition['bundle'] . '.' . $this->instance_definition['field_name']);
     $this->assertTrue($this->instance_definition['field_name'] == $instance['field_name'], 'The field was properly read.');
     $this->assertTrue($this->instance_definition['entity_type'] == $instance['entity_type'], 'The field was properly read.');
     $this->assertTrue($this->instance_definition['bundle'] == $instance['bundle'], 'The field was properly read.');
@@ -139,14 +139,14 @@ function testUpdateFieldInstance() {
     field_create_instance($this->instance_definition);
 
     // Check that basic changes are saved.
-    $instance = field_read_instance('test_entity', $this->instance_definition['field_name'], $this->instance_definition['bundle']);
+    $instance = entity_load('field_instance', 'test_entity.' . $this->instance_definition['bundle'] . '.' . $this->instance_definition['field_name']);
     $instance['required'] = !$instance['required'];
     $instance['label'] = $this->randomName();
     $instance['description'] = $this->randomName();
     $instance['settings']['test_instance_setting'] = $this->randomName();
     field_update_instance($instance);
 
-    $instance_new = field_read_instance('test_entity', $this->instance_definition['field_name'], $this->instance_definition['bundle']);
+    $instance_new = entity_load('field_instance', 'test_entity.' . $this->instance_definition['bundle'] . '.' . $this->instance_definition['field_name']);
     $this->assertEqual($instance['required'], $instance_new['required'], '"required" change is saved');
     $this->assertEqual($instance['label'], $instance_new['label'], '"label" change is saved');
     $this->assertEqual($instance['description'], $instance_new['description'], '"description" change is saved');
@@ -170,28 +170,28 @@ function testDeleteFieldInstance() {
     $instance = field_create_instance($this->another_instance_definition);
 
     // Test that the first instance is not deleted, and then delete it.
-    $instance = field_read_instance('test_entity', $this->instance_definition['field_name'], $this->instance_definition['bundle'], array('include_deleted' => TRUE));
+    $instance = current(entity_load_multiple_by_properties('field_instance', array('entity_type' => 'test_entity', 'field_name' => $this->instance_definition['field_name'], 'bundle' => $this->instance_definition['bundle'], 'include_deleted' => TRUE)));
     $this->assertTrue(!empty($instance) && empty($instance['deleted']), 'A new field instance is not marked for deletion.');
     field_delete_instance($instance);
 
     // Make sure the instance is marked as deleted when the instance is
     // specifically loaded.
-    $instance = field_read_instance('test_entity', $this->instance_definition['field_name'], $this->instance_definition['bundle'], array('include_deleted' => TRUE));
+    $instance = current(entity_load_multiple_by_properties('field_instance', array('entity_type' => 'test_entity', 'field_name' => $this->instance_definition['field_name'], 'bundle' => $this->instance_definition['bundle'], 'include_deleted' => TRUE)));
     $this->assertTrue(!empty($instance['deleted']), 'A deleted field instance is marked for deletion.');
 
     // Try to load the instance normally and make sure it does not show up.
-    $instance = field_read_instance('test_entity', $this->instance_definition['field_name'], $this->instance_definition['bundle']);
+    $instance = entity_load('field_instance', 'test_entity.' . '.' . $this->instance_definition['bundle'] . '.' . $this->instance_definition['field_name']);
     $this->assertTrue(empty($instance), 'A deleted field instance is not loaded by default.');
 
     // Make sure the other field instance is not deleted.
-    $another_instance = field_read_instance('test_entity', $this->another_instance_definition['field_name'], $this->another_instance_definition['bundle']);
+    $another_instance = entity_load('field_instance', 'test_entity.' . $this->another_instance_definition['bundle'] . '.' . $this->another_instance_definition['field_name']);
     $this->assertTrue(!empty($another_instance) && empty($another_instance['deleted']), 'A non-deleted field instance is not marked for deletion.');
 
     // Make sure the field is deleted when its last instance is deleted.
     field_delete_instance($another_instance);
     $deleted_fields = \Drupal::state()->get('field.field.deleted');
     $this->assertTrue(isset($deleted_fields[$another_instance['field_id']]), 'A deleted field is marked for deletion.');
-    $field = field_read_field($another_instance['field_name']);
+    $field = entity_load('field_entity', $another_instance['field_name']);
     $this->assertFalse($field, 'The field marked to be deleted is not found anymore in the configuration.');
   }
 }
diff --git a/core/modules/field/lib/Drupal/field/Tests/TranslationTest.php b/core/modules/field/lib/Drupal/field/Tests/TranslationTest.php
index ae52f2e..27d9dc1 100644
--- a/core/modules/field/lib/Drupal/field/Tests/TranslationTest.php
+++ b/core/modules/field/lib/Drupal/field/Tests/TranslationTest.php
@@ -50,7 +50,7 @@ function setUp() {
       'translatable' => TRUE,
     );
     field_create_field($this->field_definition);
-    $this->field = field_read_field($this->field_name);
+    $this->field = entity_load('field_entity', $this->field_name);
 
     $this->instance_definition = array(
       'field_name' => $this->field_name,
@@ -58,7 +58,7 @@ function setUp() {
       'bundle' => 'test_bundle',
     );
     field_create_instance($this->instance_definition);
-    $this->instance = field_read_instance('test_entity', $this->field_name, 'test_bundle');
+    $this->instance = entity_load('field_instance', 'test_entity.test_bundle.' . $this->field_name);
 
     for ($i = 0; $i < 3; ++$i) {
       $language = new Language(array(
diff --git a/core/modules/field/lib/Drupal/field/Tests/TranslationWebTest.php b/core/modules/field/lib/Drupal/field/Tests/TranslationWebTest.php
index 786f1b4..3266cec 100644
--- a/core/modules/field/lib/Drupal/field/Tests/TranslationWebTest.php
+++ b/core/modules/field/lib/Drupal/field/Tests/TranslationWebTest.php
@@ -43,7 +43,7 @@ function setUp() {
       'translatable' => TRUE,
     );
     field_create_field($field);
-    $this->field = field_read_field($this->field_name);
+    $this->field = entity_load('field_entity', $this->field_name);
 
     $instance = array(
       'field_name' => $this->field_name,
@@ -51,7 +51,7 @@ function setUp() {
       'bundle' => 'test_bundle',
     );
     field_create_instance($instance);
-    $this->instance = field_read_instance('test_entity', $this->field_name, 'test_bundle');
+    $this->instance = entity_load('field_instance', 'test_entity.test_bundle.' .  $this->field_name);
 
     entity_get_form_display($this->entity_type, 'test_bundle', 'default')
       ->setComponent($this->field_name)
diff --git a/core/modules/field/tests/modules/field_test/field_test.storage.inc b/core/modules/field/tests/modules/field_test/field_test.storage.inc
index d3a7f82..3ecece5 100644
--- a/core/modules/field/tests/modules/field_test/field_test.storage.inc
+++ b/core/modules/field/tests/modules/field_test/field_test.storage.inc
@@ -422,7 +422,7 @@ function field_test_entity_bundle_rename($entity_type, $bundle_old, $bundle_new)
   $data = _field_test_storage_data();
 
   // We need to account for deleted or inactive fields and instances.
-  $instances = field_read_instances(array('bundle' => $bundle_new), array('include_deleted' => TRUE, 'include_inactive' => TRUE));
+  $instances = entity_load_multiple_by_properties('field_instance', array('bundle' => $bundle_new, 'include_deleted' => TRUE, 'include_inactive' => TRUE));
   foreach ($instances as $field_name => $instance) {
     $field = field_info_field_by_id($instance['field_id']);
     if ($field && $field['storage']['type'] == 'field_test_storage') {
diff --git a/core/modules/field_sql_storage/field_sql_storage.module b/core/modules/field_sql_storage/field_sql_storage.module
index dcbe476..5626f46 100644
--- a/core/modules/field_sql_storage/field_sql_storage.module
+++ b/core/modules/field_sql_storage/field_sql_storage.module
@@ -600,7 +600,7 @@ function field_sql_storage_field_storage_delete_instance($instance) {
  */
 function field_sql_storage_entity_bundle_rename($entity_type, $bundle_old, $bundle_new) {
   // We need to account for deleted or inactive fields and instances.
-  $instances = field_read_instances(array('entity_type' => $entity_type, 'bundle' => $bundle_new), array('include_deleted' => TRUE, 'include_inactive' => TRUE));
+  $instances = entity_load_multiple_by_properties('field_instance', array('entity_type' => $entity_type, 'bundle' => $bundle_new, 'include_deleted' => TRUE, 'include_inactive' => TRUE));
   foreach ($instances as $instance) {
     $field = field_info_field_by_id($instance['field_id']);
     if ($field['storage']['type'] == 'field_sql_storage') {
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 cc5ab8b..683b72c 100644
--- a/core/modules/field_ui/lib/Drupal/field_ui/FieldOverview.php
+++ b/core/modules/field_ui/lib/Drupal/field_ui/FieldOverview.php
@@ -785,7 +785,7 @@ public function fieldNameExists($value) {
 
     // We need to check inactive fields as well, so we can't use
     // field_info_fields().
-    return (bool) field_read_fields(array('field_name' => $field_name), array('include_inactive' => TRUE));
+    return (bool) entity_load_multiple_by_properties('field_entity', array('field_name' => $field_name, 'include_inactive' => TRUE));
   }
 
 }
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 c0f5471..25eb047 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
@@ -412,7 +412,7 @@ function testHiddenFields() {
     entity_get_form_display('node', $this->type, 'default')
       ->setComponent($field_name)
       ->save();
-    $this->assertTrue(field_read_instance('node', $field_name, $this->type), format_string('An instance of the field %field was created programmatically.', array('%field' => $field_name)));
+    $this->assertTrue(entity_load('field_instance', 'node.' . $this->type . '.' . $field_name), format_string('An instance of the field %field was created programmatically.', array('%field' => $field_name)));
 
     // Check that the newly added instance appears on the 'Manage Fields'
     // screen.
diff --git a/core/modules/forum/forum.install b/core/modules/forum/forum.install
index a6641a2..9b7a365 100644
--- a/core/modules/forum/forum.install
+++ b/core/modules/forum/forum.install
@@ -52,7 +52,7 @@ function forum_enable() {
   // Create the 'taxonomy_forums' field if it doesn't already exist. If forum
   // 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('taxonomy_forums', array('include_inactive' => TRUE))) {
+  if (!entity_load_multiple_by_properties('field_entity', array('field_name' => 'taxonomy_forums', 'include_inactive' => TRUE))) {
     $field = array(
       'field_name' => 'taxonomy_forums',
       'type' => 'taxonomy_term_reference',
diff --git a/core/modules/image/image.module b/core/modules/image/image.module
index e8dc3d4..e42bd88 100644
--- a/core/modules/image/image.module
+++ b/core/modules/image/image.module
@@ -403,7 +403,7 @@ function image_field_update_field($field, $prior_field, $has_data) {
  */
 function image_field_delete_instance($instance) {
   // Only act on image fields.
-  $field = field_read_field($instance['field_name']);
+  $field = entity_load('field_entity', $instance['field_name']);
   if ($field['type'] != 'image') {
     return;
   }
@@ -426,7 +426,7 @@ function image_field_delete_instance($instance) {
  */
 function image_field_update_instance($instance, $prior_instance) {
   // Only act on image fields.
-  $field = field_read_field($instance['field_name']);
+  $field = entity_load('field_entity', $instance['field_name']);
   if ($field['type'] != 'image') {
     return;
   }
diff --git a/core/modules/image/lib/Drupal/image/ImageStyleStorageController.php b/core/modules/image/lib/Drupal/image/ImageStyleStorageController.php
index 97766b5..a1adc17 100644
--- a/core/modules/image/lib/Drupal/image/ImageStyleStorageController.php
+++ b/core/modules/image/lib/Drupal/image/ImageStyleStorageController.php
@@ -73,7 +73,7 @@ protected function postDelete($entities) {
    */
   protected function replaceImageStyle(ImageStyle $style) {
     if ($style->id() != $style->getOriginalID()) {
-      $instances = field_read_instances();
+      $instances = entity_load_multiple('field_instance');
       // Loop through all fields searching for image fields.
       foreach ($instances as $instance) {
         if ($instance->getField()->type == 'image') {
diff --git a/core/modules/node/tests/modules/node_access_test_language/node_access_test_language.module b/core/modules/node/tests/modules/node_access_test_language/node_access_test_language.module
index 3d67454..95ee35e 100644
--- a/core/modules/node/tests/modules/node_access_test_language/node_access_test_language.module
+++ b/core/modules/node/tests/modules/node_access_test_language/node_access_test_language.module
@@ -75,5 +75,5 @@ function node_access_test_language_enable() {
  * Implements hook_disable().
  */
 function node_access_test_language_disable() {
-  field_delete_instance(field_read_instance('node', 'field_private', 'page'));
+  entity_load('field_instance', 'node.page.field_private')->delete();
 }
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 919565c..9c98ee4 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Entity/EntityTranslationTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Entity/EntityTranslationTest.php
@@ -57,7 +57,7 @@ function setUp() {
       'translatable' => TRUE,
     );
     field_create_field($field);
-    $this->field = field_read_field($this->field_name);
+    $this->field = entity_load('field_entity', $this->field_name);
 
     // Create instance in all entity variations.
     foreach (entity_test_entity_types() as $entity_type) {
@@ -67,7 +67,7 @@ function setUp() {
         'bundle' => $entity_type,
       );
       field_create_instance($instance);
-      $this->instance[$entity_type] = field_read_instance($entity_type, $this->field_name, $entity_type);
+      $this->instance[$entity_type] = entity_load('field_instance', $entity_type . '.' . $entity_type . '.' . $this->field_name);
     }
 
     // Create the default languages.
diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/VocabularyStorageController.php b/core/modules/taxonomy/lib/Drupal/taxonomy/VocabularyStorageController.php
index c0e377b..b5e511b 100644
--- a/core/modules/taxonomy/lib/Drupal/taxonomy/VocabularyStorageController.php
+++ b/core/modules/taxonomy/lib/Drupal/taxonomy/VocabularyStorageController.php
@@ -25,7 +25,7 @@ protected function postSave(EntityInterface $entity, $update) {
     elseif ($entity->getOriginalID() != $entity->id()) {
       // Reflect machine name changes in the definitions of existing 'taxonomy'
       // fields.
-      $fields = field_read_fields();
+      $fields = entity_load_multiple('field_entity');
       foreach ($fields as $field_name => $field) {
         $update_field = FALSE;
         if ($field['type'] == 'taxonomy_term_reference') {
@@ -69,7 +69,7 @@ protected function postDelete($entities) {
     }
     // Load all Taxonomy module fields and delete those which use only this
     // vocabulary.
-    $taxonomy_fields = field_read_fields(array('module' => 'taxonomy'));
+    $taxonomy_fields = entity_load_multiple_by_properties('field_entity', array('module' => 'taxonomy'));
     foreach ($taxonomy_fields as $field_name => $taxonomy_field) {
       $modified_field = FALSE;
       // Term reference fields may reference terms from more than one
