diff --git a/search_api.module b/search_api.module
index 800c565..3874b82 100644
--- a/search_api.module
+++ b/search_api.module
@@ -8,6 +8,7 @@
 use Drupal\Core\Config\ConfigImporter;
 use Drupal\Core\Entity\ContentEntityInterface;
 use Drupal\Core\Entity\EntityInterface;
+use Drupal\search_api\Entity\Index;
 use Drupal\search_api\SearchApiException;
 use Drupal\search_api\Plugin\search_api\datasource\ContentEntity;
 use Drupal\search_api\Utility;
@@ -39,8 +40,9 @@ function search_api_cron() {
   $conditions = array(
     'status' => TRUE,
   );
+  $index_storage = \Drupal::entityManager()->getStorage('search_api_index');
   /** @var \Drupal\search_api\IndexInterface[] $indexes */
-  $indexes = entity_load_multiple_by_properties('search_api_index', $conditions);
+  $indexes = $index_storage->loadByProperties($conditions);
   if (!$indexes) {
     return;
   }
diff --git a/search_api_db/search_api_db_defaults/src/Tests/IntegrationTest.php b/search_api_db/search_api_db_defaults/src/Tests/IntegrationTest.php
index 55a0ceb..a4809dd 100644
--- a/search_api_db/search_api_db_defaults/src/Tests/IntegrationTest.php
+++ b/search_api_db/search_api_db_defaults/src/Tests/IntegrationTest.php
@@ -108,10 +108,12 @@ class IntegrationTest extends WebTestBase {
 
     // Add tags field to Article.
     // Create a tags vocabulary for the 'article' content type.
-    $vocabulary = entity_create('taxonomy_vocabulary',  array(
-      'name' => 'Tags',
-      'vid' => 'tags',
-    ));
+    $vocabulary = \Drupal::entityManager()
+      ->getStorage('taxonomy_vocabulary')
+      ->create(array(
+        'name' => 'Tags',
+        'vid' => 'tags',
+      ));
     $vocabulary->save();
     $field_name = 'field_' . $vocabulary->id();
 
@@ -123,20 +125,20 @@ class IntegrationTest extends WebTestBase {
     );
     $this->createEntityReferenceField('node', 'article', $field_name, 'Tags', 'taxonomy_term', 'default', $handler_settings, FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED);
 
-    entity_get_form_display('node', 'article', 'default')
+   $this->getEntityDisplay('form', 'node', 'article', 'default')
       ->setComponent($field_name, array(
         'type' => 'entity_reference_autocomplete_tags',
         'weight' => -4,
       ))
       ->save();
 
-    entity_get_display('node', 'article', 'default')
+   $this->getEntityDisplay('view', 'node', 'article', 'default')
       ->setComponent($field_name, array(
         'type' => 'entity_reference_label',
         'weight' => 10,
       ))
       ->save();
-    entity_get_display('node', 'article', 'teaser')
+   $this->getEntityDisplay('view', 'node', 'article', 'teaser')
       ->setComponent($field_name, array(
         'type' => 'entity_reference_label',
         'weight' => 10,
@@ -207,36 +209,73 @@ class IntegrationTest extends WebTestBase {
    *   The newly created field configuration.
    */
   protected function createImageField($name, $type_name, $storage_settings = array(), $field_settings = array(), $widget_settings = array()) {
-    entity_create('field_storage_config', array(
-      'field_name' => $name,
-      'entity_type' => 'node',
-      'type' => 'image',
-      'settings' => $storage_settings,
-      'cardinality' => !empty($storage_settings['cardinality']) ? $storage_settings['cardinality'] : 1,
-    ))->save();
-
-    $field_config = entity_create('field_config', array(
-      'field_name' => $name,
-      'label' => $name,
-      'entity_type' => 'node',
-      'bundle' => $type_name,
-      'required' => !empty($field_settings['required']),
-      'settings' => $field_settings,
-    ));
+    \Drupal::entityManager()
+      ->getStorage('field_storage_config')
+      ->create(array(
+        'field_name' => $name,
+        'entity_type' => 'node',
+        'type' => 'image',
+        'settings' => $storage_settings,
+        'cardinality' => !empty($storage_settings['cardinality']) ? $storage_settings['cardinality'] : 1,
+      ))->save();
+
+    $field_config = \Drupal::entityManager()
+      ->getStorage('field_config')
+      ->create(array(
+        'field_name' => $name,
+        'label' => $name,
+        'entity_type' => 'node',
+        'bundle' => $type_name,
+        'required' => !empty($field_settings['required']),
+        'settings' => $field_settings,
+      ));
     $field_config->save();
 
-    entity_get_form_display('node', $type_name, 'default')
+   $this->getEntityDisplay('form', 'node', $type_name, 'default')
       ->setComponent($name, array(
         'type' => 'image_image',
         'settings' => $widget_settings,
       ))
       ->save();
 
-    entity_get_display('node', $type_name, 'default')
+   $this->getEntityDisplay('view', 'node', $type_name, 'default')
       ->setComponent($name)
       ->save();
 
     return $field_config;
   }
 
+  /**
+   * Retrieves an entity's view or form display.
+   *
+   * @param string $type
+   *   The type of display, either "view" or "form".
+   * @param string $entity_type
+   *   The entity type.
+   * @param string $bundle
+   *   The bundle.
+   * @param string $mode
+   *   The view or form mode.
+   *
+   * @return \Drupal\Core\Entity\Display\EntityDisplayInterface
+   *   The requested display.
+   */
+  protected function getEntityDisplay($type, $entity_type, $bundle, $mode) {
+    // Try loading the entity from configuration.
+    $display_storage = \Drupal::entityManager()->getStorage("entity_{$type}_display");
+    $display = $display_storage->load($entity_type . '.' . $bundle . '.' . $mode);
+
+    // If not found, create a fresh configuration object.
+    if (!$display) {
+      $display = $display_storage->create(array(
+        'targetEntityType' => $entity_type,
+        'bundle' => $bundle,
+        'mode' => $mode,
+        'status' => TRUE,
+      ));
+    }
+
+    return $display;
+  }
+
 }
diff --git a/search_api_db/src/Tests/BackendTest.php b/search_api_db/src/Tests/BackendTest.php
index d8001e3..51ad96a 100644
--- a/search_api_db/src/Tests/BackendTest.php
+++ b/search_api_db/src/Tests/BackendTest.php
@@ -761,11 +761,13 @@ class BackendTest extends EntityUnitTestBase {
     \Drupal::entityManager()->getStorage('search_api_server')->resetCache(array($this->serverId));
     \Drupal::entityManager()->getStorage('search_api_index')->resetCache(array($this->serverId));
 
-    entity_create('entity_test', array(
-      'id' => 6,
-      'prices' => array('3.5', '3.25', '3.75', '3.5'),
-      'type' => 'item',
-    ))->save();
+    \Drupal::entityManager()
+      ->getStorage('entity_test')
+      ->create(array(
+        'id' => 6,
+        'prices' => array('3.5', '3.25', '3.75', '3.5'),
+        'type' => 'item',
+      ))->save();
 
     $this->indexItems($this->indexId);
 
@@ -784,10 +786,12 @@ class BackendTest extends EntityUnitTestBase {
     $this->assertWarnings($results);
 
     // Regression test for #2284199.
-    entity_create('entity_test', array(
-      'id' => 7,
-      'type' => 'item',
-    ))->save();
+    \Drupal::entityManager()
+      ->getStorage('entity_test')
+      ->create(array(
+        'id' => 7,
+        'type' => 'item',
+      ))->save();
 
     $count = $this->indexItems($this->indexId);
     $this->assertEqual($count, 1, 'Indexing an item with an empty value for a non string field worked.');
@@ -797,12 +801,14 @@ class BackendTest extends EntityUnitTestBase {
     $index->save();
     $this->indexItems($this->indexId);
 
-    entity_create('entity_test', array(
-      'id' => 8,
-      'name' => 'Article with long body',
-      'type' => 'article',
-      'body' => 'astringlongerthanfiftycharactersthatcantbestoredbythedbbackend',
-    ))->save();
+    \Drupal::entityManager()
+      ->getStorage('entity_test')
+      ->create(array(
+        'id' => 8,
+        'name' => 'Article with long body',
+        'type' => 'article',
+        'body' => 'astringlongerthanfiftycharactersthatcantbestoredbythedbbackend',
+      ))->save();
     $count = $this->indexItems($this->indexId);
     $this->assertEqual($count, 1, 'Indexing an item with a word longer than 50 characters worked.');
 
diff --git a/src/Plugin/search_api/datasource/ContentEntity.php b/src/Plugin/search_api/datasource/ContentEntity.php
index 0347e03..8e63be2 100644
--- a/src/Plugin/search_api/datasource/ContentEntity.php
+++ b/src/Plugin/search_api/datasource/ContentEntity.php
@@ -524,7 +524,7 @@ class ContentEntity extends DatasourcePluginBase {
     // translation).
     $item_ids = array();
     /** @var \Drupal\Core\Entity\ContentEntityInterface $entity */
-    foreach (entity_load_multiple($this->getEntityTypeId(), $entity_ids) as $entity_id => $entity) {
+    foreach ($this->getEntityStorage()->loadMultiple($entity_ids) as $entity_id => $entity) {
       foreach (array_keys($entity->getTranslationLanguages()) as $langcode) {
         $item_ids[] = "$entity_id:$langcode";
       }
diff --git a/src/Tests/ExampleContentTrait.php b/src/Tests/ExampleContentTrait.php
index d5d4bf7..67f377f 100644
--- a/src/Tests/ExampleContentTrait.php
+++ b/src/Tests/ExampleContentTrait.php
@@ -36,7 +36,8 @@ trait ExampleContentTrait {
   protected function insertExampleContent() {
     $count = \Drupal::entityQuery('entity_test')->count()->execute();
 
-    $this->entities[1] = entity_create('entity_test', array(
+    $entity_test_storage = \Drupal::entityManager()->getStorage('entity_test');
+    $this->entities[1] = $entity_test_storage->create(array(
         'id' => 1,
         'name' => 'foo bar baz',
         'body' => 'test test',
@@ -45,7 +46,7 @@ trait ExampleContentTrait {
         'category' => 'item_category'
       ));
     $this->entities[1]->save();
-    $this->entities[2] = entity_create('entity_test', array(
+    $this->entities[2] = $entity_test_storage->create(array(
         'id' => 2,
         'name' => 'foo test',
         'body' => 'bar test',
@@ -54,14 +55,14 @@ trait ExampleContentTrait {
         'category' => 'item_category'
       ));
     $this->entities[2]->save();
-    $this->entities[3] = entity_create('entity_test', array(
+    $this->entities[3] = $entity_test_storage->create(array(
         'id' => 3,
         'name' => 'bar',
         'body' => 'test foobar',
         'type' => 'item',
       ));
     $this->entities[3]->save();
-    $this->entities[4] = entity_create('entity_test', array(
+    $this->entities[4] = $entity_test_storage->create(array(
         'id' => 4,
         'name' => 'foo baz',
         'body' => 'test test test',
@@ -70,7 +71,7 @@ trait ExampleContentTrait {
         'category' => 'article_category'
       ));
     $this->entities[4]->save();
-    $this->entities[5] = entity_create('entity_test', array(
+    $this->entities[5] = $entity_test_storage->create(array(
         'id' => 5,
         'name' => 'bar baz',
         'body' => 'foo',
diff --git a/src/Tests/IntegrationTest.php b/src/Tests/IntegrationTest.php
index c6f177e..7d42218 100644
--- a/src/Tests/IntegrationTest.php
+++ b/src/Tests/IntegrationTest.php
@@ -34,6 +34,21 @@ class IntegrationTest extends WebTestBase {
   protected $indexId;
 
   /**
+   * A storage instance for indexes.
+   *
+   * @var \Drupal\Core\Entity\EntityStorageInterface
+   */
+  protected $indexStorage;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setUp() {
+    parent::setUp();
+    $this->indexStorage = \Drupal::entityManager()->getStorage('search_api_index');
+  }
+
+  /**
    * Tests various operations via the Search API's admin UI.
    */
   public function testFramework() {
@@ -149,8 +164,9 @@ class IntegrationTest extends WebTestBase {
     $this->assertText($this->t('The index was successfully saved.'));
     $this->assertUrl($this->getIndexPath(), array(), 'Correct redirect to index page.');
 
+    $this->indexStorage->resetCache(array($this->indexId);
     /** @var $index \Drupal\search_api\IndexInterface */
-    $index = entity_load('search_api_index', $this->indexId, TRUE);
+    $index = $this->indexStorage->load($this->indexId);
 
     if ($this->assertTrue($index, 'Index was correctly created.')) {
       $this->assertEqual($index->label(), $edit['name'], 'Name correctly inserted.');
@@ -172,7 +188,8 @@ class IntegrationTest extends WebTestBase {
     $this->drupalPostForm($settings_path, $edit, $this->t('Save and edit'));
 
     $this->assertText($this->t('The index was successfully saved.'));
-    $index = entity_load('search_api_index', $index2_id, TRUE);
+    $this->indexStorage->resetCache(array($index2_id));
+    $index = $this->indexStorage->load($index2_id);
     $this->assertUrl($index->urlInfo('fields'), array(), 'Correct redirect to index fields page.');
   }
 
@@ -334,8 +351,9 @@ class IntegrationTest extends WebTestBase {
     $this->drupalPostForm($this->getIndexPath('fields'), $edit, $this->t('Save changes'));
     $this->assertText($this->t('The changes were successfully saved.'));
 
+    $this->indexStorage->resetCache(array($this->indexId));
     /** @var $index \Drupal\search_api\IndexInterface */
-    $index = entity_load('search_api_index', $this->indexId, TRUE);
+    $index = $this->indexStorage->load($this->indexId);
     $fields = $index->getFields(FALSE);
 
     $this->assertEqual($fields['entity:node/nid']->isIndexed(), $edit['fields[entity:node/nid][indexed]'], 'nid field is indexed.');
@@ -374,8 +392,9 @@ class IntegrationTest extends WebTestBase {
     );
     $this->drupalPostForm($this->getIndexPath('fields'), $edit, $this->t('Save changes'));
 
+    $this->indexStorage->resetCache(array($this->indexId));
     /** @var $index \Drupal\search_api\IndexInterface */
-    $index = entity_load('search_api_index', $this->indexId, TRUE);
+    $index = $this->indexStorage->load($this->indexId);
     $fields = $index->getFields();
     $this->assertTrue(!isset($fields['entity:node/body']), 'The body field has been removed from the index.');
   }
@@ -388,8 +407,9 @@ class IntegrationTest extends WebTestBase {
       'status[ignorecase]' => 1,
     );
     $this->drupalPostForm($this->getIndexPath('processors'), $edit, $this->t('Save'));
+    $this->indexStorage->resetCache(array($this->indexId));
     /** @var \Drupal\search_api\IndexInterface $index */
-    $index = entity_load('search_api_index', $this->indexId, TRUE);
+    $index = $this->indexStorage->load($this->indexId);
     $processors = $index->getProcessors();
     $this->assertTrue(isset($processors['ignorecase']), 'Ignore case processor enabled');
   }
@@ -404,8 +424,9 @@ class IntegrationTest extends WebTestBase {
       'processors[ignorecase][settings][fields][entity:node/title]' => 'entity:node/title',
     );
     $this->drupalPostForm($this->getIndexPath('processors'), $edit, $this->t('Save'));
+    $this->indexStorage->resetCache(array($this->indexId));
     /** @var \Drupal\search_api\IndexInterface $index */
-    $index = entity_load('search_api_index', $this->indexId, TRUE);
+    $index = $this->indexStorage->load($this->indexId);
     $processors = $index->getProcessors();
     if (isset($processors['ignorecase'])) {
       $configuration = $processors['ignorecase']->getConfiguration();
@@ -423,8 +444,9 @@ class IntegrationTest extends WebTestBase {
    * keeps tracking but won't index any items.
    */
   protected function setReadOnly() {
+    $this->indexStorage->resetCache(array($this->indexId));
     /** @var $index \Drupal\search_api\IndexInterface */
-    $index = entity_load('search_api_index', $this->indexId, TRUE);
+    $index = $this->indexStorage->load($this->indexId);
     $index->reindex();
 
     $index_path = $this->getIndexPath();
@@ -441,7 +463,8 @@ class IntegrationTest extends WebTestBase {
     );
     $this->drupalPostForm($settings_path, $edit, $this->t('Save'));
 
-    $index = entity_load('search_api_index', $this->indexId, TRUE);
+    $this->indexStorage->resetCache(array($this->indexId));
+    $index = $this->indexStorage->load($this->indexId);
     $remaining_before = $this->countRemainingItems();
 
     $this->drupalGet($index_path);
@@ -508,8 +531,9 @@ class IntegrationTest extends WebTestBase {
    * handle and add the new ones.
    */
   protected function changeIndexDatasource() {
+    $this->indexStorage->resetCache(array($this->indexId));
     /** @var $index \Drupal\search_api\IndexInterface */
-    $index = entity_load('search_api_index', $this->indexId, TRUE);
+    $index = $this->indexStorage->load($this->indexId);
     $index->reindex();
 
     $user_count = \Drupal::entityQuery('user')->count()->execute();
@@ -543,8 +567,9 @@ class IntegrationTest extends WebTestBase {
    * "unindexed" in the tracker.
    */
   protected function changeIndexServer() {
+    $this->indexStorage->resetCache(array($this->indexId));
     /** @var $index \Drupal\search_api\IndexInterface */
-    $index = entity_load('search_api_index', $this->indexId, TRUE);
+    $index = $this->indexStorage->load($this->indexId);
 
     $node_count = \Drupal::entityQuery('node')->count()->execute();
     $this->assertEqual($node_count, $this->countTrackedItems(), 'All nodes are correctly tracked by the index.');
@@ -589,8 +614,9 @@ class IntegrationTest extends WebTestBase {
     $this->assertUrl('admin/config/search/search-api', array(), 'Correct redirect to search api overview page.');
 
     // Confirm that the index hasn't been deleted.
+    $this->indexStorage->resetCache(array($this->indexId));
     /** @var $index \Drupal\search_api\IndexInterface */
-    $index = entity_load('search_api_index', $this->indexId, TRUE);
+    $index = $this->indexStorage->load($this->indexId);
     if ($this->assertTrue($index, 'The index associated with the server was not deleted.')) {
       $this->assertFalse($index->status(), 'The index associated with the server was disabled.');
       $this->assertNull($index->getServerId(), 'The index was removed from the server.');
diff --git a/src/Tests/Processor/ContentAccessTest.php b/src/Tests/Processor/ContentAccessTest.php
index 75fd3da..70c5451 100644
--- a/src/Tests/Processor/ContentAccessTest.php
+++ b/src/Tests/Processor/ContentAccessTest.php
@@ -113,7 +113,9 @@ class ContentAccessTest extends ProcessorTestBase {
     $this->index->save();
 
     Utility::getIndexTaskManager()->addItemsAll($this->index);
-    $this->index = entity_load('search_api_index', $this->index->id(), TRUE);
+    $index_storage = \Drupal::entityManager()->getStorage('search_api_index');
+    $index_storage->resetCache([$this->index->id()]);
+    $this->index = $index_storage->load($this->index->id());
   }
 
   /**
diff --git a/src/Tests/Processor/ProcessorIntegrationTest.php b/src/Tests/Processor/ProcessorIntegrationTest.php
index 0b4b5a5..65b7b60 100644
--- a/src/Tests/Processor/ProcessorIntegrationTest.php
+++ b/src/Tests/Processor/ProcessorIntegrationTest.php
@@ -268,7 +268,10 @@ class ProcessorIntegrationTest extends WebTestBase {
    *   The search index used by this test.
    */
   protected function loadIndex() {
-    return entity_load('search_api_index', $this->indexId, TRUE);
+    $index_storage = \Drupal::entityManager()->getStorage('search_api_index');
+    $index_storage->resetCache([$this->indexId]);
+
+    return $index_storage->load($this->indexId);
   }
 
 }
