diff --git a/modules/field/field.module b/modules/field/field.module
index 984459c..3205374 100644
--- a/modules/field/field.module
+++ b/modules/field/field.module
@@ -1063,9 +1063,22 @@ function template_preprocess_field(&$variables, $hook) {
   // those keys is faster than calling element_children() or looping on all keys
   // within $element, since that requires traversal of all element properties.
   $variables['items'] = array();
+  $item_count = count($element['#items']);
   foreach ($element['#items'] as $delta => $item) {
     if (!empty($element[$delta])) {
       $variables['items'][$delta] = $element[$delta];
+      // Set the default css classes (e.g. zebra, delta, first/last).
+      // This isn't 0 indexed because users expect the first item to be 1 and odd.
+      $classes = array();
+      $classes[] = 'field-item';
+      $classes[] = (($delta+1) % 2 ? 'odd' : 'even');
+      $classes[] = 'field-item-' . ($delta+1);
+      if($delta == 0) {
+        $classes[] = 'field-item-first';
+      } elseif ($delta == $item_count-1) {
+        $classes[] = 'field-item-last';
+      }
+      $variables['item_attributes_array'][$delta]['class'] = $classes; 
     }
   }
 
@@ -1190,8 +1203,7 @@ function theme_field($variables) {
   // Render the items.
   $output .= '<div class="field-items"' . $variables['content_attributes'] . '>';
   foreach ($variables['items'] as $delta => $item) {
-    $classes = 'field-item ' . ($delta % 2 ? 'odd' : 'even');
-    $output .= '<div class="' . $classes . '"' . $variables['item_attributes'][$delta] . '>' . drupal_render($item) . '</div>';
+    $output .= '<div ' . $variables['item_attributes'][$delta] . '>' . drupal_render($item) . '</div>';
   }
   $output .= '</div>';
