diff --git a/core/modules/image/image.routing.yml b/core/modules/image/image.routing.yml
index 4a6d515..ae5e88f 100644
--- a/core/modules/image/image.routing.yml
+++ b/core/modules/image/image.routing.yml
@@ -20,6 +20,14 @@ image.style_delete:
   requirements:
     _permission: 'administer image styles'
 
+image.style_flush:
+  path: '/admin/config/media/image-styles/manage/{image_style}/flush'
+  defaults:
+    _entity_form: 'image_style.flush'
+    _title: 'Flush'
+  requirements:
+    _permission: 'administer image styles'
+
 image.effect_delete:
   path: '/admin/config/media/image-styles/manage/{image_style}/effects/{image_effect}/delete'
   defaults:
diff --git a/core/modules/image/lib/Drupal/image/Entity/ImageStyle.php b/core/modules/image/lib/Drupal/image/Entity/ImageStyle.php
index bd8feb9..199b854 100644
--- a/core/modules/image/lib/Drupal/image/Entity/ImageStyle.php
+++ b/core/modules/image/lib/Drupal/image/Entity/ImageStyle.php
@@ -29,7 +29,8 @@
  *     "form" = {
  *       "add" = "Drupal\image\Form\ImageStyleAddForm",
  *       "edit" = "Drupal\image\Form\ImageStyleEditForm",
- *       "delete" = "Drupal\image\Form\ImageStyleDeleteForm"
+ *       "delete" = "Drupal\image\Form\ImageStyleDeleteForm",
+ *       "flush" = "Drupal\image\Form\ImageStyleFlushForm"
  *     },
  *     "storage" = "Drupal\Core\Config\Entity\ConfigStorageController",
  *     "list" = "Drupal\image\ImageStyleListController",
diff --git a/core/modules/image/lib/Drupal/image/Form/ImageStyleFlushForm.php b/core/modules/image/lib/Drupal/image/Form/ImageStyleFlushForm.php
new file mode 100644
index 0000000..42065d0
--- /dev/null
+++ b/core/modules/image/lib/Drupal/image/Form/ImageStyleFlushForm.php
@@ -0,0 +1,59 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\image\Form\ImageStyleFlushForm.
+ */
+
+namespace Drupal\image\Form;
+
+use Drupal\Core\Entity\EntityConfirmFormBase;
+
+/**
+ * Form controller for image style flush.
+ */
+class ImageStyleFlushForm extends EntityConfirmFormBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getQuestion() {
+    return $this->t('Are you sure you want to flush image derivatives for %name image style?', array('%name' => $this->entity->label()));
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getDescription() {
+    return parent::getDescription() . ' ' . $this->t('Image derivatives are the result of processing original images through the image styling. These derived images are stored in the file system to speed up further visits. Flushing them now will lead Drupal to recreate the derivatives as they are requested next time.');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getConfirmText() {
+    return $this->t('Flush');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getCancelRoute() {
+    return array(
+      'route_name' => 'image.style_list',
+      'route_parameters' => array(
+        'image_style' => $this->entity->id(),
+      ),
+    );
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function submit(array $form, array &$form_state) {
+    $this->entity->flush();
+    drupal_set_message($this->t('The image style %name has been flushed.', array('%name' => $this->entity->label())));
+    $form_state['redirect'] = 'admin/config/media/image-styles';
+  }
+
+}
diff --git a/core/modules/image/lib/Drupal/image/ImageStyleListController.php b/core/modules/image/lib/Drupal/image/ImageStyleListController.php
index 984fe89..3c4f3e7 100644
--- a/core/modules/image/lib/Drupal/image/ImageStyleListController.php
+++ b/core/modules/image/lib/Drupal/image/ImageStyleListController.php
@@ -80,6 +80,21 @@ public function buildRow(EntityInterface $entity) {
   /**
    * {@inheritdoc}
    */
+  public function getOperations(EntityInterface $entity) {
+    $uri = $entity->uri('edit-form');
+    $flush = array(
+      'title' => t('Flush'),
+      'href' => $uri['path'] . '/flush',
+      'options' => $uri['options'],
+      'weight' => 200,
+    );
+
+    return parent::getOperations($entity) + array('flush' => $flush);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
   public function render() {
     $build = parent::render();
     $build['#empty'] = $this->t('There are currently no styles. <a href="!url">Add a new one</a>.', array(
diff --git a/core/modules/image/lib/Drupal/image/Tests/ImageAdminStylesTest.php b/core/modules/image/lib/Drupal/image/Tests/ImageAdminStylesTest.php
index 316b750..4e8ad64 100644
--- a/core/modules/image/lib/Drupal/image/Tests/ImageAdminStylesTest.php
+++ b/core/modules/image/lib/Drupal/image/Tests/ImageAdminStylesTest.php
@@ -347,6 +347,37 @@ function testEditEffect() {
   }
 
   /**
+   * Test flush user interface.
+   */
+  public function testFlushUserInterface() {
+    $admin_path = 'admin/config/media/image-styles';
+
+    // Create a new style.
+    $style_name = strtolower($this->randomName(10));
+    $style = entity_create('image_style', array('name' => $style_name, 'label' => $this->randomString()));
+    $style->save();
+
+    // Create an image to make sure it gets flushed.
+    $files = $this->drupalGetTestFiles('image');
+    $image_uri = $files[0]->uri;
+    $derivative_uri = $style->buildUri($image_uri);
+    $this->assertTrue($style->createDerivative($image_uri, $derivative_uri));
+    $this->assertEqual($this->getImageCount($style), 1);
+
+    // Go to image styles list page and check if the flush operation link
+    // exists.
+    $this->drupalGet($admin_path);
+    $flush_path = $admin_path . '/manage/' . $style_name . '/flush';
+    $this->assertLinkByHref($flush_path);
+
+    // Flush the image style derivatives using the user interface.
+    $this->drupalPostForm($flush_path, array(), t('Flush'));
+
+    // The derivative image file should have been deleted.
+    $this->assertEqual($this->getImageCount($style), 0);
+  }
+
+  /**
    * Tests image style configuration import that does a delete.
    */
   function testConfigImport() {
