diff --git a/pom.xml b/pom.xml
index 138bbe0..d188796 100644
--- a/pom.xml
+++ b/pom.xml
@@ -182,7 +182,7 @@
  		<dependency>
 			<groupId>org.apache.sling</groupId>
 			<artifactId>org.apache.sling.discovery.commons</artifactId>
-			<version>1.0.20</version>
+			<version>1.0.23-SNAPSHOT</version>
   		</dependency>
         <!-- besides including discovery.commons' normal jar above, 
               for testing a few test helper classes are also reused.
@@ -190,7 +190,7 @@
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.discovery.commons</artifactId>
-            <version>1.0.20</version>
+            <version>1.0.23-SNAPSHOT</version>
             <scope>test</scope>
             <type>test-jar</type>
         </dependency>
@@ -201,9 +201,9 @@
             <scope>provided</scope>
 		</dependency>
         <dependency>
-        	<groupId>org.apache.sling</groupId>
-        	<artifactId>org.apache.sling.commons.scheduler</artifactId>
-        	<version>2.3.4</version>
+            <groupId>org.apache.sling</groupId>
+            <artifactId>org.apache.sling.commons.scheduler</artifactId>
+            <version>2.5.0</version>
             <scope>provided</scope>
         </dependency>
 		<dependency>
diff --git a/src/main/java/org/apache/sling/discovery/base/commons/BaseViewChecker.java b/src/main/java/org/apache/sling/discovery/base/commons/BaseViewChecker.java
index aa42e94..1eaf2a3 100644
--- a/src/main/java/org/apache/sling/discovery/base/commons/BaseViewChecker.java
+++ b/src/main/java/org/apache/sling/discovery/base/commons/BaseViewChecker.java
@@ -20,7 +20,6 @@
 
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -178,7 +177,7 @@
             // 'fireJob' checks for a job from the same job-class to already exist
             // 'fireJobAt' though allows to pass a name for the job - which can be made unique, thus does not conflict/already-exist
             logger.info("triggerAsyncConnectorPing: firing job to trigger heartbeat");
-            getScheduler().fireJobAt(NAME+UUID.randomUUID(), this, null, new Date(System.currentTimeMillis()-1000 /* make sure it gets triggered immediately*/));
+            getScheduler().schedule(this, getScheduler().NOW().name(NAME+UUID.randomUUID()));
         } catch (Exception e) {
             logger.info("triggerAsyncConnectorPing: Could not trigger heartbeat: " + e);
         }
diff --git a/src/test/java/org/apache/sling/discovery/base/its/setup/VirtualInstanceBuilder.java b/src/test/java/org/apache/sling/discovery/base/its/setup/VirtualInstanceBuilder.java
index c3c55f7..15eee4b 100644
--- a/src/test/java/org/apache/sling/discovery/base/its/setup/VirtualInstanceBuilder.java
+++ b/src/test/java/org/apache/sling/discovery/base/its/setup/VirtualInstanceBuilder.java
@@ -22,9 +22,6 @@
 
 import org.apache.sling.api.resource.ResourceResolverFactory;
 import org.apache.sling.commons.scheduler.Scheduler;
-import org.apache.sling.commons.scheduler.impl.QuartzScheduler;
-import org.apache.sling.commons.threads.ThreadPoolManager;
-import org.apache.sling.commons.threads.impl.DefaultThreadPoolManager;
 import org.apache.sling.discovery.base.commons.BaseDiscoveryService;
 import org.apache.sling.discovery.base.commons.ClusterViewService;
 import org.apache.sling.discovery.base.commons.ViewChecker;
@@ -34,30 +31,18 @@
 import org.apache.sling.discovery.base.connectors.ping.ConnectorRegistryImpl;
 import org.apache.sling.discovery.base.its.setup.mock.ArtificialDelay;
 import org.apache.sling.discovery.base.its.setup.mock.FailingScheduler;
+import org.apache.sling.discovery.commons.providers.base.DummyScheduler;
 import org.apache.sling.discovery.commons.providers.spi.base.DummySlingSettingsService;
 import org.apache.sling.settings.SlingSettingsService;
 
-import junitx.util.PrivateAccessor;
-
 public abstract class VirtualInstanceBuilder {
 
     private static Scheduler singletonScheduler = null;
     
     public static Scheduler getSingletonScheduler() throws Exception {
-        if (singletonScheduler!=null) {
-            return singletonScheduler;
+        if (singletonScheduler == null) {
+            singletonScheduler = new DummyScheduler();
         }
-        final Scheduler newscheduler = new QuartzScheduler();
-        final ThreadPoolManager tpm = new DefaultThreadPoolManager(null, null);
-        try {
-            PrivateAccessor.invoke(newscheduler, "bindThreadPoolManager",
-                    new Class[] { ThreadPoolManager.class },
-                    new Object[] { tpm });
-        } catch (Throwable e1) {
-            org.junit.Assert.fail(e1.toString());
-        }
-        OSGiMock.activate(newscheduler);
-        singletonScheduler = newscheduler;
         return singletonScheduler;
     }
 
diff --git a/src/test/java/org/apache/sling/discovery/base/its/setup/mock/FailingScheduler.java b/src/test/java/org/apache/sling/discovery/base/its/setup/mock/FailingScheduler.java
index 726c713..bdd5893 100644
--- a/src/test/java/org/apache/sling/discovery/base/its/setup/mock/FailingScheduler.java
+++ b/src/test/java/org/apache/sling/discovery/base/its/setup/mock/FailingScheduler.java
@@ -23,10 +23,14 @@
 import java.util.Map;
 import java.util.NoSuchElementException;
 
+import org.apache.sling.commons.scheduler.ScheduleOptions;
 import org.apache.sling.commons.scheduler.Scheduler;
+import org.mockito.Mockito;
 
 public class FailingScheduler implements Scheduler {
     
+    private final ScheduleOptions options = Mockito.mock(ScheduleOptions.class);
+
     @Override
     public void removeJob(String name) throws NoSuchElementException {
         // nothing to do here
@@ -69,4 +73,41 @@
             boolean canRunConcurrently) throws Exception {
         throw new Exception("cos you are really worth it");
     }
+
+    @Override
+    public boolean schedule(Object job, ScheduleOptions options) {
+        // fails on purpose
+        return false;
+    }
+
+    @Override
+    public boolean unschedule(String jobName) {
+        // fails on purpose
+        return false;
+    }
+
+    @Override
+    public ScheduleOptions NOW() {
+        return options;
+    }
+
+    @Override
+    public ScheduleOptions NOW(int times, long period) {
+        return options;
+    }
+
+    @Override
+    public ScheduleOptions AT(Date date) {
+        return options;
+    }
+
+    @Override
+    public ScheduleOptions AT(Date date, int times, long period) {
+        return options;
+    }
+
+    @Override
+    public ScheduleOptions EXPR(String expression) {
+        return options;
+    }
 }
\ No newline at end of file
