diff --git sites/all/modules/imagefield_crop/imagefield_crop.module sites/all/modules/imagefield_crop/imagefield_crop.module
index c3937b6..f91370b 100644
--- sites/all/modules/imagefield_crop/imagefield_crop.module
+++ sites/all/modules/imagefield_crop/imagefield_crop.module
@@ -109,6 +109,10 @@ function imagefield_crop_theme() {
     'imagefield_crop_edit_crop_image_row' => array(
       'arguments' => array('element' => NULL),
     ),
+
+    'imagefield_crop_cropbox_image' => array(
+      'arguments' => array('file' => NULL, 'alt' => '', 'title' => '', 'attributes' => NULL, 'getsize' => TRUE),
+    ),
   );
 }
 
diff --git sites/all/modules/imagefield_crop/imagefield_crop_widget.inc sites/all/modules/imagefield_crop/imagefield_crop_widget.inc
index 70462b7..7dce6f8 100644
--- sites/all/modules/imagefield_crop/imagefield_crop_widget.inc
+++ sites/all/modules/imagefield_crop/imagefield_crop_widget.inc
@@ -28,6 +28,14 @@ function imagefield_crop_widget_settings_form($widget) {
     t('The output resolution of the cropped image, expressed as WIDTHxHEIGHT (e.g. 640x480). Set to 0 not to rescale after cropping. Note: output resolution must be defined in order to present a dynamic preview.'),
     '#element_validate' => array('_imagefield_crop_widget_settings_resolution_validate'),
   );
+  $form['imagecache_preview'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Use imagecache preset'),
+    '#default_value' => isset($widget['imagecache_preview']) ? $widget['imagecache_preview'] : 1,
+    '#description' => t('Check this if you want to use imagecache presets to display cropped image preview.'),
+    '#element_validate' => array('_imagefield_crop_widget_settings_imagecache_preview_validate'),
+  );
+  $form['preview_preset'] = _imagefield_crop_widget_get_imagecache_presets_select($widget);
   $form['enforce_ratio'] = array(
     '#type' => 'checkbox',
     '#title' => t('Enforce box crop box ratio'),
@@ -45,6 +53,14 @@ function imagefield_crop_widget_settings_form($widget) {
     '#description' => t('The resolution of the area used for the cropping of the image. Image will displayed at this resolution for cropping. Use WIDTHxHEIGHT format, zero values are permitted, e.g. 500x0 will limit crop box to 500 pixels width.'),
     '#element_validate' => array('_imagefield_crop_widget_settings_croparea_validate'),
   );
+  $form['imagecache_crop'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Use imagecache preset for crop image'),
+    '#default_value' => isset($widget['imagecache_crop']) ? $widget['imagecache_crop'] : 1,
+    '#description' => t('Check this if you want to use imagecache presets to display croparea image.'),
+    '#element_validate' => array('_imagefield_crop_widget_settings_imagecache_crop_validate'),
+  );
+  $form['crop_preset'] = _imagefield_crop_widget_get_imagecache_presets_select($widget, 'crop_preset');
   
   return $form;
 }
@@ -74,12 +90,37 @@ function _imagefield_crop_widget_settings_croparea_validate($element,&$form_stat
   }
 }
 
+function _imagefield_crop_widget_settings_imagecache_preview_validate($element, &$form_state) {
+  if ($form_state['values']['imagecache_preview'] && $form_state['values']['preview_preset'] == -1) {
+    form_error($element, t('You must select an imagecache preset to be used for preview image'));
+  }
+}
+
+function _imagefield_crop_widget_settings_imagecache_crop_validate($element, &$form_state) {
+  if ($form_state['values']['imagecache_crop'] && $form_state['values']['crop_preset'] == -1) {
+    form_error($element, t('You must select an imagecache preset to be used for croparea image'));
+  }
+}
+
+function _imagefield_crop_widget_get_imagecache_presets_select($widget, $type = 'preview_preset') {
+  $options[-1] = t('Choose preset');
+  foreach (imagecache_presets() as $preset) {
+    $options[$preset['presetname']] = $preset['presetname'];
+  }
+  return array(
+    '#type' => 'select',
+    '#title' => t('ImageCache presets'),
+    '#options' => $options,
+    '#default_value' => (isset($widget[$type])) ? $widget[$type] : array(-1),
+  );
+}
+
 function imagefield_crop_widget_settings_validate($widget) {
   module_invoke('imagefield', 'widget_settings_validate', $widget);
 }
 
 function imagefield_crop_widget_settings_save($widget) {
-  $settings = array('collapsible', 'resolution', 'enforce_ratio', 'croparea');
+  $settings = array('collapsible', 'resolution', 'enforce_ratio', 'croparea', 'imagecache_preview', 'preview_preset', 'imagecache_crop', 'crop_preset');
   return array_merge($settings, module_invoke('imagefield', 'widget_settings_save', $widget));
 }
 
@@ -160,10 +201,21 @@ function imagefield_crop_widget_process($element, $edit, &$form_state, $form) {
   
   $crop_display = $file;
   $crop_display['filepath'] = imagefield_crop_file_admin_crop_display_path($file);
+
+  // Check weither to use imagecache for dynamic preview image
+  if ($field['widget']['imagecache_preview']) {
+    $crop_display['preview_preset'] = $field['widget']['preview_preset'];
+  }
+
   if (!file_exists($crop_display['filepath'])) {
     // crop_display_path might not exist if we were imagefield_crop is added to existing images
     $crop_display['filepath'] = $file['filepath'];
   }
+
+  // Check weither to use imagecache for dynamic preview image
+  if ($field['widget']['imagecache_crop']) {
+    $crop_display['crop_preset'] = $field['widget']['crop_preset'];
+  }
   $element['data']['cropbox'] = array(
     '#type' => 'markup',
     '#value' => theme('imagefield_crop_cropbox', $crop_display, $crop_display['alt'], $crop_display['title'], NULL, FALSE, $element['#id'] .'-cropbox'),
@@ -239,7 +291,7 @@ function imagefield_crop_widget_validate($element) {
 
 function theme_imagefield_crop_cropbox($file = NULL, $alt = '', $title = '', $attributes = NULL, $getsize = TRUE, $id) {
   $attributes = array_merge((array)$attributes + array('class' => 'cropbox', 'id' => $id));
-  $output = theme('imagefield_image', $file, $alt, $title, $attributes, $getsize);
+  $output = theme('imagefield_crop_cropbox_image', $file, $alt, $title, $attributes, $getsize);
   $element = array(
     '#type'  => 'element',
     '#title' => t('Crop area'),
@@ -248,8 +300,50 @@ function theme_imagefield_crop_cropbox($file = NULL, $alt = '', $title = '', $at
   return theme('form_element', $element, $output);
 }
 
+/**
+ * @defgroup "Theme Callbacks"
+ * @{
+ * @see imagefield_theme().
+ */
+function theme_imagefield_crop_cropbox_image($file, $alt = '', $title = '', $attributes = NULL, $getsize = TRUE) {
+  $file = (array)$file;
+  if (!is_file($file['filepath'])) {
+    return '<!-- File not found: '. $file['filepath'] .' -->';
+  }
 
-function theme_imagefield_crop_dynamic_preview($file, $resolution) {
+  if ($getsize) {
+    // Use cached width and height if available.
+    if (!empty($file['data']['width']) && !empty($file['data']['height'])) {
+      $attributes['width']  = $file['data']['width'];
+      $attributes['height'] = $file['data']['height'];
+    }
+    // Otherwise pull the width and height from the file.
+    elseif (list($width, $height, $type, $image_attributes) = @getimagesize($file['filepath'])) {
+      $attributes['width'] = $width;
+      $attributes['height'] = $height;
+    }
+  }
+
+  if (!empty($title)) {
+    $attributes['title'] = $title;
+  }
+
+  // Alt text should be added even if it is an empty string.
+  $attributes['alt'] = $alt;
+
+  // Add a timestamp to the URL to ensure it is immediately updated after editing.
+  $query_string = '';
+  if (isset($file['timestamp'])) {
+    $query_character = (variable_get('file_downloads', FILE_DOWNLOADS_PUBLIC) == FILE_DOWNLOADS_PRIVATE && variable_get('clean_url', '0') == '0') ? '&' : '?';
+    $query_string = $query_character . $file['timestamp'];
+  }
+
+  $url = (isset($file['crop_preset'])) ? imagecache_create_url($file['crop_preset'], $file['filepath'] . $query_string) : file_create_url($file['filepath']) . $query_string;
+  $attributes['src'] = $url;
+  $attributes = drupal_attributes($attributes);
+  return '<img '. $attributes .' />';
+}
+function theme_imagefield_crop_dynamic_preview($file, $resolution, $imagecache_preset = NULL) {
   $file = (array)$file;
   if (!is_file($file['filepath'])) {
     return array('<!-- file not found: '. $file['filepath'] .' -->', '');
@@ -260,7 +354,9 @@ function theme_imagefield_crop_dynamic_preview($file, $resolution) {
   if (list($orig_width, $orig_height, $type, $image_attributes) = @getimagesize($file['filepath'])) {
     $alt = $file['alt'] ? $alt : 'jcrop preview';
     $title = $file['title'] ? $title : '';
-    $url = file_create_url($file['filepath']);
+    $url = (isset($file['preview_preset'])) 
+            ? imagecache_create_url($file['preview_preset'], $file['filepath']) 
+            : file_create_url($file['filepath']);
     $settings = array(
       'orig_width' => $orig_width,
       'orig_height' => $orig_height,
