diff --git a/BUILD b/BUILD
index fd5fa13..581e688 100644
--- a/BUILD
+++ b/BUILD
@@ -12,6 +12,7 @@
     manifest_entries = [
         "Gerrit-PluginName: high-availability",
         "Gerrit-Module: com.ericsson.gerrit.plugins.highavailability.Module",
+        "Gerrit-ApiModule: com.ericsson.gerrit.plugins.highavailability.ApiModule",
         "Gerrit-HttpModule: com.ericsson.gerrit.plugins.highavailability.HttpModule",
         "Gerrit-InitStep: com.ericsson.gerrit.plugins.highavailability.Setup",
         "Gerrit-ReloadMode: restart",
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/ApiModule.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/ApiModule.java
new file mode 100644
index 0000000..fbf5ab5
--- /dev/null
+++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/ApiModule.java
@@ -0,0 +1,31 @@
+// Copyright (C) 2026 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.ericsson.gerrit.plugins.highavailability;
+
+import com.ericsson.gerrit.plugins.highavailability.forwarder.Forwarder;
+import com.ericsson.gerrit.plugins.highavailability.forwarder.commands.CommandProcessor;
+import com.ericsson.gerrit.plugins.highavailability.forwarder.commands.ForwarderCommandsModule;
+import com.google.gerrit.extensions.registration.DynamicItem;
+import com.google.inject.AbstractModule;
+
+public class ApiModule extends AbstractModule {
+
+  @Override
+  protected void configure() {
+    DynamicItem.itemOf(binder(), Forwarder.class);
+    DynamicItem.itemOf(binder(), CommandProcessor.class);
+    install(new ForwarderCommandsModule());
+  }
+}
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/Configuration.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/Configuration.java
index f75bdaa..4dc9f45 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/Configuration.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/Configuration.java
@@ -88,7 +88,8 @@
 
   public enum Transport {
     HTTP,
-    JGROUPS
+    JGROUPS,
+    PROVIDED
   }
 
   @Inject
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/Module.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/Module.java
index 6a90e73..6227787 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/Module.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/Module.java
@@ -17,7 +17,11 @@
 import com.ericsson.gerrit.plugins.highavailability.autoreindex.AutoReindexModule;
 import com.ericsson.gerrit.plugins.highavailability.cache.CacheModule;
 import com.ericsson.gerrit.plugins.highavailability.event.EventModule;
+import com.ericsson.gerrit.plugins.highavailability.forwarder.Forwarder;
 import com.ericsson.gerrit.plugins.highavailability.forwarder.ForwarderModule;
+import com.ericsson.gerrit.plugins.highavailability.forwarder.commands.CommandProcessor;
+import com.ericsson.gerrit.plugins.highavailability.forwarder.commands.CommandProcessorImpl;
+import com.ericsson.gerrit.plugins.highavailability.forwarder.commands.ForwarderCommandsModule;
 import com.ericsson.gerrit.plugins.highavailability.forwarder.jgroups.JGroupsForwarderModule;
 import com.ericsson.gerrit.plugins.highavailability.forwarder.rest.RestForwarderModule;
 import com.ericsson.gerrit.plugins.highavailability.index.IndexModule;
@@ -26,6 +30,7 @@
 import com.ericsson.gerrit.plugins.highavailability.peers.PeerInfoModule;
 import com.gerritforge.gerrit.globalrefdb.validation.ProjectDeletedSharedDbCleanup;
 import com.google.gerrit.extensions.events.ProjectDeletedListener;
+import com.google.gerrit.extensions.registration.DynamicItem;
 import com.google.gerrit.extensions.registration.DynamicSet;
 import com.google.gerrit.lifecycle.LifecycleModule;
 import com.google.inject.Inject;
@@ -49,16 +54,22 @@
     install(new ForwarderModule());
     install(new FileBasedLockManager.Module());
 
+    DynamicItem.bind(binder(), CommandProcessor.class).to(CommandProcessorImpl.class);
+
     switch (config.main().transport()) {
-      case HTTP:
+      case HTTP -> {
         install(new RestForwarderModule());
         install(new PeerInfoModule(config.peerInfo().strategy()));
-        break;
-      case JGROUPS:
+      }
+      case JGROUPS -> {
+        install(new ForwarderCommandsModule());
         install(new JGroupsForwarderModule());
-        break;
-      default:
-        throw new IllegalArgumentException("Unsupported transport: " + config.main().transport());
+      }
+      case PROVIDED -> {
+        // Bind default no-op implementation
+        // Transport will be provided by another plugin
+        DynamicItem.bind(binder(), Forwarder.class).to(NoForwarder.class);
+      }
     }
 
     if (config.cache().synchronize()) {
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/NoForwarder.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/NoForwarder.java
new file mode 100644
index 0000000..dc3e8ef
--- /dev/null
+++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/NoForwarder.java
@@ -0,0 +1,95 @@
+// Copyright (C) 2026 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.ericsson.gerrit.plugins.highavailability;
+
+import com.ericsson.gerrit.plugins.highavailability.forwarder.EventType;
+import com.ericsson.gerrit.plugins.highavailability.forwarder.Forwarder;
+import com.ericsson.gerrit.plugins.highavailability.forwarder.IndexEvent;
+import com.google.common.flogger.FluentLogger;
+import com.google.gerrit.entities.Project.NameKey;
+import com.google.gerrit.server.events.Event;
+import java.util.concurrent.CompletableFuture;
+
+/**
+ * No-Op forwarder implementation
+ *
+ * <p>This is used only as a temporary placeholder to avoid null checks until another plugin
+ * provides a real Forwarder implementation
+ */
+public class NoForwarder implements Forwarder {
+  private static final FluentLogger logger = FluentLogger.forEnclosingClass();
+
+  @Override
+  public CompletableFuture<Result> indexAccount(int accountId, IndexEvent indexEvent) {
+    logger.atWarning().log("NoForwarder: indexAccount called with accountId=%d", accountId);
+    return recoverableFailure(EventType.INDEX_ACCOUNT_UPDATE);
+  }
+
+  @Override
+  public CompletableFuture<Result> indexChange(
+      String projectName, int changeId, IndexEvent indexEvent) {
+    return recoverableFailure(EventType.INDEX_CHANGE_UPDATE);
+  }
+
+  @Override
+  public CompletableFuture<Result> batchIndexChange(
+      String projectName, int changeId, IndexEvent indexEvent) {
+    return recoverableFailure(EventType.INDEX_CHANGE_UPDATE_BATCH);
+  }
+
+  @Override
+  public CompletableFuture<Result> deleteChangeFromIndex(int changeId, IndexEvent indexEvent) {
+    return recoverableFailure(EventType.INDEX_CHANGE_DELETION);
+  }
+
+  @Override
+  public CompletableFuture<Result> indexGroup(String uuid, IndexEvent indexEvent) {
+    return recoverableFailure(EventType.INDEX_GROUP_UPDATE);
+  }
+
+  @Override
+  public CompletableFuture<Result> indexProject(String projectName, IndexEvent indexEvent) {
+    return recoverableFailure(EventType.INDEX_PROJECT_UPDATE);
+  }
+
+  @Override
+  public CompletableFuture<Result> send(Event event) {
+    return recoverableFailure(EventType.EVENT_SENT);
+  }
+
+  @Override
+  public CompletableFuture<Result> evict(String cacheName, Object key) {
+    return recoverableFailure(EventType.CACHE_EVICTION);
+  }
+
+  @Override
+  public CompletableFuture<Result> addToProjectList(String projectName) {
+    return recoverableFailure(EventType.PROJECT_LIST_ADDITION);
+  }
+
+  @Override
+  public CompletableFuture<Result> removeFromProjectList(String projectName) {
+    return recoverableFailure(EventType.PROJECT_LIST_DELETION);
+  }
+
+  @Override
+  public CompletableFuture<Result> deleteAllChangesForProject(NameKey projectName) {
+    return recoverableFailure(EventType.INDEX_CHANGE_DELETION_ALL_OF_PROJECT);
+  }
+
+  private CompletableFuture<Result> recoverableFailure(EventType eventType) {
+    return CompletableFuture.completedFuture(new Result(eventType, false, true));
+  }
+}
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/cache/CacheEvictionHandler.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/cache/CacheEvictionHandler.java
index 53bc3a1..43b6e4c 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/cache/CacheEvictionHandler.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/cache/CacheEvictionHandler.java
@@ -17,15 +17,16 @@
 import com.ericsson.gerrit.plugins.highavailability.forwarder.Context;
 import com.ericsson.gerrit.plugins.highavailability.forwarder.Forwarder;
 import com.google.common.cache.RemovalNotification;
+import com.google.gerrit.extensions.registration.DynamicItem;
 import com.google.gerrit.server.cache.CacheRemovalListener;
 import com.google.inject.Inject;
 
 class CacheEvictionHandler<K, V> implements CacheRemovalListener<K, V> {
-  private final Forwarder forwarder;
+  private final DynamicItem<Forwarder> forwarder;
   private final CachePatternMatcher matcher;
 
   @Inject
-  CacheEvictionHandler(Forwarder forwarder, CachePatternMatcher matcher) {
+  CacheEvictionHandler(DynamicItem<Forwarder> forwarder, CachePatternMatcher matcher) {
     this.forwarder = forwarder;
     this.matcher = matcher;
   }
@@ -33,7 +34,7 @@
   @Override
   public void onRemoval(String plugin, String cache, RemovalNotification<K, V> notification) {
     if (!Context.isForwardedEvent() && !notification.wasEvicted() && matcher.matches(cache)) {
-      forwarder.evict(cache, notification.getKey());
+      forwarder.get().evict(cache, notification.getKey());
     }
   }
 }
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/cache/ProjectListUpdateHandler.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/cache/ProjectListUpdateHandler.java
index 9ce9536..4281226 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/cache/ProjectListUpdateHandler.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/cache/ProjectListUpdateHandler.java
@@ -19,16 +19,17 @@
 import com.google.gerrit.extensions.events.NewProjectCreatedListener;
 import com.google.gerrit.extensions.events.ProjectDeletedListener;
 import com.google.gerrit.extensions.events.ProjectEvent;
+import com.google.gerrit.extensions.registration.DynamicItem;
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
 
 @Singleton
 public class ProjectListUpdateHandler implements NewProjectCreatedListener, ProjectDeletedListener {
 
-  private final Forwarder forwarder;
+  private final DynamicItem<Forwarder> forwarder;
 
   @Inject
-  public ProjectListUpdateHandler(Forwarder forwarder) {
+  public ProjectListUpdateHandler(DynamicItem<Forwarder> forwarder) {
     this.forwarder = forwarder;
   }
 
@@ -47,9 +48,9 @@
   private void process(ProjectEvent event, boolean delete) {
     if (!Context.isForwardedEvent()) {
       if (delete) {
-        forwarder.removeFromProjectList(event.getProjectName());
+        forwarder.get().removeFromProjectList(event.getProjectName());
       } else {
-        forwarder.addToProjectList(event.getProjectName());
+        forwarder.get().addToProjectList(event.getProjectName());
       }
     }
   }
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/event/EventHandler.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/event/EventHandler.java
index 5ce12df..3060f5f 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/event/EventHandler.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/event/EventHandler.java
@@ -16,23 +16,24 @@
 
 import com.ericsson.gerrit.plugins.highavailability.forwarder.Context;
 import com.ericsson.gerrit.plugins.highavailability.forwarder.Forwarder;
+import com.google.gerrit.extensions.registration.DynamicItem;
 import com.google.gerrit.server.events.Event;
 import com.google.gerrit.server.events.EventListener;
 import com.google.gerrit.server.events.ProjectEvent;
 import com.google.inject.Inject;
 
 class EventHandler implements EventListener {
-  private final Forwarder forwarder;
+  private final DynamicItem<Forwarder> forwarder;
 
   @Inject
-  EventHandler(Forwarder forwarder) {
+  EventHandler(DynamicItem<Forwarder> forwarder) {
     this.forwarder = forwarder;
   }
 
   @Override
   public void onEvent(Event event) {
     if (!Context.isForwardedEvent() && event instanceof ProjectEvent) {
-      forwarder.send(event);
+      forwarder.get().send(event);
     }
   }
 }
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/AddToProjectList.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/commands/AddToProjectList.java
similarity index 93%
rename from src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/AddToProjectList.java
rename to src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/commands/AddToProjectList.java
index 6f47da3..4883dda 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/AddToProjectList.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/commands/AddToProjectList.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.ericsson.gerrit.plugins.highavailability.forwarder.jgroups;
+package com.ericsson.gerrit.plugins.highavailability.forwarder.commands;
 
 import com.ericsson.gerrit.plugins.highavailability.forwarder.EventType;
 import java.time.Instant;
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/Command.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/commands/Command.java
similarity index 92%
rename from src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/Command.java
rename to src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/commands/Command.java
index 3abad1e..1b7b86e 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/Command.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/commands/Command.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.ericsson.gerrit.plugins.highavailability.forwarder.jgroups;
+package com.ericsson.gerrit.plugins.highavailability.forwarder.commands;
 
 import com.ericsson.gerrit.plugins.highavailability.forwarder.EventType;
 import java.time.Instant;
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/CommandDeserializer.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/commands/CommandDeserializer.java
similarity index 97%
rename from src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/CommandDeserializer.java
rename to src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/commands/CommandDeserializer.java
index cdd217c..1100284 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/CommandDeserializer.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/commands/CommandDeserializer.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.ericsson.gerrit.plugins.highavailability.forwarder.jgroups;
+package com.ericsson.gerrit.plugins.highavailability.forwarder.commands;
 
 import com.ericsson.gerrit.plugins.highavailability.forwarder.EventType;
 import com.google.gson.JsonDeserializationContext;
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/commands/CommandProcessor.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/commands/CommandProcessor.java
new file mode 100644
index 0000000..6c40356
--- /dev/null
+++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/commands/CommandProcessor.java
@@ -0,0 +1,27 @@
+// Copyright (C) 2026 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.ericsson.gerrit.plugins.highavailability.forwarder.commands;
+
+/** Processes commands received from other nodes */
+public interface CommandProcessor {
+
+  /**
+   * Processes the given command.
+   *
+   * @param cmd the command to process
+   * @return true if the command was successfully processed, false otherwise
+   */
+  boolean handle(Command cmd);
+}
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/MessageProcessor.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/commands/CommandProcessorImpl.java
similarity index 88%
rename from src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/MessageProcessor.java
rename to src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/commands/CommandProcessorImpl.java
index 489e070..cadfaea 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/MessageProcessor.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/commands/CommandProcessorImpl.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.ericsson.gerrit.plugins.highavailability.forwarder.jgroups;
+package com.ericsson.gerrit.plugins.highavailability.forwarder.commands;
 
 import com.ericsson.gerrit.plugins.highavailability.forwarder.CacheEntry;
 import com.ericsson.gerrit.plugins.highavailability.forwarder.Context;
@@ -25,23 +25,20 @@
 import com.ericsson.gerrit.plugins.highavailability.forwarder.ForwardedProjectListUpdateHandler;
 import com.ericsson.gerrit.plugins.highavailability.forwarder.ProcessorMetrics;
 import com.ericsson.gerrit.plugins.highavailability.forwarder.ProcessorMetricsRegistry;
+import com.google.common.annotations.VisibleForTesting;
 import com.google.common.flogger.FluentLogger;
 import com.google.gerrit.entities.Account;
 import com.google.gerrit.server.events.Event;
-import com.google.gson.Gson;
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
 import java.io.IOException;
 import java.time.Instant;
 import java.util.Optional;
-import org.jgroups.Message;
-import org.jgroups.blocks.RequestHandler;
 
 @Singleton
-public class MessageProcessor implements RequestHandler {
+public class CommandProcessorImpl implements CommandProcessor {
   private static final FluentLogger log = FluentLogger.forEnclosingClass();
 
-  private final Gson gson;
   private final ForwardedIndexChangeHandler indexChangeHandler;
   private final ForwardedIndexBatchChangeHandler indexBatchChangeHandler;
   private final ForwardedIndexAccountHandler indexAccountHandler;
@@ -51,8 +48,8 @@
   private final ProcessorMetricsRegistry metricRegistry;
 
   @Inject
-  MessageProcessor(
-      @JGroupsGson Gson gson,
+  @VisibleForTesting
+  public CommandProcessorImpl(
       ForwardedIndexChangeHandler indexChangeHandler,
       ForwardedIndexBatchChangeHandler indexBatchChangeHandler,
       ForwardedIndexAccountHandler indexAccountHandler,
@@ -60,7 +57,6 @@
       ForwardedEventHandler eventHandler,
       ForwardedProjectListUpdateHandler projectListUpdateHandler,
       ProcessorMetricsRegistry metricRegistry) {
-    this.gson = gson;
     this.indexChangeHandler = indexChangeHandler;
     this.indexBatchChangeHandler = indexBatchChangeHandler;
     this.indexAccountHandler = indexAccountHandler;
@@ -71,8 +67,7 @@
   }
 
   @Override
-  public Object handle(Message msg) {
-    Command cmd = getCommand(msg);
+  public boolean handle(Command cmd) {
     ProcessorMetrics metrics = metricRegistry.get(cmd.type);
     Instant startTime = Instant.now();
     boolean success = false;
@@ -117,7 +112,7 @@
       } else if (cmd instanceof PostEvent) {
         Event event = ((PostEvent) cmd).getEvent();
         eventHandler.dispatch(event);
-
+        log.atFine().log("Dispatching event %s done", event);
       } else if (cmd instanceof AddToProjectList) {
         String projectName = ((AddToProjectList) cmd).getProjectName();
         projectListUpdateHandler.update(projectName, false);
@@ -145,15 +140,4 @@
       throw new IllegalArgumentException("Unknown type of IndexChange command " + cmd.getClass());
     }
   }
-
-  private Command getCommand(Message msg) {
-    try {
-      String s = (String) msg.getObject();
-      log.atFine().log("Received message: %s", s);
-      return gson.fromJson(s, Command.class);
-    } catch (RuntimeException e) {
-      log.atSevere().withCause(e).log("Error parsing message %s", msg.getObject());
-      throw e;
-    }
-  }
 }
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/JGroupsGson.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/commands/CommandsGson.java
similarity index 87%
rename from src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/JGroupsGson.java
rename to src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/commands/CommandsGson.java
index a4ca15a..d381402 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/JGroupsGson.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/commands/CommandsGson.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.ericsson.gerrit.plugins.highavailability.forwarder.jgroups;
+package com.ericsson.gerrit.plugins.highavailability.forwarder.commands;
 
 import static java.lang.annotation.RetentionPolicy.RUNTIME;
 
@@ -21,4 +21,4 @@
 
 @BindingAnnotation
 @Retention(RUNTIME)
-public @interface JGroupsGson {}
+public @interface CommandsGson {}
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/DeleteAllProjectChangesFromIndex.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/commands/DeleteAllProjectChangesFromIndex.java
similarity index 86%
rename from src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/DeleteAllProjectChangesFromIndex.java
rename to src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/commands/DeleteAllProjectChangesFromIndex.java
index 81ce445..532708b 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/DeleteAllProjectChangesFromIndex.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/commands/DeleteAllProjectChangesFromIndex.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.ericsson.gerrit.plugins.highavailability.forwarder.jgroups;
+package com.ericsson.gerrit.plugins.highavailability.forwarder.commands;
 
 import com.ericsson.gerrit.plugins.highavailability.forwarder.EventType;
 import com.google.gerrit.entities.Project;
@@ -23,7 +23,7 @@
 
   private final Project.NameKey projectName;
 
-  protected DeleteAllProjectChangesFromIndex(Project.NameKey projectName, Instant createdOn) {
+  public DeleteAllProjectChangesFromIndex(Project.NameKey projectName, Instant createdOn) {
     super(TYPE, createdOn);
     this.projectName = projectName;
   }
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/EvictCache.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/commands/EvictCache.java
similarity index 82%
rename from src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/EvictCache.java
rename to src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/commands/EvictCache.java
index 9ca05f1..151b839 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/EvictCache.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/commands/EvictCache.java
@@ -12,18 +12,18 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.ericsson.gerrit.plugins.highavailability.forwarder.jgroups;
+package com.ericsson.gerrit.plugins.highavailability.forwarder.commands;
 
 import com.ericsson.gerrit.plugins.highavailability.forwarder.EventType;
 import java.time.Instant;
 
 public class EvictCache extends Command {
-  static final EventType TYPE = EventType.CACHE_EVICTION;
+  public static final EventType TYPE = EventType.CACHE_EVICTION;
 
   private final String cacheName;
   private final String keyJson;
 
-  protected EvictCache(String cacheName, String keyJson, Instant eventCreatedOn) {
+  public EvictCache(String cacheName, String keyJson, Instant eventCreatedOn) {
     super(TYPE, eventCreatedOn);
     this.cacheName = cacheName;
     this.keyJson = keyJson;
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/commands/ForwarderCommandsModule.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/commands/ForwarderCommandsModule.java
new file mode 100644
index 0000000..7a1b039
--- /dev/null
+++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/commands/ForwarderCommandsModule.java
@@ -0,0 +1,38 @@
+// Copyright (C) 2023 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.ericsson.gerrit.plugins.highavailability.forwarder.commands;
+
+import com.ericsson.gerrit.plugins.highavailability.forwarder.InstantTypeAdapter;
+import com.google.common.annotations.VisibleForTesting;
+import com.google.gerrit.server.events.EventGson;
+import com.google.gson.Gson;
+import com.google.inject.AbstractModule;
+import com.google.inject.Provides;
+import com.google.inject.Singleton;
+import java.time.Instant;
+
+public class ForwarderCommandsModule extends AbstractModule {
+  @Provides
+  @Singleton
+  @CommandsGson
+  @VisibleForTesting
+  public Gson buildCommandsGson(@EventGson Gson eventGson) {
+    return eventGson
+        .newBuilder()
+        .registerTypeAdapter(Command.class, new CommandDeserializer())
+        .registerTypeAdapter(Instant.class, new InstantTypeAdapter())
+        .create();
+  }
+}
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/IndexAccount.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/commands/IndexAccount.java
similarity index 92%
rename from src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/IndexAccount.java
rename to src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/commands/IndexAccount.java
index 55cadda..6c95d1d 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/IndexAccount.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/commands/IndexAccount.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.ericsson.gerrit.plugins.highavailability.forwarder.jgroups;
+package com.ericsson.gerrit.plugins.highavailability.forwarder.commands;
 
 import com.ericsson.gerrit.plugins.highavailability.forwarder.EventType;
 import java.time.Instant;
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/IndexChange.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/commands/IndexChange.java
similarity index 96%
rename from src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/IndexChange.java
rename to src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/commands/IndexChange.java
index 075bfd7..990ae8e 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/IndexChange.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/commands/IndexChange.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.ericsson.gerrit.plugins.highavailability.forwarder.jgroups;
+package com.ericsson.gerrit.plugins.highavailability.forwarder.commands;
 
 import com.ericsson.gerrit.plugins.highavailability.forwarder.EventType;
 import com.google.common.base.Strings;
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/IndexGroup.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/commands/IndexGroup.java
similarity index 87%
rename from src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/IndexGroup.java
rename to src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/commands/IndexGroup.java
index 9f49060..3ae8458 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/IndexGroup.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/commands/IndexGroup.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.ericsson.gerrit.plugins.highavailability.forwarder.jgroups;
+package com.ericsson.gerrit.plugins.highavailability.forwarder.commands;
 
 import com.ericsson.gerrit.plugins.highavailability.forwarder.EventType;
 import java.time.Instant;
@@ -22,7 +22,7 @@
 
   private final String uuid;
 
-  protected IndexGroup(String uuid, Instant eventCreatedOn) {
+  public IndexGroup(String uuid, Instant eventCreatedOn) {
     super(TYPE, eventCreatedOn);
     this.uuid = uuid;
   }
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/IndexProject.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/commands/IndexProject.java
similarity index 87%
rename from src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/IndexProject.java
rename to src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/commands/IndexProject.java
index 40e400d..7feffc4 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/IndexProject.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/commands/IndexProject.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.ericsson.gerrit.plugins.highavailability.forwarder.jgroups;
+package com.ericsson.gerrit.plugins.highavailability.forwarder.commands;
 
 import com.ericsson.gerrit.plugins.highavailability.forwarder.EventType;
 import java.time.Instant;
@@ -22,7 +22,7 @@
 
   private String projectName;
 
-  protected IndexProject(String projectName, Instant eventCreatedOn) {
+  public IndexProject(String projectName, Instant eventCreatedOn) {
     super(TYPE, eventCreatedOn);
     this.projectName = projectName;
   }
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/PostEvent.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/commands/PostEvent.java
similarity index 88%
rename from src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/PostEvent.java
rename to src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/commands/PostEvent.java
index 3f50b0a..18c17c7 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/PostEvent.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/commands/PostEvent.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.ericsson.gerrit.plugins.highavailability.forwarder.jgroups;
+package com.ericsson.gerrit.plugins.highavailability.forwarder.commands;
 
 import com.ericsson.gerrit.plugins.highavailability.forwarder.EventType;
 import com.google.gerrit.server.events.Event;
@@ -23,7 +23,7 @@
 
   private final Event event;
 
-  protected PostEvent(Event event, Instant eventCreatedOn) {
+  public PostEvent(Event event, Instant eventCreatedOn) {
     super(TYPE, eventCreatedOn);
     this.event = event;
   }
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/RemoveFromProjectList.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/commands/RemoveFromProjectList.java
similarity index 93%
rename from src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/RemoveFromProjectList.java
rename to src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/commands/RemoveFromProjectList.java
index 1a43ac8..b1ee7df 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/RemoveFromProjectList.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/commands/RemoveFromProjectList.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.ericsson.gerrit.plugins.highavailability.forwarder.jgroups;
+package com.ericsson.gerrit.plugins.highavailability.forwarder.commands;
 
 import com.ericsson.gerrit.plugins.highavailability.forwarder.EventType;
 import java.time.Instant;
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/JGroupsForwarder.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/JGroupsForwarder.java
index 0bd8c5d..1c004f7 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/JGroupsForwarder.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/JGroupsForwarder.java
@@ -19,6 +19,17 @@
 import com.ericsson.gerrit.plugins.highavailability.forwarder.Forwarder;
 import com.ericsson.gerrit.plugins.highavailability.forwarder.ForwarderMetricsRegistry;
 import com.ericsson.gerrit.plugins.highavailability.forwarder.IndexEvent;
+import com.ericsson.gerrit.plugins.highavailability.forwarder.commands.AddToProjectList;
+import com.ericsson.gerrit.plugins.highavailability.forwarder.commands.Command;
+import com.ericsson.gerrit.plugins.highavailability.forwarder.commands.CommandsGson;
+import com.ericsson.gerrit.plugins.highavailability.forwarder.commands.DeleteAllProjectChangesFromIndex;
+import com.ericsson.gerrit.plugins.highavailability.forwarder.commands.EvictCache;
+import com.ericsson.gerrit.plugins.highavailability.forwarder.commands.IndexAccount;
+import com.ericsson.gerrit.plugins.highavailability.forwarder.commands.IndexChange;
+import com.ericsson.gerrit.plugins.highavailability.forwarder.commands.IndexGroup;
+import com.ericsson.gerrit.plugins.highavailability.forwarder.commands.IndexProject;
+import com.ericsson.gerrit.plugins.highavailability.forwarder.commands.PostEvent;
+import com.ericsson.gerrit.plugins.highavailability.forwarder.commands.RemoveFromProjectList;
 import com.google.common.flogger.FluentLogger;
 import com.google.gerrit.entities.Project;
 import com.google.gerrit.server.events.Event;
@@ -53,7 +64,7 @@
   JGroupsForwarder(
       MessageDispatcher dispatcher,
       Configuration cfg,
-      @JGroupsGson Gson gson,
+      @CommandsGson Gson gson,
       @JGroupsForwarderExecutor FailsafeExecutor<Result> executor,
       ForwarderMetricsRegistry metricsRegistry) {
     this.dispatcher = dispatcher;
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/JGroupsForwarderModule.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/JGroupsForwarderModule.java
index 0895088..3d3a5b7 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/JGroupsForwarderModule.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/JGroupsForwarderModule.java
@@ -16,17 +16,12 @@
 
 import com.ericsson.gerrit.plugins.highavailability.forwarder.Forwarder;
 import com.ericsson.gerrit.plugins.highavailability.forwarder.Forwarder.Result;
-import com.ericsson.gerrit.plugins.highavailability.forwarder.InstantTypeAdapter;
 import com.ericsson.gerrit.plugins.highavailability.peers.jgroups.JChannelProviderModule;
+import com.google.gerrit.extensions.registration.DynamicItem;
 import com.google.gerrit.lifecycle.LifecycleModule;
-import com.google.gerrit.server.events.EventGson;
-import com.google.gson.Gson;
-import com.google.inject.Provides;
 import com.google.inject.Scopes;
-import com.google.inject.Singleton;
 import com.google.inject.TypeLiteral;
 import dev.failsafe.FailsafeExecutor;
-import java.time.Instant;
 import org.jgroups.blocks.MessageDispatcher;
 import org.jgroups.blocks.RequestHandler;
 
@@ -34,9 +29,9 @@
 
   @Override
   protected void configure() {
-    bind(Forwarder.class).to(JGroupsForwarder.class);
+    DynamicItem.bind(binder(), Forwarder.class).to(JGroupsForwarder.class);
     bind(MessageDispatcher.class).toProvider(MessageDispatcherProvider.class).in(Scopes.SINGLETON);
-    bind(RequestHandler.class).to(MessageProcessor.class);
+    bind(RequestHandler.class).to(JGroupsMessageProcessor.class);
     install(new JChannelProviderModule());
     listener().to(OnStartStop.class);
 
@@ -45,15 +40,4 @@
         .toProvider(FailsafeExecutorProvider.class)
         .in(Scopes.SINGLETON);
   }
-
-  @Provides
-  @Singleton
-  @JGroupsGson
-  Gson buildJGroupsGson(@EventGson Gson eventGson) {
-    return eventGson
-        .newBuilder()
-        .registerTypeAdapter(Command.class, new CommandDeserializer())
-        .registerTypeAdapter(Instant.class, new InstantTypeAdapter())
-        .create();
-  }
 }
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/JGroupsMessageProcessor.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/JGroupsMessageProcessor.java
new file mode 100644
index 0000000..ff091b9
--- /dev/null
+++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/JGroupsMessageProcessor.java
@@ -0,0 +1,55 @@
+// Copyright (C) 2023 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.ericsson.gerrit.plugins.highavailability.forwarder.jgroups;
+
+import com.ericsson.gerrit.plugins.highavailability.forwarder.commands.Command;
+import com.ericsson.gerrit.plugins.highavailability.forwarder.commands.CommandProcessor;
+import com.ericsson.gerrit.plugins.highavailability.forwarder.commands.CommandsGson;
+import com.google.common.flogger.FluentLogger;
+import com.google.gson.Gson;
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
+import org.jgroups.Message;
+import org.jgroups.blocks.RequestHandler;
+
+@Singleton
+public class JGroupsMessageProcessor implements RequestHandler {
+  private static final FluentLogger log = FluentLogger.forEnclosingClass();
+
+  private final Gson gson;
+  private final CommandProcessor processor;
+
+  @Inject
+  JGroupsMessageProcessor(@CommandsGson Gson gson, CommandProcessor processor) {
+    this.gson = gson;
+    this.processor = processor;
+  }
+
+  @Override
+  public Object handle(Message msg) {
+    return processor.handle(getCommand(msg));
+  }
+
+  private Command getCommand(Message msg) {
+    try {
+      String s = (String) msg.getObject();
+      log.atFine().log("Received message: %s", s);
+      return gson.fromJson(s, Command.class);
+    } catch (RuntimeException e) {
+      log.atSevere().withCause(e).log("Error parsing message %s", msg.getObject());
+      throw e;
+    }
+  }
+}
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/RestForwarderModule.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/RestForwarderModule.java
index 712e7f4..f1c58e6 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/RestForwarderModule.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/RestForwarderModule.java
@@ -17,6 +17,7 @@
 import com.ericsson.gerrit.plugins.highavailability.forwarder.Forwarder;
 import com.ericsson.gerrit.plugins.highavailability.forwarder.Forwarder.Result;
 import com.ericsson.gerrit.plugins.highavailability.forwarder.InstantTypeAdapter;
+import com.google.gerrit.extensions.registration.DynamicItem;
 import com.google.gerrit.server.events.EventGson;
 import com.google.gson.Gson;
 import com.google.inject.AbstractModule;
@@ -34,7 +35,7 @@
   protected void configure() {
     bind(CloseableHttpClient.class).toProvider(HttpClientProvider.class).in(Scopes.SINGLETON);
     bind(HttpSession.class);
-    bind(Forwarder.class).to(RestForwarder.class);
+    DynamicItem.bind(binder(), Forwarder.class).to(RestForwarder.class);
 
     bind(new TypeLiteral<FailsafeExecutor<Result>>() {})
         .annotatedWith(RestForwarderExecutor.class)
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/index/IndexEventHandler.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/index/IndexEventHandler.java
index 6475d99..0b1ff7f 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/index/IndexEventHandler.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/index/IndexEventHandler.java
@@ -23,6 +23,7 @@
 import com.google.gerrit.extensions.events.ChangeIndexedListener;
 import com.google.gerrit.extensions.events.GroupIndexedListener;
 import com.google.gerrit.extensions.events.ProjectIndexedListener;
+import com.google.gerrit.extensions.registration.DynamicItem;
 import com.google.inject.Inject;
 import java.util.Optional;
 
@@ -32,13 +33,15 @@
         GroupIndexedListener,
         ProjectIndexedListener {
   private static final FluentLogger log = FluentLogger.forEnclosingClass();
-  private final Forwarder forwarder;
+  private final DynamicItem<Forwarder> forwarder;
   private final ChangeCheckerImpl.Factory changeChecker;
   private final CurrentRequestContext currCtx;
 
   @Inject
   IndexEventHandler(
-      Forwarder forwarder, ChangeCheckerImpl.Factory changeChecker, CurrentRequestContext currCtx) {
+      DynamicItem<Forwarder> forwarder,
+      ChangeCheckerImpl.Factory changeChecker,
+      CurrentRequestContext currCtx) {
     this.forwarder = forwarder;
     this.changeChecker = changeChecker;
     this.currCtx = currCtx;
@@ -49,7 +52,7 @@
     currCtx.onlyWithContext(
         (ctx) -> {
           if (!Context.isForwardedEvent()) {
-            forwarder.indexAccount(id, new IndexEvent());
+            forwarder.get().indexAccount(id, new IndexEvent());
           }
         });
   }
@@ -66,7 +69,7 @@
 
   private void executeAllChangesDeletedForProject(String projectName) {
     if (!Context.isForwardedEvent()) {
-      forwarder.deleteAllChangesForProject(Project.nameKey(projectName));
+      forwarder.get().deleteAllChangesForProject(Project.nameKey(projectName));
     }
   }
 
@@ -80,9 +83,9 @@
         }
 
         if (Thread.currentThread().getName().contains("Batch")) {
-          forwarder.batchIndexChange(projectName, id, indexEvent.get());
+          forwarder.get().batchIndexChange(projectName, id, indexEvent.get());
         } else {
-          forwarder.indexChange(projectName, id, indexEvent.get());
+          forwarder.get().indexChange(projectName, id, indexEvent.get());
         }
       } catch (Exception e) {
         log.atWarning().withCause(e).log("Unable to create task to reindex change %s", changeId);
@@ -93,21 +96,21 @@
   @Override
   public void onChangeDeleted(int id) {
     if (!Context.isForwardedEvent()) {
-      forwarder.deleteChangeFromIndex(id, new IndexEvent());
+      forwarder.get().deleteChangeFromIndex(id, new IndexEvent());
     }
   }
 
   @Override
   public void onProjectIndexed(String projectName) {
     if (!Context.isForwardedEvent()) {
-      forwarder.indexProject(projectName, new IndexEvent());
+      forwarder.get().indexProject(projectName, new IndexEvent());
     }
   }
 
   @Override
   public void onGroupIndexed(String groupUUID) {
     if (!Context.isForwardedEvent()) {
-      forwarder.indexGroup(groupUUID, new IndexEvent());
+      forwarder.get().indexGroup(groupUUID, new IndexEvent());
     }
   }
 }
diff --git a/src/main/resources/Documentation/config.md b/src/main/resources/Documentation/config.md
index b089091..737b354 100644
--- a/src/main/resources/Documentation/config.md
+++ b/src/main/resources/Documentation/config.md
@@ -73,6 +73,18 @@
   maxTries = 100
 ```
 
+### Transport implementation provided by another plugin
+
+In this case another plugin extends the @PLUGIN@ plugin and provides messaging
+implementation.
+```
+[main]
+  transport = provided
+  sharedDirectory = /directory/accessible/from/both/instances
+[autoReindex]
+  enabled = false
+```
+
 ```main.sharedDirectory```
 :   Path to a directory accessible from both instances.
     When given as a relative path, then it is resolved against the $SITE_PATH
@@ -82,9 +94,10 @@
     is "shared".
 
 ```main.transport```
-:   Message transport layer. Could be: `http` or `jgroups`.
+:   Message transport layer. Could be: `http`, `jgroups` or `provided`.
     When not specificed the default is `http`.
-    When set to `jgroups` then all `peerInfo.*` sections are unnecessary and ignored.
+    When set to `jgroups` or `provided` then all `peerInfo.*` sections are
+    unnecessary and ignored.
 
 ```autoReindex.enabled```
 :   Enable the tracking of the latest change indexed under data/high-availability
diff --git a/src/test/java/com/ericsson/gerrit/plugins/highavailability/cache/CacheEvictionHandlerTest.java b/src/test/java/com/ericsson/gerrit/plugins/highavailability/cache/CacheEvictionHandlerTest.java
index 3d091a0..cd5a477 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/highavailability/cache/CacheEvictionHandlerTest.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/highavailability/cache/CacheEvictionHandlerTest.java
@@ -20,6 +20,7 @@
 import com.ericsson.gerrit.plugins.highavailability.forwarder.Forwarder;
 import com.google.common.cache.RemovalCause;
 import com.google.common.cache.RemovalNotification;
+import com.google.gerrit.extensions.registration.DynamicItem;
 import com.google.gerrit.server.config.PluginConfigFactory;
 import com.google.gerrit.server.config.SitePaths;
 import java.io.IOException;
@@ -34,7 +35,7 @@
 
 @RunWith(MockitoJUnitRunner.class)
 public class CacheEvictionHandlerTest {
-  @Mock private Forwarder forwarder;
+  @Mock private DynamicItem<Forwarder> forwarder;
   @Mock private PluginConfigFactory pluginConfigFactoryMock;
 
   private static final Path SITE_PATH = Paths.get("/site_path");
diff --git a/src/test/java/com/ericsson/gerrit/plugins/highavailability/cache/CacheEvictionIT.java b/src/test/java/com/ericsson/gerrit/plugins/highavailability/cache/CacheEvictionIT.java
index 180c68f..f44be49 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/highavailability/cache/CacheEvictionIT.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/highavailability/cache/CacheEvictionIT.java
@@ -48,6 +48,7 @@
 @UseSsh
 @TestPlugin(
     name = "high-availability",
+    apiModule = "com.ericsson.gerrit.plugins.highavailability.ApiModule",
     sysModule = "com.ericsson.gerrit.plugins.highavailability.Module",
     httpModule = "com.ericsson.gerrit.plugins.highavailability.HttpModule")
 public class CacheEvictionIT extends LightweightPluginDaemonTest {
diff --git a/src/test/java/com/ericsson/gerrit/plugins/highavailability/cache/ProjectListIT.java b/src/test/java/com/ericsson/gerrit/plugins/highavailability/cache/ProjectListIT.java
index 36c775c..6fa508e 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/highavailability/cache/ProjectListIT.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/highavailability/cache/ProjectListIT.java
@@ -38,6 +38,7 @@
 
 @TestPlugin(
     name = "high-availability",
+    apiModule = "com.ericsson.gerrit.plugins.highavailability.ApiModule",
     sysModule = "com.ericsson.gerrit.plugins.highavailability.Module",
     httpModule = "com.ericsson.gerrit.plugins.highavailability.HttpModule")
 public class ProjectListIT extends LightweightPluginDaemonTest {
diff --git a/src/test/java/com/ericsson/gerrit/plugins/highavailability/cache/ProjectListUpdateHandlerTest.java b/src/test/java/com/ericsson/gerrit/plugins/highavailability/cache/ProjectListUpdateHandlerTest.java
index 1bd2aed..e4fea74 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/highavailability/cache/ProjectListUpdateHandlerTest.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/highavailability/cache/ProjectListUpdateHandlerTest.java
@@ -23,6 +23,8 @@
 import com.ericsson.gerrit.plugins.highavailability.forwarder.Forwarder;
 import com.google.gerrit.extensions.events.NewProjectCreatedListener;
 import com.google.gerrit.extensions.events.ProjectDeletedListener;
+import com.google.gerrit.extensions.registration.DynamicItem;
+import com.google.inject.Inject;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -34,10 +36,12 @@
   private ProjectListUpdateHandler handler;
 
   @Mock private Forwarder forwarder;
+  @Inject DynamicItem<Forwarder> forwarderItem;
 
   @Before
   public void setUp() {
-    handler = new ProjectListUpdateHandler(forwarder);
+    forwarderItem = DynamicItem.itemOf(Forwarder.class, forwarder);
+    handler = new ProjectListUpdateHandler(forwarderItem);
   }
 
   @Test
diff --git a/src/test/java/com/ericsson/gerrit/plugins/highavailability/event/EventHandlerTest.java b/src/test/java/com/ericsson/gerrit/plugins/highavailability/event/EventHandlerTest.java
index 988064e..6c12b1d 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/highavailability/event/EventHandlerTest.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/highavailability/event/EventHandlerTest.java
@@ -20,8 +20,10 @@
 
 import com.ericsson.gerrit.plugins.highavailability.forwarder.Context;
 import com.ericsson.gerrit.plugins.highavailability.forwarder.Forwarder;
+import com.google.gerrit.extensions.registration.DynamicItem;
 import com.google.gerrit.server.events.Event;
 import com.google.gerrit.server.events.ProjectEvent;
+import com.google.inject.Inject;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -33,10 +35,12 @@
   private EventHandler eventHandler;
 
   @Mock private Forwarder forwarder;
+  @Inject DynamicItem<Forwarder> forwarderItem;
 
   @Before
   public void setUp() {
-    eventHandler = new EventHandler(forwarder);
+    forwarderItem = DynamicItem.itemOf(Forwarder.class, forwarder);
+    eventHandler = new EventHandler(forwarderItem);
   }
 
   @Test
diff --git a/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/CommandDeserializerTest.java b/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/commands/CommandDeserializerTest.java
similarity index 97%
rename from src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/CommandDeserializerTest.java
rename to src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/commands/CommandDeserializerTest.java
index 7829a80..7c3a886 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/CommandDeserializerTest.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/commands/CommandDeserializerTest.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.ericsson.gerrit.plugins.highavailability.forwarder.jgroups;
+package com.ericsson.gerrit.plugins.highavailability.forwarder.commands;
 
 import static com.google.common.truth.Truth.assertThat;
 
@@ -35,7 +35,7 @@
   @Before
   public void setUp() {
     Gson eventGson = new EventGsonProvider().get();
-    this.gson = new JGroupsForwarderModule().buildJGroupsGson(eventGson);
+    this.gson = new ForwarderCommandsModule().buildCommandsGson(eventGson);
     this.cacheKeyParser = new CacheKeyJsonParser(eventGson);
   }
 
diff --git a/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/JGroupsForwarderTest.java b/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/JGroupsForwarderTest.java
index e7542b4..1a926bf 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/JGroupsForwarderTest.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/JGroupsForwarderTest.java
@@ -27,6 +27,7 @@
 import com.ericsson.gerrit.plugins.highavailability.forwarder.ForwarderMetrics;
 import com.ericsson.gerrit.plugins.highavailability.forwarder.ForwarderMetricsRegistry;
 import com.ericsson.gerrit.plugins.highavailability.forwarder.IndexEvent;
+import com.ericsson.gerrit.plugins.highavailability.forwarder.commands.ForwarderCommandsModule;
 import com.google.gerrit.server.events.EventGsonProvider;
 import com.google.gerrit.server.git.WorkQueue;
 import com.google.gson.Gson;
@@ -65,7 +66,7 @@
   @Before
   public void setUp() throws Exception {
     Gson eventGson = new EventGsonProvider().get();
-    Gson gson = new JGroupsForwarderModule().buildJGroupsGson(eventGson);
+    Gson gson = new ForwarderCommandsModule().buildCommandsGson(eventGson);
     Configuration cfg = mock(Configuration.class, RETURNS_DEEP_STUBS);
     when(cfg.jgroups().maxTries()).thenReturn(MAX_TRIES);
     when(cfg.jgroups().retryInterval()).thenReturn(Duration.ofMillis(1));
diff --git a/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/MessageProcessorTest.java b/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/MessageProcessorTest.java
index 91d291c..bca7801 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/MessageProcessorTest.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/MessageProcessorTest.java
@@ -33,6 +33,14 @@
 import com.ericsson.gerrit.plugins.highavailability.forwarder.ForwardedProjectListUpdateHandler;
 import com.ericsson.gerrit.plugins.highavailability.forwarder.ProcessorMetrics;
 import com.ericsson.gerrit.plugins.highavailability.forwarder.ProcessorMetricsRegistry;
+import com.ericsson.gerrit.plugins.highavailability.forwarder.commands.AddToProjectList;
+import com.ericsson.gerrit.plugins.highavailability.forwarder.commands.CommandProcessorImpl;
+import com.ericsson.gerrit.plugins.highavailability.forwarder.commands.EvictCache;
+import com.ericsson.gerrit.plugins.highavailability.forwarder.commands.ForwarderCommandsModule;
+import com.ericsson.gerrit.plugins.highavailability.forwarder.commands.IndexAccount;
+import com.ericsson.gerrit.plugins.highavailability.forwarder.commands.IndexChange;
+import com.ericsson.gerrit.plugins.highavailability.forwarder.commands.PostEvent;
+import com.ericsson.gerrit.plugins.highavailability.forwarder.commands.RemoveFromProjectList;
 import com.google.gerrit.entities.Account;
 import com.google.gerrit.entities.Change;
 import com.google.gerrit.server.events.Event;
@@ -55,7 +63,7 @@
 @RunWith(org.mockito.junit.MockitoJUnitRunner.class)
 public class MessageProcessorTest {
 
-  private MessageProcessor processor;
+  private JGroupsMessageProcessor processor;
   private Gson gson;
 
   private ForwardedIndexChangeHandler indexChangeHandler;
@@ -74,7 +82,7 @@
   public void setUp() {
     when(metricsRegistry.get(any())).thenReturn(processorMetrics);
     Gson eventGson = new EventGsonProvider().get();
-    gson = new JGroupsForwarderModule().buildJGroupsGson(eventGson);
+    gson = new ForwarderCommandsModule().buildCommandsGson(eventGson);
 
     indexChangeHandler = createHandlerMock(ForwardedIndexChangeHandler.class);
     indexBatchChangeHandler = createHandlerMock(ForwardedIndexBatchChangeHandler.class);
@@ -84,15 +92,16 @@
     projectListUpdateHandler = createHandlerMock(ForwardedProjectListUpdateHandler.class);
 
     processor =
-        new MessageProcessor(
+        new JGroupsMessageProcessor(
             gson,
-            indexChangeHandler,
-            indexBatchChangeHandler,
-            indexAccountHandler,
-            cacheEvictionHandler,
-            eventHandler,
-            projectListUpdateHandler,
-            metricsRegistry);
+            new CommandProcessorImpl(
+                indexChangeHandler,
+                indexBatchChangeHandler,
+                indexAccountHandler,
+                cacheEvictionHandler,
+                eventHandler,
+                projectListUpdateHandler,
+                metricsRegistry));
   }
 
   private <T> T createHandlerMock(Class<T> handlerClass) {
diff --git a/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/ForwardedCacheEvictionHandlerIT.java b/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/ForwardedCacheEvictionHandlerIT.java
index 1e5cc3d..4488cc4 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/ForwardedCacheEvictionHandlerIT.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/ForwardedCacheEvictionHandlerIT.java
@@ -40,6 +40,7 @@
 
 @TestPlugin(
     name = "high-availability",
+    apiModule = "com.ericsson.gerrit.plugins.highavailability.ApiModule",
     sysModule = "com.ericsson.gerrit.plugins.highavailability.Module",
     httpModule = "com.ericsson.gerrit.plugins.highavailability.HttpModule")
 public class ForwardedCacheEvictionHandlerIT extends LightweightPluginDaemonTest {
diff --git a/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/ProjectListRestApiServletIT.java b/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/ProjectListRestApiServletIT.java
index e838cb3..caea2aa 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/ProjectListRestApiServletIT.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/ProjectListRestApiServletIT.java
@@ -25,6 +25,7 @@
 
 @TestPlugin(
     name = "high-availability",
+    apiModule = "com.ericsson.gerrit.plugins.highavailability.ApiModule",
     sysModule = "com.ericsson.gerrit.plugins.highavailability.Module",
     httpModule = "com.ericsson.gerrit.plugins.highavailability.HttpModule")
 public class ProjectListRestApiServletIT extends LightweightPluginDaemonTest {
diff --git a/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/RestForwarderServletModuleIT.java b/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/RestForwarderServletModuleIT.java
index 2406443..880ec04 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/RestForwarderServletModuleIT.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/RestForwarderServletModuleIT.java
@@ -25,6 +25,7 @@
 
 @TestPlugin(
     name = "high-availability",
+    apiModule = "com.ericsson.gerrit.plugins.highavailability.ApiModule",
     sysModule = "com.ericsson.gerrit.plugins.highavailability.Module",
     httpModule = "com.ericsson.gerrit.plugins.highavailability.HttpModule")
 public class RestForwarderServletModuleIT extends LightweightPluginDaemonTest {
diff --git a/src/test/java/com/ericsson/gerrit/plugins/highavailability/index/AbstractIndexForwardingIT.java b/src/test/java/com/ericsson/gerrit/plugins/highavailability/index/AbstractIndexForwardingIT.java
index fe6cfce..3010d9c 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/highavailability/index/AbstractIndexForwardingIT.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/highavailability/index/AbstractIndexForwardingIT.java
@@ -46,6 +46,7 @@
 @NoHttpd
 @TestPlugin(
     name = "high-availability",
+    apiModule = "com.ericsson.gerrit.plugins.highavailability.ApiModule",
     sysModule = "com.ericsson.gerrit.plugins.highavailability.Module",
     httpModule = "com.ericsson.gerrit.plugins.highavailability.HttpModule")
 public abstract class AbstractIndexForwardingIT extends LightweightPluginDaemonTest {
diff --git a/src/test/java/com/ericsson/gerrit/plugins/highavailability/index/ChangeCheckerIT.java b/src/test/java/com/ericsson/gerrit/plugins/highavailability/index/ChangeCheckerIT.java
index febf8f0..ebf966f 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/highavailability/index/ChangeCheckerIT.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/highavailability/index/ChangeCheckerIT.java
@@ -20,6 +20,7 @@
 import com.google.gerrit.acceptance.LightweightPluginDaemonTest;
 import com.google.gerrit.acceptance.PushOneCommit.Result;
 import com.google.gerrit.acceptance.TestPlugin;
+import com.google.gerrit.acceptance.UseLocalDisk;
 import com.google.gerrit.entities.RefNames;
 import java.io.IOException;
 import java.util.Optional;
@@ -29,6 +30,7 @@
 
 @TestPlugin(
     name = "high-availability",
+    apiModule = "com.ericsson.gerrit.plugins.highavailability.ApiModule",
     sysModule = "com.ericsson.gerrit.plugins.highavailability.Module",
     httpModule = "com.ericsson.gerrit.plugins.highavailability.HttpModule")
 public class ChangeCheckerIT extends LightweightPluginDaemonTest {
@@ -42,6 +44,7 @@
   }
 
   @Test
+  @UseLocalDisk
   public void shouldPopulateMetaSha() throws Exception {
     Result change = createChange();
     ChangeChecker changeChecker = changeCheckerFactory.create(change.getChangeId());
@@ -54,6 +57,7 @@
   }
 
   @Test
+  @UseLocalDisk
   public void shouldReturnIsUpToDateTrueWhenEventContainsCorrectMetaAndTargetSha()
       throws Exception {
     Result change = createChange();
@@ -64,6 +68,7 @@
   }
 
   @Test
+  @UseLocalDisk
   public void shouldReturnIsUpToDateTrueWhenTargetShaIsNull() throws Exception {
     Result change = createChange();
     ChangeChecker changeChecker = changeCheckerFactory.create(change.getChangeId());
@@ -80,6 +85,7 @@
   }
 
   @Test
+  @UseLocalDisk
   public void shouldReturnFalseWhenMetaShaIsNotUpToDate() throws Exception {
     String testMetaRefSha = "6212efebe6e8b9f439a8ad013243e602afab7441";
     Result change = createChange();
@@ -97,6 +103,7 @@
   }
 
   @Test
+  @UseLocalDisk
   public void shouldReturnFalseWhenTargetShaIsNotUpToDate() throws Exception {
     String testTargetRefSha = "abed47baf2818a86b68cf712073a748a6b5b293e";
     Result change = createChange();
diff --git a/src/test/java/com/ericsson/gerrit/plugins/highavailability/index/IndexEventHandlerTest.java b/src/test/java/com/ericsson/gerrit/plugins/highavailability/index/IndexEventHandlerTest.java
index a986b90..22c2eb0 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/highavailability/index/IndexEventHandlerTest.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/highavailability/index/IndexEventHandlerTest.java
@@ -31,9 +31,11 @@
 import com.google.gerrit.entities.Account;
 import com.google.gerrit.entities.AccountGroup;
 import com.google.gerrit.entities.Change;
+import com.google.gerrit.extensions.registration.DynamicItem;
 import com.google.gerrit.server.util.OneOffRequestContext;
 import com.google.gerrit.server.util.RequestContext;
 import com.google.gerrit.server.util.ThreadLocalRequestContext;
+import com.google.inject.Inject;
 import java.util.Optional;
 import java.util.concurrent.CompletableFuture;
 import java.util.function.Consumer;
@@ -52,6 +54,7 @@
 
   private IndexEventHandler indexEventHandler;
   @Mock private Forwarder forwarder;
+  @Inject private DynamicItem<Forwarder> forwarderItem;
   @Mock private ChangeCheckerImpl.Factory changeCheckerFactoryMock;
   @Mock private ChangeChecker changeCheckerMock;
   private Change.Id changeId;
@@ -89,11 +92,12 @@
         .thenReturn(
             CompletableFuture.completedFuture(new Result(EventType.INDEX_CHANGE_UPDATE, true)));
 
+    forwarderItem = DynamicItem.itemOf(Forwarder.class, forwarder);
     setUpIndexEventHandler(currCtx);
   }
 
   public void setUpIndexEventHandler(CurrentRequestContext currCtx) throws Exception {
-    indexEventHandler = new IndexEventHandler(forwarder, changeCheckerFactoryMock, currCtx);
+    indexEventHandler = new IndexEventHandler(forwarderItem, changeCheckerFactoryMock, currCtx);
   }
 
   @Test
