diff --git a/setup_local_env/setup.sh b/setup_local_env/setup.sh
index 2809209..5d4ca83 100755
--- a/setup_local_env/setup.sh
+++ b/setup_local_env/setup.sh
@@ -320,11 +320,11 @@
   cp -f $MULTISITE_LIB_LOCATION $DEPLOYMENT_LOCATION/multi-site.jar  >/dev/null 2>&1 || { echo >&2 "$MULTISITE_LIB_LOCATION: Not able to copy the file. Aborting"; exit 1; }
 fi
 if [ $DOWNLOAD_WEBSESSION_PLUGIN = "true" ];then
-  echo "Downloading websession-broker plugin master"
-  wget https://gerrit-ci.gerritforge.com/view/Plugins-master/job/plugin-websession-broker-gh-bazel-master/lastSuccessfulBuild/artifact/bazel-bin/plugins/websession-broker/websession-broker.jar \
+  echo "Downloading websession-broker plugin"
+  wget https://gerrit-ci.gerritforge.com/view/Plugins-master/job/plugin-websession-broker-bazel-master/lastSuccessfulBuild/artifact/bazel-bin/plugins/websession-broker/websession-broker.jar \
   -O $DEPLOYMENT_LOCATION/websession-broker.jar || { echo >&2 "Cannot download websession-broker plugin: Check internet connection. Abort\
 ing"; exit 1; }
-  wget https://gerrit-ci.gerritforge.com/view/Plugins-master/job/plugin-healthcheck-bazel-master-master/lastSuccessfulBuild/artifact/bazel-bin/plugins/healthcheck/healthcheck.jar \
+  wget https://gerrit-ci.gerritforge.com/view/Plugins-master/job/plugin-healthcheck-bazel-master/lastSuccessfulBuild/artifact/bazel-bin/plugins/healthcheck/healthcheck.jar \
   -O $DEPLOYMENT_LOCATION/healthcheck.jar || { echo >&2 "Cannot download healthcheck plugin: Check internet connection. Abort\
 ing"; exit 1; }
 else
@@ -336,7 +336,7 @@
   -O $DEPLOYMENT_LOCATION/zookeeper.jar || { echo >&2 "Cannot download zookeeper plugin: Check internet connection. Abort\
 ing"; exit 1; }
 
-echo "Downloading events-broker library stable 3.1"
+echo "Downloading events-broker library"
   wget https://repo1.maven.org/maven2/com/gerritforge/events-broker/3.1.4/events-broker-3.1.4.jar \
   -O $DEPLOYMENT_LOCATION/events-broker.jar || { echo >&2 "Cannot download events-broker library: Check internet connection. Abort\
 ing"; exit 1; }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/multisite/ProjectReplicationStatus.java b/src/main/java/com/googlesource/gerrit/plugins/multisite/ProjectReplicationStatus.java
deleted file mode 100644
index e8b92d2..0000000
--- a/src/main/java/com/googlesource/gerrit/plugins/multisite/ProjectReplicationStatus.java
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright (C) 2020 The Android Open Source Project
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.googlesource.gerrit.plugins.multisite;
-
-/**
- * This class contains the replication status of a Gerrit project
- *
- * <p>NOTE: Currently, the status is only represented by the last replication timestamp, but it
- * could be extended (i.e.: the last replicated commit can be an interesting information to add)
- */
-public class ProjectReplicationStatus {
-
-  private Long lastReplicationTimestamp;
-
-  public ProjectReplicationStatus(Long lastReplicationTimestamp) {
-    this.lastReplicationTimestamp = lastReplicationTimestamp;
-  }
-
-  public Long getLastReplicationTimestamp() {
-    return this.lastReplicationTimestamp;
-  }
-}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/multisite/ReplicationStatusStore.java b/src/main/java/com/googlesource/gerrit/plugins/multisite/ReplicationStatusStore.java
deleted file mode 100644
index 5f5d393..0000000
--- a/src/main/java/com/googlesource/gerrit/plugins/multisite/ReplicationStatusStore.java
+++ /dev/null
@@ -1,52 +0,0 @@
-// Copyright (C) 2020 The Android Open Source Project
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.googlesource.gerrit.plugins.multisite;
-
-import com.google.inject.Singleton;
-import java.util.*;
-
-/**
- * This class stores the replication status of a Gerrit instance
- *
- * <p>The status is represented per project but also globally. The global replication status is, for
- * example, the max replication timestamp of all the projects. The replication Status of a project
- * is represented by {@see com.googlesource.gerrit.plugins.multisite.ProjectReplicationStatus}
- */
-@Singleton
-public class ReplicationStatusStore {
-
-  private Map<String, ProjectReplicationStatus> statusPerProject;
-  private Long globalLastReplicationTime = 0L;
-
-  public ReplicationStatusStore() {
-    this.statusPerProject = new HashMap<String, ProjectReplicationStatus>();
-  }
-
-  public void updateLastReplicationTime(String projectName, Long timestamp) {
-    ProjectReplicationStatus projectReplicationStatus = new ProjectReplicationStatus(timestamp);
-    this.statusPerProject.put(projectName, projectReplicationStatus);
-    this.globalLastReplicationTime = timestamp;
-  }
-
-  public Optional<Long> getLastReplicationTime(String projectName) {
-    Optional<ProjectReplicationStatus> maybeProjectReplicationStatus =
-        Optional.ofNullable(this.statusPerProject.get(projectName));
-    return maybeProjectReplicationStatus.map(ProjectReplicationStatus::getLastReplicationTimestamp);
-  }
-
-  public Long getGlobalLastReplicationTime() {
-    return this.globalLastReplicationTime;
-  }
-}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/multisite/consumer/AbstractSubcriber.java b/src/main/java/com/googlesource/gerrit/plugins/multisite/consumer/AbstractSubcriber.java
index 816edc9..ec6072c 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/multisite/consumer/AbstractSubcriber.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/multisite/consumer/AbstractSubcriber.java
@@ -74,7 +74,6 @@
         msgLog.log(Direction.CONSUME, topic, event);
         eventRouter.route(event.getEvent());
         subscriberMetrics.incrementSubscriberConsumedMessage();
-        subscriberMetrics.updateReplicationStatusMetrics(event);
       } catch (IOException e) {
         logger.atSevere().withCause(e).log(
             "Malformed event '%s': [Exception: %s]", event.getHeader());
diff --git a/src/main/java/com/googlesource/gerrit/plugins/multisite/consumer/CacheEvictionEventSubscriber.java b/src/main/java/com/googlesource/gerrit/plugins/multisite/consumer/CacheEvictionEventSubscriber.java
index 6c67c46..eae66b4 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/multisite/consumer/CacheEvictionEventSubscriber.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/multisite/consumer/CacheEvictionEventSubscriber.java
@@ -21,14 +21,14 @@
 import com.googlesource.gerrit.plugins.multisite.InstanceId;
 import com.googlesource.gerrit.plugins.multisite.MessageLogger;
 import com.googlesource.gerrit.plugins.multisite.forwarder.events.EventTopic;
-import com.googlesource.gerrit.plugins.multisite.forwarder.router.StreamEventRouter;
+import com.googlesource.gerrit.plugins.multisite.forwarder.router.CacheEvictionEventRouter;
 import java.util.UUID;
 
 @Singleton
 public class CacheEvictionEventSubscriber extends AbstractSubcriber {
   @Inject
   public CacheEvictionEventSubscriber(
-      StreamEventRouter eventRouter,
+      CacheEvictionEventRouter eventRouter,
       DynamicSet<DroppedEventListener> droppedEventListeners,
       @InstanceId UUID instanceId,
       MessageLogger msgLog,
diff --git a/src/main/java/com/googlesource/gerrit/plugins/multisite/consumer/SubscriberMetrics.java b/src/main/java/com/googlesource/gerrit/plugins/multisite/consumer/SubscriberMetrics.java
index 96221e1..36f618e 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/multisite/consumer/SubscriberMetrics.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/multisite/consumer/SubscriberMetrics.java
@@ -14,47 +14,24 @@
 
 package com.googlesource.gerrit.plugins.multisite.consumer;
 
-import com.codahale.metrics.MetricFilter;
-import com.codahale.metrics.MetricRegistry;
-import com.gerritforge.gerrit.eventbroker.EventMessage;
-import com.google.common.flogger.FluentLogger;
 import com.google.gerrit.metrics.Counter1;
 import com.google.gerrit.metrics.Description;
 import com.google.gerrit.metrics.MetricMaker;
-import com.google.gerrit.server.events.Event;
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
 import com.googlesource.gerrit.plugins.multisite.MultiSiteMetrics;
-import com.googlesource.gerrit.plugins.multisite.ReplicationStatusStore;
-import com.googlesource.gerrit.plugins.replication.RefReplicatedEvent;
 
 @Singleton
 public class SubscriberMetrics extends MultiSiteMetrics {
-  private static final FluentLogger logger = FluentLogger.forEnclosingClass();
   private static final String SUBSCRIBER_SUCCESS_COUNTER = "subscriber_msg_consumer_counter";
   private static final String SUBSCRIBER_FAILURE_COUNTER =
       "subscriber_msg_consumer_failure_counter";
-  private static final String INSTANCE_LATEST_REPLICATION_TIME_METRIC =
-      "multi_site/subscriber/subscriber_replication_status/instance_latest_replication_epochtime_secs";
-  private static final String PROJECT_LATEST_REPLICATION_TIME_METRIC_PREFIX =
-      "multi_site/subscriber/subscriber_replication_status/latest_replication_epochtime_secs_";
-
-  private ReplicationStatusStore replicationStatusStore;
-  private MetricMaker metricMaker;
-  private MetricRegistry metricRegistry;
 
   private final Counter1<String> subscriberSuccessCounter;
   private final Counter1<String> subscriberFailureCounter;
 
   @Inject
-  public SubscriberMetrics(
-      MetricMaker metricMaker,
-      MetricRegistry metricRegistry,
-      ReplicationStatusStore replicationStatusStore) {
-
-    this.replicationStatusStore = replicationStatusStore;
-    this.metricMaker = metricMaker;
-    this.metricRegistry = metricRegistry;
+  public SubscriberMetrics(MetricMaker metricMaker) {
 
     this.subscriberSuccessCounter =
         metricMaker.newCounter(
@@ -70,16 +47,6 @@
                 .setRate()
                 .setUnit("errors"),
             stringField(SUBSCRIBER_FAILURE_COUNTER, "Subscriber failed to consume messages count"));
-
-    metricMaker.newCallbackMetric(
-        INSTANCE_LATEST_REPLICATION_TIME_METRIC,
-        Long.class,
-        new Description(
-                String.format(
-                    "%s last replication timestamp (ms)", INSTANCE_LATEST_REPLICATION_TIME_METRIC))
-            .setGauge()
-            .setUnit(Description.Units.MILLISECONDS),
-        () -> replicationStatusStore.getGlobalLastReplicationTime());
   }
 
   public void incrementSubscriberConsumedMessage() {
@@ -89,33 +56,4 @@
   public void incrementSubscriberFailedToConsumeMessage() {
     subscriberFailureCounter.increment(SUBSCRIBER_FAILURE_COUNTER);
   }
-
-  public void updateReplicationStatusMetrics(EventMessage eventMessage) {
-    Event event = eventMessage.getEvent();
-    if (event instanceof RefReplicatedEvent) {
-      RefReplicatedEvent refReplicatedEvent = (RefReplicatedEvent) event;
-      String projectName = refReplicatedEvent.getProjectNameKey().get();
-      logger.atInfo().log("Updating last replication time for %s", projectName);
-      replicationStatusStore.updateLastReplicationTime(projectName, event.eventCreatedOn);
-      upsertMetricsForProject(projectName);
-    } else {
-      logger.atInfo().log("Not a ref-replicated-event event [%s], skipping", event.type);
-    }
-  }
-
-  private void upsertMetricsForProject(String projectName) {
-    String metricName = PROJECT_LATEST_REPLICATION_TIME_METRIC_PREFIX + projectName;
-    if (metricRegistry.getGauges(MetricFilter.contains(metricName)).isEmpty()) {
-      metricMaker.newCallbackMetric(
-          metricName,
-          Long.class,
-          new Description(String.format("%s last replication timestamp (ms)", metricName))
-              .setGauge()
-              .setUnit(Description.Units.MILLISECONDS),
-          () -> replicationStatusStore.getLastReplicationTime(projectName).orElse(0L));
-      logger.atInfo().log("Added last replication timestamp callback metric for " + projectName);
-    } else {
-      logger.atInfo().log("Don't add metric since it already exists for project " + projectName);
-    }
-  }
 }
diff --git a/src/main/resources/Documentation/about.md b/src/main/resources/Documentation/about.md
index e82133c..42249b1 100644
--- a/src/main/resources/Documentation/about.md
+++ b/src/main/resources/Documentation/about.md
@@ -99,4 +99,4 @@
 
 * Subscriber replication status (latest replication Epoch time in seconds) per project
 
-`metric=plugins/multi-site/multi_site/subscriber/subscriber_replication_status/latest_replication_epochtime_secs_<projectName>, type=com.google.gerrit.metrics.dropwizard.CallbackMetricImpl`
\ No newline at end of file
+`metric=plugins/multi-site/multi_site/subscriber/subscriber_replication_status/latest_replication_epochtime_secs_<projectName>, type=com.google.gerrit.metrics.dropwizard.CallbackMetricImpl`
diff --git a/src/test/java/com/googlesource/gerrit/plugins/multisite/ReplicationStatusStoreTest.java b/src/test/java/com/googlesource/gerrit/plugins/multisite/ReplicationStatusStoreTest.java
deleted file mode 100644
index 314e4b4..0000000
--- a/src/test/java/com/googlesource/gerrit/plugins/multisite/ReplicationStatusStoreTest.java
+++ /dev/null
@@ -1,56 +0,0 @@
-// Copyright (C) 2020 The Android Open Source Project
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.googlesource.gerrit.plugins.multisite;
-
-import static com.google.common.truth.Truth.assertThat;
-import static java.util.Optional.empty;
-import static java.util.Optional.of;
-
-import java.time.Instant;
-import org.junit.Test;
-
-public class ReplicationStatusStoreTest {
-
-  @Test
-  public void shouldUpdateGlobalStatus() {
-    Instant instant = Instant.now();
-    Long nowish = instant.toEpochMilli();
-    ReplicationStatusStore replicationStatusStore = new ReplicationStatusStore();
-
-    replicationStatusStore.updateLastReplicationTime("myProject", nowish);
-
-    assertThat(replicationStatusStore.getGlobalLastReplicationTime()).isEqualTo(nowish);
-  }
-
-  @Test
-  public void shouldUpdateProjectStatus() {
-    String projectName = "myProject";
-    Instant instant = Instant.now();
-    Long nowish = instant.toEpochMilli();
-    ReplicationStatusStore replicationStatusStore = new ReplicationStatusStore();
-
-    replicationStatusStore.updateLastReplicationTime(projectName, nowish);
-
-    assertThat(replicationStatusStore.getLastReplicationTime(projectName)).isEqualTo(of(nowish));
-  }
-
-  @Test
-  public void shouldNotReturnProjectStatus() {
-    ReplicationStatusStore replicationStatusStore = new ReplicationStatusStore();
-
-    assertThat(replicationStatusStore.getLastReplicationTime("nonExistentProject"))
-        .isEqualTo(empty());
-  }
-}
