diff --git a/core/modules/image/image.post_update.php b/core/modules/image/image.post_update.php
new file mode 100644
index 0000000..261c801
--- /dev/null
+++ b/core/modules/image/image.post_update.php
@@ -0,0 +1,18 @@
+<?php
+
+/**
+ * @file
+ * Post update functions for Image.
+ */
+
+/**
+ * Stores the image style dependencies into form and view display entities.
+ */
+function image_post_update_image_style_dependencies() {
+  $config_factory = \Drupal::configFactory();
+  foreach (['form', 'view'] as $context) {
+    foreach ($config_factory->listAll("core.entity_{$context}_display.") as $name) {
+      $config_factory->getEditable($name)->save();
+    }
+  }
+}
diff --git a/core/modules/image/src/Entity/ImageStyle.php b/core/modules/image/src/Entity/ImageStyle.php
index 7d97d59..bacc230 100644
--- a/core/modules/image/src/Entity/ImageStyle.php
+++ b/core/modules/image/src/Entity/ImageStyle.php
@@ -36,6 +36,7 @@
  *       "flush" = "Drupal\image\Form\ImageStyleFlushForm"
  *     },
  *     "list_builder" = "Drupal\image\ImageStyleListBuilder",
+ *     "storage" = "Drupal\image\ImageStyleStorage",
  *   },
  *   admin_permission = "administer image styles",
  *   config_prefix = "style",
@@ -59,13 +60,6 @@
 class ImageStyle extends ConfigEntityBase implements ImageStyleInterface, EntityWithPluginCollectionInterface {
 
   /**
-   * The name of the image style to use as replacement upon delete.
-   *
-   * @var string
-   */
-  protected $replacementID;
-
-  /**
    * The name of the image style.
    *
    * @var string
@@ -128,17 +122,10 @@ public function postSave(EntityStorageInterface $storage, $update = TRUE) {
   public static function postDelete(EntityStorageInterface $storage, array $entities) {
     parent::postDelete($storage, $entities);
 
+    /** @var \Drupal\image\ImageStyleInterface[] $entities */
     foreach ($entities as $style) {
       // Flush cached media for the deleted style.
       $style->flush();
-      // Check whether field settings need to be updated.
-      // In case no replacement style was specified, all image fields that are
-      // using the deleted style are left in a broken state.
-      if (!$style->isSyncing() && $new_id = $style->getReplacementID()) {
-        // The deleted ID is still set as originalID.
-        $style->setName($new_id);
-        static::replaceImageStyle($style);
-      }
     }
   }
 
@@ -380,7 +367,7 @@ public function addImageEffect(array $configuration) {
    * {@inheritdoc}
    */
   public function getReplacementID() {
-    return $this->get('replacementID');
+    return NULL;
   }
 
   /**
diff --git a/core/modules/image/src/Form/ImageStyleDeleteForm.php b/core/modules/image/src/Form/ImageStyleDeleteForm.php
index 5c45d94..019560b 100644
--- a/core/modules/image/src/Form/ImageStyleDeleteForm.php
+++ b/core/modules/image/src/Form/ImageStyleDeleteForm.php
@@ -7,6 +7,8 @@
 
 namespace Drupal\image\Form;
 
+use Drupal\Core\Entity\Entity\EntityFormDisplay;
+use Drupal\Core\Entity\Entity\EntityViewDisplay;
 use Drupal\Core\Entity\EntityDeleteForm;
 use Drupal\Core\Form\FormStateInterface;
 
@@ -18,27 +20,38 @@ class ImageStyleDeleteForm extends EntityDeleteForm {
   /**
    * {@inheritdoc}
    */
-  public function getQuestion() {
-    return $this->t('Optionally select a style before deleting %style', array('%style' => $this->entity->label()));
-  }
-  /**
-   * {@inheritdoc}
-   */
   public function getDescription() {
-    return $this->t('If this style is in use on the site, you may select another style to replace it. All images that have been generated for this style will be permanently deleted.');
+    return $this->t("All images that have been generated for this style will be permanently deleted.");
   }
 
   /**
    * {@inheritdoc}
    */
   public function form(array $form, FormStateInterface $form_state) {
-    $replacement_styles = array_diff_key(image_style_options(), array($this->entity->id() => ''));
-    $form['replacement'] = array(
-      '#title' => $this->t('Replacement style'),
-      '#type' => 'select',
-      '#options' => $replacement_styles,
-      '#empty_option' => $this->t('No replacement, just delete'),
-    );
+    // If there are components relying on this image style show a warning
+    // message and, if case, the image style replacement select.
+    if ($this->hasAffectedComponents()) {
+      $replacement_styles = array_diff_key(image_style_options(), [$this->entity->id() => '']);
+
+      // If there are non-empty options in the list, allow the user to
+      // optionally pickup a replacement.
+      if (count($replacement_styles) > 1) {
+        $form['warning'] = [
+          '#markup' => $this->t("There are components relying on %style image style. You may select another style to replace it in all components settings. If you don't provide a replacement, those components will be disabled. In this case you'll need to revisit the form and view displays an reconfigure the widgets and formatters.", ['%style' => $this->entity->label()]),
+        ];
+        $form['replacement'] = [
+          '#title' => $this->t('Replacement style'),
+          '#type' => 'select',
+          '#options' => $replacement_styles,
+          '#empty_option' => $this->t('- No replacement (disable widgets/formatters) -'),
+        ];
+      }
+      else {
+        $form['warning'] = [
+          '#markup' => $this->t("There are components relying on %style image style and will be disabled. You'll need to revisit the form and view displays an reconfigure the widgets and formatters.", ['%style' => $this->entity->label()]),
+        ];
+      }
+    }
 
     return parent::form($form, $form_state);
   }
@@ -47,9 +60,44 @@ public function form(array $form, FormStateInterface $form_state) {
    * {@inheritdoc}
    */
   public function submitForm(array &$form, FormStateInterface $form_state) {
-    $this->entity->set('replacementID', $form_state->getValue('replacement'));
-
+    // If a replacement has been selected, save it in image style storage to be
+    // used later, in the same request, when resolving dependencies.
+    if ($replacement = $form_state->getValue('replacement')) {
+      /** @var \Drupal\image\ImageStyleStorageInterface $storage */
+      $storage = $this->entityManager->getStorage($this->entity->getEntityTypeId());
+      $storage->setReplacementId($this->entity->id(), $replacement);
+    }
     parent::submitForm($form, $form_state);
   }
 
+  /**
+   * Checks if there are components using the image style being deleted.
+   *
+   * @return bool
+   *   TRUE if at least one component is using the image style, FALSE otherwise.
+   */
+  protected function hasAffectedComponents() {
+    // Merge view and form displays together. Use array_values() to avoid key
+    // collisions.
+    $displays = array_merge(array_values(EntityViewDisplay::loadMultiple()), array_values(EntityFormDisplay::loadMultiple()));
+    /** @var \Drupal\Core\Entity\Display\EntityDisplayInterface $display */
+    foreach ($displays as $display) {
+      $dependencies = $display->getDependencies() + ['config' => []];
+      // If this image style is not a dependency of the whole display, do not
+      // descend into components because component dependencies are part of
+      // display dependencies.
+      if (in_array($this->entity->getConfigDependencyName(), $dependencies['config'])) {
+        foreach ($display->getComponents() as $name => $options) {
+          if ($renderer = $display->getRenderer($name)) {
+            $plugin_dependencies = $renderer->calculateDependencies() + ['config' => []];
+            if (in_array($this->entity->getConfigDependencyName(), $plugin_dependencies['config'])) {
+              return TRUE;
+            }
+          }
+        }
+      }
+    }
+    return FALSE;
+  }
+
 }
diff --git a/core/modules/image/src/ImageStyleInterface.php b/core/modules/image/src/ImageStyleInterface.php
index 9507291..fcdd5bd 100644
--- a/core/modules/image/src/ImageStyleInterface.php
+++ b/core/modules/image/src/ImageStyleInterface.php
@@ -17,8 +17,9 @@
   /**
    * Returns the replacement ID.
    *
-   * @return string
-   *   The name of the image style to use as replacement upon delete.
+   * @return null
+   *
+   * @deprecated in 8.0.x, will be removed in 8.1.x.
    */
   public function getReplacementID();
 
diff --git a/core/modules/image/src/ImageStyleStorage.php b/core/modules/image/src/ImageStyleStorage.php
new file mode 100644
index 0000000..b75ba97
--- /dev/null
+++ b/core/modules/image/src/ImageStyleStorage.php
@@ -0,0 +1,35 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\image\ImageStyleStorage.
+ */
+
+namespace Drupal\image;
+
+use Drupal\Core\Config\Entity\ConfigEntityStorage;
+
+class ImageStyleStorage extends ConfigEntityStorage implements ImageStyleStorageInterface {
+
+  /**
+   * Image style replacement memory storage.
+   *
+   * @var array
+   */
+  protected $replacement = [];
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setReplacementId($name, $replacement) {
+    $this->replacement[$name] = $replacement;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getReplacementId($name) {
+    return array_key_exists($name, $this->replacement) ? $this->replacement[$name] : NULL;
+  }
+
+}
\ No newline at end of file
diff --git a/core/modules/image/src/ImageStyleStorageInterface.php b/core/modules/image/src/ImageStyleStorageInterface.php
new file mode 100644
index 0000000..dee8c8a
--- /dev/null
+++ b/core/modules/image/src/ImageStyleStorageInterface.php
@@ -0,0 +1,43 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\image\ImageStyleStorageInterface.
+ */
+
+namespace Drupal\image;
+
+interface ImageStyleStorageInterface {
+
+  /**
+   * Stores a replacement when deleting an image style.
+   *
+   * The method stores a replacement style to be used by the configuration
+   * dependency system when a image style is deleted. The replacement style is
+   * replacing the deleted style in other configuration entities (widgets,
+   * formatters) that are depending on the image style being deleted.
+   *
+   * @param string $name
+   *   The ID of the image style to be replaced.
+   * @param string|null $replacement
+   *   The ID of the image style used as replacement or NULL, if no replacement
+   *   has been chosen.
+   */
+  public function setReplacementId($name, $replacement);
+
+  /**
+   * Retrieves the replacement of a deleted image style.
+   *
+   * The method is retrieving the value stored by ::setReplacementId().
+   *
+   * @param string $name
+   *   The ID of the image style to be replaced.
+   *
+   * @return string|null
+   *   The ID of the image style used as replacement, if there's any or NULL.
+   *
+   * @see \Drupal\image\ImageStyleStorageInatreface::setReplacementId().
+   */
+  public function getReplacementId($name);
+
+}
\ No newline at end of file
diff --git a/core/modules/image/src/Plugin/Field/FieldFormatter/ImageFormatter.php b/core/modules/image/src/Plugin/Field/FieldFormatter/ImageFormatter.php
index 5720415..e651810 100644
--- a/core/modules/image/src/Plugin/Field/FieldFormatter/ImageFormatter.php
+++ b/core/modules/image/src/Plugin/Field/FieldFormatter/ImageFormatter.php
@@ -14,6 +14,7 @@
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
 use Drupal\Core\Session\AccountInterface;
 use Drupal\Core\Url;
+use Drupal\image\Entity\ImageStyle;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Cache\Cache;
@@ -226,4 +227,41 @@ public function viewElements(FieldItemListInterface $items, $langcode) {
     return $elements;
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function calculateDependencies() {
+    $dependencies = parent::calculateDependencies();
+    /** @var \Drupal\image\ImageStyleInterface $style */
+    $style_id = $this->getSetting('image_style');
+    if ($style_id && $style = ImageStyle::load($style_id)) {
+      $dependencies[$style->getConfigDependencyKey()][] = $style->getConfigDependencyName();
+    }
+    return $dependencies;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function onDependencyRemoval(array $dependencies) {
+    $changed = parent::onDependencyRemoval($dependencies);
+    /** @var \Drupal\image\ImageStyleInterface $style */
+    $name = $this->getSetting('image_style');
+    if ($name && $style = ImageStyle::load($name)) {
+      /** @var \Drupal\image\ImageStyleInterface $removed_style */
+      if (!empty($dependencies[$style->getConfigDependencyKey()][$style->getConfigDependencyName()])) {
+        /** @var \Drupal\image\ImageStyleStorageInterface $storage */
+        $storage = \Drupal::entityManager()->getStorage($style->getEntityTypeId());
+        if ($replacement_id = $storage->getReplacementId($name)) {
+          /** @var \Drupal\image\ImageStyleInterface $replacement */
+          if ($replacement = ImageStyle::load($replacement_id)) {
+            $this->setSetting('image_style', $replacement_id);
+            $changed = TRUE;
+          }
+        }
+      }
+    }
+    return $changed;
+  }
+
 }
diff --git a/core/modules/image/src/Plugin/Field/FieldWidget/ImageWidget.php b/core/modules/image/src/Plugin/Field/FieldWidget/ImageWidget.php
index ec83970..2adf64f 100644
--- a/core/modules/image/src/Plugin/Field/FieldWidget/ImageWidget.php
+++ b/core/modules/image/src/Plugin/Field/FieldWidget/ImageWidget.php
@@ -12,6 +12,7 @@
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\file\Entity\File;
 use Drupal\file\Plugin\Field\FieldWidget\FileWidget;
+use Drupal\image\Entity\ImageStyle;
 
 /**
  * Plugin implementation of the 'image_image' widget.
@@ -273,4 +274,41 @@ public static function validateRequiredFields($element, FormStateInterface $form
     }
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function calculateDependencies() {
+    $dependencies = parent::calculateDependencies();
+    /** @var \Drupal\image\ImageStyleInterface $style */
+    $style_id = $this->getSetting('preview_image_style');
+    if ($style_id && $style = ImageStyle::load($style_id)) {
+      $dependencies[$style->getConfigDependencyKey()][] = $style->getConfigDependencyName();
+    }
+    return $dependencies;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function onDependencyRemoval(array $dependencies) {
+    $changed = parent::onDependencyRemoval($dependencies);
+    /** @var \Drupal\image\ImageStyleInterface $style */
+    $name = $this->getSetting('preview_image_style');
+    if ($name && $style = ImageStyle::load($name)) {
+      /** @var \Drupal\image\ImageStyleInterface $removed_style */
+      if (!empty($dependencies[$style->getConfigDependencyKey()][$style->getConfigDependencyName()])) {
+        /** @var \Drupal\image\ImageStyleStorageInterface $storage */
+        $storage = \Drupal::entityManager()->getStorage($style->getEntityTypeId());
+        if ($replacement_id = $storage->getReplacementId($name)) {
+         /** @var \Drupal\image\ImageStyleInterface $replacement */
+          if ($replacement = ImageStyle::load($replacement_id)) {
+            $this->setSetting('preview_image_style', $replacement_id);
+            $changed = TRUE;
+          }
+        }
+      }
+    }
+    return $changed;
+  }
+
 }
diff --git a/core/modules/image/src/Tests/ImageAdminStylesTest.php b/core/modules/image/src/Tests/ImageAdminStylesTest.php
index ed3854f..60093e7 100644
--- a/core/modules/image/src/Tests/ImageAdminStylesTest.php
+++ b/core/modules/image/src/Tests/ImageAdminStylesTest.php
@@ -8,6 +8,7 @@
 namespace Drupal\image\Tests;
 
 use Drupal\Component\Utility\SafeMarkup;
+use Drupal\Core\Entity\Entity\EntityViewDisplay;
 use Drupal\image\Entity\ImageStyle;
 use Drupal\image\ImageStyleInterface;
 use Drupal\node\Entity\Node;
@@ -446,6 +447,11 @@ function testConfigImport() {
     // Copy config to sync, and delete the image style.
     $sync = $this->container->get('config.storage.sync');
     $active = $this->container->get('config.storage');
+    // Break first the entity view display dependency to image style, to avoid
+    // import dependency validation error.
+    EntityViewDisplay::load('node.article.default')
+      ->removeComponent($field_name)
+      ->save();
     $this->copyConfig($active, $sync);
     $sync->delete('image.style.' . $style_name);
     $this->configImporter()->import();
diff --git a/core/modules/image/src/Tests/ImageFieldTestBase.php b/core/modules/image/src/Tests/ImageFieldTestBase.php
index 271b969..6e894f5 100644
--- a/core/modules/image/src/Tests/ImageFieldTestBase.php
+++ b/core/modules/image/src/Tests/ImageFieldTestBase.php
@@ -67,8 +67,10 @@ protected function setUp() {
    *   A list of instance settings that will be added to the instance defaults.
    * @param array $widget_settings
    *   A list of widget settings that will be added to the widget defaults.
+   * @param array $formatter_settings
+   *   A list of formatter settings that will be added to the formatter defaults.
    */
-  function createImageField($name, $type_name, $storage_settings = array(), $field_settings = array(), $widget_settings = array()) {
+  function createImageField($name, $type_name, $storage_settings = array(), $field_settings = array(), $widget_settings = array(), $formatter_settings = array()) {
     entity_create('field_storage_config', array(
       'field_name' => $name,
       'entity_type' => 'node',
@@ -95,7 +97,10 @@ function createImageField($name, $type_name, $storage_settings = array(), $field
       ->save();
 
     entity_get_display('node', $type_name, 'default')
-      ->setComponent($name)
+      ->setComponent($name, array(
+        'type' => 'image',
+        'settings' => $formatter_settings,
+      ))
       ->save();
 
     return $field_config;
diff --git a/core/modules/image/src/Tests/ImageStyleDeleteTest.php b/core/modules/image/src/Tests/ImageStyleDeleteTest.php
new file mode 100644
index 0000000..e8d835c
--- /dev/null
+++ b/core/modules/image/src/Tests/ImageStyleDeleteTest.php
@@ -0,0 +1,120 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\image\Tests\ImageStyleDeleteTest.
+ */
+
+namespace Drupal\image\Tests;
+
+use Drupal\Core\Entity\Entity\EntityFormDisplay;
+use Drupal\Core\Entity\Entity\EntityViewDisplay;
+use Drupal\image\Entity\ImageStyle;
+
+/**
+ * Tests image style deletion using the UI.
+ *
+ * @group image
+ */
+class ImageStyleDeleteTest extends ImageFieldTestBase {
+
+  /**
+   * Image styles.
+   *
+   * @var \Drupal\image\ImageStyleInterface
+   */
+  protected $style1, $style2, $style3;
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+    $this->style1 = ImageStyle::create(['name' => 'style1', 'label' => 'Style 1']);
+    $this->style1->save();
+    $this->style2 = ImageStyle::create(['name' => 'style2', 'label' => 'Style 2']);
+    $this->style2->save();
+    $this->style3 = ImageStyle::create(['name' => 'style3', 'label' => 'Style 3']);
+    $this->style3->save();
+
+    $this->createImageField('image1', 'page', [], [], ['preview_image_style' => 'style1'], ['image_style' => 'style1']);
+    $this->createImageField('image2', 'article', [], [], ['preview_image_style' => 'style2']);
+  }
+
+  /**
+   * Tests image style deletion messages.
+   */
+  public function testDeletionMessages() {
+    $this->drupalGet('admin/config/media/image-styles/manage/style1/delete');
+    // Replacement select found.
+    $this->assertFieldByName('replacement');
+    // Message telling about components relying on this image style found.
+    $this->assertRaw((string) t("There are components relying on %style image style. You may select another style to replace it in all components settings. If you don't provide a replacement, those components will be disabled. In this case you'll need to revisit the form and view displays an reconfigure the widgets and formatters.", ['%style' => 'Style 1']));
+    // The style cache flush text is there.
+    $this->assertText((string) t('All images that have been generated for this style will be permanently deleted.'));
+
+    $this->drupalGet('admin/config/media/image-styles/manage/style2/delete');
+    // Replacement select found.
+    $this->assertFieldByName('replacement');
+    // Message telling about components relying on this image style found.
+    $this->assertRaw((string) t("There are components relying on %style image style. You may select another style to replace it in all components settings. If you don't provide a replacement, those components will be disabled. In this case you'll need to revisit the form and view displays an reconfigure the widgets and formatters.", ['%style' => 'Style 2']));
+    // The style cache flush text is there.
+    $this->assertText((string) t('All images that have been generated for this style will be permanently deleted.'));
+
+    $this->drupalGet('admin/config/media/image-styles/manage/style3/delete');
+    // Replacement select not found.
+    $this->assertNoFieldByName('replacement');
+    // Messages telling about components relying on this image style not found.
+    $this->assertNoRaw((string) t("There are components relying on %style image style. You may select another style to replace it in all components settings. If you don't provide a replacement, those components will be disabled. In this case you'll need to revisit the form and view displays an reconfigure the widgets and formatters.", ['%style' => 'Style 3']));
+    $this->assertNoRaw((string) t("There are components relying on %style image style and will be disabled. You'll need to revisit the form and view displays an reconfigure the widgets and formatters.", ['%style' => 'Style 3']));
+    // The style cache flush text is there.
+    $this->assertText((string) t('All images that have been generated for this style will be permanently deleted.'));
+
+    // Delete all styles except 'style1'.
+    foreach (ImageStyle::loadMultiple() as $image_style) {
+      if ($image_style->id() != 'style1') {
+        $image_style->delete();
+      }
+    }
+
+    $this->drupalGet('admin/config/media/image-styles/manage/style1/delete');
+    // Replacement select not found.
+    $this->assertNoFieldByName('replacement');
+    // Message telling about components relying on this image style found.
+    $this->assertRaw((string) t("There are components relying on %style image style and will be disabled. You'll need to revisit the form and view displays an reconfigure the widgets and formatters.", ['%style' => 'Style 1']));
+    // The style cache flush text is there.
+    $this->assertText((string) t('All images that have been generated for this style will be permanently deleted.'));
+  }
+
+  /**
+   * Tests the deletion of image styles.
+   */
+  public function testDelete() {
+    // Delete by assuring a replacement.
+    $edit = ['replacement' => 'style2'];
+    $this->drupalPostForm('admin/config/media/image-styles/manage/style1/delete', $edit, (string) t('Delete'));
+
+    $view_display = EntityViewDisplay::load("node.page.default");
+    // Formatter setting should have been replaced.
+    if ($this->assertNotNull($component = $view_display->getComponent('image1'))) {
+      $this->assertIdentical($component['settings']['image_style'], 'style2');
+    }
+    // Widget setting should have been replaced.
+    $form_display = EntityFormDisplay::load("node.page.default");
+    if ($this->assertNotNull($component = $form_display->getComponent('image1'))) {
+      $this->assertIdentical($component['settings']['preview_image_style'], 'style2');
+    }
+
+    // Delete without assuring a replacement.
+    $this->drupalPostForm('admin/config/media/image-styles/manage/style2/delete', [], (string) t('Delete'));
+    $view_display = EntityViewDisplay::load("node.page.default");
+    // Formatter setting should have been disabled.
+    $this->assertNull($view_display->getComponent('image1'));
+    $this->assertNotNull($view_display->get('hidden')['image1']);
+    // Widget setting should have been disabled.
+    $form_display = EntityFormDisplay::load("node.page.default");
+    $this->assertNull($form_display->getComponent('image1'));
+    $this->assertNotNull($form_display->get('hidden')['image1']);
+  }
+
+}
diff --git a/core/modules/image/src/Tests/Update/ImageUpdateTest.php b/core/modules/image/src/Tests/Update/ImageUpdateTest.php
new file mode 100644
index 0000000..3bffe0b
--- /dev/null
+++ b/core/modules/image/src/Tests/Update/ImageUpdateTest.php
@@ -0,0 +1,55 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\image\Tests\Update\ImageUpdateTest.
+ */
+
+namespace Drupal\image\Tests\Update;
+
+use Drupal\system\Tests\Update\UpdatePathTestBase;
+
+/**
+ * Tests Image update path.
+ *
+ * @group image
+ */
+class ImageUpdateTest extends UpdatePathTestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setDatabaseDumpFiles() {
+    $this->databaseDumpFiles = [
+      __DIR__ . '/../../../../system/tests/fixtures/update/drupal-8.bare.standard.php.gz',
+    ];
+  }
+
+  /**
+   * Tests image_post_update_image_style_dependencies().
+   *
+   * @see image_post_update_image_style_dependencies()
+   */
+  public function testPostUpdateImageStylesDependencies() {
+    $view = 'core.entity_view_display.node.article.default';
+    $form = 'core.entity_form_display.node.article.default';
+
+    // View display 'node.article.default' doesn't depend on style 'large'.
+    $dependencies = $this->config($view)->get('dependencies.config');
+    $this->assertFalse(in_array('image.style.large', $dependencies));
+    // Form display 'node.article.default' doesn't depend on style 'thumbnail'.
+    $dependencies = $this->config($form)->get('dependencies.config');
+    $this->assertFalse(in_array('image.style.thumbnail', $dependencies));
+
+    // Run updates.
+    $this->runUpdates();
+
+    // View display 'node.article.default' depend on style 'large'.
+    $dependencies = $this->config($view)->get('dependencies.config');
+    $this->assertTrue(in_array('image.style.large', $dependencies));
+    // Form display 'node.article.default' depend on style 'thumbnail'.
+    $dependencies = $this->config($view)->get('dependencies.config');
+    $this->assertTrue(in_array('image.style.large', $dependencies));
+  }
+
+}
diff --git a/core/modules/image/tests/src/Kernel/ImageStyleIntegrationTest.php b/core/modules/image/tests/src/Kernel/ImageStyleIntegrationTest.php
new file mode 100644
index 0000000..68d5d6a
--- /dev/null
+++ b/core/modules/image/tests/src/Kernel/ImageStyleIntegrationTest.php
@@ -0,0 +1,115 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Tests\image\Kernel\ImageStyleIntegrationTest.
+ */
+
+namespace Drupal\Tests\image\Kernel;
+
+use Drupal\Core\Entity\Entity\EntityFormDisplay;
+use Drupal\Core\Entity\Entity\EntityViewDisplay;
+use Drupal\field\Entity\FieldConfig;
+use Drupal\field\Entity\FieldStorageConfig;
+use Drupal\image\Entity\ImageStyle;
+use Drupal\KernelTests\KernelTestBase;
+use Drupal\node\Entity\NodeType;
+
+/**
+ * Tests the integration of ImageStyle with the core.
+ *
+ * @group image
+ */
+class ImageStyleIntegrationTest extends KernelTestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public static $modules = ['image', 'file', 'field', 'system', 'user', 'node'];
+
+  /**
+   * Tests the dependency between ImageStyle and entity display components.
+   */
+  public function testEntityDisplayDependency() {
+    // Create two image styles.
+    /** @var \Drupal\image\ImageStyleInterface $style */
+    $style = ImageStyle::create(['name' => 'main_style']);
+    $style->save();
+    /** @var \Drupal\image\ImageStyleInterface $replacement */
+    $replacement = ImageStyle::create(['name' => 'replacement_style']);
+    $replacement->save();
+
+    // Create a node-type, named 'note'.
+    $node_type = NodeType::create(['type' => 'note']);
+    $node_type->save();
+
+    // Create an image field and attach it to the 'note' node-type.
+    FieldStorageConfig::create([
+      'entity_type' => 'node',
+      'field_name' => 'sticker',
+      'type' => 'image',
+    ])->save();
+    FieldConfig::create([
+      'entity_type' => 'node',
+      'field_name' => 'sticker',
+      'bundle' => 'note',
+    ])->save();
+
+    // Create the default entity view display and set the 'sticker' field to use
+    // the 'main_style' images style in formatter.
+    /** @var \Drupal\Core\Entity\Display\EntityViewDisplayInterface $view_display */
+    $view_display = EntityViewDisplay::create([
+      'targetEntityType' => 'node',
+      'bundle' => 'note',
+      'mode' => 'default',
+      'status' => TRUE,
+    ])->setComponent('sticker', ['settings' => ['image_style' => 'main_style']]);
+    $view_display->save();
+
+    // Create the default entity form display and set the 'sticker' field to use
+    // the 'main_style' images style in the widget.
+    /** @var \Drupal\Core\Entity\Display\EntityFormDisplayInterface $form_display */
+    $form_display = EntityFormDisplay::create([
+      'targetEntityType' => 'node',
+      'bundle' => 'note',
+      'mode' => 'default',
+      'status' => TRUE,
+    ])->setComponent('sticker', ['settings' => ['preview_image_style' => 'main_style']]);
+    $form_display->save();
+
+    // Check that the entity displays exists before dependency removal.
+    $this->assertNotNull(EntityViewDisplay::load($view_display->id()));
+    $this->assertNotNull(EntityFormDisplay::load($form_display->id()));
+
+    // Delete the 'main_style' image style. Before that, emulate the UI process
+    // of selecting a replacement style by setting the replacement image style
+    // ID in the image style storage.
+    /** @var \Drupal\image\ImageStyleStorageInterface $storage */
+    $storage = $this->container->get('entity.manager')->getStorage($style->getEntityTypeId());
+    $storage->setReplacementId('main_style', 'replacement_style');
+    $style->delete();
+
+    // Check that the entity displays exists after dependency removal.
+    $this->assertNotNull($view_display = EntityViewDisplay::load($view_display->id()));
+    $this->assertNotNull($form_display = EntityFormDisplay::load($form_display->id()));
+    // Check that the 'sticker' formatter component exists in both displays.
+    $this->assertNotNull($formatter = $view_display->getComponent('sticker'));
+    $this->assertNotNull($widget = $form_display->getComponent('sticker'));
+    // Check that both displays are using now 'replacement_style' for images.
+    $this->assertSame($formatter['settings']['image_style'], 'replacement_style');
+    $this->assertSame($widget['settings']['preview_image_style'], 'replacement_style');
+
+    // Delete the 'replacement_style' without setting a replacement image style.
+    $replacement->delete();
+
+    // The entity view and form displays exists after dependency removal.
+    $this->assertNotNull($view_display = EntityViewDisplay::load($view_display->id()));
+    $this->assertNotNull($form_display = EntityFormDisplay::load($form_display->id()));
+    // The 'sticker' formatter component should be hidden in both displays.
+    $this->assertNull($view_display->getComponent('sticker'));
+    $this->assertTrue($view_display->get('hidden')['sticker']);
+    $this->assertNull($form_display->getComponent('sticker'));
+    $this->assertTrue($form_display->get('hidden')['sticker']);
+  }
+
+}
diff --git a/core/profiles/standard/config/install/core.entity_form_display.node.article.default.yml b/core/profiles/standard/config/install/core.entity_form_display.node.article.default.yml
index 189737c..79156b2 100644
--- a/core/profiles/standard/config/install/core.entity_form_display.node.article.default.yml
+++ b/core/profiles/standard/config/install/core.entity_form_display.node.article.default.yml
@@ -6,6 +6,7 @@ dependencies:
     - field.field.node.article.comment
     - field.field.node.article.field_image
     - field.field.node.article.field_tags
+    - image.style.thumbnail
     - node.type.article
   module:
     - comment
diff --git a/core/profiles/standard/config/install/core.entity_form_display.user.user.default.yml b/core/profiles/standard/config/install/core.entity_form_display.user.user.default.yml
index 107d363..466b6e0 100644
--- a/core/profiles/standard/config/install/core.entity_form_display.user.user.default.yml
+++ b/core/profiles/standard/config/install/core.entity_form_display.user.user.default.yml
@@ -3,6 +3,7 @@ status: true
 dependencies:
   config:
     - field.field.user.user.user_picture
+    - image.style.thumbnail
   module:
     - image
     - user
diff --git a/core/profiles/standard/config/install/core.entity_view_display.node.article.default.yml b/core/profiles/standard/config/install/core.entity_view_display.node.article.default.yml
index e0d3782..f880cfd 100644
--- a/core/profiles/standard/config/install/core.entity_view_display.node.article.default.yml
+++ b/core/profiles/standard/config/install/core.entity_view_display.node.article.default.yml
@@ -6,6 +6,7 @@ dependencies:
     - field.field.node.article.comment
     - field.field.node.article.field_image
     - field.field.node.article.field_tags
+    - image.style.large
     - node.type.article
   module:
     - comment
diff --git a/core/profiles/standard/config/install/core.entity_view_display.node.article.teaser.yml b/core/profiles/standard/config/install/core.entity_view_display.node.article.teaser.yml
index 1cf18dc..43ee079 100644
--- a/core/profiles/standard/config/install/core.entity_view_display.node.article.teaser.yml
+++ b/core/profiles/standard/config/install/core.entity_view_display.node.article.teaser.yml
@@ -7,6 +7,7 @@ dependencies:
     - field.field.node.article.comment
     - field.field.node.article.field_image
     - field.field.node.article.field_tags
+    - image.style.medium
     - node.type.article
   module:
     - image
diff --git a/core/profiles/standard/config/install/core.entity_view_display.user.user.compact.yml b/core/profiles/standard/config/install/core.entity_view_display.user.user.compact.yml
index 9c74439..4c13792 100644
--- a/core/profiles/standard/config/install/core.entity_view_display.user.user.compact.yml
+++ b/core/profiles/standard/config/install/core.entity_view_display.user.user.compact.yml
@@ -4,6 +4,7 @@ dependencies:
   config:
     - core.entity_view_mode.user.compact
     - field.field.user.user.user_picture
+    - image.style.thumbnail
   module:
     - image
     - user
diff --git a/core/profiles/standard/config/install/core.entity_view_display.user.user.default.yml b/core/profiles/standard/config/install/core.entity_view_display.user.user.default.yml
index 807fefe..9e4621d 100644
--- a/core/profiles/standard/config/install/core.entity_view_display.user.user.default.yml
+++ b/core/profiles/standard/config/install/core.entity_view_display.user.user.default.yml
@@ -3,6 +3,7 @@ status: true
 dependencies:
   config:
     - field.field.user.user.user_picture
+    - image.style.thumbnail
   module:
     - image
     - user
