diff --git a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/BrokerApiManager.java b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/BrokerApiManager.java
new file mode 100644
index 0000000..83a61f9
--- /dev/null
+++ b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/BrokerApiManager.java
@@ -0,0 +1,43 @@
+// Copyright (C) 2024 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.rabbitmq;
+
+import com.google.gerrit.extensions.events.LifecycleListener;
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
+import com.googlesource.gerrit.plugins.rabbitmq.message.BrokerApiPublisher;
+import com.googlesource.gerrit.plugins.rabbitmq.message.BrokerApiSubscribers;
+
+@Singleton
+public class BrokerApiManager implements LifecycleListener {
+
+  private final BrokerApiPublisher publisher;
+  private final BrokerApiSubscribers subscribers;
+
+  @Inject
+  public BrokerApiManager(BrokerApiPublisher publisher, BrokerApiSubscribers subscribers) {
+    this.publisher = publisher;
+    this.subscribers = subscribers;
+  }
+
+  @Override
+  public void start() {}
+
+  @Override
+  public void stop() {
+    subscribers.stop();
+    publisher.stop();
+  }
+}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/Manager.java b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/Manager.java
index 953fe08..f76bba7 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/Manager.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/Manager.java
@@ -23,8 +23,6 @@
 import com.googlesource.gerrit.plugins.rabbitmq.config.section.General;
 import com.googlesource.gerrit.plugins.rabbitmq.config.section.Gerrit;
 import com.googlesource.gerrit.plugins.rabbitmq.message.BaseProperties;
-import com.googlesource.gerrit.plugins.rabbitmq.message.BrokerApiPublisher;
-import com.googlesource.gerrit.plugins.rabbitmq.message.BrokerApiSubscribers;
 import com.googlesource.gerrit.plugins.rabbitmq.message.GerritEventPublisherFactory;
 import com.googlesource.gerrit.plugins.rabbitmq.message.Publisher;
 import com.googlesource.gerrit.plugins.rabbitmq.message.PublisherPropertiesProvider;
@@ -44,7 +42,6 @@
   private final EventWorker userEventWorker;
   private final GerritEventPublisherFactory publisherFactory;
   private final List<Publisher> publisherList = new ArrayList<>();
-  private final BrokerApiSubscribers subscribers;
   private final Properties baseProperties;
   private final PublisherPropertiesProvider publisherPropertiesProvider;
 
@@ -54,18 +51,14 @@
       final DefaultEventWorker defaultEventWorker,
       final EventWorkerFactory eventWorkerFactory,
       final GerritEventPublisherFactory publisherFactory,
-      final BrokerApiPublisher publisher,
-      final BrokerApiSubscribers subscribers,
       final @BaseProperties Properties baseProperties,
       final PublisherPropertiesProvider publisherPropertiesProvider) {
     this.pluginName = pluginName;
     this.defaultEventWorker = defaultEventWorker;
     this.userEventWorker = eventWorkerFactory.create();
     this.publisherFactory = publisherFactory;
-    this.subscribers = subscribers;
     this.baseProperties = baseProperties;
     this.publisherPropertiesProvider = publisherPropertiesProvider;
-    publisherList.add(publisher);
   }
 
   @Override
@@ -88,7 +81,6 @@
 
   @Override
   public void stop() {
-    subscribers.stop();
     for (Publisher publisher : publisherList) {
       publisher.stop();
     }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/Module.java b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/Module.java
index 47b9b63..b9125ee 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/Module.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/Module.java
@@ -14,6 +14,9 @@
 
 package com.googlesource.gerrit.plugins.rabbitmq;
 
+import com.google.common.flogger.FluentLogger;
+import com.google.gerrit.extensions.annotations.PluginData;
+import com.google.gerrit.extensions.annotations.PluginName;
 import com.google.gerrit.extensions.events.LifecycleListener;
 import com.google.gerrit.extensions.registration.DynamicSet;
 import com.google.gerrit.server.events.EventListener;
@@ -47,13 +50,26 @@
 import com.googlesource.gerrit.plugins.rabbitmq.worker.EventWorker;
 import com.googlesource.gerrit.plugins.rabbitmq.worker.EventWorkerFactory;
 import com.googlesource.gerrit.plugins.rabbitmq.worker.UserEventWorker;
+import java.io.File;
+import java.io.IOException;
+import org.eclipse.jgit.errors.ConfigInvalidException;
+import org.eclipse.jgit.storage.file.FileBasedConfig;
+import org.eclipse.jgit.util.FS;
 
 class Module extends AbstractModule {
+  private static final FluentLogger logger = FluentLogger.forEnclosingClass();
+
   private final RabbitMqBrokerApiModule rabbitMqBrokerApiModule;
+  private final boolean brokerApiEnabled;
 
   @Inject
-  public Module(RabbitMqBrokerApiModule rabbitMqBrokerApiModule) {
+  public Module(
+      RabbitMqBrokerApiModule rabbitMqBrokerApiModule,
+      @PluginName final String pluginName,
+      @PluginData final File pluginData) {
     this.rabbitMqBrokerApiModule = rabbitMqBrokerApiModule;
+    this.brokerApiEnabled =
+        getBaseConfig(pluginName, pluginData).getBoolean("General", "enableBrokerApi", false);
   }
 
   @Override
@@ -96,6 +112,23 @@
         .annotatedWith(BaseProperties.class)
         .toProvider(BasePropertiesProvider.class);
 
-    install(rabbitMqBrokerApiModule);
+    if (brokerApiEnabled) {
+      install(rabbitMqBrokerApiModule);
+    } else {
+      logger.atInfo().log(
+          "The RabbitMqBrokerApi is disabled, set enableBrokerApi to true if you want to enable it");
+    }
+  }
+
+  private static FileBasedConfig getBaseConfig(String pluginName, File pluginData) {
+    File baseConfigFile =
+        pluginData.toPath().resolve(pluginName + BasePropertiesProvider.FILE_EXT).toFile();
+    FileBasedConfig config = new FileBasedConfig(baseConfigFile, FS.DETECTED);
+    try {
+      config.load();
+    } catch (IOException | ConfigInvalidException e) {
+      logger.atInfo().withCause(e).log("Unable to load %s", baseConfigFile.getAbsolutePath());
+    }
+    return config;
   }
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/RabbitMqBrokerApiModule.java b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/RabbitMqBrokerApiModule.java
index ee97d02..f022b6c 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/RabbitMqBrokerApiModule.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/RabbitMqBrokerApiModule.java
@@ -15,7 +15,9 @@
 package com.googlesource.gerrit.plugins.rabbitmq;
 
 import com.gerritforge.gerrit.eventbroker.BrokerApi;
+import com.google.gerrit.extensions.events.LifecycleListener;
 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;
 import com.google.inject.Singleton;
@@ -31,6 +33,7 @@
 
   @Override
   protected void configure() {
+    DynamicSet.bind(binder(), LifecycleListener.class).to(BrokerApiManager.class);
     bind(Properties.class)
         .annotatedWith(BrokerApiProperties.class)
         .toProvider(BrokerApiPropertiesProvider.class);
diff --git a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/message/BasePropertiesProvider.java b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/message/BasePropertiesProvider.java
index 4dc1ed8..7070292 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/message/BasePropertiesProvider.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/message/BasePropertiesProvider.java
@@ -27,7 +27,6 @@
 
 @Singleton
 public class BasePropertiesProvider implements Provider<Properties> {
-
   private static final FluentLogger logger = FluentLogger.forEnclosingClass();
 
   public static final String FILE_EXT = ".config";
diff --git a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/message/BrokerApiPublisher.java b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/message/BrokerApiPublisher.java
index 3cdb9ac..2f2b444 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/message/BrokerApiPublisher.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/message/BrokerApiPublisher.java
@@ -22,34 +22,24 @@
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
 import com.googlesource.gerrit.plugins.rabbitmq.config.Properties;
-import com.googlesource.gerrit.plugins.rabbitmq.config.section.General;
 import com.googlesource.gerrit.plugins.rabbitmq.session.type.AMQPPublisherSession;
 
 @Singleton
 public class BrokerApiPublisher extends MessagePublisher {
-
   private static final FluentLogger logger = FluentLogger.forEnclosingClass();
 
-  private final boolean enabled;
-
   @Inject
   public BrokerApiPublisher(
       AMQPPublisherSession.Factory sessionFactory,
       @EventGson Gson gson,
       @BrokerApiProperties Properties properties) {
     super(properties, sessionFactory, gson);
-    this.enabled = properties.getSection(General.class).enableBrokerApi;
   }
 
   @Override
   public void start() {
-    if (enabled) {
-      logger.atFine().log("BrokerApiPublisher is starting");
-      super.start();
-    } else {
-      logger.atWarning().log(
-          "The RabbitMqBrokerApi is disabled, set enableBrokerApi to true to enable");
-    }
+    logger.atFine().log("BrokerApiPublisher is starting");
+    super.start();
   }
 
   @Override
@@ -60,10 +50,7 @@
 
   @Override
   public ListenableFuture<Boolean> publish(String topic, Event event) {
-    if (enabled) {
-      logger.atFine().log("Message sent to topic %s with data: %s", topic, event);
-      return super.publish(topic, event);
-    }
-    return null;
+    logger.atFine().log("Message sent to topic %s with data: %s", topic, event);
+    return super.publish(topic, event);
   }
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/message/BrokerApiSubscribers.java b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/message/BrokerApiSubscribers.java
index bffff6d..f9bb9ce 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/message/BrokerApiSubscribers.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/message/BrokerApiSubscribers.java
@@ -24,7 +24,6 @@
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
 import com.googlesource.gerrit.plugins.rabbitmq.config.Properties;
-import com.googlesource.gerrit.plugins.rabbitmq.config.section.General;
 import com.googlesource.gerrit.plugins.rabbitmq.session.SubscriberSession;
 import com.googlesource.gerrit.plugins.rabbitmq.session.type.AMQPSubscriberSession;
 import java.util.HashMap;
@@ -32,13 +31,11 @@
 
 @Singleton
 public class BrokerApiSubscribers {
-
   private static final FluentLogger logger = FluentLogger.forEnclosingClass();
 
   private final SubscriberSession session;
   private final Properties properties;
   private final Gson gson;
-  private final boolean enabled;
   private final Map<TopicSubscriber, String> consumerTags = new HashMap<>();
 
   @Inject
@@ -49,7 +46,6 @@
     this.properties = properties;
     this.session = sessionFactory.create(properties);
     this.gson = gson;
-    this.enabled = properties.getSection(General.class).enableBrokerApi;
   }
 
   public void stop() {
@@ -63,29 +59,24 @@
 
   public boolean addSubscriber(TopicSubscriber topicSubscriber) {
     String topic = topicSubscriber.topic();
-    if (enabled) {
-      logger.atFine().log("RabbitMqBrokerApi used to set consumer to topic %s", topic);
-      String consumerTag =
-          session.addSubscriber(
-              topic,
-              messageBody -> {
-                logger.atFiner().log(
-                    "The RabbitMqBrokerApi consumed event from topic %s with data: %s",
-                    topic, messageBody);
-                Event event = gson.fromJson(messageBody, Event.class);
-                if (event.type != null) {
-                  topicSubscriber.consumer().accept(event);
-                } else {
-                  logger.atFine().log("Event does not have a type, ignoring Event");
-                }
-              });
-      if (consumerTag != null) {
-        consumerTags.put(topicSubscriber, consumerTag);
-        return true;
-      }
-    } else {
-      logger.atWarning().log(
-          "The RabbitMqBrokerApi is disabled, set enableBrokerApi to true to enable");
+    logger.atFine().log("RabbitMqBrokerApi used to set consumer to topic %s", topic);
+    String consumerTag =
+        session.addSubscriber(
+            topic,
+            messageBody -> {
+              logger.atFiner().log(
+                  "The RabbitMqBrokerApi consumed event from topic %s with data: %s",
+                  topic, messageBody);
+              Event event = gson.fromJson(messageBody, Event.class);
+              if (event.type != null) {
+                topicSubscriber.consumer().accept(event);
+              } else {
+                logger.atFine().log("Event does not have a type, ignoring Event");
+              }
+            });
+    if (consumerTag != null) {
+      consumerTags.put(topicSubscriber, consumerTag);
+      return true;
     }
     return false;
   }
