diff --git a/src/main/java/com/googlesource/gerrit/plugins/kinesis/Configuration.java b/src/main/java/com/googlesource/gerrit/plugins/kinesis/Configuration.java
index ef7e698..a12cca3 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/kinesis/Configuration.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/kinesis/Configuration.java
@@ -40,6 +40,7 @@
   private static final Long DEFAULT_SHUTDOWN_TIMEOUT_MS = 20000L;
   private static final Level DEFAULT_AWS_LIB_LOG_LEVEL = Level.WARN;
   private static final Boolean DEFAULT_SEND_ASYNC = true;
+  private static final Boolean DEFAULT_SEND_STREAM_EVENTS = false;
 
   private final String applicationName;
   private final String streamEventsTopic;
@@ -54,6 +55,7 @@
   private final Long shutdownTimeoutMs;
   private final Level awsLibLogLevel;
   private final Boolean sendAsync;
+  private final Boolean sendStreamEvents;
 
   @Inject
   public Configuration(PluginConfigFactory configFactory, @PluginName String pluginName) {
@@ -63,6 +65,10 @@
     this.endpoint =
         Optional.ofNullable(getStringParam(pluginConfig, "endpoint", null)).map(URI::create);
     this.streamEventsTopic = getStringParam(pluginConfig, "topic", DEFAULT_STREAM_EVENTS_TOPIC);
+    this.sendStreamEvents =
+        Optional.ofNullable(getStringParam(pluginConfig, "sendStreamEvents", null))
+            .map(Boolean::new)
+            .orElse(DEFAULT_SEND_STREAM_EVENTS);
     this.numberOfSubscribers =
         Integer.parseInt(
             getStringParam(pluginConfig, "numberOfSubscribers", DEFAULT_NUMBER_OF_SUBSCRIBERS));
@@ -179,4 +185,8 @@
   public Boolean isSendAsync() {
     return sendAsync;
   }
+
+  public Boolean isSendStreamEvents() {
+    return sendStreamEvents;
+  }
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/kinesis/Module.java b/src/main/java/com/googlesource/gerrit/plugins/kinesis/Module.java
index 9234c67..8380716 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/kinesis/Module.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/kinesis/Module.java
@@ -35,8 +35,14 @@
 import software.amazon.awssdk.services.kinesis.KinesisAsyncClient;
 
 public class Module extends LifecycleModule {
+  private final Configuration configuration;
   private Set<TopicSubscriber> activeConsumers = Sets.newHashSet();
 
+  @Inject
+  Module(Configuration configuration) {
+    this.configuration = configuration;
+  }
+
   /**
    * By default the events-broker library (loaded directly by the multi-site) registers a noop
    * implementation, which itself registers a list of topic subscribers. Since we have no control
@@ -75,7 +81,9 @@
     DynamicItem.bind(binder(), BrokerApi.class).to(KinesisBrokerApi.class).in(Scopes.SINGLETON);
     DynamicSet.bind(binder(), LifecycleListener.class).to(KinesisBrokerLifeCycleManager.class);
     factory(KinesisConsumer.Factory.class);
-    DynamicSet.bind(binder(), EventListener.class).to(KinesisPublisher.class);
+    if (configuration.isSendStreamEvents()) {
+      DynamicSet.bind(binder(), EventListener.class).to(KinesisPublisher.class);
+    }
     listener().to(AWSLogLevelListener.class);
   }
 }
diff --git a/src/main/resources/Documentation/Config.md b/src/main/resources/Documentation/Config.md
index 03e3650..34ab8f9 100644
--- a/src/main/resources/Documentation/Config.md
+++ b/src/main/resources/Documentation/Config.md
@@ -96,6 +96,10 @@
     plugin exposes all stream events under this topic name.
     Default: gerrit
 
+`plugin.events-aws-kinesis.sendStreamEvents`
+:   Whether to send stream events to the `streamEventsTopic` topic.
+    Default: false
+
 `plugin.events-aws-kinesis.sendAsync`
 :   Optional. Whether to send messages to Kinesis asynchronously, without
     waiting for the result of the operation.
diff --git a/src/test/java/com/googlesource/gerrit/plugins/kinesis/ConfigurationTest.java b/src/test/java/com/googlesource/gerrit/plugins/kinesis/ConfigurationTest.java
index 888c7f1..a83b04b 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/kinesis/ConfigurationTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/kinesis/ConfigurationTest.java
@@ -91,4 +91,25 @@
 
     assertThat(configuration.isSendAsync()).isEqualTo(false);
   }
+
+  @Test
+  public void shouldConfigureSendStreamEvents() {
+    pluginConfig.setBoolean("sendStreamEvents", true);
+    when(pluginConfigFactoryMock.getFromGerritConfig(PLUGIN_NAME))
+        .thenReturn(pluginConfig.asPluginConfig());
+
+    Configuration configuration = new Configuration(pluginConfigFactoryMock, PLUGIN_NAME);
+
+    assertThat(configuration.isSendStreamEvents()).isEqualTo(true);
+  }
+
+  @Test
+  public void shouldDefaultSendStreamEvents() {
+    when(pluginConfigFactoryMock.getFromGerritConfig(PLUGIN_NAME))
+        .thenReturn(pluginConfig.asPluginConfig());
+
+    Configuration configuration = new Configuration(pluginConfigFactoryMock, PLUGIN_NAME);
+
+    assertThat(configuration.isSendStreamEvents()).isEqualTo(false);
+  }
 }
diff --git a/src/test/java/com/googlesource/gerrit/plugins/kinesis/KinesisEventsIT.java b/src/test/java/com/googlesource/gerrit/plugins/kinesis/KinesisEventsIT.java
index 940cd31..6128f3c 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/kinesis/KinesisEventsIT.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/kinesis/KinesisEventsIT.java
@@ -57,6 +57,7 @@
   private static final Duration WAIT_FOR_CONSUMPTION = Duration.ofSeconds(120);
   private static final Duration STREAM_CREATION_TIMEOUT = Duration.ofSeconds(10);
   private static final long SEND_TIMEOUT_MILLIS = 200;
+  private static final String STREAM_EVENTS = "stream_events";
 
   private static final int LOCALSTACK_PORT = 4566;
 
@@ -219,6 +220,28 @@
     assertThat(result.get()).isTrue();
   }
 
+  @Test
+  @GerritConfig(name = "plugin.events-aws-kinesis.applicationName", value = "test-consumer")
+  @GerritConfig(name = "plugin.events-aws-kinesis.initialPosition", value = "trim_horizon")
+  @GerritConfig(name = "plugin.events-aws-kinesis.topic", value = STREAM_EVENTS)
+  @GerritConfig(name = "plugin.events-aws-kinesis.sendStreamEvents", value = "true")
+  public void shouldSendStreamEventsWhenEnabled() throws Exception {
+    createStreamAndWait(STREAM_EVENTS, STREAM_CREATION_TIMEOUT);
+
+    EventConsumerCounter eventConsumerCounter = new EventConsumerCounter();
+    kinesisBroker().receiveAsync(STREAM_EVENTS, eventConsumerCounter);
+
+    createChange();
+
+    // There are 4 events are received in the following order:
+    // 1. refUpdate:        ref: refs/sequences/changes
+    // 2. refUpdate:        ref: refs/changes/01/1/1
+    // 3. refUpdate:        ref: refs/changes/01/1/meta
+    // 4. patchset-created: ref: refs/changes/01/1/1
+    WaitUtil.waitUntil(
+        () -> eventConsumerCounter.getConsumedMessages().size() == 4, WAIT_FOR_CONSUMPTION);
+  }
+
   public KinesisBrokerApi kinesisBroker() {
     return (KinesisBrokerApi) plugin.getSysInjector().getInstance(BrokerApi.class);
   }
