diff --git a/src/Entity/Index.php b/src/Entity/Index.php
index 99f9465..4de5303 100644
--- a/src/Entity/Index.php
+++ b/src/Entity/Index.php
@@ -16,6 +16,7 @@ use Drupal\Core\Field\TypedData\FieldItemDataDefinition;
 use Drupal\Core\TypedData\ComplexDataDefinitionInterface;
 use Drupal\Core\TypedData\DataReferenceDefinitionInterface;
 use Drupal\Core\TypedData\ListDataDefinitionInterface;
+use Drupal\field\Entity\FieldStorageConfig;
 use Drupal\search_api\Property\PropertyInterface;
 use Drupal\search_api\SearchApiException;
 use Drupal\search_api\IndexInterface;
@@ -1408,9 +1409,30 @@ class Index extends ConfigEntityBase implements IndexInterface {
   /**
    * {@inheritdoc}
    */
+  public function removeField($field_id) {
+    // @todo: Consider additional fields.
+    if (isset($this->options['fields'][$field_id])) {
+      unset($this->options['fields'][$field_id]);
+      return TRUE;
+    }
+
+    return FALSE;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
   public function onDependencyRemoval(array $dependencies) {
     $changed = parent::onDependencyRemoval($dependencies);
 
+    /** @var \Drupal\search_api\Plugin\search_api\datasource\ContentEntity $datasource */
+    foreach ($this->getDatasources() as $datasource) {
+      foreach ($datasource->getFieldsForDependencies($dependencies) as $field_id) {
+        $this->getFields()[$field_id]->setIndexed(FALSE, TRUE);
+        $changed = TRUE;
+      }
+    }
+
     // @todo Also react sensibly when removing the dependency of a plugin.
     foreach ($dependencies['config'] as $entity) {
       if ($entity instanceof EntityInterface && $entity->getEntityTypeId() == 'search_api_server') {
diff --git a/src/Plugin/search_api/datasource/ContentEntity.php b/src/Plugin/search_api/datasource/ContentEntity.php
index 40cb904..1e8655d 100644
--- a/src/Plugin/search_api/datasource/ContentEntity.php
+++ b/src/Plugin/search_api/datasource/ContentEntity.php
@@ -625,7 +625,7 @@ class ContentEntity extends DatasourcePluginBase {
       foreach ($this->getEntityManager()->getFieldDefinitions($entity_type_id, $bundle) as $field_name => $field_definition) {
         if ($field_definition instanceof FieldConfigInterface) {
           if (in_array($field_name, $direct_fields) || isset($nested_fields[$field_name])) {
-            $field_dependencies[$field_definition->getConfigDependencyName()] = TRUE;
+            $field_dependencies[$field_definition->getFieldStorageDefinition()->getConfigDependencyName()] = TRUE;
           }
 
           // Recurse for nested fields.
@@ -641,6 +641,29 @@ class ContentEntity extends DatasourcePluginBase {
   }
 
   /**
+   * Returns an array of fields that depend on given dependencies.
+   *
+   * @param array $dependencies
+   *   An array of dependencies.
+   *
+   * @return array
+   *   An array of fields.
+   */
+  public function getFieldsForDependencies(array $dependencies) {
+    $fields = [];
+    /** @var \Drupal\field\Entity\FieldStorageConfig $field_storage */
+    foreach ($dependencies['config'] as $field_storage) {
+      foreach ($this->getIndex()->getFieldsByDatasource($this->pluginId) as $field_id => $definition) {
+        if (strpos($definition->getPropertyPath(), $field_storage->getName()) !== FALSE) {
+          $fields[] = $definition->getFieldIdentifier();
+        }
+      }
+    }
+
+    return $fields;
+  }
+
+  /**
    * Retrieves all indexes that are configured to index the given entity.
    *
    * @param \Drupal\Core\Entity\ContentEntityInterface $entity
