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 39bf9ca..19ffb16 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/Configuration.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/Configuration.java
@@ -42,7 +42,6 @@
   private final int maxTries;
   private final int retryInterval;
   private final int indexThreadPoolSize;
-  private final int eventThreadPoolSize;
   private final int cacheThreadPoolSize;
 
   @Inject
@@ -58,8 +57,6 @@
     retryInterval = getInt(cfg, "retryInterval", DEFAULT_RETRY_INTERVAL);
     indexThreadPoolSize =
         getInt(cfg, "indexThreadPoolSize", DEFAULT_THREAD_POOL_SIZE);
-    eventThreadPoolSize =
-        getInt(cfg, "eventThreadPoolSize", DEFAULT_THREAD_POOL_SIZE);
     cacheThreadPoolSize =
         getInt(cfg, "cacheThreadPoolSize", DEFAULT_THREAD_POOL_SIZE);
   }
@@ -107,10 +104,6 @@
     return indexThreadPoolSize;
   }
 
-  public int getEventThreadPoolSize() {
-    return eventThreadPoolSize;
-  }
-
   public int getCacheThreadPoolSize() {
     return cacheThreadPoolSize;
   }
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/event/EventExecutorProvider.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/event/EventExecutorProvider.java
index 95b595d..29af0ea 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/event/EventExecutorProvider.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/event/EventExecutorProvider.java
@@ -18,15 +18,13 @@
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
 
-import com.ericsson.gerrit.plugins.highavailability.Configuration;
 import com.ericsson.gerrit.plugins.highavailability.ExecutorProvider;
 
 @Singleton
 class EventExecutorProvider extends ExecutorProvider {
 
   @Inject
-  EventExecutorProvider(WorkQueue workQueue,
-      Configuration config) {
-    super(workQueue, config.getEventThreadPoolSize(), "Forward-stream-event");
+  EventExecutorProvider(WorkQueue workQueue) {
+    super(workQueue, 1, "Forward-stream-event");
   }
 }
diff --git a/src/main/resources/Documentation/config.md b/src/main/resources/Documentation/config.md
index 26af4ee..f894822 100644
--- a/src/main/resources/Documentation/config.md
+++ b/src/main/resources/Documentation/config.md
@@ -53,10 +53,6 @@
 :   Maximum number of threads used to send index events to the target instance.
     Defaults to 1.
 
-@PLUGIN@.eventThreadPoolSize
-:   Maximum number of threads used to send stream events to the target instance.
-    Defaults to 1.
-
 @PLUGIN@.cacheThreadPoolSize
 :   Maximum number of threads used to send cache evictions to the target instance.
     Defaults to 1.
\ No newline at end of file
diff --git a/src/test/java/com/ericsson/gerrit/plugins/highavailability/ConfigurationTest.java b/src/test/java/com/ericsson/gerrit/plugins/highavailability/ConfigurationTest.java
index f9225c3..0cd3e4a 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/highavailability/ConfigurationTest.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/highavailability/ConfigurationTest.java
@@ -66,8 +66,6 @@
     assertThat(configuration.getRetryInterval()).isEqualTo(RETRY_INTERVAL);
     assertThat(configuration.getIndexThreadPoolSize())
         .isEqualTo(THREAD_POOL_SIZE);
-    assertThat(configuration.getEventThreadPoolSize())
-        .isEqualTo(THREAD_POOL_SIZE);
     assertThat(configuration.getCacheThreadPoolSize())
         .isEqualTo(THREAD_POOL_SIZE);
   }
@@ -83,7 +81,6 @@
     assertThat(configuration.getMaxTries()).isEqualTo(0);
     assertThat(configuration.getRetryInterval()).isEqualTo(0);
     assertThat(configuration.getIndexThreadPoolSize()).isEqualTo(0);
-    assertThat(configuration.getEventThreadPoolSize()).isEqualTo(0);
     assertThat(configuration.getCacheThreadPoolSize()).isEqualTo(0);
   }
 
@@ -107,7 +104,6 @@
     assertThat(configuration.getMaxTries()).isEqualTo(5);
     assertThat(configuration.getRetryInterval()).isEqualTo(1000);
     assertThat(configuration.getIndexThreadPoolSize()).isEqualTo(1);
-    assertThat(configuration.getEventThreadPoolSize()).isEqualTo(1);
     assertThat(configuration.getCacheThreadPoolSize()).isEqualTo(1);
   }
 
diff --git a/src/test/java/com/ericsson/gerrit/plugins/highavailability/event/EventExecutorProviderTest.java b/src/test/java/com/ericsson/gerrit/plugins/highavailability/event/EventExecutorProviderTest.java
index 085ca0a..054a2e6 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/highavailability/event/EventExecutorProviderTest.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/highavailability/event/EventExecutorProviderTest.java
@@ -21,9 +21,6 @@
 
 import com.google.gerrit.server.git.WorkQueue;
 
-import com.ericsson.gerrit.plugins.highavailability.Configuration;
-import com.ericsson.gerrit.plugins.highavailability.event.EventExecutorProvider;
-
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -39,13 +36,9 @@
   @Before
   public void setUp() throws Exception {
     WorkQueue workQueueMock = mock(WorkQueue.class);
-    when(workQueueMock.createQueue(4, "Forward-stream-event"))
+    when(workQueueMock.createQueue(1, "Forward-stream-event"))
         .thenReturn(executorMock);
-    Configuration configMock = mock(Configuration.class);
-    when(configMock.getEventThreadPoolSize()).thenReturn(4);
-
-    eventsExecutorProvider =
-        new EventExecutorProvider(workQueueMock, configMock);
+    eventsExecutorProvider = new EventExecutorProvider(workQueueMock);
   }
 
   @Test
