diff --git a/imagefield.module b/imagefield.module
index 6fd0aa2..f061f10 100644
--- a/imagefield.module
+++ b/imagefield.module
@@ -31,7 +31,7 @@ function imagefield_theme() {
     // Use to generate a preview (admin view) of an imagefield item for use in
     // field item forms and filefield widgets. Invoked by filefield_widget_process.
     'imagefield_widget_preview' => array(
-      'arguments' => array('item' => NULL),
+      'arguments' => array('item' => NULL, 'preview_preset' => NULL),
     ),
     // Theme function for the field item elements. allows you to place children
     // within the context of the parent.
@@ -40,7 +40,7 @@ function imagefield_theme() {
     ),
     // Generates and img tag to the admin thumbnail of an ImageField upload.
     'imagefield_admin_thumbnail' => array(
-      'arguments' => array('item' => NULL),
+      'arguments' => array('item' => NULL, 'preview_preset' => NULL),
     ),
     // ImageField formatter theme functions.
     'imagefield_formatter_image_plain' => array(
@@ -357,19 +357,31 @@ function theme_imagefield_item($item) {
   return theme('imagefield_image', $item, $item['alt'], $item['title']);
 }
 
-function theme_imagefield_widget_preview($item = NULL) {
-  return '<div class="imagefield-preview">' . theme('imagefield_admin_thumbnail', $item) . '</div>';
+function theme_imagefield_widget_preview($item = NULL, $preview_preset = ''){
+  return '<div class="imagefield-preview">' . theme('imagefield_admin_thumbnail', $item, $preview_preset) . '</div>';
 }
 
 function theme_imagefield_widget_item($element) {
   return theme('filefield_widget_item', $element);
 }
 
-function theme_imagefield_admin_thumbnail($item = NULL) {
+function theme_imagefield_admin_thumbnail($item = NULL, $preview_preset = ''){
   if (is_null($item) || empty($item['filepath'])) {
     return '<!-- link to default admin thumb -->';
   }
-  $thumb_path = imagefield_file_admin_thumb_path($item);
+
+  if (!empty($preview_preset)){
+    return theme('imagecache', $preview_preset, $item['filepath']);
+  }
+  else{
+    $thumb_path = imagefield_file_admin_thumb_path($item);
+
+    //Encode the parts of the the path.
+    $parts = explode('/', $thumb_path);
+    foreach ($parts as $n => $part){
+      $parts[$n] = rawurlencode($part);
+    }
+    $thumb_path = implode('/', $parts);
 
   // Encode the path so that unusual characters are printed correctly.
   $thumb_path = field_file_urlencode_path($thumb_path);
@@ -381,7 +393,10 @@ function theme_imagefield_admin_thumbnail($item = NULL) {
     $query_string = $query_character . $item['timestamp'];
   }
 
+
   return '<img src="'. file_create_url($thumb_path) . $query_string . '" title="' . check_plain($item['filename']) . '"  alt="' . t('Image preview') . '" />';
+
+  }
 }
 /**
  * @} End defgroup "Theme Callbacks".
diff --git a/imagefield_widget.inc b/imagefield_widget.inc
index 710ab97..5bcfeed 100644
--- a/imagefield_widget.inc
+++ b/imagefield_widget.inc
@@ -17,7 +17,7 @@ function imagefield_widget_settings_form($widget) {
 
   $form['max_resolution'] = array(
     '#type' => 'textfield',
-    '#title' => t('Maximum resolution for Images'),
+    '#title' => t('Maximum dimensions for images'),
     '#default_value' => !empty($widget['max_resolution']) ? $widget['max_resolution'] : 0,
     '#size' => 15,
     '#maxlength' => 10,
@@ -26,7 +26,7 @@ function imagefield_widget_settings_form($widget) {
   );
   $form['min_resolution'] = array(
     '#type' => 'textfield',
-    '#title' => t('Minimum resolution for Images'),
+    '#title' => t('Minimum dimensions for images'),
     '#default_value' => !empty($widget['min_resolution']) ? $widget['min_resolution'] : 0,
     '#size' => 15,
     '#maxlength' => 10,
@@ -126,6 +126,38 @@ function imagefield_widget_settings_form($widget) {
     '#value' => $widget['default_image'],
   );
 
+  //preview options (imagecache for preview thumbnails)
+  $form['preview'] = array(
+    '#type' => 'fieldset',
+    '#title' => t('Preview Thumbnail Settings'),
+    '#collapsible' => true,
+    '#collapsed' => true,
+    '#weight' => 8,
+  );
+  $form['preview']['preview_preset'] = array(
+      '#default_value' => !empty($widget['preview_preset']) ? $widget['preview_preset'] : '',
+      );
+  if (module_exists('imagecache')){
+    $imagecache_presets = imagecache_presets();
+    $preview_presets_list[''] = t('<Do not use ImageCache>');
+    foreach ($imagecache_presets as $key => $preset){
+      $preview_presets_list[$preset['presetname']] = $preset['presetname'];
+    }
+    $imagecache_preset = array(
+      '#type' => 'select',
+      '#title' => t('ImageCache Preset'),
+      '#description' => t('This ImageCache preset will be used to create the thumbnail.'),
+      '#options' => $preview_presets_list, //@str_replace: returns correct node type
+      );
+      $form['preview']['preview_preset'] = array_merge($form['preview']['preview_preset'], $imagecache_preset);
+      } else{
+        $form['preview']['ImageCache_disabled'] = array(
+          '#value' => '<p>'.t('Enable <a href="http://drupal.org/project/imagecache">imagecache</a> to control the way preview thumbnails should be shown for this field.').'</p>',
+          );
+          $form['preview']['preview_preset']['#type'] = 'value';
+
+      }
+
   return $form;
 }
 
@@ -197,7 +229,7 @@ function imagefield_widget_settings_validate($widget) {
  */
 function imagefield_widget_settings_save($widget) {
   $filefield_settings = module_invoke('filefield', 'widget_settings', 'save', $widget);
-  return array_merge($filefield_settings, array('max_resolution', 'min_resolution', 'alt',  'custom_alt', 'title', 'custom_title', 'title_type', 'default_image', 'use_default_image'));
+  return array_merge($filefield_settings, array('max_resolution', 'min_resolution', 'alt',  'custom_alt', 'title', 'custom_title', 'title_type', 'default_image', 'use_default_image', 'preview_preset'));
 }
 
 /**
@@ -226,7 +258,8 @@ function imagefield_widget_process($element, $edit, &$form_state, $form) {
   $element['#theme'] = 'imagefield_widget_item';
 
   if (isset($element['preview']) && $element['#value']['fid'] != 0) {
-    $element['preview']['#value'] = theme('imagefield_widget_preview', $element['#value']);
+    $preview_preset = module_exists('imagecache') ? $field['widget']['preview_preset'] : '';
+    $element['preview']['#value'] = theme('imagefield_widget_preview', $element['#value'], $preview_preset);
   }
 
   // Check if using the default alt text and replace tokens.
