diff --git a/src/main/java/org/apache/sling/distribution/journal/impl/subscriber/SubscriberIdle.java b/src/main/java/org/apache/sling/distribution/journal/impl/subscriber/SubscriberIdle.java
index 784c33d..250ffda 100644
--- a/src/main/java/org/apache/sling/distribution/journal/impl/subscriber/SubscriberIdle.java
+++ b/src/main/java/org/apache/sling/distribution/journal/impl/subscriber/SubscriberIdle.java
@@ -50,6 +50,7 @@
     public SubscriberIdle(BundleContext context, int idleMillis) {
         this.idleMillis = idleMillis;
         executor = Executors.newScheduledThreadPool(1);
+        idle();
         this.reg = context.registerService(SystemReadyCheck.class, this, new Hashtable<>());
     }
     
@@ -68,9 +69,7 @@
      * Called when processing of a message starts
      */
     public synchronized void busy() {
-        if (schedule != null) {
-            schedule.cancel(false);
-        }
+        cancelSchedule();
     }
 
     /**
@@ -78,11 +77,17 @@
      */
     public synchronized void idle() {
         if (!isReady.get()) {
-            busy();
+            cancelSchedule();
             schedule = executor.schedule(this::ready, idleMillis, TimeUnit.MILLISECONDS);
         }
     }
     
+    private void cancelSchedule() {
+        if (schedule != null) {
+            schedule.cancel(false);
+        }
+    }
+
     private void ready() {
         isReady.set(true);
     }
diff --git a/src/test/java/org/apache/sling/distribution/journal/impl/subscriber/SubscriberIdleTest.java b/src/test/java/org/apache/sling/distribution/journal/impl/subscriber/SubscriberIdleTest.java
index a424671..ef5f0d7 100644
--- a/src/test/java/org/apache/sling/distribution/journal/impl/subscriber/SubscriberIdleTest.java
+++ b/src/test/java/org/apache/sling/distribution/journal/impl/subscriber/SubscriberIdleTest.java
@@ -51,6 +51,16 @@
         assertState("State should not be reset once it reached GREEN", State.GREEN);
         idle.close();
     }
+    
+    @Test
+    public void testStartIdle() throws InterruptedException {
+        BundleContext context = Mockito.mock(BundleContext.class);
+        idle = new SubscriberIdle(context , IDLE_MILLIES);
+        assertState("Initial state", State.RED);
+        Thread.sleep(IDLE_MILLIES * 2);
+        assertState("State after time over idle limit", State.GREEN);
+        idle.close();
+    }
 
     private void assertState(String message, State expectedState) {
         assertThat(message, idle.getStatus().getState(), equalTo(expectedState));
