diff --git a/cps.module b/cps.module
index 828b0a5..036df5c 100644
--- a/cps.module
+++ b/cps.module
@@ -951,8 +951,8 @@ function cps_add_untracked_entities($changeset_id, $entity_type, $start = 0, $li
       ));
     }
     $query->execute();
-    // Return the last touched entity ID.
-    return max(array_keys($results[$entity_type]));
+    // Return the count of entities that were updated.
+    return min($limit, count($results[$entity_type]));
   }
 }
 
diff --git a/includes/forms.inc b/includes/forms.inc
index 82f19e7..4f937a5 100644
--- a/includes/forms.inc
+++ b/includes/forms.inc
@@ -254,16 +254,16 @@ function cps_changeset_publish_batch_update($changeset, $entity_type, &$context)
   }
 
   $limit = 100;
-  $last = cps_add_untracked_entities($changeset_id, $entity_type, $context['sandbox']['current_item'], $limit);
+  $count = cps_add_untracked_entities($changeset_id, $entity_type, $context['sandbox']['current_item'], $context['sandbox']['current_item'] + $limit);
 
   $context['results']['changeset'] = $changeset;
 
-  if (!$last) {
+  if (!$count) {
     $context['finished'] = TRUE;
   }
   else {
     $context['finished'] = FALSE;
-    $context['sandbox']['current_item'] = $last + 1;
+    $context['sandbox']['current_item'] = $context['sandbox']['current_item'] + $count;
   }
 }
 
