diff --git a/cronjobs/notification.php b/cronjobs/notification.php
index c8b4d1ff65843bffb51ed62097ef0e388df278c8..3a9fccc6eaaa576aa0be49c8f4fa3cba512f3dec 100644
--- a/cronjobs/notification.php
+++ b/cronjobs/notification.php
@@ -31,17 +31,11 @@
 
 $event = eZNotificationEvent::create( 'ezcurrenttime', array() );
 
-$db = eZDB::instance();
-$db->begin();
-
 $event->store();
 if ( !$isQuiet )
     $cli->output( "Starting notification event processing" );
 eZNotificationEventFilter::process();
 
-$db->commit();
-
-
 if ( !$isQuiet )
     $cli->output( "Done" );
 
diff --git a/kernel/classes/notification/eznotificationevent.php b/kernel/classes/notification/eznotificationevent.php
index 3e04bcecf1d9c827097e5d182a1ff0e9d5208689..f38a8e33d5d34c19acd6789eca5a752cbd722233 100644
--- a/kernel/classes/notification/eznotificationevent.php
+++ b/kernel/classes/notification/eznotificationevent.php
@@ -161,10 +161,10 @@ class eZNotificationEvent extends eZPersistentObject
         $this->Content = $content;
     }
 
-    static function fetchList()
+    static function fetchList( $limit = null )
     {
         return eZPersistentObject::fetchObjectList( eZNotificationEvent::definition(),
-                                                    null,  null, null,null,
+                                                    null,  null, null, $limit,
                                                     true );
     }
 
@@ -175,10 +175,10 @@ class eZNotificationEvent extends eZPersistentObject
                                                 array( 'id' => $eventID ) );
     }
 
-    static function fetchUnhandledList()
+    static function fetchUnhandledList( $limit = null )
     {
         return eZPersistentObject::fetchObjectList( eZNotificationEvent::definition(),
-                                                    null, array( 'status' => self::STATUS_CREATED ), null,null,
+                                                    null, array( 'status' => self::STATUS_CREATED ), null, $limit,
                                                     true );
     }
 
diff --git a/kernel/classes/notification/eznotificationeventfilter.php b/kernel/classes/notification/eznotificationeventfilter.php
index f3c6f9a205325f92e6f1e1ce963f74c4623d8913..309b82099dca16cd9817e84cc78496cebd02cb32 100644
--- a/kernel/classes/notification/eznotificationeventfilter.php
+++ b/kernel/classes/notification/eznotificationeventfilter.php
@@ -51,32 +51,44 @@ class eZNotificationEventFilter
      */
     static function process()
     {
-        $eventList = eZNotificationEvent::fetchUnhandledList();
+        $limit = 100;
+        $offset = 0;
         $availableHandlers = eZNotificationEventFilter::availableHandlers();
-        foreach( $eventList as $event )
+        do
         {
-            foreach( $availableHandlers as $handler )
+            $eventList = eZNotificationEvent::fetchUnhandledList( array( 'offset' => $offset, 'length' => $limit ) );
+            foreach( $eventList as $event )
             {
-                if ( $handler === false )
+                $db = eZDB::instance();
+                $db->begin();
+
+                foreach( $availableHandlers as $handler )
+                {
+                    if ( $handler === false )
+                    {
+                        eZDebug::writeError( "Notification handler does not exist: $handlerKey", 'eZNotificationEventFilter::process()' );
+                    }
+                    else
+                    {
+                        $handler->handle( $event );
+                    }
+                }
+                $itemCountLeft = eZNotificationCollectionItem::fetchCountForEvent( $event->attribute( 'id' ) );
+                if ( $itemCountLeft == 0 )
                 {
-                    eZDebug::writeError( "Notification handler does not exist: $handlerKey", 'eZNotificationEventFilter::process()' );
+                    $event->remove();
                 }
                 else
                 {
-                    $handler->handle( $event );
+                    $event->setAttribute( 'status', eZNotificationEvent::STATUS_HANDLED );
+                    $event->store();
                 }
+
+                $db->commit();
             }
-            $itemCountLeft = eZNotificationCollectionItem::fetchCountForEvent( $event->attribute( 'id' ) );
-            if ( $itemCountLeft == 0 )
-            {
-                $event->remove();
-            }
-            else
-            {
-                $event->setAttribute( 'status', eZNotificationEvent::STATUS_HANDLED );
-                $event->store();
-            }
-        }
+            eZContentObject::clearCache();
+        } while ( count( $eventList ) == $limit ); // If less than limit, we're on the last iteration
+
         eZNotificationCollection::removeEmpty();
     }
 
