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 5d652bb..3138063 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
@@ -24,12 +24,17 @@
         this.pluginDataHandlerProvider = pluginDataHandlerProvider;
     }
 
-    public ChatGptResponseContent ask(Configuration config, ChangeSetData changeSetData, GerritChange change, String patchSet) {
+    public ChatGptResponseContent ask(
+            Configuration config,
+            ChangeSetData changeSetData,
+            GerritChange change,
+            String patchSet
+    ) {
         isCommentEvent = change.getIsCommentEvent();
         String changeId = change.getFullChangeId();
         log.info("Processing STATEFUL ChatGPT Request with changeId: {}, Patch Set: {}", changeId, patchSet);
 
-        ChatGptThread chatGptThread = new ChatGptThread(config, change, patchSet);
+        ChatGptThread chatGptThread = new ChatGptThread(config, change, patchSet, pluginDataHandlerProvider);
         String threadId = chatGptThread.createThread();
         chatGptThread.addMessage();
 
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/api/chatgpt/ChatGptThread.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/api/chatgpt/ChatGptThread.java
index a95f968..11c98bf 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/api/chatgpt/ChatGptThread.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/api/chatgpt/ChatGptThread.java
@@ -1,6 +1,8 @@
 package com.googlesource.gerrit.plugins.chatgpt.mode.stateful.client.api.chatgpt;
 
 import com.googlesource.gerrit.plugins.chatgpt.config.Configuration;
+import com.googlesource.gerrit.plugins.chatgpt.data.PluginDataHandler;
+import com.googlesource.gerrit.plugins.chatgpt.data.PluginDataHandlerProvider;
 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.stateful.client.api.UriResourceLocatorStateful;
@@ -15,28 +17,43 @@
 
 @Slf4j
 public class ChatGptThread {
+    public static final String KEY_THREAD_ID = "threadId";
+
     private final ChatGptHttpClient httpClient = new ChatGptHttpClient();
     private final Configuration config;
     private final GerritChange change;
     private final String patchSet;
+    private final PluginDataHandler changeDataHandler;
 
     private String threadId;
     private ChatGptRequestMessage addMessageRequestBody;
 
-    public ChatGptThread(Configuration config, GerritChange change, String patchSet) {
+    public ChatGptThread(
+            Configuration config,
+            GerritChange change,
+            String patchSet,
+            PluginDataHandlerProvider pluginDataHandlerProvider
+    ) {
         this.config = config;
         this.change = change;
         this.patchSet = patchSet;
+        this.changeDataHandler = pluginDataHandlerProvider.getChangeScope();
     }
 
     public String createThread() {
-        Request request = createThreadRequest();
-        log.debug("ChatGPT Create Thread request: {}", request);
+        threadId = changeDataHandler.getValue(KEY_THREAD_ID);
+        if (threadId == null) {
+            Request request = createThreadRequest();
+            log.debug("ChatGPT Create Thread request: {}", request);
 
-        ChatGptResponse threadResponse = getGson().fromJson(httpClient.execute(request), ChatGptResponse.class);
-        log.info("Thread created: {}", threadResponse);
-        threadId = threadResponse.getId();
-
+            ChatGptResponse threadResponse = getGson().fromJson(httpClient.execute(request), ChatGptResponse.class);
+            log.info("Thread created: {}", threadResponse);
+            threadId = threadResponse.getId();
+            changeDataHandler.setValue(KEY_THREAD_ID, threadId);
+        }
+        else {
+            log.info("Thread found for the Change Set. Thread ID: {}", threadId);
+        }
         return threadId;
     }
 
@@ -67,6 +84,7 @@
                 .role("user")
                 .content(chatGptPromptStateful.getDefaultGptThreadReviewMessage(patchSet))
                 .build();
+        log.debug("ChatGPT Add Message request body: {}", addMessageRequestBody);
 
         return httpClient.createRequestFromJson(uri.toString(), config.getGptToken(), addMessageRequestBody);
     }
