diff -Naur imagefield.old/imagefield.install imagefield/imagefield.install
--- imagefield.old/imagefield.install	2008-01-23 02:44:23.346999482 -0500
+++ imagefield/imagefield.install	2008-01-23 02:48:45.169572782 -0500
@@ -74,5 +74,46 @@
 }
 
 
+/**
+ * Schema change to enable caption, credit and featured.
+ */
+
+function imagefield_update_3() {
+  $ret = array();
+
+  include_once(drupal_get_path('module', 'content') .'/content.module');
+  include_once(drupal_get_path('module', 'content') .'/content_admin.inc');
+
+  $fields = content_fields();
+
+  foreach ($fields as $field) {
+    switch ($field['type']) {
+      case 'image':
+        $oldcolumns = array(
+          'fid' => array('type' => 'int', 'not null' => TRUE, 'default' => '0'),
+          'title' => array('type' => 'varchar', 'length' => 255, 'not null' => TRUE, 'default' => "''", 'sortable' => TRUE),
+          'alt' => array('type' => 'varchar', 'length' => 255, 'not null' => TRUE, 'default' => "''", 'sortable' => TRUE),
+        );
+        $newcolumns = array(
+          'fid' => array('type' => 'int', 'not null' => TRUE, 'default' => '0'),
+          'title' => array('type' => 'varchar', 'length' => 255, 'not null' => TRUE, 'default' => "''", 'sortable' => TRUE),
+          'alt' => array('type' => 'varchar', 'length' => 255, 'not null' => TRUE, 'default' => "''", 'sortable' => TRUE),
+          'caption' => array('type' => 'varchar', 'length' => 255, 'not null' => TRUE, 'default' => "''", 'sortable' => TRUE),
+          'credit' => array('type' => 'varchar', 'length' => 255, 'not null' => TRUE, 'default' => "''", 'sortable' => TRUE),
+          'feature' => array('type' => 'int', 'not null' => TRUE, 'default' => '0'),
+        );
+        content_alter_db_field($field, $oldcolumns, $field, $newcolumns);
+        break;
+    }
+    drupal_set_message('altered: <br /><pre>'. print_r($field, true) .'</pre>');
+  }
+
+
+  db_query('DELETE FROM {cache}');
+  return $ret;
+}
+
+
+
 
 
diff -Naur imagefield.old/imagefield.module imagefield/imagefield.module
--- imagefield.old/imagefield.module	2008-01-22 23:54:19.016778362 -0500
+++ imagefield/imagefield.module	2008-01-23 02:46:56.554827909 -0500
@@ -140,6 +140,9 @@
         'fid' => array('type' => 'int', 'not null' => TRUE, 'default' => '0'),
         'title' => array('type' => 'varchar', length => 255, 'not null' => TRUE, 'default' => "''", 'sortable' => TRUE),
         'alt' => array('type' => 'varchar', length => 255, 'not null' => TRUE, 'default' => "''", 'sortable' => TRUE),
+        'caption' => array('type' => 'varchar', length => 255, 'not null' => TRUE, 'default' => "''", 'sortable' => TRUE),
+        'credit' => array('type' => 'varchar', length => 255, 'not null' => TRUE, 'default' => "''", 'sortable' => TRUE),
+        'feature' => array('type' => 'int', 'not null' => TRUE, 'default' => '0'),
       );
       return $columns;
 
@@ -177,6 +180,9 @@
     'fid' => 0,
     'title' => '',
     'alt' => '',
+    'caption' => '',
+    'credit' => '',
+    'feature' => 0,
   );
 }
 
@@ -376,6 +382,24 @@
         '#default_value' =>  $widget['custom_title'] ? $widget['custom_title'] : 0,
         '#description' => t('Enable custom title text for images. Filename will be used if not checked.'),
       );
+      $form['custom_caption'] = array(
+        '#type' => 'checkbox',
+        '#title' => t('Enable custom caption text'),
+        '#default_value' =>  $widget['custom_caption'] ? $widget['custom_caption'] : 0,
+        '#description' => t('Enable custom caption text for images.'),
+      );
+      $form['custom_credit'] = array(
+        '#type' => 'checkbox',
+        '#title' => t('Enable custom credit text'),
+        '#default_value' =>  $widget['custom_credit'] ? $widget['custom_credit'] : 0,
+        '#description' => t('Enable custom credit text for images.'),
+      );
+      $form['custom_feature'] = array(
+        '#type' => 'checkbox',
+        '#title' => t('Enable featured images'),
+        '#default_value' =>  $widget['custom_feature'] ? $widget['custom_feature'] : 0,
+        '#description' => t('Enable the selection of images that should be featured.'),
+      );
       return $form;
 
     case 'validate':
@@ -385,7 +409,7 @@
       break;
 
     case 'save':
-      return array('max_resolution', 'image_path', 'file_extensions', 'custom_alt', 'custom_title');
+      return array('max_resolution', 'image_path', 'file_extensions', 'custom_alt', 'custom_title', 'custom_caption', 'custom_credit', 'custom_feature');
   }
 }
 
@@ -642,7 +666,7 @@
         
         $form[$fieldname][$delta]['preview'] = array(
           '#type' => 'markup',
-          '#value' => theme('imagefield_image', $file, $file['alt'], $file['title'], array('width' => '150'), FALSE),
+          '#value' => theme('imagefield_image', $file, $file['alt'], $file['title'], $file['caption'], $file['credit'], array('width' => '150'), FALSE),
         );
         
         $form[$fieldname][$delta]['description'] = array(
@@ -681,6 +705,53 @@
             '#size' => 10,
           );
         }
+
+        $form[$fieldname][$delta]['caption'] = array(
+          '#type' => 'hidden',
+          '#value' => '',
+        );
+        // overwrite with an input field if custom_caption is flagged;
+        if ($field['widget']['custom_caption']) {
+          $form[$fieldname][$delta]['caption'] = array(
+            '#type' => 'textfield',
+            '#title' =>  t('Caption'),
+            '#default_value' =>  $file['caption'],
+            '#description' => t('Caption text.'),
+            '#maxlength' => 255,
+            '#size' => 10,
+          );
+        }
+
+        $form[$fieldname][$delta]['credit'] = array(
+          '#type' => 'hidden',
+          '#value' => '',
+        );
+        // overwrite with an input field if custom_credit is flagged;
+        if ($field['widget']['custom_credit']) {
+          $form[$fieldname][$delta]['credit'] = array(
+            '#type' => 'textfield',
+            '#title' =>  t('Credit'),
+            '#default_value' =>  $file['credit'],
+            '#description' => t('Photo Credit.'),
+            '#maxlength' => 255,
+            '#size' => 10,
+          );
+        }
+
+        $form[$fieldname][$delta]['feature'] = array(
+          '#type' => 'hidden',
+          '#value' => '0',
+        );
+        // overwrite with an input field if custom_feature is flagged;
+        if ($field['widget']['custom_feature']) {
+          $form[$fieldname][$delta]['feature'] = array(
+            '#type' => 'select',
+            '#options' => array(0 => t('No'), 1 => t('Yes')),
+            '#title' =>  t('Featured'),
+            '#default_value' =>  $file['feature'],
+            '#description' => t('Feature this image.'),
+          );
+        }
         
         // Special handling for single value fields
         if (!$field['multiple']) {
@@ -696,6 +767,9 @@
         $form[$fieldname][$delta]['flags']['delete'] = array('#type' => 'value', '#value' => $file['flags']['delete']);
         $form[$fieldname][$delta]['title'] = array('#type' => 'value', '#value' => $file['title']);
         $form[$fieldname][$delta]['alt'] = array('#type' => 'value', '#value' => $file['alt']);
+        $form[$fieldname][$delta]['caption'] = array('#type' => 'value', '#value' => $file['caption']);
+        $form[$fieldname][$delta]['credit'] = array('#type' => 'value', '#value' => $file['credit']);
+        $form[$fieldname][$delta]['feature'] = array('#type' => 'value', '#value' => $file['feature']);
       }
       if (isset($file['sessionid'])) {
         $form[$fieldname][$delta]['sessionid'] = array('#type' => 'value',  '#value' => $file['sessionid']);
@@ -809,7 +883,7 @@
     $file = _imagefield_file_load($item['fid']);
   }
   if (!empty($file['filepath'])) {
-    return theme('imagefield_image', $file, $item['alt'], $item['title']);
+    return theme('imagefield_image', $file, $item['alt'], $item['title'], $item['caption'], $item['credit']);
   }
 }
 
@@ -827,8 +901,8 @@
   return array();
 }
 
-function theme_imagefield_view_image($file, $alt = '', $title = '', $attributes = NULL, $getsize = TRUE) {
-  return theme('imagefield_image', $file, $alt, $title, $attributes , $getsize);
+function theme_imagefield_view_image($file, $alt = '', $title = '', $caption = '', $credit = '', $attributes = NULL, $getsize = TRUE) {
+  return theme('imagefield_image', $file, $alt, $title, $caption, $credit, $attributes, $getsize);
 }
 
 
@@ -841,6 +915,9 @@
   $output .= '</div>';
   $output .= drupal_render($element['alt']);
   $output .= drupal_render($element['title']);
+  $output .= drupal_render($element['caption']);
+  $output .= drupal_render($element['credit']);
+  $output .= drupal_render($element['feature']);
   $output .= '</div>';
   //$output .= '<div class="imagefield-edit-image-fid">'. $element['fid']['#value'] .'</div>';
   $output = '<div class="imagefield-edit-image-row clear-block">'. $output .'</div>';
@@ -850,7 +927,7 @@
   return $output;  
 }
 
-function theme_imagefield_image($file, $alt = '', $title = '', $attributes = NULL, $getsize = TRUE) {
+function theme_imagefield_image($file, $alt = '', $title = '', $caption = '', $credit = '', $attributes = NULL, $getsize = TRUE) {
   $file = (array)$file;
   if (is_file($file['filepath']) && (!$getsize || (list($width, $height, $type, $image_attributes) = @getimagesize($file['filepath'])))) {
     $attributes = drupal_attributes($attributes);
@@ -858,11 +935,27 @@
     $path = $file['fid'] == 'upload' ? $file['preview'] : $file['filepath'];
     $alt = empty($alt) ? $file['alt'] : $alt;
     $title = empty($title) ? $file['title'] : $title;
+    $caption = empty($caption) ? $file['caption'] : $caption;
+    $credit = empty($credit) ? $file['credit'] : $credit;
     
     $url = file_create_url($path);
-    return '<img src="'. check_url($url) .'" alt="'.
-        check_plain($alt) .'" title="'. check_plain($title) .'" '. $image_attributes . $attributes .' />';
+    return theme('imagefield_credit', $credit) .'<img src="'. check_url($url) .'" alt="'.
+        check_plain($alt) .'" title="'. check_plain($title) .'" '. $image_attributes . $attributes .' />' . theme('imagefield_caption', $caption);
+  }
+}
+
+function theme_imagefield_caption($caption){
+  if(!empty($caption)){
+    return '<div class="imagefield-caption">'. check_markup($caption) .'</div>';
   }
+  return '';
+}
+
+function theme_imagefield_credit($credit){
+  if(!empty($credit)){
+    return '<div class="imagefield-credit">'. check_markup($credit) .'</div>';
+  }
+  return '';
 }
 
 /**
@@ -950,6 +1043,9 @@
       // Set the alt and title from POST
       $items[$key]['alt'] = $image['alt'];
       $items[$key]['title'] = $image['title'];
+      $items[$key]['caption'] = $image['caption'];
+      $items[$key]['credit'] = $image['credit'];
+      $items[$key]['feature'] = $image['feature'];
       $items[$key]['flags']['delete'] = $image['flags']['delete'];
     }
   }
@@ -970,3 +1066,4 @@
   exit;
 
 }
+
