Index: cronjobs/indexcontent.php
===================================================================
--- cronjobs/indexcontent.php	(revision 22615)
+++ cronjobs/indexcontent.php	(working copy)
@@ -40,9 +40,17 @@
 $offset = 0;
 $limit = 50;
 
+// only fetch the pending actions up till now, not the ones that are added after we start processing
+$time = time();
+
 while( true )
 {
-    $entries = $db->arrayQuery( "SELECT param FROM ezpending_actions WHERE action = 'index_object'",
+    $entries = $db->arrayQuery( "SELECT param, MAX(created) AS last_created
+                                 FROM ezpending_actions
+                                 WHERE action='index_object' AND
+                                       created < $time
+                                 GROUP BY param
+                                 ORDER BY MAX(created)",
                                 array( 'limit' => $limit,
                                        'offset' => $offset ) );
 
@@ -66,7 +74,7 @@
 
         $paramInSQL = $db->generateSQLInStatement( $objectIDList, 'param' );
 
-        $db->query( "DELETE FROM ezpending_actions WHERE action = 'index_object' AND $paramInSQL" );
+        $db->query( "DELETE FROM ezpending_actions WHERE action = 'index_object' AND created < $time AND $paramInSQL" );
         $db->commit();
     }
     else
Index: kernel/content/ezcontentoperationcollection.php
===================================================================
--- kernel/content/ezcontentoperationcollection.php	(revision 22615)
+++ kernel/content/ezcontentoperationcollection.php	(working copy)
@@ -565,11 +565,8 @@
         if ( $delayedIndexing )
         {
             $db = eZDB::instance();
-            $rows = $db->arrayQuery( 'SELECT param FROM ezpending_actions WHERE action = \'index_object\' AND param = '. (int)$objectID );
-            if ( count( $rows ) == 0 )
-            {
-                $db->query( 'INSERT INTO ezpending_actions( action, param ) VALUES ( \'index_object\', '. (int)$objectID. ' )' );
-            }
+            $created = time();
+            $db->query( 'INSERT INTO ezpending_actions( action, param, created ) VALUES ( \'index_object\', '. (int)$objectID. ', ' . $created . ' )' );
         }
         else
         {
