diff --git a/modules/image/image.admin.inc b/modules/image/image.admin.inc
index d72fdf4..03fcb68 100644
--- a/modules/image/image.admin.inc
+++ b/modules/image/image.admin.inc
@@ -774,7 +774,10 @@ function theme_image_style_preview($variables) {
   // Set up preview file information.
   $preview_file = image_style_path($style['name'], $original_path);
   if (!file_exists($preview_file)) {
-    image_style_create_derivative($style, $original_path, $preview_file);
+    if (!image_style_create_derivative($style, $original_path, $preview_file)) {
+      $preview_file = "misc/message-24-error.png";
+      drupal_set_message(t('Unable to generate preview. Check !status_report for more info.', array('!status_report' => l('status report', 'admin/reports/status'))), 'error');
+    }
   }
   $preview_image = image_get_info($preview_file);
   if ($preview_image['width'] > $preview_image['height']) {
diff --git a/modules/image/image.install b/modules/image/image.install
index 121e8c7..2630527 100644
--- a/modules/image/image.install
+++ b/modules/image/image.install
@@ -176,6 +176,21 @@ function image_requirements($phase) {
       );
     }
     $requirements['image_gd']['title'] = t('GD library rotate and desaturate effects');
+
+    // Check for writable style directories.
+    $unwritable = array();
+    foreach (array_keys(image_styles()) as $style_name) {
+      $style_dir = file_default_scheme() . '://styles/' . $style_name;
+      if (!file_prepare_directory($style_dir, FILE_CREATE_DIRECTORY | FILE_MODIFY_PERMISSIONS)) {
+        $unwritable[] = t('Directory %dir is not writable.', array('%dir' => drupal_realpath($style_dir)));
+      }
+    }
+    $requirements['image styles'] = array(
+      'title' => t('Image styles directories'),
+      'value' => t( empty($unwritable) ? 'Writable' : 'Not writable' ),
+      'severity' => empty($unwritable) ? REQUIREMENT_OK : REQUIREMENT_ERROR,
+      'description' => implode('<br />',$unwritable),
+    );
   }
 
   return $requirements;
