diff --git a/src/main/java/com/googlesource/gerrit/plugins/events/FileSystemEventBroker.java b/src/main/java/com/googlesource/gerrit/plugins/events/FileSystemEventBroker.java
index 2791a19..e8bf937 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/events/FileSystemEventBroker.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/events/FileSystemEventBroker.java
@@ -106,17 +106,17 @@
 
   @Override
   public void postEvent(Change change, ChangeEvent event) throws PermissionBackendException {
-    storeEvent(event);
+    Drop drop = storeEvent(event);
     super.postEvent(change, event);
-    fireEventForStreamListeners();
+    fireEventForStreamListeners(drop);
   }
 
   @Override
   public void postEvent(Project.NameKey projectName, ProjectEvent event) {
-    storeEvent(event);
+    Drop drop = storeEvent(event);
     super.postEvent(projectName, event);
     try {
-      fireEventForStreamListeners();
+      fireEventForStreamListeners(drop);
     } catch (PermissionBackendException e) {
       log.error("Permission Exception while dispatching the event. Will be tried again.", e);
     }
@@ -125,26 +125,28 @@
   @Override
   public void postEvent(BranchNameKey branchName, RefEvent event)
       throws PermissionBackendException {
-    storeEvent(event);
+    Drop drop = storeEvent(event);
     super.postEvent(branchName, event);
-    fireEventForStreamListeners();
+    fireEventForStreamListeners(drop);
   }
 
   @Override
   public void postEvent(Event event) throws PermissionBackendException {
-    storeEvent(event);
+    Drop drop = storeEvent(event);
     super.postEvent(event);
-    fireEventForStreamListeners();
+    fireEventForStreamListeners(drop);
   }
 
-  protected void storeEvent(Event event) {
+  protected Drop storeEvent(Event event) {
     if (!isDropEvent(event)) {
       try {
         store.add(gson.toJson(event));
+        return Drop.FALSE;
       } catch (IOException ex) {
         log.error("Cannot add event to event store", ex);
       }
     }
+    return Drop.TRUE;
   }
 
   protected boolean isDropEvent(Event event) {
@@ -155,20 +157,26 @@
     return false;
   }
 
-  public synchronized void fireEventForStreamListeners() throws PermissionBackendException {
-    try {
-      long current = store.getHead();
-      while (lastSent < current) {
-        long next = lastSent + 1;
-        fireEventForUserScopedEventListener(
-            Type.STREAM, gson.fromJson(store.get(next), Event.class));
-        lastSent = next;
+  public void fireEventForStreamListeners() throws PermissionBackendException {
+    fireEventForStreamListeners(Drop.FALSE);
+  }
+
+  protected synchronized void fireEventForStreamListeners(Drop drop) throws PermissionBackendException {
+    if (!Drop.TRUE.equals(drop)) {
+      try {
+        long current = store.getHead();
+        while (lastSent < current) {
+          long next = lastSent + 1;
+          fireEventForUserScopedEventListener(
+              Type.STREAM, gson.fromJson(store.get(next), Event.class));
+          lastSent = next;
+        }
+      } catch (IOException e) {
+        // Next Event would re-try the events.
       }
-    } catch (IOException e) {
-      // Next Event would re-try the events.
-    }
-    for (StreamEventListener l : streamEventListeners) {
-      l.onStreamEventUpdate();
+      for (StreamEventListener l : streamEventListeners) {
+        l.onStreamEventUpdate();
+      }
     }
   }
 
@@ -226,11 +234,16 @@
     }
   }
 
-  public enum Type {
+  protected enum Type {
     STREAM,
     NON_STREAM
   }
 
+  protected enum Drop {
+    TRUE,
+    FALSE
+  }
+
   protected List<PluginSetEntryContext<UserScopedEventListener>> getListeners(Type type) {
     List<PluginSetEntryContext<UserScopedEventListener>> filteredListeners = new ArrayList<>();
     for (PluginSetEntryContext<UserScopedEventListener> c : listeners) {
