diff --git modules/system/system.install modules/system/system.install
index aa864fd..2329ac4 100644
--- modules/system/system.install
+++ modules/system/system.install
@@ -2779,13 +2779,21 @@ function system_update_7060(&$sandbox) {
       );
 
       // Create the field. Save the field id for the data insertion later on.
-      $field = field_create_field($field);
+      $field_instance = field_info_field('file');
+      if (empty($field_instance)) {
+        $field = field_create_field($field);
+      }
+      else {
+        $field = $field_instance;
+      }
       $sandbox['field_id'] = $field['id'];
 
       // Create the instances.
       foreach ($context['types'] as $bundle) {
-        $instance['bundle'] = $bundle;
-        field_create_instance($instance);
+        if (!field_info_instance('node', 'file', $bundle)) {
+          $instance['bundle'] = $bundle;
+          field_create_instance($instance);
+        }
       }
     }
     else {
@@ -2796,9 +2804,14 @@ function system_update_7060(&$sandbox) {
     }
   }
 
+  // Determine vids for this batch.
+  // Process all files attached to a given revision during same batch.
+  $limit = 100;
+  $vids = db_query_range('SELECT u.vid FROM {upload} u WHERE u.vid > :lastvid GROUP BY u.vid', 0, $limit, array(':lastvid' => $sandbox['last_vid_processed']))
+    ->fetchCol();
+
   // Migrate a batch of files from the upload table to the appropriate field.
-  $limit = 500;
-  $result = db_query_range('SELECT DISTINCT u.fid, u.vid, u.list, u.description, n.nid, n.type FROM {upload} u INNER JOIN {node_revision} nr ON u.vid = nr.vid INNER JOIN {node} n ON n.nid = nr.nid WHERE u.vid > :lastvid ORDER BY u.vid, u.weight', 0, $limit, array(':lastvid' => $sandbox['last_vid_processed']));
+  $result = db_query_range('SELECT u.fid, u.vid, u.list, u.description, n.nid, n.type FROM {upload} u INNER JOIN {node_revision} nr ON u.vid = nr.vid INNER JOIN {node} n ON n.nid = nr.nid WHERE u.vid IN (:vids) ORDER BY u.vid, u.weight', 0, $limit, array(':vids' => $vids));
   foreach ($result as $record) {
     // Note that we still reference the old files table here, since upload will
     // not know about the new FID in the new file_managed table.
@@ -2822,10 +2835,7 @@ function system_update_7060(&$sandbox) {
 
   // To make sure we process an entire node all at once, toss the last node
   // revision (which might be partial) unless it's the last one.
-  if ((count($node_revisions) > 1) && ($result->rowCount() == $limit)) {
-    array_pop($node_revisions);
-  }
-  else {
+  if (count($node_revisions) < $limit) {
     $finished = TRUE;
   }
 
@@ -2866,7 +2876,7 @@ function system_update_7060(&$sandbox) {
 
     // Insert the revision's files into the field_upload table.
     $node = (object) $revision;
-    field_sql_storage_field_storage_write('node', $node, FIELD_STORAGE_INSERT, array($sandbox['field_id']));
+    field_sql_storage_field_storage_write('node', $node, FIELD_STORAGE_UPDATE, array($sandbox['field_id']));
 
     // Update our progress information for the batch update.
     $sandbox['progress']++;
