diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedAwareEventBroker.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedAwareEventBroker.java
index fb651b7..700d5e1 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedAwareEventBroker.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedAwareEventBroker.java
@@ -24,7 +24,6 @@
 import com.google.gerrit.server.plugincontext.PluginSetContext;
 import com.google.gerrit.server.project.ProjectCache;
 import com.google.inject.Inject;
-import java.util.Objects;
 import javax.annotation.Nullable;
 
 class ForwardedAwareEventBroker extends EventBroker {
@@ -46,19 +45,8 @@
         gerritInstanceId);
   }
 
-  private boolean isProducedByLocalInstance(Event event) {
-    return Objects.equals(event.instanceId, gerritInstanceId);
-  }
-
   @Override
   protected void fireEventForUnrestrictedListeners(Event event) {
-    // An event should not be dispatched when it is "forwarded".
-    // Meaning, it was either produced somewhere else
-    if (!isProducedByLocalInstance(event)) {
-      Context.setForwardedEvent(true);
-    }
-    // or it was consumed by the high-availability rest endpoint and
-    // thus the context of its consumption has already been set to "forwarded".
     if (!Context.isForwardedEvent()) {
       super.fireEventForUnrestrictedListeners(event);
     }
diff --git a/src/main/resources/Documentation/config.md b/src/main/resources/Documentation/config.md
index 3b1fee2..0c10b2e 100644
--- a/src/main/resources/Documentation/config.md
+++ b/src/main/resources/Documentation/config.md
@@ -238,23 +238,3 @@
 
 ```healthcheck.enable```
 :   Whether to enable the health check endpoint. Defaults to 'true'.
-
-File 'gerrit.config'
---------------------
-
-```gerrit.instanceId```
-:   Optional identifier for this Gerrit instance.
-[[docs](https://gerrit-documentation.storage.googleapis.com/Documentation/3.2.0/config-gerrit.html#gerrit.instanceId)].
-
-Whilst this is not, specifically, a high-availability plugin configuration, it plays
-an important role on which events are forwarded to peers.
-
-If `instanceId` is set, events produced by that Gerrit instance will contain its
-origin in the `instanceId` field, allowing to track where they are coming from.
-
-The high-availability plugin will check the `instanceId` value to decide whether
-an event should be forwarded: events that originated from different Gerrit instances
-will not be forwarded.
-
-When neither `gerrit.instanceId` nor `event.instanceId` are set, it is not possible
-to identify the origin of the event and thus the event is always forwarded.
diff --git a/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedAwareEventBrokerTest.java b/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedAwareEventBrokerTest.java
index cfe0475..ec5b1de 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedAwareEventBrokerTest.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedAwareEventBrokerTest.java
@@ -30,9 +30,7 @@
 
   private EventListener listenerMock;
   private ForwardedAwareEventBroker broker;
-  private ForwardedAwareEventBroker brokerWithGerritInstanceId;
-  private Event event;
-  private String gerritInstanceId = "gerrit-instance-id";
+  private Event event = new TestEvent();
 
   @Before
   public void setUp() {
@@ -40,11 +38,8 @@
     listenerMock = mock(EventListener.class);
     DynamicSet<EventListener> set = DynamicSet.emptySet();
     set.add("high-availability", listenerMock);
-    event = new TestEvent();
     PluginSetContext<EventListener> listeners = new PluginSetContext<>(set, mockMetrics);
     broker = new ForwardedAwareEventBroker(null, listeners, null, null, null, null);
-    brokerWithGerritInstanceId =
-        new ForwardedAwareEventBroker(null, listeners, null, null, null, gerritInstanceId);
   }
 
   @Test
@@ -63,43 +58,4 @@
     }
     verifyZeroInteractions(listenerMock);
   }
-
-  @Test
-  public void shouldNotDispatchEventWhenEventInstanceIdIsDefinedButGerritInstanceIdIsNot() {
-    event.instanceId = gerritInstanceId;
-    try {
-      broker.fireEventForUnrestrictedListeners(event);
-    } finally {
-      Context.unsetForwardedEvent();
-    }
-    verifyZeroInteractions(listenerMock);
-  }
-
-  @Test
-  public void shouldNotDispatchEventWhenGerritInstanceIdIsDefinedButEventInstanceIdIsNot() {
-    try {
-      brokerWithGerritInstanceId.fireEventForUnrestrictedListeners(event);
-    } finally {
-      Context.unsetForwardedEvent();
-    }
-    verifyZeroInteractions(listenerMock);
-  }
-
-  @Test
-  public void shouldNotDispatchEventWhenInstanceIdsAreDifferent() {
-    event.instanceId = "some-other-gerrit-instance-id";
-    try {
-      brokerWithGerritInstanceId.fireEventForUnrestrictedListeners(event);
-    } finally {
-      Context.unsetForwardedEvent();
-    }
-    verifyZeroInteractions(listenerMock);
-  }
-
-  @Test
-  public void shouldDispatchEventWhenInstanceIdsAreEqual() {
-    event.instanceId = gerritInstanceId;
-    brokerWithGerritInstanceId.fireEventForUnrestrictedListeners(event);
-    verify(listenerMock).onEvent(event);
-  }
 }
