diff --git a/src/main/java/org/apache/sling/event/impl/jobs/DefaultJobManager.java b/src/main/java/org/apache/sling/event/impl/jobs/DefaultJobManager.java
index 62dc55a..2234c00 100644
--- a/src/main/java/org/apache/sling/event/impl/jobs/DefaultJobManager.java
+++ b/src/main/java/org/apache/sling/event/impl/jobs/DefaultJobManager.java
@@ -254,8 +254,6 @@
         final boolean doSanityCheck = (schedulerRuns % 12 == 0);
         if ( doSanityCheck ) {
             logger.debug("cleanup: running sanity check");
-            final List<JobEvent> removedEvents = new ArrayList<JobEvent>();
-
             final Map<String, JobEvent> currentEvents;
             synchronized (this.allEvents) {
                 currentEvents = new HashMap<String, JobEvent>(this.allEvents);
@@ -268,19 +266,15 @@
                         logger.debug("cleanup: Removing dead job {}", job);
                         this.allEvents.remove(entry.getKey());
                     }
-                    removedEvents.add(job);
-                }
-            }
-
-            for(final JobEvent removedJob : removedEvents) {
-                final String topic = (String)removedJob.event.getProperty(JobUtil.PROPERTY_JOB_TOPIC);
-                final List<JobEvent> l;
-                synchronized ( this.allEventsByTopic ) {
-                    l = this.allEventsByTopic.get(topic);
-                }
-                if ( l != null ) {
-                    synchronized ( l ) {
-                        l.remove(removedJob);
+                    final String topic = (String)job.event.getProperty(JobUtil.PROPERTY_JOB_TOPIC);
+                    final List<JobEvent> l;
+                    synchronized ( this.allEventsByTopic ) {
+                        l = this.allEventsByTopic.get(topic);
+                    }
+                    if ( l != null ) {
+                        synchronized ( l ) {
+                            l.remove(job);
+                        }
                     }
                 }
             }
diff --git a/src/main/java/org/apache/sling/event/impl/jobs/jcr/PersistenceHandler.java b/src/main/java/org/apache/sling/event/impl/jobs/jcr/PersistenceHandler.java
index 32a25ad..7b7ca3f 100644
--- a/src/main/java/org/apache/sling/event/impl/jobs/jcr/PersistenceHandler.java
+++ b/src/main/java/org/apache/sling/event/impl/jobs/jcr/PersistenceHandler.java
@@ -1337,17 +1337,21 @@
      */
     public boolean isAlive(final JCRJobEvent info) {
         final String path = this.getNodePath(info.uniqueId);
-        synchronized ( this.backgroundLock ) {
-            try {
-                if ( this.backgroundSession.itemExists(path) ) {
-                    final String finishedPath = path + '/' + JCRHelper.NODE_PROPERTY_FINISHED;
-                    if ( !this.backgroundSession.itemExists(finishedPath) ) {
-                        return true;
-                    }
+        Session s = null;
+        try {
+            s = this.environment.createAdminSession();
+            if ( s.itemExists(path) ) {
+                final String finishedPath = path + '/' + JCRHelper.NODE_PROPERTY_FINISHED;
+                if ( !s.itemExists(finishedPath) ) {
+                    return true;
                 }
-            } catch (final RepositoryException re) {
-                // there is nothing we can do
-                this.ignoreException(re);
+            }
+        } catch (final RepositoryException re) {
+            // there is nothing we can do
+            this.ignoreException(re);
+        } finally {
+            if ( s != null ) {
+                s.logout();
             }
         }
         return false;
