--- imagefield_archive.module.orig	2010-03-29 23:36:00.000000000 -0700
+++ imagefield_archive.module	2010-03-31 12:03:44.000000000 -0700
@@ -16,6 +16,7 @@ function imagefield_archive_action_info(
 }
 
 define('IMAGEFIELD_ZIP_PRESET_ORIGINAL', '__original__');
+define('IMAGE_ZIP_PRESET_ORIGINAL', '_original');
 
 /**
  * Implementation of action().
@@ -24,11 +25,26 @@ function imagefield_archive_action($nids
   $files = array();
   foreach ($nids as $nid) {
     $node = node_load($nid);
+    if ($node->type=='image') { //make sure this is enough here
+      foreach ($context['presets']['imagepresets'] as $presetid) {
+        if ($presetid != IMAGE_ZIP_PRESET_ORIGINAL) {
+          _image_build_derivatives_if_needed($node);
+        }
+        $image_presets = variable_get('image_sizes', FALSE);
+        $derivative = array(
+          'node' => $node,
+          'filepath' => $node->images[$presetid],
+          'filename' => basename($node->images[IMAGE_ZIP_PRESET_ORIGINAL]),
+          'presetname' => $image_presets[$presetid]['label'],
+        );
+        $files[] = (object)$derivative;
+      }
+    }
     $content = content_types($node->type);
     foreach ($content['fields'] as $field) {
       if ($field['type'] == 'filefield' && $field['widget']['module'] == 'imagefield') {
         if (!empty($node->$field['field_name'])) foreach ($node->$field['field_name'] as $file) {
-          foreach ($context['presets'] as $presetid) {
+          foreach ($context['presets']['imagecachepresets'] as $presetid) {
             if ($presetid == IMAGEFIELD_ZIP_PRESET_ORIGINAL) {
               $file['node'] = $node;
               $files[] = (object)$file;
@@ -100,7 +116,7 @@ function imagefield_archive_token_list($
       'filename' => t('Name of the image file (without the extension)'),
       'extension' => t('Extension of the image file (without the leading dot)'),
       'dirname' => t('Path of the image file (without the filename)'),
-      'presetname' => t('Name of the ImageCache preset ("Original" if no preset)'),
+      'presetname' => t('Name of the ImageCache / Image preset ("Original" if no preset)'),
     );
   }
   return $tokens;
@@ -112,7 +128,8 @@ function imagefield_archive_token_list($
 function imagefield_archive_token_values($type, $object = NULL) {
   if ($type != 'imagefield_archive' || !$object) return array();
   $pathinfo = pathinfo($object->filepath);
-  $values['filename'] = $pathinfo['filename'];
+  $filepathinfo = pathinfo($object->filename);
+  $values['filename'] = $filepathinfo['filename'];
   $values['dirname'] = $pathinfo['dirname'];
   $values['extension'] = $pathinfo['extension'];
   $values['presetname'] = isset($object->presetname) ? $object->presetname : t('Original');
@@ -170,17 +187,37 @@ function imagefield_archive_action_form(
     foreach (imagecache_presets() as $id => $preset) {
       $presets[$id] = $preset['presetname'];
     }
-    $form['presets'] = array(
+    $form['imagecachepresets'] = array(
       '#type' => 'select',
       '#multiple' => TRUE,
       '#title' => t('ImageCache presets'),
-      '#default_value' => @$context['presets'],
+      '#default_value' => @$context['imagecachepresets'],
+      '#required' => TRUE,
+      '#options' => $presets, 
+    );
+  }
+  else {
+    $form['imagecachepresets'] = array('#type' => 'value', '#value' => $presets);
+  }
+  $presets = array(
+    IMAGE_ZIP_PRESET_ORIGINAL => t('Original'),
+  );
+  if (module_exists('image')) {
+    $image_presets=variable_get('image_sizes', FALSE);
+    foreach ($image_presets as $id => $preset) {
+      $presets[$id] = $preset['label'];
+    }
+    $form['imagepresets'] = array(
+      '#type' => 'select',
+      '#multiple' => TRUE,
+      '#title' => t('Image presets'),
+      '#default_value' => @$context['imagepresets'],
       '#required' => TRUE,
       '#options' => $presets, 
     );
   }
   else {
-    $form['presets'] = array('#type' => 'value', '#value' => $presets);
+    $form['imagepresets'] = array('#type' => 'value', '#value' => $presets);
   }
   return $form;
 }
@@ -190,7 +227,10 @@ function imagefield_archive_action_form(
  */
 function imagefield_archive_action_submit($form, $form_state) {
   return array(
-    'presets' => $form_state['values']['presets'],
+    'presets' => array(
+      'imagepresets' => $form_state['values']['imagepresets'],
+      'imagecachepresets' => $form_state['values']['imagecachepresets'],
+    )
   );
 }
 
