--- a/includes/features.image.inc
+++ b/includes/features.image.inc
@@ -8,13 +8,32 @@ function image_features_api() {
     'image' => array(
       'name' => t('Image styles'),
       'feature_source' => TRUE,
-      'default_hook' => 'image_default_styles',
+      'default_hook' => 'features_image_default_styles',
       'alter_hook' => 'image_styles',
     )
   );
 }
 
 /**
+ * Implements hook_features_image_default_styles.
+ *
+ * This hook returns the default styles defined by the image module itself and
+ * that are not overridden. Styles defined by a contrib module are exportable as
+ * a dependency on that module.
+ */
+function image_features_image_default_styles() {
+  $defaults = array();
+  $styles = image_styles();
+  foreach (image_styles() as $name => $style) {
+    if (isset($style['storage']) && $style['storage'] === 4 /*IMAGE_STORAGE_DEFAULT*/
+      && isset($style['module']) && $style['module'] === 'image') {
+      $defaults[$name] = $style['module'];
+    }
+  }
+  return $defaults;
+}
+
+/**
  * Implements hook_features_export_options().
  */
 function image_features_export_options() {
@@ -30,17 +49,19 @@ function image_features_export_options() {
  */
 function image_features_export($data, &$export, $module_name = '') {
   $pipe = array();
-  $map = features_get_default_map('image');
-  foreach ($data as $style) {
-    $export['dependencies']['image'] = 'image';
-    // If another module provides this style, add it as a dependency
-    if (isset($map[$style]) && $map[$style] != $module_name) {
-      $module = $map[$style];
-      $export['dependencies'][$module] = $module;
-    }
-    // Otherwise, export the style
-    elseif (image_style_load($style)) {
-      $export['features']['image'][$style] = $style;
+  foreach ($data as $name) {
+    if ($style = image_style_load($name)) {
+      // If at least 1 style is exported, add the image module as a dependency.
+      $export['dependencies']['image'] = 'image';
+      // If the style is (originally) defined by a contrib module, add that
+      // module as a dependency.
+      if (isset($style['module']) && $style['module'] !== $module_name) {
+        $export['dependencies'][$style['module']] = $style['module'];
+      }
+      // If the style is user defined or overridden, export the style.
+      if (isset($style['storage']) && $style['storage'] !== 4 /*IMAGE_STORAGE_DEFAULT*/) {
+        $export['features']['image'][$name] = $name;
+      }
     }
   }
   return $pipe;
@@ -50,6 +71,7 @@ function image_features_export($data, &$export, $module_name = '') {
  * Implements hook_features_export_render().
  */
 function image_features_export_render($module_name, $data, $export = NULL) {
+  // Define the styles in an hook_image_default_styles.
   $code = array();
   $code[] = '  $styles = array();';
   $code[] = '';
@@ -64,6 +86,31 @@ function image_features_export_render($module_name, $data, $export = NULL) {
     }
   }
   $code[] = '  return $styles;';
+
+  // Depending on the module execution order (of modules that implement
+  // hook_image_default_styles), the styles as defined above, may have been
+  // overwritten, so we also generate a hook_image_styles_alter implementation.
+  $code[] = '}';
+  $code[] = '';
+  $code[] = "/**";
+  $code[] = " * Implements hook_image_styles_alter().";
+  $code[] = " *";
+  $code[] = " * Note: by using isset instead of array_key_exists, styles that are overridden";
+  $code[] = " * by database content will not be reset.";
+  $code[] = " */";
+  $code[] = "function {$module_name}_image_styles_alter(&\$styles) {";
+  foreach ($data as $name) {
+    if ($style = image_style_load($name)) {
+      _image_features_style_sanitize($style);
+      $style_export = features_var_export($style, '    ');
+      $style_identifier = features_var_export($name);
+      $code[] = "  // Check if image style {$name} has been overwritten";
+      $code[] = "  if (isset(\$styles[{$style_identifier}]['module']) && \$styles[{$style_identifier}]['module'] !== '{$module_name}') {";
+      $code[] = "    \$styles[{$style_identifier}] = array_merge(\$styles[{$style_identifier}], {$style_export});";
+      $code[] = "  }";
+      $code[] = "";
+    }
+  }
   $code = implode("\n", $code);
   return array('image_default_styles' => $code);
 }
