diff --git a/notifications.cron.inc b/notifications.cron.inc
index 9f9ea33..5e2c1c3 100644
--- a/notifications.cron.inc
+++ b/notifications.cron.inc
@@ -78,20 +78,56 @@ function notifications_process_prepare() {
 
 /**
  * Clean up event table
- * 
+ *
  * @param $update
  *   Update event counter
  */
 function notifications_event_clean($update = FALSE) {
-  // This expiretime will prevent some race condition that occurs when the event is saved but the subs queue not yet populated  
-  $expiretime = time() - 60; 
+
+  // This expiretime will prevent some race condition that occurs when the event is saved but the subs queue not yet populated
+  $expiretime = time() - 60;
   if ($update) {
     // Update event counter, which keeps the number of notifications pending for each event
     db_query("UPDATE {notifications_event} e SET counter = (SELECT COUNT(*) FROM {notifications_queue} q WHERE q.eid = e.eid ) WHERE e.created < %d", $expiretime);
   }
-  db_query("DELETE FROM {notifications_event} WHERE counter = 0 AND created < %d", $expiretime);
-  // Delete events with no pending notifications. As events are created sequentially, we use this fact to speed up the query
-  db_query("DELETE FROM {notifications_event} WHERE created < %d AND eid < (SELECT MIN(eid) FROM {notifications_queue})", $expiretime); 
+  else {
+
+    // Get all the existing items within the queue.
+    $result = db_query("SELECT data FROM {queue} WHERE name='notifications_event'");
+    $queues = array();
+    while ($queue = db_fetch_object($result)) {
+      $queue->data = unserialize($queue->data);
+      if (isset($queue->data->node)) {
+        $nid = intval($queue->data->node->nid);
+        $queues[$nid] = $nid;
+      }
+    }
+
+    // Get all of the event items.
+    $result = db_query("SELECT * FROM {notifications_event}");
+    $events = array();
+    while ($event = db_fetch_object($result)) {
+      $event->params = unserialize($event->params);
+      $nid = intval($event->params['nid']);
+      $events[$event->eid] = $nid;
+    }
+
+    // Get the events that are not within the queue.
+    $events = array_keys(array_diff($events, $queues));
+
+    // Only continue if there are events to delete.
+    if ($events) {
+
+      // Create the not queued query.
+      $not_queued = "eid NOT IN (SELECT DISTINCT(eid) FROM {notifications_queue}) AND eid IN (" . db_placeholders($events, 'int') . ")";
+
+      // Add to the arguments.
+      $args = array_merge(array($expiretime), $events);
+
+      // Delete all events that are no longer needed.
+      db_query("DELETE FROM {notifications_event} WHERE counter = 0 AND created < %d AND " . $not_queued, $args);
+    }
+  }
 }
 
 /**
diff --git a/notifications.info b/notifications.info
index 55652ee..9b9b09b 100644
--- a/notifications.info
+++ b/notifications.info
@@ -3,5 +3,6 @@ description = The basic notifications framework
 package = "Notifications"
 dependencies[] = messaging
 dependencies[] = token
+dependencies[] = drupal_queue
 core = 6.x
 php = 5.0
diff --git a/notifications.module b/notifications.module
index 64b83af..9378791 100644
--- a/notifications.module
+++ b/notifications.module
@@ -431,6 +431,34 @@ function notifications_event_enabled($type, $action) {
 }
 
 /**
+ * Implements hook_cron_queue_info().
+ */
+function notifications_cron_queue_info() {
+  $queues['notifications_event'] = array(
+    'worker callback' => '_notifications_queue',
+    'time' => 60,
+  );
+  return $queues;
+}
+
+
+/**
+ * Queue notifications events for DrupalQueue.
+ */
+function notifications_queue($event) {
+  if (variable_get('notifications_queue_immediate', 1)) {
+    _notifications_queue($event);
+  }
+  else {
+    $queue = drupal_queue_get('notifications_event', TRUE);
+    // Log to watchdog should queue item creation fail.
+    if (!$queue->createItem($event)) {
+      watchdog('notifications', t('Failed to create queue item for notifications.'), WATCHDOG_ERROR);
+    }
+  }
+}
+
+/**
  * Queue events for notifications adding query conditions from plug-ins
  * 
  * This is an example of the resulting query
@@ -446,7 +474,7 @@ function notifications_event_enabled($type, $action) {
  * @param $event
  *   Event array.
  */
-function notifications_queue($event) {
+function _notifications_queue($event) {
   $query = array();
   // Build big insert query using the query builder. The fields for this event type will be added by the plug-ins. 
   // If no arguments retrieved, skip this step
