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 474520e..1911c86 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,8 +14,6 @@
 
 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;
@@ -27,6 +25,8 @@
 import com.google.inject.Singleton;
 import com.googlesource.gerrit.plugins.multisite.validation.ProjectVersionRefUpdate;
 import com.googlesource.gerrit.plugins.replication.RefReplicatedEvent;
+import java.util.Collection;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Optional;
@@ -37,27 +37,21 @@
   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 PROJECT_REPLICATION_LAG_MS_PREFIX =
-      "multi_site/subscriber/subscriber_replication_status/ms_behind_for_";
+  private static final String REPLICATION_LAG_MS =
+      "multi_site/subscriber/subscriber_replication_status/ms_behind";
 
   private final Counter1<String> subscriberSuccessCounter;
   private final Counter1<String> subscriberFailureCounter;
 
-  private MetricRegistry metricRegistry;
-  private MetricMaker metricMaker;
   public Map<String, Long> replicationStatusPerProject = new HashMap<>();
 
   private ProjectVersionRefUpdate projectVersionRefUpdate;
 
   @Inject
   public SubscriberMetrics(
-      MetricMaker metricMaker,
-      MetricRegistry metricRegistry,
-      ProjectVersionRefUpdate projectVersionRefUpdate) {
+      MetricMaker metricMaker, ProjectVersionRefUpdate projectVersionRefUpdate) {
 
     this.projectVersionRefUpdate = projectVersionRefUpdate;
-    this.metricMaker = metricMaker;
-    this.metricRegistry = metricRegistry;
     this.subscriberSuccessCounter =
         metricMaker.newCounter(
             "multi_site/subscriber/subscriber_message_consumer_counter",
@@ -73,6 +67,17 @@
                 .setUnit("errors"),
             Field.ofString(
                 SUBSCRIBER_FAILURE_COUNTER, "Subscriber failed to consume messages count"));
+    metricMaker.newCallbackMetric(
+        REPLICATION_LAG_MS,
+        Long.class,
+        new Description("Replication lag (ms)").setGauge().setUnit(Description.Units.MILLISECONDS),
+        () -> {
+          Collection<Long> lags = replicationStatusPerProject.values();
+          if (lags.isEmpty()) {
+            return 0L;
+          }
+          return Collections.max(lags);
+        });
   }
 
   public void incrementSubscriberConsumedMessage() {
@@ -92,10 +97,9 @@
       Optional<Long> remoteVersion = projectVersionRefUpdate.getProjectRemoteVersion(projectName);
       Optional<Long> localVersion = projectVersionRefUpdate.getProjectLocalVersion(projectName);
       if (remoteVersion.isPresent() && localVersion.isPresent()) {
-        Long lag = remoteVersion.get() - localVersion.get();
+        long lag = remoteVersion.get() - localVersion.get();
         logger.atFine().log("Calculated lag for project '%s' [%d]", projectName, lag);
         replicationStatusPerProject.put(projectName, lag);
-        upsertMetricsForProject(projectName);
       } else {
         logger.atFine().log(
             "Didn't update metric for %s. Local [%b] or remote [%b] version is not defined",
@@ -105,20 +109,4 @@
       logger.atFine().log("Not a ref-replicated-event event [%s], skipping", event.type);
     }
   }
-
-  private void upsertMetricsForProject(String projectName) {
-    String metricName = PROJECT_REPLICATION_LAG_MS_PREFIX + projectName;
-    if (metricRegistry.getGauges(MetricFilter.contains(metricName)).isEmpty()) {
-      metricMaker.newCallbackMetric(
-          metricName,
-          Long.class,
-          new Description(String.format("%s replication lag (ms)", metricName))
-              .setGauge()
-              .setUnit(Description.Units.MILLISECONDS),
-          () -> replicationStatusPerProject.get(projectName));
-      logger.atFine().log("Added last replication timestamp callback metric for '%s'", projectName);
-    } else {
-      logger.atFine().log("Don't add metric since it already exists for project '%s'", projectName);
-    }
-  }
 }
diff --git a/src/main/resources/Documentation/about.md b/src/main/resources/Documentation/about.md
index c1135bb..5ac3dec 100644
--- a/src/main/resources/Documentation/about.md
+++ b/src/main/resources/Documentation/about.md
@@ -93,6 +93,6 @@
 
 `metric=plugins/multi-site/multi_site/subscriber/subscriber_message_consumer_failure_counter/subscriber_msg_consumer_poll_failure_counter, type=com.codahale.metrics.Meter`
 
-* Subscriber replication status per project (ms behind the producer)
+* Subscriber replication status (ms behind the producer)
 
-`metric=site/multi_site/subscriber/subscriber_replication_status/ms_behind_for_<projectName>, type=com.google.gerrit.metrics.dropwizard.CallbackMetricImpl`
\ No newline at end of file
+`metric=site/multi_site/subscriber/subscriber_replication_status/ms_behind, type=com.google.gerrit.metrics.dropwizard.CallbackMetricImpl`
\ No newline at end of file
