diff --git a/core/modules/image/image.admin.inc b/core/modules/image/image.admin.inc
index df68065..f599b24 100644
--- a/core/modules/image/image.admin.inc
+++ b/core/modules/image/image.admin.inc
@@ -24,239 +24,21 @@ function image_style_list() {
 }
 
 /**
- * Form builder; Edit an image style name and effects order.
+ * Page callback: Presents the image style creation form.
  *
- * @param $form_state
- *   An associative array containing the current state of the form.
- * @param $style
- *   An image style array.
- * @ingroup forms
- * @see image_style_form_submit()
- */
-function image_style_form($form, &$form_state, $style) {
-  $title = t('Edit style %name', array('%name' => $style->label()));
-  drupal_set_title($title, PASS_THROUGH);
-
-  $form_state['image_style'] = $style;
-  $form['#tree'] = TRUE;
-  $form['#attached']['css'][drupal_get_path('module', 'image') . '/image.admin.css'] = array();
-
-  // Show the thumbnail preview.
-  $form['preview'] = array(
-    '#type' => 'item',
-    '#title' => t('Preview'),
-    '#markup' => theme('image_style_preview', array('style' => $style)),
-  );
-
-  $form['label'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Administrative label'),
-    '#default_value' => $style->label(),
-    '#required' => TRUE,
-  );
-  $form['name'] = array(
-    '#type' => 'machine_name',
-    '#default_value' => $style->id(),
-    '#machine_name' => array(
-      'exists' => 'image_style_load',
-    ),
-    '#required' => TRUE,
-  );
-
-  // Build the list of existing image effects for this image style.
-  $form['effects'] = array(
-    '#theme' => 'image_style_effects',
-  );
-  if (!empty($style->effects)) {
-    foreach ($style->effects as $key => $effect) {
-      $form['effects'][$key]['#weight'] = isset($form_state['input']['effects']) ? $form_state['input']['effects'][$key]['weight'] : NULL;
-      $form['effects'][$key]['label'] = array(
-        '#markup' => check_plain($effect['label']),
-      );
-      $form['effects'][$key]['summary'] = array(
-        '#markup' => isset($effect['summary theme']) ? theme($effect['summary theme'], array('data' => $effect['data'])) : '',
-      );
-      $form['effects'][$key]['weight'] = array(
-        '#type' => 'weight',
-        '#title' => t('Weight for @title', array('@title' => $effect['label'])),
-        '#title_display' => 'invisible',
-        '#default_value' => $effect['weight'],
-      );
-
-      $links = array();
-      if (isset($effect['form callback'])) {
-        $links['edit'] = array(
-          'title' => t('edit'),
-          'href' => 'admin/config/media/image-styles/manage/' . $style->id() . '/effects/' . $key,
-        );
-      }
-      $links['delete'] = array(
-        'title' => t('delete'),
-        'href' => 'admin/config/media/image-styles/manage/' . $style->id() . '/effects/' . $key . '/delete',
-      );
-      $form['effects'][$key]['operations'] = array(
-        '#type' => 'operations',
-        '#links' => $links,
-      );
-      $form['effects'][$key]['configure'] = array(
-        '#type' => 'link',
-        '#title' => t('edit'),
-        '#href' => 'admin/config/media/image-styles/manage/' . $style->id() . '/effects/' . $key,
-        '#access' => isset($effect['form callback']),
-      );
-      $form['effects'][$key]['remove'] = array(
-        '#type' => 'link',
-        '#title' => t('delete'),
-        '#href' => 'admin/config/media/image-styles/manage/' . $style->id() . '/effects/' . $key . '/delete',
-      );
-    }
-  }
-
-  // Build the new image effect addition form and add it to the effect list.
-  $new_effect_options = array();
-  foreach (image_effect_definitions() as $effect => $definition) {
-    $new_effect_options[$effect] = $definition['label'];
-  }
-  $form['effects']['new'] = array(
-    '#tree' => FALSE,
-    '#weight' => isset($form_state['input']['weight']) ? $form_state['input']['weight'] : NULL,
-  );
-  $form['effects']['new']['new'] = array(
-    '#type' => 'select',
-    '#title' => t('Effect'),
-    '#title_display' => 'invisible',
-    '#options' => $new_effect_options,
-    '#empty_option' => t('Select a new effect'),
-  );
-  $form['effects']['new']['weight'] = array(
-    '#type' => 'weight',
-    '#title' => t('Weight for new effect'),
-    '#title_display' => 'invisible',
-    '#default_value' => count($form['effects']) - 1,
-  );
-  $form['effects']['new']['add'] = array(
-    '#type' => 'submit',
-    '#value' => t('Add'),
-    '#validate' => array('image_style_form_add_validate'),
-    '#submit' => array('image_style_form_submit', 'image_style_form_add_submit'),
-  );
-
-  // Show the Override or Submit button for this style.
-  $form['actions'] = array('#type' => 'actions');
-  $form['actions']['submit'] = array(
-    '#type' => 'submit',
-    '#value' => t('Update style'),
-  );
-
-  return $form;
-}
-
-/**
- * Validate handler for adding a new image effect to an image style.
- */
-function image_style_form_add_validate($form, &$form_state) {
-  if (!$form_state['values']['new']) {
-    form_error($form['effects']['new']['new'], t('Select an effect to add.'));
-  }
-}
-
-/**
- * Submit handler for adding a new image effect to an image style.
- */
-function image_style_form_add_submit($form, &$form_state) {
-  $style = $form_state['image_style'];
-  // Check if this field has any configuration options.
-  $effect = image_effect_definition_load($form_state['values']['new']);
-
-  // Load the configuration form for this option.
-  if (isset($effect['form callback'])) {
-    $path = 'admin/config/media/image-styles/manage/' . $style->id() . '/add/' . $form_state['values']['new'];
-    $form_state['redirect'] = array($path, array('query' => array('weight' => $form_state['values']['weight'])));
-  }
-  // If there's no form, immediately add the image effect.
-  else {
-    $effect = array(
-      'name' => $effect['name'],
-      'data' => array(),
-      'weight' => $form_state['values']['weight'],
-    );
-    image_effect_save($style, $effect);
-    drupal_set_message(t('The image effect was successfully applied.'));
-  }
-}
-
-/**
- * Submit handler for saving an image style.
- */
-function image_style_form_submit($form, &$form_state) {
-  $style = $form_state['image_style'];
-
-  // Update image effect weights.
-  if (!empty($form_state['values']['effects'])) {
-    foreach ($form_state['values']['effects'] as $ieid => $effect_data) {
-      if (isset($style->effects[$ieid])) {
-        $effect = array(
-          'name' => $style->effects[$ieid]['name'],
-          'data' => $style->effects[$ieid]['data'],
-          'weight' => $effect_data['weight'],
-          'ieid' => $ieid,
-        );
-        $style->effects[$ieid] = $effect;
-      }
-    }
-  }
-
-  $style->set('name', $form_state['values']['name']);
-  $style->set('label', $form_state['values']['label']);
-  $status = $style->save();
-
-  if ($status == SAVED_UPDATED) {
-    drupal_set_message(t('Changes to the style have been saved.'));
-  }
-  $form_state['redirect'] = 'admin/config/media/image-styles/manage/' . $style->id();
-}
-
-/**
- * Form builder; Form for adding a new image style.
+ * @return array
+ *   A form array as expected by drupal_render().
  *
- * @ingroup forms
- * @see image_style_add_form_submit()
+ *  @see image_menu()
  */
-function image_style_add_form($form, &$form_state) {
-  $form['label'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Administrative label'),
-    '#default_value' => '',
-    '#required' => TRUE,
-  );
-  $form['name'] = array(
-    '#type' => 'machine_name',
-    '#machine_name' => array(
-      'exists' => 'image_style_load',
-    ),
-    '#default_value' => '',
-    '#required' => TRUE,
-  );
-
-  $form['submit'] = array(
-    '#type' => 'submit',
-    '#value' => t('Create new style'),
-  );
+function image_style_form($image_style = NULL) {
 
-  return $form;
-}
+  if (!$image_style) {
+    $image_style = entity_create('image_style', array());
+  }
+  
+  return entity_get_form($image_style);
 
-/**
- * Submit handler for adding a new image style.
- */
-function image_style_add_form_submit($form, &$form_state) {
-  $style = entity_create('image_style', array(
-    'name' => $form_state['values']['name'],
-    'label' => $form_state['values']['label'],
-  ));
-  $style->save();
-  drupal_set_message(t('Style %name was created.', array('%name' => $style->label())));
-  $form_state['redirect'] = 'admin/config/media/image-styles/manage/' . $style->id();
 }
 
 /**
diff --git a/core/modules/image/image.module b/core/modules/image/image.module
index 956eafd..055f799 100644
--- a/core/modules/image/image.module
+++ b/core/modules/image/image.module
@@ -127,8 +127,7 @@ function image_menu() {
   $items['admin/config/media/image-styles/add'] = array(
     'title' => 'Add style',
     'description' => 'Add a new image style.',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('image_style_add_form'),
+    'page callback' => 'image_style_form',
     'access arguments' => array('administer image styles'),
     'type' => MENU_LOCAL_ACTION,
     'weight' => 2,
@@ -139,8 +138,8 @@ function image_menu() {
     'title callback' => 'entity_page_label',
     'title arguments' => array(5),
     'description' => 'Configure an image style.',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('image_style_form', 5),
+    'page callback' => 'image_style_form',
+    'page arguments' => array(5),
     'access arguments' => array('administer image styles'),
     'file' => 'image.admin.inc',
   );
@@ -265,7 +264,7 @@ function image_form_system_file_system_settings_alter(&$form, &$form_state) {
 }
 
 /**
- * Form submission handler for system_file_system_settings().
+ * Submit handler for the file system settings form.
  *
  * Adds a menu rebuild after the public file path has been changed, so that the
  * menu router item depending on that file path will be regenerated.
@@ -301,8 +300,7 @@ function image_file_download($uri) {
     if ($info = image_get_info($uri)) {
       // Check the permissions of the original to grant access to this image.
       $headers = module_invoke_all('file_download', $original_uri);
-      // Confirm there's at least one module granting access and none denying access.
-      if (!empty($headers) && !in_array(-1, $headers)) {
+      if (!in_array(-1, $headers)) {
         return array(
           // Send headers describing the image's size, and MIME-type...
           'Content-Type' => $info['mime_type'],
@@ -348,13 +346,17 @@ function image_file_predelete(File $file) {
  * Implements hook_image_style_update().
  */
 function image_image_style_update(ImageStyle $style) {
+ 
   if ($style->id() != $style->getOriginalID()) {
     $instances = field_read_instances();
     // Loop through all fields searching for image fields.
     foreach ($instances as $instance) {
       if ($instance['widget']['module'] == 'image') {
-        $view_modes = entity_get_view_modes($instance['entity_type']);
-        $view_modes = array('default') + array_keys($view_modes);
+        $entity_info = entity_get_info($instance['entity_type']);
+        $view_modes = array('default');
+        if (isset($entity_info['view_modes'])) {
+          $view_modes = array_merge($view_modes, array_key($entity_info['view_modes']));
+        }
         foreach ($view_modes as $view_mode) {
           $display = entity_get_display($instance['entity_type'], $instance['bundle'], $view_mode);
           $display_options = $display->getComponent($instance['field_name']);
@@ -513,7 +515,7 @@ function image_field_update_instance($instance, $prior_instance) {
 }
 
 /**
- * Clears cached versions of a specific file in all styles.
+ * Clear cached versions of a specific file in all styles.
  *
  * @param $path
  *   The Drupal file path to the original image.
@@ -556,10 +558,10 @@ function image_image_style_load($styles) {
 }
 
 /**
- * Gets an array of image styles suitable for using as select list options.
+ * Get an array of image styles suitable for using as select list options.
  *
  * @param $include_empty
- *   If TRUE a '- None -' option will be inserted in the options array.
+ *   If TRUE a <none> option will be inserted in the options array.
  * @return
  *   Array of image styles both key and value are set to style name.
  */
@@ -567,7 +569,7 @@ function image_style_options($include_empty = TRUE) {
   $styles = entity_load_multiple('image_style');
   $options = array();
   if ($include_empty && !empty($styles)) {
-    $options[''] = t('- None -');
+    $options[''] = t('<none>');
   }
   foreach ($styles as $name => $style) {
     $options[$name] = $style->label();
@@ -580,7 +582,7 @@ function image_style_options($include_empty = TRUE) {
 }
 
 /**
- * Page callback: Generates a derivative, given a style and image path.
+ * Menu callback; Given a style and image path, generate a derivative.
  *
  * After generating an image, transfer it to the requesting agent.
  *
@@ -746,7 +748,7 @@ function image_style_transform_dimensions($style_name, array &$dimensions) {
 }
 
 /**
- * Flushes cached media for a style.
+ * Flush cached media for a style.
  *
  * @param $style
  *   An image style array.
@@ -772,7 +774,7 @@ function image_style_flush($style) {
 }
 
 /**
- * Returns the URL for an image derivative given a style and image path.
+ * Return the URL for an image derivative given a style and image path.
  *
  * @param $style_name
  *   The name of the style to be used with this image.
@@ -799,7 +801,7 @@ function image_style_url($style_name, $path) {
 }
 
 /**
- * Returns the URI of an image when using a style.
+ * Return the URI of an image when using a style.
  *
  * The path returned by this function may not exist. The default generation
  * method only creates images when they are requested by a user's browser.
@@ -825,10 +827,7 @@ function image_style_path($style_name, $uri) {
 }
 
 /**
- * Returns a set of image effects.
- *
- * These image effects are exposed by modules implementing
- * hook_image_effect_info().
+ * Pull in image effects exposed by modules implementing hook_image_effect_info().
  *
  * @return
  *   An array of image effects to be used when transforming images.
@@ -870,7 +869,7 @@ function image_effect_definitions() {
 }
 
 /**
- * Loads the definition for an image effect.
+ * Load the definition for an image effect.
  *
  * The effect definition is a set of core properties for an image effect, not
  * containing any user-settings. The definition defines various functions to
@@ -897,7 +896,7 @@ function image_effect_definition_load($effect) {
 }
 
 /**
- * Loads a single image effect.
+ * Load a single image effect.
  *
  * @param $ieid
  *   The image effect ID.
@@ -934,7 +933,7 @@ function image_effect_load($ieid, $style_name) {
 }
 
 /**
- * Saves an image effect.
+ * Save an image effect.
  *
  * @param ImageStyle $style
  *   The image style this effect belongs to.
@@ -963,7 +962,7 @@ function image_effect_save($style, &$effect) {
 }
 
 /**
- * Deletes an image effect.
+ * Delete an image effect.
  *
  * @param ImageStyle $style
  *   The image style this effect belongs to.
@@ -977,7 +976,7 @@ function image_effect_delete($style, $effect) {
 }
 
 /**
- * Applies an image effect to the image object.
+ * Given an image object and effect, perform the effect on the file.
  *
  * @param $image
  *   An image object returned by image_load().
@@ -1033,7 +1032,7 @@ function theme_image_style($variables) {
 }
 
 /**
- * Accepts a keyword (center, top, left, etc) and returns it as a pixel offset.
+ * Accept a keyword (center, top, left, etc) and return it as a pixel offset.
  *
  * @param $value
  * @param $current_pixels
diff --git a/core/modules/image/lib/Drupal/image/ImageStyleFormController.php b/core/modules/image/lib/Drupal/image/ImageStyleFormController.php
index 6274fe2..a87767f 100644
--- a/core/modules/image/lib/Drupal/image/ImageStyleFormController.php
+++ b/core/modules/image/lib/Drupal/image/ImageStyleFormController.php
@@ -27,7 +27,7 @@ public function form(array $form, array &$form_state, EntityInterface $style) {
       '#title' => $style->IsNew() ? t('Administrative label') : t('Image style name'),
       '#default_value' => $style->label,
       '#required' => TRUE,
-      '#weight' => 2
+      '#weight' => 20
     );
     $form['name'] = array(
       '#type' => 'machine_name',
@@ -36,6 +36,7 @@ public function form(array $form, array &$form_state, EntityInterface $style) {
       ),
       '#default_value' => $style->name,
       '#required' => TRUE,
+      '#weight' => 30
     );
 
     if (!$style->IsNew()) {
@@ -49,13 +50,13 @@ public function form(array $form, array &$form_state, EntityInterface $style) {
         '#type' => 'item',
         '#title' => t('Preview'),
         '#markup' => theme('image_style_preview', array('style' => $style)),
-        '#weight' => 1
+        '#weight' => 10
       );
 
       // Build the list of existing image effects for this image style.
       $form['effects'] = array(
         '#theme' => 'image_style_effects',
-        '#weight' => 3
+        '#weight' => 40
       );
 
       if (!empty($style->effects)) {
@@ -204,14 +205,14 @@ public function effectSave($form, &$form_state) {
   public function save(array $form, array &$form_state) {
 
     $style = $this->getEntity($form_state);
+    $style->set('id', $form_state['values']['name']);
     
-    $style->set('name', $form_state['values']['name']);
-    $style->set('label', $form_state['values']['label']);
     $status = $style->save();
 
     if ($status == SAVED_UPDATED) {
       drupal_set_message(t('Changes to the style have been saved.'));
     }
+
     $form_state['redirect'] = 'admin/config/media/image-styles/manage/' . $style->id();
 
   }
diff --git a/core/modules/image/lib/Drupal/image/Plugin/Core/Entity/ImageStyle.php b/core/modules/image/lib/Drupal/image/Plugin/Core/Entity/ImageStyle.php
index d820050..d915b1f 100644
--- a/core/modules/image/lib/Drupal/image/Plugin/Core/Entity/ImageStyle.php
+++ b/core/modules/image/lib/Drupal/image/Plugin/Core/Entity/ImageStyle.php
@@ -19,6 +19,9 @@
  *   label = @Translation("Image style"),
  *   module = "image",
  *   controller_class = "Drupal\image\ImageStyleStorageController",
+ *  form_controller_class = {
+ *     "default" = "Drupal\image\ImageStyleFormController"
+ *   },
  *   uri_callback = "image_style_entity_uri",
  *   config_prefix = "image.style",
  *   entity_keys = {
