diff --git a/imagefield_crop_file.inc b/imagefield_crop_file.inc
index f21fe58..252537c 100644
--- a/imagefield_crop_file.inc
+++ b/imagefield_crop_file.inc
@@ -48,3 +48,27 @@ function imagefield_crop_file_admin_original_path($file) {
   }
   return $original_path;
 }
+
+/**
+ * Implements hook_file_download.
+ *
+ * Gives access to the cropped image that matches the original one.
+ */
+function imagefield_crop_file_download($filepath) {
+  $suffix = imagefield_crop_file_admin_crop_display_path(array('filepath' => ''));
+  if (substr($filepath, -1 * strlen($suffix)) == $suffix) {
+    $original_path = substr($filepath, 0, -1 * strlen($suffix));
+    $original_full_path = file_create_path($original_path);
+    $display_full_path = file_create_path($filepath);
+    // Allow access to temporary images, since they're not yet associated
+    // with a node. If not temporary, check access on the original file.
+    $status = db_result(db_query("SELECT status FROM {files} WHERE filepath = '%s'", $original_full_path));
+    $access = ($status === '0' || module_invoke_all('file_download', $original_path));
+    if ($access && $info = getimagesize($display_full_path)) {
+      return array(
+        'Content-Type: ' . $info['mime'],
+        'Content-Length: ' . filesize($display_full_path)
+      );
+    }
+  }
+}
diff --git a/imagefield_crop_widget.inc b/imagefield_crop_widget.inc
index 1f88e89..54d18c0 100644
--- a/imagefield_crop_widget.inc
+++ b/imagefield_crop_widget.inc
@@ -282,7 +282,6 @@ function theme_imagefield_crop_cropbox($file = NULL, $alt = '', $title = '', $at
   return theme('form_element', $element, $output);
 }
 
-
 function theme_imagefield_crop_dynamic_preview($file, $resolution, $preview_width = 0) {
   $file = (array)$file;
   if (!is_file($file['filepath'])) {
@@ -327,7 +326,19 @@ function _imagefield_crop_resize($src, $crop = NULL, $scale = NULL, $dst = '') {
       imageapi_image_scale_and_crop($image, $scale['width'], $scale['height']);
     }
 
-    $result = imageapi_image_close($image, $dst);
+    if ($result = imageapi_image_close($image, $dst)) {
+      // After cropping the info on the original file needs to be updated to the
+      // cropped info for proper loading by other header handlers.
+      $new_image = imageapi_image_open($dst);
+      $data = array(
+        'fid' => db_result(db_query("SELECT fid FROM {files} WHERE filepath ='%s'", $new_image->source)),
+        'filesize' => $new_image->info['file_size'],
+      );
+      drupal_write_record('files', $data, 'fid');
+
+      // Clear the old file from the cache.
+      field_file_load($data['fid'], TRUE);
+    }
   }
 
   return $result;
