diff --git a/search_api.module b/search_api.module
index e50774d..c7b81b9 100644
--- a/search_api.module
+++ b/search_api.module
@@ -7,6 +7,7 @@
 
 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;
@@ -40,7 +41,7 @@ function search_api_cron() {
     'read_only' => FALSE,
   );
   /** @var \Drupal\search_api\IndexInterface[] $indexes */
-  $indexes = entity_load_multiple_by_properties('search_api_index', $conditions);
+  $indexes = Index::loadByProperties($conditions);
   if (!$indexes) {
     return;
   }
diff --git a/src/Plugin/search_api/datasource/ContentEntity.php b/src/Plugin/search_api/datasource/ContentEntity.php
index caf97c3..2c01e37 100644
--- a/src/Plugin/search_api/datasource/ContentEntity.php
+++ b/src/Plugin/search_api/datasource/ContentEntity.php
@@ -459,8 +459,9 @@ class ContentEntity extends DatasourcePluginBase {
     // For all the loaded entities, compute all their item IDs (one for each
     // translation).
     $item_ids = array();
+    $controller = $this->getEntityManager()->getStorage($this->getEntityTypeId());
     /** @var \Drupal\Core\Entity\ContentEntityInterface $entity */
-    foreach (entity_load_multiple($this->getEntityTypeId(), $entity_ids) as $entity_id => $entity) {
+    foreach ($controller->loadMultiple($entity_ids) as $entity_id => $entity) {
       foreach (array_keys($entity->getTranslationLanguages()) as $langcode) {
         $item_ids[] = "$entity_id:$langcode";
       }
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 $index_storage;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setUp() {
+    parent::setUp();
+    $this->index_storage = \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->index_storage->resetCache([$this->indexId]);
     /** @var $index \Drupal\search_api\IndexInterface */
-    $index = entity_load('search_api_index', $this->indexId, TRUE);
+    $index = $this->index_storage->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->index_storage->resetCache([$index2_id]);
+    $index = $this->index_storage->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->index_storage->resetCache([$this->indexId]);
     /** @var $index \Drupal\search_api\IndexInterface */
-    $index = entity_load('search_api_index', $this->indexId, TRUE);
+    $index = $this->index_storage->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->index_storage->resetCache([$this->indexId]);
     /** @var $index \Drupal\search_api\IndexInterface */
-    $index = entity_load('search_api_index', $this->indexId, TRUE);
+    $index = $this->index_storage->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->index_storage->resetCache([$this->indexId]);
     /** @var \Drupal\search_api\IndexInterface $index */
-    $index = entity_load('search_api_index', $this->indexId, TRUE);
+    $index = $this->index_storage->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->index_storage->resetCache([$this->indexId]);
     /** @var \Drupal\search_api\IndexInterface $index */
-    $index = entity_load('search_api_index', $this->indexId, TRUE);
+    $index = $this->index_storage->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->index_storage->resetCache([$this->indexId]);
     /** @var $index \Drupal\search_api\IndexInterface */
-    $index = entity_load('search_api_index', $this->indexId, TRUE);
+    $index = $this->index_storage->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->index_storage->resetCache([$this->indexId]);
+    $index = $this->index_storage->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->index_storage->resetCache([$this->indexId]);
     /** @var $index \Drupal\search_api\IndexInterface */
-    $index = entity_load('search_api_index', $this->indexId, TRUE);
+    $index = $this->index_storage->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->index_storage->resetCache([$this->indexId]);
     /** @var $index \Drupal\search_api\IndexInterface */
-    $index = entity_load('search_api_index', $this->indexId, TRUE);
+    $index = $this->index_storage->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->index_storage->resetCache([$this->indexId]);
     /** @var $index \Drupal\search_api\IndexInterface */
-    $index = entity_load('search_api_index', $this->indexId, TRUE);
+    $index = $this->index_storage->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 e2fc710..511a259 100644
--- a/src/Tests/Processor/ContentAccessTest.php
+++ b/src/Tests/Processor/ContentAccessTest.php
@@ -112,7 +112,9 @@ class ContentAccessTest extends ProcessorTestBase {
     $this->index->set('datasources', array('entity:comment', 'entity:node', 'entity:user'));
     $this->index->save();
 
-    $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);
   }
 
 }
