diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/PatchSetReviewer.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/PatchSetReviewer.java
index d4baa7e..187d7c2 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/PatchSetReviewer.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/PatchSetReviewer.java
@@ -32,6 +32,7 @@
 
     private final Configuration config;
     private final GerritClient gerritClient;
+    private final ChangeSetData changeSetData;
 
     @Getter
     private IChatGptClient chatGptClient;
@@ -41,9 +42,10 @@
     private List<Integer> reviewScores;
 
     @Inject
-    PatchSetReviewer(GerritClient gerritClient, Configuration config) {
+    PatchSetReviewer(GerritClient gerritClient, Configuration config, ChangeSetData changeSetData) {
         this.config = config;
         this.gerritClient = gerritClient;
+        this.changeSetData = changeSetData;
     }
 
     public void review(GerritChange change) throws Exception {
@@ -57,7 +59,7 @@
             log.info("No file to review has been found in the PatchSet");
             return;
         }
-        ChangeSetDataHandler.update(config, change, gerritClient);
+        ChangeSetDataHandler.update(config, change, gerritClient, changeSetData);
 
         String reviewReply = getReviewReply(change, patchSet);
         log.debug("ChatGPT response: {}", reviewReply);
@@ -96,7 +98,6 @@
 
     private void retrieveReviewBatches(String reviewReply, GerritChange change) {
         ChatGptResponseContent reviewJson = getGson().fromJson(reviewReply, ChatGptResponseContent.class);
-        ChangeSetData changeSetData = ChangeSetDataHandler.getInstance(change);
         for (ChatGptReplyItem replyItem : reviewJson.getReplies()) {
             String reply = replyItem.getReply();
             Integer score = replyItem.getScore();
@@ -134,7 +135,7 @@
                 "client.api.chatgpt.ChatGptClient", config);
         registerDynamicClasses(ChatGptClientStateless.class);
 
-        return chatGptClient.ask(config, change, patchSet);
+        return chatGptClient.ask(config, changeSetData, change, patchSet);
     }
 
     private Integer getReviewScore() {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/data/ChangeSetDataHandler.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/data/ChangeSetDataHandler.java
index 9f953ce..8ae9ac8 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/data/ChangeSetDataHandler.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/data/ChangeSetDataHandler.java
@@ -1,39 +1,26 @@
 package com.googlesource.gerrit.plugins.chatgpt.data;
 
 import com.googlesource.gerrit.plugins.chatgpt.config.Configuration;
-import com.googlesource.gerrit.plugins.chatgpt.data.singleton.ChangeSetSingletonManager;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritChange;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritClient;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.prompt.ChatGptUserPrompt;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.gerrit.GerritPermittedVotingRange;
-import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.GerritClientData;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData;
+import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.GerritClientData;
 import lombok.extern.slf4j.Slf4j;
 
 import java.util.HashSet;
 
 @Slf4j
 public class ChangeSetDataHandler {
-
-    public static ChangeSetData getNewInstance(Configuration config, GerritChange change, Integer gptAccountId) {
-        return ChangeSetSingletonManager.getNewInstance(ChangeSetData.class, change,
-                gptAccountId,
-                config.getVotingMinScore(),
-                config.getVotingMaxScore());
-    }
-
-    public static ChangeSetData getInstance(GerritChange change) {
-        return ChangeSetSingletonManager.getInstance(ChangeSetData.class, change);
-    }
-
-    public static ChangeSetData getInstance(String changeId) {
-        return getInstance(new GerritChange(changeId));
-    }
-
-    public static void update(Configuration config, GerritChange change, GerritClient gerritClient) {
-        ChangeSetData changeSetData = getInstance(change);
+    public static void update(
+            Configuration config,
+            GerritChange change,
+            GerritClient gerritClient,
+            ChangeSetData changeSetData
+    ) {
         GerritClientData gerritClientData = gerritClient.getClientData(change);
-        ChatGptUserPrompt chatGptUserPrompt = new ChatGptUserPrompt(config, change, gerritClientData);
+        ChatGptUserPrompt chatGptUserPrompt = new ChatGptUserPrompt(config, changeSetData, change, gerritClientData);
 
         changeSetData.setCommentPropertiesSize(gerritClientData.getCommentProperties().size());
         changeSetData.setDirectives(new HashSet<>());
@@ -52,9 +39,4 @@
             }
         }
     }
-
-    public static void removeInstance(GerritChange change) {
-        ChangeSetSingletonManager.removeInstance(ChangeSetData.class, change);
-    }
-
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/data/ChangeSetDataProvider.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/data/ChangeSetDataProvider.java
new file mode 100644
index 0000000..6f3ac7c
--- /dev/null
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/data/ChangeSetDataProvider.java
@@ -0,0 +1,23 @@
+package com.googlesource.gerrit.plugins.chatgpt.data;
+
+import com.google.gerrit.server.account.AccountCache;
+import com.google.inject.Inject;
+import com.google.inject.Provider;
+import com.googlesource.gerrit.plugins.chatgpt.config.Configuration;
+import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData;
+
+public class ChangeSetDataProvider implements Provider<ChangeSetData> {
+    private final int gptAccountId;
+    private final Configuration config;
+
+    @Inject
+    ChangeSetDataProvider(Configuration config, AccountCache accountCache) {
+        this.config = config;
+        this.gptAccountId = accountCache.getByUsername(config.getGerritUserName()).get().account().id().get();
+    }
+
+    @Override
+    public ChangeSetData get() {
+        return new ChangeSetData(gptAccountId, config.getVotingMinScore(), config.getVotingMaxScore());
+    }
+}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/data/singleton/ChangeSetSingletonManager.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/data/singleton/ChangeSetSingletonManager.java
deleted file mode 100644
index d5b6d30..0000000
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/data/singleton/ChangeSetSingletonManager.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.googlesource.gerrit.plugins.chatgpt.data.singleton;
-
-import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritChange;
-
-public class ChangeSetSingletonManager {
-    public static synchronized <T> T getNewInstance(Class<T> clazz, GerritChange change, Object... constructorArgs) {
-        return SingletonManager.getNewInstance(clazz, getInstanceKey(clazz, change), constructorArgs);
-    }
-
-    public static synchronized <T> T getInstance(Class<T> clazz, GerritChange change, Object... constructorArgs) {
-        return SingletonManager.getInstance(clazz, getInstanceKey(clazz, change), constructorArgs);
-    }
-
-    public static synchronized void removeInstance(Class<?> clazz, GerritChange change) {
-        SingletonManager.removeInstance(clazz, getInstanceKey(clazz, change));
-    }
-
-    private static String getInstanceKey(Class<?> clazz, GerritChange change) {
-        return clazz.getName() + ":" + change.getFullChangeId();
-    }
-
-}
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 229d396..885736f 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
@@ -8,7 +8,6 @@
 import com.google.inject.Inject;
 import com.googlesource.gerrit.plugins.chatgpt.PatchSetReviewer;
 import com.googlesource.gerrit.plugins.chatgpt.config.Configuration;
-import com.googlesource.gerrit.plugins.chatgpt.data.ChangeSetDataHandler;
 import com.googlesource.gerrit.plugins.chatgpt.data.PluginDataHandler;
 import com.googlesource.gerrit.plugins.chatgpt.data.ProjectDataHandler;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritChange;
@@ -39,6 +38,7 @@
     private final Configuration config;
     private final GerritClient gerritClient;
     private final GitRepoFiles gitRepoFiles;
+    private final ChangeSetData changeSetData;
     private final GerritChange change;
     private final PatchSetReviewer reviewer;
     private final PluginDataHandler pluginDataHandler;
@@ -46,12 +46,14 @@
     @Inject
     EventHandlerTask(
             Configuration config,
+            ChangeSetData changeSetData,
             GerritChange change,
             PatchSetReviewer reviewer,
             GerritClient gerritClient,
             GitRepoFiles gitRepoFiles,
             PluginDataHandler pluginDataHandler
     ) {
+        this.changeSetData = changeSetData;
         this.change = change;
         this.reviewer = reviewer;
         this.gerritClient = gerritClient;
@@ -67,13 +69,10 @@
 
     @VisibleForTesting
     public Result execute() {
-        Integer gptAccountId = gerritClient.getNotNullAccountId(change, config.getGerritUserName());
-        ChangeSetData changeSetData = ChangeSetDataHandler.getNewInstance(config, change, gptAccountId);
         GitRepoFilesHandler.createNewInstance(gitRepoFiles);
         ProjectDataHandler.createNewInstance(pluginDataHandler);
 
         if (!preProcessEvent(change, changeSetData)) {
-            destroy(change);
             return Result.NOT_SUPPORTED;
         }
 
@@ -87,8 +86,6 @@
                 Thread.currentThread().interrupt();
             }
             return Result.FAILURE;
-        } finally {
-            destroy(change);
         }
         return Result.OK;
     }
@@ -128,11 +125,6 @@
         return true;
     }
 
-    private void destroy(GerritChange change) {
-        log.info("destroying {}",change);
-        ChangeSetDataHandler.removeInstance(change);
-    }
-
     private boolean isReviewEnabled(GerritChange change) {
         List<String> enabledProjects = Splitter.on(",").omitEmptyStrings()
                 .splitToList(config.getEnabledProjects());
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 b25d564..9baa8ef 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
@@ -3,7 +3,11 @@
 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.data.ChangeSetDataProvider;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritChange;
+import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData;
+
+import static com.google.inject.Scopes.SINGLETON;
 
 public class GerritEventContextModule extends FactoryModule {
     private final Event event;
@@ -18,5 +22,6 @@
     protected void configure() {
         bind(Configuration.class).toInstance(config);
         bind(GerritChange.class).toInstance(new GerritChange(event));
+        bind(ChangeSetData.class).toProvider(ChangeSetDataProvider.class).in(SINGLETON);
     }
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/api/gerrit/GerritClient.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/api/gerrit/GerritClient.java
index dedd320..e5b8548 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/api/gerrit/GerritClient.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/api/gerrit/GerritClient.java
@@ -47,7 +47,7 @@
         return gerritClientFacade.getFileDiffsProcessed();
     }
 
-    public Integer getNotNullAccountId(GerritChange change, String authorUsername) {
+    public Integer getNotNullAccountId(String authorUsername) {
         return gerritClientFacade.getNotNullAccountId(authorUsername);
     }
 
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/api/gerrit/GerritClientComments.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/api/gerrit/GerritClientComments.java
index cecebbb..9729c4a 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/api/gerrit/GerritClientComments.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/api/gerrit/GerritClientComments.java
@@ -6,6 +6,7 @@
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.UriResourceLocator;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.messages.ClientMessage;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.gerrit.GerritComment;
+import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.CommentData;
 import lombok.Getter;
 import lombok.extern.slf4j.Slf4j;
@@ -22,6 +23,7 @@
 public class GerritClientComments extends GerritClientAccount {
     private static final Integer MAX_SECS_GAP_BETWEEN_EVENT_AND_COMMENT = 2;
 
+    private final ChangeSetData changeSetData;
     private final HashMap<String, GerritComment> commentMap;
     private final HashMap<String, GerritComment> patchSetCommentMap;
 
@@ -29,8 +31,9 @@
     @Getter
     private List<GerritComment> commentProperties;
 
-    public GerritClientComments(Configuration config) {
+    public GerritClientComments(Configuration config, ChangeSetData changeSetData) {
         super(config);
+        this.changeSetData = changeSetData;
         commentProperties = new ArrayList<>();
         commentMap = new HashMap<>();
         patchSetCommentMap = new HashMap<>();
@@ -104,7 +107,7 @@
     }
 
     private void addLastComments(GerritChange change) {
-        ClientMessage clientMessage = new ClientMessage(config, change);
+        ClientMessage clientMessage = new ClientMessage(config, changeSetData, change);
         try {
             List<GerritComment> latestComments = retrieveComments(change);
             if (latestComments == null) {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/api/gerrit/GerritClientDetail.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/api/gerrit/GerritClientDetail.java
index 03bc163..f67c82a 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/api/gerrit/GerritClientDetail.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/api/gerrit/GerritClientDetail.java
@@ -1,11 +1,11 @@
 package com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit;
 
 import com.googlesource.gerrit.plugins.chatgpt.config.Configuration;
-import com.googlesource.gerrit.plugins.chatgpt.data.ChangeSetDataHandler;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.UriResourceLocator;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.gerrit.GerritComment;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.gerrit.GerritPatchSetDetail;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.gerrit.GerritPermittedVotingRange;
+import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData;
 import lombok.extern.slf4j.Slf4j;
 
 import java.net.URI;
@@ -16,9 +16,11 @@
 @Slf4j
 public class GerritClientDetail extends GerritClientBase {
     private GerritPatchSetDetail gerritPatchSetDetail;
+    private final int gptAccountId;
 
-    public GerritClientDetail(Configuration config) {
+    public GerritClientDetail(Configuration config, ChangeSetData changeSetData) {
         super(config);
+        this.gptAccountId = changeSetData.getGptAccountId();
     }
 
     public List<GerritComment> getMessages(GerritChange change) {
@@ -32,7 +34,6 @@
     }
 
     public GerritPermittedVotingRange getPermittedVotingRange(GerritChange change) {
-        int gptAccountId = ChangeSetDataHandler.getInstance(change).getGptAccountId();
         loadPatchSetDetail(change);
         List<GerritPatchSetDetail.Permission> permissions = gerritPatchSetDetail.getLabels().getCodeReview().getAll();
         if (permissions == null) {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/api/gerrit/GerritClientFacade.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/api/gerrit/GerritClientFacade.java
index 0c253c1..0da1a4e 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/api/gerrit/GerritClientFacade.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/api/gerrit/GerritClientFacade.java
@@ -5,6 +5,7 @@
 import com.googlesource.gerrit.plugins.chatgpt.mode.ModeClassLoader;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.patch.diff.FileDiffProcessed;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.gerrit.GerritPermittedVotingRange;
+import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.GerritClientData;
 import com.googlesource.gerrit.plugins.chatgpt.mode.stateless.client.api.gerrit.GerritClientPatchSetStateless;
 import com.googlesource.gerrit.plugins.chatgpt.mode.stateful.client.api.gerrit.GerritClientPatchSetStateful;
@@ -17,17 +18,19 @@
 
 @Slf4j
 public class GerritClientFacade {
+    private final ChangeSetData changeSetData;
     private final GerritClientDetail gerritClientDetail;
     private final IGerritClientPatchSet gerritClientPatchSet;
     private final GerritClientComments gerritClientComments;
 
     @Inject
-    public GerritClientFacade(Configuration config) {
-        gerritClientDetail = new GerritClientDetail(config);
+    public GerritClientFacade(Configuration config, ChangeSetData changeSetData) {
+        gerritClientDetail = new GerritClientDetail(config, changeSetData);
         gerritClientPatchSet = (IGerritClientPatchSet) ModeClassLoader.getInstance(
                 "client.api.gerrit.GerritClientPatchSet", config, config);
+        this.changeSetData = changeSetData;
         registerDynamicClasses(GerritClientPatchSetStateless.class, GerritClientPatchSetStateful.class);
-        gerritClientComments = new GerritClientComments(config);
+        gerritClientComments = new GerritClientComments(config, changeSetData);
     }
 
     public GerritPermittedVotingRange getPermittedVotingRange(GerritChange change) {
@@ -35,7 +38,7 @@
     }
 
     public String getPatchSet(GerritChange change) throws Exception {
-        return gerritClientPatchSet.getPatchSet(change);
+        return gerritClientPatchSet.getPatchSet(changeSetData, change);
     }
 
     public boolean isDisabledUser(String authorUsername) {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/api/gerrit/GerritClientPatchSet.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/api/gerrit/GerritClientPatchSet.java
index a30bc85..bbb8bfc 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/api/gerrit/GerritClientPatchSet.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/api/gerrit/GerritClientPatchSet.java
@@ -4,6 +4,7 @@
 import com.googlesource.gerrit.plugins.chatgpt.config.Configuration;
 import com.googlesource.gerrit.plugins.chatgpt.data.ChangeSetDataHandler;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.UriResourceLocator;
+import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData;
 import lombok.Getter;
 import lombok.extern.slf4j.Slf4j;
 
@@ -34,12 +35,12 @@
         }
     }
 
-    protected int getChangeSetRevisionBase(GerritChange change) {
-        return isChangeSetBased(change) ? 0 : revisionBase;
+    protected int getChangeSetRevisionBase(ChangeSetData changeSetData) {
+        return isChangeSetBased(changeSetData) ? 0 : revisionBase;
     }
 
-    private boolean isChangeSetBased(GerritChange change) {
-        return !ChangeSetDataHandler.getInstance(change).getForcedReviewLastPatchSet();
+    private boolean isChangeSetBased(ChangeSetData changeSetData) {
+        return !changeSetData.getForcedReviewLastPatchSet();
     }
 
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/commands/ClientCommands.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/commands/ClientCommands.java
index baf4373..43edc62 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/commands/ClientCommands.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/commands/ClientCommands.java
@@ -52,9 +52,9 @@
     @Getter
     private boolean containingHistoryCommand;
 
-    public ClientCommands(GerritChange change) {
-        changeSetData = ChangeSetDataHandler.getInstance(change);
-        directives = new Directives(change);
+    public ClientCommands(ChangeSetData changeSetData, GerritChange change) {
+        this.changeSetData = changeSetData;
+        directives = new Directives(changeSetData);
         containingHistoryCommand = false;
     }
 
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/messages/ClientMessage.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/messages/ClientMessage.java
index a3b0bfc..8e3a0bf 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/messages/ClientMessage.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/messages/ClientMessage.java
@@ -4,6 +4,7 @@
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.ClientBase;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritChange;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.commands.ClientCommands;
+import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData;
 import lombok.Getter;
 import lombok.extern.slf4j.Slf4j;
 
@@ -21,14 +22,14 @@
     @Getter
     private String message;
 
-    public ClientMessage(Configuration config, GerritChange change) {
+    public ClientMessage(Configuration config, ChangeSetData changeSetData, GerritChange change) {
         super(config);
         botMentionPattern = getBotMentionPattern();
-        clientCommands = new ClientCommands(change);
+        clientCommands = new ClientCommands(changeSetData, change);
     }
 
-    public ClientMessage(Configuration config, GerritChange change, String message) {
-        this(config, change);
+    public ClientMessage(Configuration config, ChangeSetData changeSetData, GerritChange change, String message) {
+        this(config, changeSetData, change);
         this.message = message;
     }
 
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptComment.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptComment.java
index ea7ef6e..59e9a89 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptComment.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptComment.java
@@ -6,23 +6,24 @@
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritChange;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.messages.ClientMessage;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.gerrit.GerritComment;
+import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData;
 import lombok.extern.slf4j.Slf4j;
 
 @Slf4j
 public class ChatGptComment extends ClientBase {
     protected ClientMessage commentMessage;
 
-    private final Integer gptAccountId;
     private final GerritChange change;
+    private final ChangeSetData changeSetData;
 
-    public ChatGptComment(Configuration config, GerritChange change) {
+    public ChatGptComment(Configuration config, ChangeSetData changeSetData, GerritChange change) {
         super(config);
         this.change = change;
-        gptAccountId = ChangeSetDataHandler.getInstance(change).getGptAccountId();
+        this.changeSetData = changeSetData;
     }
 
     protected String getCleanedMessage(GerritComment commentProperty) {
-        commentMessage = new ClientMessage(config, change, commentProperty.getMessage());
+        commentMessage = new ClientMessage(config, changeSetData, change, commentProperty.getMessage());
         if (isFromAssistant(commentProperty)) {
             commentMessage.removeDebugMessages();
         }
@@ -33,7 +34,7 @@
     }
 
     protected boolean isFromAssistant(GerritComment commentProperty) {
-        return commentProperty.getAuthor().getAccountId() == gptAccountId;
+        return commentProperty.getAuthor().getAccountId() == changeSetData.getGptAccountId();
     }
 
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptHistory.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptHistory.java
index b5eb5ec..b2b50e3 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptHistory.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptHistory.java
@@ -4,6 +4,7 @@
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritChange;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.chatgpt.ChatGptRequestMessage;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.gerrit.GerritComment;
+import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.CommentData;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.GerritClientData;
 import com.googlesource.gerrit.plugins.chatgpt.settings.Settings;
@@ -30,8 +31,8 @@
 
     private boolean filterActive;
 
-    public ChatGptHistory(Configuration config, GerritChange change, GerritClientData gerritClientData) {
-        super(config, change);
+    public ChatGptHistory(Configuration config, ChangeSetData changeSetData, GerritChange change, GerritClientData gerritClientData) {
+        super(config, changeSetData, change);
         CommentData commentData = gerritClientData.getCommentData();
         commentMap = commentData.getCommentMap();
         patchSetCommentMap = commentData.getPatchSetCommentMap();
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptUserPrompt.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptUserPrompt.java
index 244899c..5a4b3aa 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptUserPrompt.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptUserPrompt.java
@@ -3,6 +3,7 @@
 import com.googlesource.gerrit.plugins.chatgpt.config.Configuration;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritChange;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.chatgpt.ChatGptMessageItem;
+import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.GerritClientData;
 import lombok.extern.slf4j.Slf4j;
 
@@ -14,12 +15,12 @@
 public class ChatGptUserPrompt {
     private final ChatGptUserPromptBase chatGptUserPromptBase;
 
-    public ChatGptUserPrompt(Configuration config, GerritChange change, GerritClientData gerritClientData) {
+    public ChatGptUserPrompt(Configuration config, ChangeSetData changeSetData, GerritChange change, GerritClientData gerritClientData) {
         if (change.getIsCommentEvent()) {
-            chatGptUserPromptBase = new ChatGptUserPromptRequests(config, change, gerritClientData);
+            chatGptUserPromptBase = new ChatGptUserPromptRequests(config, changeSetData, change, gerritClientData);
         }
         else {
-            chatGptUserPromptBase = new ChatGptUserPromptReview(config, change, gerritClientData);
+            chatGptUserPromptBase = new ChatGptUserPromptReview(config, changeSetData, change, gerritClientData);
         }
     }
 
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptUserPromptBase.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptUserPromptBase.java
index 6c273a8..78482dc 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptUserPromptBase.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptUserPromptBase.java
@@ -7,6 +7,7 @@
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.chatgpt.ChatGptMessageItem;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.chatgpt.ChatGptRequestMessage;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.gerrit.GerritComment;
+import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.CommentData;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.GerritClientData;
 import lombok.Getter;
@@ -28,11 +29,11 @@
     @Getter
     protected List<GerritComment> commentProperties;
 
-    public ChatGptUserPromptBase(Configuration config, GerritChange change, GerritClientData gerritClientData) {
+    public ChatGptUserPromptBase(Configuration config, ChangeSetData changeSetData, GerritChange change, GerritClientData gerritClientData) {
         this.gerritClientData = gerritClientData;
         fileDiffsProcessed = gerritClientData.getFileDiffsProcessed();
         commentData = gerritClientData.getCommentData();
-        gptMessageHistory = new ChatGptHistory(config, change, gerritClientData);
+        gptMessageHistory = new ChatGptHistory(config, changeSetData, change, gerritClientData);
         messageItems = new ArrayList<>();
     }
 
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptUserPromptRequests.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptUserPromptRequests.java
index 2b4fdf1..1cde7c5 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptUserPromptRequests.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptUserPromptRequests.java
@@ -4,6 +4,7 @@
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritChange;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.chatgpt.ChatGptMessageItem;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.chatgpt.ChatGptRequestMessage;
+import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.GerritClientData;
 import lombok.extern.slf4j.Slf4j;
 
@@ -11,8 +12,8 @@
 
 @Slf4j
 public class ChatGptUserPromptRequests extends ChatGptUserPromptBase {
-    public ChatGptUserPromptRequests(Configuration config, GerritChange change, GerritClientData gerritClientData) {
-        super(config, change, gerritClientData);
+    public ChatGptUserPromptRequests(Configuration config, ChangeSetData changeSetData, GerritChange change, GerritClientData gerritClientData) {
+        super(config, changeSetData, change, gerritClientData);
         commentProperties = commentData.getCommentProperties();
     }
 
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptUserPromptReview.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptUserPromptReview.java
index 0baea6c..7c87b63 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptUserPromptReview.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptUserPromptReview.java
@@ -4,6 +4,7 @@
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritChange;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.chatgpt.ChatGptMessageItem;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.chatgpt.ChatGptRequestMessage;
+import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.GerritClientData;
 import lombok.extern.slf4j.Slf4j;
 
@@ -12,8 +13,8 @@
 
 @Slf4j
 public class ChatGptUserPromptReview extends ChatGptUserPromptBase {
-    public ChatGptUserPromptReview(Configuration config, GerritChange change, GerritClientData gerritClientData) {
-        super(config, change, gerritClientData);
+    public ChatGptUserPromptReview(Configuration config, ChangeSetData changeSetData, GerritChange change, GerritClientData gerritClientData) {
+        super(config, changeSetData, change, gerritClientData);
         commentProperties = new ArrayList<>(commentData.getCommentMap().values());
     }
 
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/Directives.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/Directives.java
index 6abcfd4..a714013 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/Directives.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/Directives.java
@@ -1,15 +1,13 @@
 package com.googlesource.gerrit.plugins.chatgpt.mode.common.client.prompt;
 
-import com.googlesource.gerrit.plugins.chatgpt.data.ChangeSetDataHandler;
-import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritChange;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData;
 
 public class Directives {
     private final ChangeSetData changeSetData;
     private String directive;
 
-    public Directives(GerritChange change) {
-        changeSetData = ChangeSetDataHandler.getInstance(change);
+    public Directives(ChangeSetData changeSetData) {
+        this.changeSetData = changeSetData;
     }
 
     public void addDirective(String directive) {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/interfaces/client/api/chatgpt/IChatGptClient.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/interfaces/client/api/chatgpt/IChatGptClient.java
index 4c307ed..c13e410 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/interfaces/client/api/chatgpt/IChatGptClient.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/interfaces/client/api/chatgpt/IChatGptClient.java
@@ -2,9 +2,10 @@
 
 import com.googlesource.gerrit.plugins.chatgpt.config.Configuration;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritChange;
+import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData;
 
 public interface IChatGptClient {
-    String ask(Configuration config, String changeId, String patchSet) throws Exception;
-    String ask(Configuration config, GerritChange change, String patchSet) throws Exception;
+    String ask(Configuration config, ChangeSetData changeSetData, String changeId, String patchSet) throws Exception;
+    String ask(Configuration config, ChangeSetData changeSetData, GerritChange change, String patchSet) throws Exception;
     String getRequestBody();
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/interfaces/client/api/gerrit/IGerritClientPatchSet.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/interfaces/client/api/gerrit/IGerritClientPatchSet.java
index 38dfc60..829b66c 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/interfaces/client/api/gerrit/IGerritClientPatchSet.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/interfaces/client/api/gerrit/IGerritClientPatchSet.java
@@ -2,11 +2,12 @@
 
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritChange;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.patch.diff.FileDiffProcessed;
+import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData;
 
 import java.util.HashMap;
 
 public interface IGerritClientPatchSet {
-    String getPatchSet(GerritChange change) throws Exception;
+    String getPatchSet(ChangeSetData changeSetData, GerritChange gerritChange) throws Exception;
     boolean isDisabledUser(String authorUsername);
     boolean isDisabledTopic(String topic);
     void retrieveRevisionBase(GerritChange change);
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/api/chatgpt/ChatGptClientStateful.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/api/chatgpt/ChatGptClientStateful.java
index 9e72e98..f409fb5 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/api/chatgpt/ChatGptClientStateful.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/api/chatgpt/ChatGptClientStateful.java
@@ -3,6 +3,7 @@
 import com.google.inject.Singleton;
 import com.googlesource.gerrit.plugins.chatgpt.config.Configuration;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritChange;
+import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData;
 import com.googlesource.gerrit.plugins.chatgpt.mode.interfaces.client.api.chatgpt.IChatGptClient;
 import lombok.extern.slf4j.Slf4j;
 
@@ -10,13 +11,13 @@
 @Singleton
 public class ChatGptClientStateful implements IChatGptClient {
     @Override
-    public String ask(Configuration config, String changeId, String patchSet) throws Exception {
+    public String ask(Configuration config, ChangeSetData changeSetData, String changeId, String patchSet) throws Exception {
         // Placeholder implementation, change to actual logic later.
         throw new UnsupportedOperationException("Method not implemented yet.");
     }
 
     @Override
-    public String ask(Configuration config, GerritChange change, String patchSet) throws Exception {
+    public String ask(Configuration config, ChangeSetData changeSetData, GerritChange change, String patchSet) throws Exception {
         // Placeholder implementation, change to actual logic later.
         throw new UnsupportedOperationException("Method not implemented yet.");
     }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/api/gerrit/GerritClientPatchSetStateful.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/api/gerrit/GerritClientPatchSetStateful.java
index 1336685..e563337 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/api/gerrit/GerritClientPatchSetStateful.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/api/gerrit/GerritClientPatchSetStateful.java
@@ -1,6 +1,7 @@
 package com.googlesource.gerrit.plugins.chatgpt.mode.stateful.client.api.gerrit;
 
 import com.googlesource.gerrit.plugins.chatgpt.config.Configuration;
+import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData;
 import com.googlesource.gerrit.plugins.chatgpt.mode.stateful.client.api.chatgpt.ChatGptAssistant;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritChange;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritClientPatchSet;
@@ -14,7 +15,7 @@
         super(config);
     }
 
-    public String getPatchSet(GerritChange change) {
+    public String getPatchSet(ChangeSetData changeSetData, GerritChange change) {
         ChatGptAssistant chatGptAssistant = new ChatGptAssistant(config, change);
         chatGptAssistant.setupAssistant();
 
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateless/client/api/chatgpt/ChatGptClientStateless.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateless/client/api/chatgpt/ChatGptClientStateless.java
index ef2fa20..b8f9d85 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateless/client/api/chatgpt/ChatGptClientStateless.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateless/client/api/chatgpt/ChatGptClientStateless.java
@@ -7,6 +7,7 @@
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritChange;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.http.HttpClientWithRetry;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.chatgpt.*;
+import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData;
 import com.googlesource.gerrit.plugins.chatgpt.mode.interfaces.client.api.chatgpt.IChatGptClient;
 import com.googlesource.gerrit.plugins.chatgpt.mode.stateless.client.api.UriResourceLocatorStateless;
 import com.googlesource.gerrit.plugins.chatgpt.mode.stateless.client.prompt.ChatGptPromptStateless;
@@ -37,9 +38,9 @@
     private boolean isCommentEvent = false;
 
     @Override
-    public String ask(Configuration config, String changeId, String patchSet) throws Exception {
+    public String ask(Configuration config, ChangeSetData changeSetData, String changeId, String patchSet) throws Exception {
         for (int attemptInd = 0; attemptInd < REVIEW_ATTEMPT_LIMIT; attemptInd++) {
-            HttpRequest request = createRequest(config, changeId, patchSet);
+            HttpRequest request = createRequest(config, changeSetData, patchSet);
             log.debug("ChatGPT request: {}", request.toString());
 
             HttpResponse<String> response = httpClientWithRetry.execute(request);
@@ -59,10 +60,10 @@
     }
 
     @Override
-    public String ask(Configuration config, GerritChange change, String patchSet) throws Exception {
+    public String ask(Configuration config, ChangeSetData changeSetData, GerritChange change, String patchSet) throws Exception {
         isCommentEvent = change.getIsCommentEvent();
 
-        return this.ask(config, change.getFullChangeId(), patchSet);
+        return this.ask(config, changeSetData, change.getFullChangeId(), patchSet);
     }
 
     private String extractContent(Configuration config, String body) throws Exception {
@@ -101,10 +102,10 @@
         return toolCalls.get(0).getFunction().getArguments();
     }
 
-    private HttpRequest createRequest(Configuration config, String changeId, String patchSet) {
+    private HttpRequest createRequest(Configuration config, ChangeSetData changeSetData, String patchSet) {
         URI uri = URI.create(config.getGptDomain() + UriResourceLocatorStateless.chatCompletionsUri());
         log.debug("ChatGPT request URI: {}", uri);
-        requestBody = createRequestBody(config, changeId, patchSet);
+        requestBody = createRequestBody(config, changeSetData, patchSet);
         log.debug("ChatGPT request body: {}", requestBody);
 
         return HttpRequest.newBuilder()
@@ -115,7 +116,7 @@
                 .build();
     }
 
-    private String createRequestBody(Configuration config, String changeId, String patchSet) {
+    private String createRequestBody(Configuration config, ChangeSetData changeSetData, String patchSet) {
         ChatGptPromptStateless chatGptPromptStateless = new ChatGptPromptStateless(config, isCommentEvent);
         ChatGptRequestMessage systemMessage = ChatGptRequestMessage.builder()
                 .role("system")
@@ -123,7 +124,7 @@
                 .build();
         ChatGptRequestMessage userMessage = ChatGptRequestMessage.builder()
                 .role("user")
-                .content(chatGptPromptStateless.getGptUserPrompt(patchSet, changeId))
+                .content(chatGptPromptStateless.getGptUserPrompt(changeSetData, patchSet))
                 .build();
 
         ChatGptParameters chatGptParameters = new ChatGptParameters(config, isCommentEvent);
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateless/client/api/gerrit/GerritClientPatchSetStateless.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateless/client/api/gerrit/GerritClientPatchSetStateless.java
index b22de58..a843172 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateless/client/api/gerrit/GerritClientPatchSetStateless.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateless/client/api/gerrit/GerritClientPatchSetStateless.java
@@ -8,6 +8,7 @@
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.patch.diff.FileDiffProcessed;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.gerrit.GerritPatchSetFileDiff;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.gerrit.GerritReviewFileDiff;
+import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData;
 import com.googlesource.gerrit.plugins.chatgpt.mode.interfaces.client.api.gerrit.IGerritClientPatchSet;
 import com.googlesource.gerrit.plugins.chatgpt.mode.stateless.client.api.UriResourceLocatorStateless;
 import lombok.extern.slf4j.Slf4j;
@@ -30,8 +31,8 @@
         diffs = new ArrayList<>();
     }
 
-    public String getPatchSet(GerritChange change) throws Exception {
-        int revisionBase = getChangeSetRevisionBase(change);
+    public String getPatchSet(ChangeSetData changeSetData, GerritChange change) throws Exception {
+        int revisionBase = getChangeSetRevisionBase(changeSetData);
         log.debug("Revision base: {}", revisionBase);
 
         List<String> files = getAffectedFiles(change.getFullChangeId(), revisionBase);
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateless/client/prompt/ChatGptPromptStateless.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateless/client/prompt/ChatGptPromptStateless.java
index 3aa4621..484ba0d 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateless/client/prompt/ChatGptPromptStateless.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateless/client/prompt/ChatGptPromptStateless.java
@@ -50,9 +50,8 @@
         return concatenate(prompt);
     }
 
-    public String getGptUserPrompt(String patchSet, String changeId) {
+    public String getGptUserPrompt(ChangeSetData changeSetData, String patchSet) {
         List<String> prompt = new ArrayList<>();
-        ChangeSetData changeSetData = ChangeSetDataHandler.getInstance(changeId);
         String gptRequestUserPrompt = changeSetData.getGptRequestUserPrompt();
         boolean isValidRequestUserPrompt = gptRequestUserPrompt != null && !gptRequestUserPrompt.isEmpty();
         if (isCommentEvent && isValidRequestUserPrompt) {
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 5f73c4d..c63ec7e 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/chatgpt/ChatGptReviewTestBase.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/chatgpt/ChatGptReviewTestBase.java
@@ -5,9 +5,12 @@
 import com.github.tomakehurst.wiremock.matching.RequestPatternBuilder;
 import com.github.tomakehurst.wiremock.verification.LoggedRequest;
 import com.google.common.net.HttpHeaders;
+import com.google.gerrit.entities.Account;
 import com.google.gerrit.entities.BranchNameKey;
 import com.google.gerrit.entities.Change;
 import com.google.gerrit.entities.Project;
+import com.google.gerrit.server.account.AccountCache;
+import com.google.gerrit.server.account.AccountState;
 import com.google.gerrit.server.config.PluginConfig;
 import com.google.gerrit.server.data.AccountAttribute;
 import com.google.gerrit.server.data.PatchSetAttribute;
@@ -29,6 +32,7 @@
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritChange;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritClient;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritClientFacade;
+import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData;
 import com.googlesource.gerrit.plugins.chatgpt.mode.stateful.client.api.git.GitRepoFiles;
 import lombok.NonNull;
 import org.apache.http.entity.ContentType;
@@ -43,13 +47,17 @@
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
+import java.time.Instant;
+import java.util.Collections;
 import java.util.List;
+import java.util.Optional;
 import java.util.function.Consumer;
 
 import static com.google.gerrit.extensions.client.ChangeKind.REWORK;
 import static com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.UriResourceLocator.*;
 import static com.googlesource.gerrit.plugins.chatgpt.utils.GsonUtils.getGson;
 import static java.net.HttpURLConnection.HTTP_OK;
+import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
@@ -71,6 +79,7 @@
     protected static final BranchNameKey BRANCH_NAME = BranchNameKey.create(PROJECT_NAME, "myBranchName");
     protected static final boolean GPT_STREAM_OUTPUT = true;
     protected static final long TEST_TIMESTAMP = 1699270812;
+    private static  final int GPT_USER_ACCOUNT_ID = 1000000;
 
     @Rule
     public WireMockRule wireMockRule = new WireMockRule(9527);
@@ -216,6 +225,7 @@
                 bind(ConfigCreator.class).toInstance(mockConfigCreator);
                 bind(PatchSetReviewer.class).toInstance(patchSetReviewer);
                 bind(PluginDataHandler.class).toInstance(pluginDataHandler);
+                bind(AccountCache.class).toInstance(mockAccountCache());
             }
         }).getInstance(EventHandlerTask.class);
         return task.execute();
@@ -232,8 +242,9 @@
     }
 
     private void initTest () throws NoSuchProjectException {
-        gerritClient = new GerritClient(new GerritClientFacade(config));
-        patchSetReviewer = new PatchSetReviewer(gerritClient, config);
+        ChangeSetData changeSetData = new ChangeSetData(GPT_USER_ACCOUNT_ID, config.getVotingMinScore(), config.getMaxReviewFileSize());
+        gerritClient = new GerritClient(new GerritClientFacade(config, changeSetData));
+        patchSetReviewer = new PatchSetReviewer(gerritClient, config, changeSetData);
         mockConfigCreator = mock(ConfigCreator.class);
     }
 
@@ -280,4 +291,12 @@
         when(event.getChangeKey()).thenReturn(CHANGE_ID);
     }
 
+    private AccountCache mockAccountCache() {
+        AccountCache accountCache = mock(AccountCache.class);
+        Account account = Account.builder(Account.id(GPT_USER_ACCOUNT_ID), Instant.now()).build();
+        AccountState accountState = AccountState.forAccount(account, Collections.emptyList());
+        doReturn(Optional.of(accountState)).when(accountCache).getByUsername(GERRIT_GPT_USERNAME);
+
+        return accountCache;
+    }
 }
diff --git a/src/test/java/com/googlesource/gerrit/plugins/chatgpt/integration/CodeReviewPluginIT.java b/src/test/java/com/googlesource/gerrit/plugins/chatgpt/integration/CodeReviewPluginIT.java
index 77baa74..854de47 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/chatgpt/integration/CodeReviewPluginIT.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/chatgpt/integration/CodeReviewPluginIT.java
@@ -3,6 +3,7 @@
 import com.googlesource.gerrit.plugins.chatgpt.config.Configuration;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritClient;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritClientReview;
+import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.review.ReviewBatch;
 import com.googlesource.gerrit.plugins.chatgpt.mode.interfaces.client.api.chatgpt.IChatGptClient;
 import com.googlesource.gerrit.plugins.chatgpt.mode.stateless.client.prompt.ChatGptPromptStateless;
@@ -36,13 +37,14 @@
 
     @Test
     public void sayHelloToGPT() throws Exception {
+        ChangeSetData changeSetData = new ChangeSetData(1, config.getVotingMinScore(), config.getMaxReviewFileSize());
         ChatGptPromptStateless chatGptPromptStateless = new ChatGptPromptStateless(config, true);
         when(config.getGptDomain()).thenReturn(Configuration.OPENAI_DOMAIN);
         when(config.getGptToken()).thenReturn("Your GPT token");
         when(config.getGptModel()).thenReturn(Configuration.DEFAULT_GPT_MODEL);
         when(chatGptPromptStateless.getGptSystemPrompt()).thenReturn(ChatGptPromptStateless.DEFAULT_GPT_SYSTEM_PROMPT);
 
-        String answer = chatGptClient.ask(config, "", "hello");
+        String answer = chatGptClient.ask(config, changeSetData, "", "hello");
         log.info("answer: {}", answer);
         assertNotNull(answer);
     }
