diff -Naur imagefield/imagefield.install imagefield-new/imagefield.install
--- imagefield/imagefield.install	2007-04-18 17:02:19.000000000 -0400
+++ imagefield-new/imagefield.install	2008-06-18 14:14:10.457082000 -0400
@@ -73,6 +73,44 @@
   return $ret;
 }
 
+/**
+ * Schema change to enable alt and title tags.
+ */
+
+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/imagefield.module imagefield-new/imagefield.module
--- imagefield/imagefield.module	2008-09-08 15:29:22.000000000 -0400
+++ imagefield-new/imagefield.module	2009-01-16 11:20:00.566755000 -0500
@@ -186,6 +186,10 @@
         '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;
 
@@ -224,6 +228,9 @@
     'fid' => 0,
     'title' => '',
     'alt' => '',
+    'caption' => '',
+    'credit' => '',
+    'feature' => 0,
   );
 }
 
@@ -471,6 +478,25 @@
         '#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':
@@ -480,7 +506,7 @@
       break;
 
     case 'save':
-      return array('max_resolution', 'max_filesize', 'max_number_images', 'image_path', 'file_extensions', 'custom_alt', 'custom_title');
+      return array('max_resolution', 'max_filesize', 'max_number_images', 'image_path', 'file_extensions', 'custom_alt', 'custom_title', 'custom_caption', 'custom_credit', 'custom_feature');
   }
 }
 
@@ -750,7 +776,7 @@
 
         $form[$fieldname][$delta]['admin_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(
@@ -790,6 +816,53 @@
           );
         }
 
+        $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']) {
           $form[$fieldname][$delta]['replace'] = array(
@@ -804,6 +877,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']);
@@ -1002,8 +1078,8 @@
 }
 
 
-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);
 }
 
 function theme_imagefield_edit_image_row($element) {
@@ -1014,6 +1090,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-row clear-block">'. $output .'</div>';
   if (isset($element['replace'])) {
@@ -1022,7 +1101,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'])) {
     return;
@@ -1032,12 +1111,30 @@
     $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 '';
 }
 
+
 /**
  * Formats an array of images.
  *
@@ -1144,6 +1241,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'];
     }
   }
