diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/listener/EventHandlerExecutor.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/listener/EventHandlerExecutor.java
index 9f6ce1a..4cce7cd 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/listener/EventHandlerExecutor.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/listener/EventHandlerExecutor.java
@@ -32,9 +32,9 @@
     }
 
     public void execute(Configuration config, Event event) {
-        GerritEventContextModule contextModule = new GerritEventContextModule(config);
-        EventHandlerTask.Factory taskHandlerFactory = injector.createChildInjector(contextModule)
-                .getInstance(EventHandlerTask.Factory.class);
-        executor.execute(taskHandlerFactory.create(event));
+        GerritEventContextModule contextModule = new GerritEventContextModule(config, event);
+        EventHandlerTask task = injector.createChildInjector(contextModule)
+                .getInstance(EventHandlerTask.class);
+        executor.execute(task);
     }
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/listener/EventHandlerTask.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/listener/EventHandlerTask.java
index 796e77f..fafe16c 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/listener/EventHandlerTask.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/listener/EventHandlerTask.java
@@ -3,13 +3,9 @@
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Splitter;
 import com.google.gerrit.extensions.client.ChangeKind;
-import com.google.gerrit.extensions.config.FactoryModule;
 import com.google.gerrit.server.data.ChangeAttribute;
 import com.google.gerrit.server.data.PatchSetAttribute;
-import com.google.gerrit.server.events.Event;
 import com.google.inject.Inject;
-import com.google.inject.Module;
-import com.google.inject.assistedinject.Assisted;
 import com.googlesource.gerrit.plugins.chatgpt.PatchSetReviewer;
 import com.googlesource.gerrit.plugins.chatgpt.config.Configuration;
 import com.googlesource.gerrit.plugins.chatgpt.data.ChangeSetDataHandler;
@@ -30,17 +26,6 @@
 
 @Slf4j
 public class EventHandlerTask implements Runnable {
-    public static final Module MODULE = new FactoryModule() {
-        @Override
-        protected void configure() {
-            factory(EventHandlerTask.Factory.class);
-        }
-    };
-
-    public interface Factory {
-        EventHandlerTask create(Event event);
-    }
-
     @VisibleForTesting
     public enum Result {
         OK, NOT_SUPPORTED, FAILURE
@@ -51,26 +36,26 @@
             "comment-added", true
     );
 
-    private final Event event;
     private final Configuration config;
     private final GerritClient gerritClient;
     private final GitRepoFiles gitRepoFiles;
+    private final GerritChange change;
     private final PatchSetReviewer reviewer;
     private final PluginDataHandler pluginDataHandler;
 
     @Inject
     EventHandlerTask(
             Configuration config,
+            GerritChange change,
             PatchSetReviewer reviewer,
             GerritClient gerritClient,
             GitRepoFiles gitRepoFiles,
-            PluginDataHandler pluginDataHandler,
-            @Assisted Event event
+            PluginDataHandler pluginDataHandler
     ) {
+        this.change = change;
         this.reviewer = reviewer;
         this.gerritClient = gerritClient;
         this.config = config;
-        this.event = event;
         this.gitRepoFiles = gitRepoFiles;
         this.pluginDataHandler = pluginDataHandler;
     }
@@ -82,7 +67,6 @@
 
     @VisibleForTesting
     public Result execute() {
-        GerritChange change = new GerritChange(event);
         gerritClient.initialize(config, change);
         Integer gptAccountId = gerritClient.getNotNullAccountId(change, config.getGerritUserName());
         ChangeSetData changeSetData = ChangeSetDataHandler.getNewInstance(config, change, gptAccountId);
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/listener/GerritEventContextModule.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/listener/GerritEventContextModule.java
index d71d69a..b25d564 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/listener/GerritEventContextModule.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/listener/GerritEventContextModule.java
@@ -1,19 +1,22 @@
 package com.googlesource.gerrit.plugins.chatgpt.listener;
 
 import com.google.gerrit.extensions.config.FactoryModule;
+import com.google.gerrit.server.events.Event;
 import com.googlesource.gerrit.plugins.chatgpt.config.Configuration;
+import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritChange;
 
 public class GerritEventContextModule extends FactoryModule {
+    private final Event event;
     private final Configuration config;
 
-    public GerritEventContextModule(Configuration config) {
+    public GerritEventContextModule(Configuration config, Event event) {
+        this.event = event;
         this.config = config;
     }
 
     @Override
     protected void configure() {
-        install(EventHandlerTask.MODULE);
-
         bind(Configuration.class).toInstance(config);
+        bind(GerritChange.class).toInstance(new GerritChange(event));
     }
 }
diff --git a/src/test/java/com/googlesource/gerrit/plugins/chatgpt/ChatGptReviewTestBase.java b/src/test/java/com/googlesource/gerrit/plugins/chatgpt/ChatGptReviewTestBase.java
index 59d96de..55140c8 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/chatgpt/ChatGptReviewTestBase.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/chatgpt/ChatGptReviewTestBase.java
@@ -205,10 +205,10 @@
         setupCommonEventMocks((PatchSetEvent) event); // Apply common mock configurations
         typeSpecificSetup.accept(event);
 
-        EventHandlerTask.Factory factory = Guice.createInjector(EventHandlerTask.MODULE, new AbstractModule() {
+        EventHandlerTask task = Guice.createInjector(new AbstractModule() {
             @Override
             protected void configure() {
-                install(new GerritEventContextModule(config));
+                install(new GerritEventContextModule(config, event));
 
                 bind(GerritClient.class).toInstance(gerritClient);
                 bind(GitRepoFiles.class).toInstance(gitRepoFiles);
@@ -216,8 +216,8 @@
                 bind(PatchSetReviewer.class).toInstance(patchSetReviewer);
                 bind(PluginDataHandler.class).toInstance(pluginDataHandler);
             }
-        }).getInstance(EventHandlerTask.Factory.class);
-        return factory.create(event).execute();
+        }).getInstance(EventHandlerTask.class);
+        return task.execute();
     }
 
     protected void testRequestSent() {
