diff -rupN filefield_field.inc filefield_field.inc
--- filefield_field.inc	2009-03-03 13:56:31.000000000 +0100
+++ filefield_field.inc	2009-03-03 14:05:00.000000000 +0100
@@ -87,14 +87,13 @@ function filefield_field_load($node, $fi
     // Despite hook_content_is_empty(), CCK still doesn't filter out
     // empty items from $op = 'load', so we need to do that ourselves.
     if (empty($item['fid']) || !($file = field_file_load($item['fid']))) {
-      unset($items[$delta]);
+      $items[$delta] = NULL;
     }
     else {
       $item['data'] = unserialize($item['data']);
       $items[$delta] = array_merge($item, $file);
     }
   }
-  $items = array_values($items); // compact deltas
   return array($field['field_name'] => $items);
 }
 
@@ -109,12 +108,12 @@ function filefield_field_update($node, $
   $curfids = array();
   foreach ($items as $delta => $item) {
     $items[$delta] = field_file_save($node, $item);
-    // Remove items from the array if they have been deleted.
-    if (empty($items[$delta])) unset($items[$delta]);
+    // Cleanup items if they have been deleted.
+    if (empty($items[$delta])) {
+      $items[$delta] = NULL;
+    }
     $curfids[] = $item['fid'];
   }
-  $items = array_values($items); // compact deltas
-
 
   // if this is a new node... there are no
   // old items to worry about.
@@ -138,8 +137,9 @@ function filefield_field_delete_revision
   foreach ($items as $delta => $item) {
     // For hook_file_references, remember that this is being deleted.
     $item['field_name'] = $field['field_name'];
-    if (field_file_delete($item)) unset($items[$delta]);
-    $items = array_values($items); // compact deltas
+    if (field_file_delete($item)) {
+      $items[$delta] = NULL;
+    }
   }
 }
 
@@ -156,7 +156,7 @@ function filefield_field_sanitize($node,
   foreach ($items as $delta => $item) {
     // Cleanup $items during node preview.
     if (empty($item['fid']) || !empty($item['delete'])) {
-      unset($items[$delta]);
+      $items[$delta] = NULL;
       continue;
     }
     // Load the complete file if a filepath is not available.
