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 f348a1a..840b957 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
@@ -6,6 +6,7 @@
 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 com.googlesource.gerrit.plugins.chatgpt.mode.interfaces.client.prompt.IChatGptUserPrompt;
 import lombok.extern.slf4j.Slf4j;
 
 import java.util.List;
@@ -14,7 +15,7 @@
 
 @Slf4j
 public class ChatGptUserPrompt {
-    private final ChatGptUserPromptBase chatGptUserPromptBase;
+    private final IChatGptUserPrompt chatGptUserPromptHandler;
 
     public ChatGptUserPrompt(
             Configuration config,
@@ -23,19 +24,20 @@
             GerritClientData gerritClientData,
             Localizer localizer
     ) {
-        if (change.getIsCommentEvent()) {
-            chatGptUserPromptBase = new ChatGptUserPromptRequests(config, changeSetData, gerritClientData, localizer);
-        }
-        else {
-            chatGptUserPromptBase = new ChatGptUserPromptReview(config, changeSetData, gerritClientData, localizer);
-        }
+        chatGptUserPromptHandler = ChatGptUserPromptFactory.getChatGptUserPrompt(
+                config,
+                changeSetData,
+                change,
+                gerritClientData,
+                localizer
+        );
     }
 
     public String buildPrompt() {
-        for (int i = 0; i < chatGptUserPromptBase.getCommentProperties().size(); i++) {
-            chatGptUserPromptBase.addMessageItem(i);
+        for (int i = 0; i < chatGptUserPromptHandler.getCommentProperties().size(); i++) {
+            chatGptUserPromptHandler.addMessageItem(i);
         }
-        List<ChatGptMessageItem> messageItems = chatGptUserPromptBase.getMessageItems();
+        List<ChatGptMessageItem> messageItems = chatGptUserPromptHandler.getMessageItems();
         return messageItems.isEmpty() ? "" : getGson().toJson(messageItems);
     }
 }
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 3a50f29..95b931b 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
@@ -10,6 +10,7 @@
 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.mode.interfaces.client.prompt.IChatGptUserPrompt;
 import lombok.Getter;
 import lombok.extern.slf4j.Slf4j;
 
@@ -18,7 +19,7 @@
 import java.util.List;
 
 @Slf4j
-public abstract class ChatGptUserPromptBase {
+public abstract class ChatGptUserPromptBase implements IChatGptUserPrompt {
     protected final GerritClientData gerritClientData;
     protected final HashMap<String, FileDiffProcessed> fileDiffsProcessed;
     protected final CommentData commentData;
@@ -42,7 +43,7 @@
         messageItems = new ArrayList<>();
     }
 
-    abstract void addMessageItem(int i);
+    public abstract void addMessageItem(int i);
 
     protected ChatGptMessageItem getMessageItem(int i) {
         ChatGptMessageItem messageItem = new ChatGptMessageItem();
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptUserPromptFactory.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptUserPromptFactory.java
new file mode 100644
index 0000000..da4a1df
--- /dev/null
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptUserPromptFactory.java
@@ -0,0 +1,37 @@
+package com.googlesource.gerrit.plugins.chatgpt.mode.common.client.prompt;
+
+import com.googlesource.gerrit.plugins.chatgpt.config.Configuration;
+import com.googlesource.gerrit.plugins.chatgpt.localization.Localizer;
+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.common.model.data.GerritClientData;
+import com.googlesource.gerrit.plugins.chatgpt.mode.interfaces.client.prompt.IChatGptUserPrompt;
+import com.googlesource.gerrit.plugins.chatgpt.mode.stateful.client.prompt.ChatGptUserPromptRequestsStateful;
+import com.googlesource.gerrit.plugins.chatgpt.mode.stateless.client.prompt.ChatGptUserPromptRequestsStateless;
+import com.googlesource.gerrit.plugins.chatgpt.settings.Settings;
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
+public class ChatGptUserPromptFactory {
+
+    public static IChatGptUserPrompt getChatGptUserPrompt(
+            Configuration config,
+            ChangeSetData changeSetData,
+            GerritChange change,
+            GerritClientData gerritClientData,
+            Localizer localizer
+    ) {
+        if (change.getIsCommentEvent()) {
+            if ((config.getGptMode() == Settings.MODES.stateless)) {
+                log.info("ChatGptUserPromptFactory: Returned ChatGptUserPromptRequestsStateless");
+                return new ChatGptUserPromptRequestsStateless(config, changeSetData, gerritClientData, localizer);
+            } else {
+                log.info("ChatGptUserPromptFactory: Returned ChatGptUserPromptRequestsStateful");
+                return new ChatGptUserPromptRequestsStateful(config, changeSetData, gerritClientData, localizer);
+            }
+        } else {
+            log.info("ChatGptUserPromptFactory: Returned ChatGptUserPromptReview");
+            return new ChatGptUserPromptReview(config, changeSetData, gerritClientData, localizer);
+        }
+    }
+}
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 92d34d5..2a3b214 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
@@ -12,6 +12,9 @@
 
 @Slf4j
 public class ChatGptUserPromptRequests extends ChatGptUserPromptBase {
+    protected ChatGptMessageItem messageItem;
+    protected List<ChatGptRequestMessage> messageHistories;
+
     public ChatGptUserPromptRequests(
             Configuration config,
             ChangeSetData changeSetData,
@@ -29,11 +32,10 @@
     }
 
     protected ChatGptMessageItem getMessageItem(int i) {
-        ChatGptMessageItem messageItem = super.getMessageItem(i);
-        List<ChatGptRequestMessage> messageHistories = gptMessageHistory.retrieveHistory(commentProperties.get(i));
+        messageItem = super.getMessageItem(i);
+        messageHistories = gptMessageHistory.retrieveHistory(commentProperties.get(i));
         ChatGptRequestMessage request = messageHistories.remove(messageHistories.size() -1);
         messageItem.setRequest(request.getContent());
-        setHistories(messageItem, messageHistories);
 
         return messageItem;
     }
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 6c4dc4d..f307e58 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
@@ -6,13 +6,14 @@
 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 com.googlesource.gerrit.plugins.chatgpt.mode.interfaces.client.prompt.IChatGptUserPrompt;
 import lombok.extern.slf4j.Slf4j;
 
 import java.util.ArrayList;
 import java.util.List;
 
 @Slf4j
-public class ChatGptUserPromptReview extends ChatGptUserPromptBase {
+public class ChatGptUserPromptReview extends ChatGptUserPromptBase implements IChatGptUserPrompt {
     public ChatGptUserPromptReview(
             Configuration config,
             ChangeSetData changeSetData,
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/interfaces/client/prompt/IChatGptUserPrompt.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/interfaces/client/prompt/IChatGptUserPrompt.java
new file mode 100644
index 0000000..8c7bb31
--- /dev/null
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/interfaces/client/prompt/IChatGptUserPrompt.java
@@ -0,0 +1,12 @@
+package com.googlesource.gerrit.plugins.chatgpt.mode.interfaces.client.prompt;
+
+import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.chatgpt.ChatGptMessageItem;
+import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.gerrit.GerritComment;
+
+import java.util.List;
+
+public interface IChatGptUserPrompt {
+    void addMessageItem(int i);
+    List<GerritComment> getCommentProperties();
+    List<ChatGptMessageItem> getMessageItems();
+}
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 3594ca2..833c0ca 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
@@ -29,7 +29,13 @@
         String changeId = change.getFullChangeId();
         log.info("Processing STATEFUL ChatGPT Request with changeId: {}, Patch Set: {}", changeId, patchSet);
 
-        ChatGptThread chatGptThread = new ChatGptThread(config, change, patchSet, pluginDataHandlerProvider);
+        ChatGptThread chatGptThread = new ChatGptThread(
+                config,
+                changeSetData,
+                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 11c98bf..6f9dd90 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
@@ -5,6 +5,7 @@
 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.common.model.data.ChangeSetData;
 import com.googlesource.gerrit.plugins.chatgpt.mode.stateful.client.api.UriResourceLocatorStateful;
 import com.googlesource.gerrit.plugins.chatgpt.mode.stateful.client.prompt.ChatGptPromptStateful;
 import com.googlesource.gerrit.plugins.chatgpt.mode.stateful.model.api.chatgpt.*;
@@ -21,6 +22,7 @@
 
     private final ChatGptHttpClient httpClient = new ChatGptHttpClient();
     private final Configuration config;
+    private final ChangeSetData changeSetData;
     private final GerritChange change;
     private final String patchSet;
     private final PluginDataHandler changeDataHandler;
@@ -30,11 +32,13 @@
 
     public ChatGptThread(
             Configuration config,
+            ChangeSetData changeSetData,
             GerritChange change,
             String patchSet,
             PluginDataHandlerProvider pluginDataHandlerProvider
     ) {
         this.config = config;
+        this.changeSetData = changeSetData;
         this.change = change;
         this.patchSet = patchSet;
         this.changeDataHandler = pluginDataHandlerProvider.getChangeScope();
@@ -79,7 +83,7 @@
     private Request addMessageRequest() {
         URI uri = URI.create(config.getGptDomain() + UriResourceLocatorStateful.threadMessagesUri(threadId));
         log.debug("ChatGPT Add Message request URI: {}", uri);
-        ChatGptPromptStateful chatGptPromptStateful = new ChatGptPromptStateful(config, change);
+        ChatGptPromptStateful chatGptPromptStateful = new ChatGptPromptStateful(config, changeSetData, change);
         addMessageRequestBody = ChatGptRequestMessage.builder()
                 .role("user")
                 .content(chatGptPromptStateful.getDefaultGptThreadReviewMessage(patchSet))
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/prompt/ChatGptPromptStateful.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/prompt/ChatGptPromptStateful.java
index 7b61318..8844427 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/prompt/ChatGptPromptStateful.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/prompt/ChatGptPromptStateful.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.client.prompt.ChatGptPrompt;
+import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData;
 import lombok.extern.slf4j.Slf4j;
 
 
@@ -15,6 +16,8 @@
 
     private final GerritChange change;
 
+    private ChangeSetData changeSetData;
+
     public ChatGptPromptStateful(Configuration config, GerritChange change) {
         super(config);
         this.change = change;
@@ -25,6 +28,11 @@
         }
     }
 
+    public ChatGptPromptStateful(Configuration config, ChangeSetData changeSetData, GerritChange change) {
+        this(config, change);
+        this.changeSetData = changeSetData;
+    }
+
     public String getDefaultGptAssistantDescription() {
         return String.format(DEFAULT_GPT_ASSISTANT_DESCRIPTION, change.getProjectName());
     }
@@ -40,6 +48,18 @@
     }
 
     public String getDefaultGptThreadReviewMessage(String patchSet) {
-        return String.format(DEFAULT_GPT_MESSAGE_REVIEW, patchSet);
+        String gptRequestUserPrompt = getGptRequestUserPrompt();
+        if (gptRequestUserPrompt != null && !gptRequestUserPrompt.isEmpty()) {
+            log.debug("Request User Prompt retrieved: {}", gptRequestUserPrompt);
+            return gptRequestUserPrompt;
+        }
+        else {
+            return String.format(DEFAULT_GPT_MESSAGE_REVIEW, patchSet);
+        }
+    }
+
+    private String getGptRequestUserPrompt() {
+        if (changeSetData == null || !isCommentEvent) return null;
+        return changeSetData.getGptRequestUserPrompt();
     }
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/prompt/ChatGptUserPromptRequestsStateful.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/prompt/ChatGptUserPromptRequestsStateful.java
new file mode 100644
index 0000000..ec5ea2b
--- /dev/null
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/prompt/ChatGptUserPromptRequestsStateful.java
@@ -0,0 +1,19 @@
+package com.googlesource.gerrit.plugins.chatgpt.mode.stateful.client.prompt;
+
+import com.googlesource.gerrit.plugins.chatgpt.config.Configuration;
+import com.googlesource.gerrit.plugins.chatgpt.localization.Localizer;
+import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.prompt.ChatGptUserPromptRequests;
+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.interfaces.client.prompt.IChatGptUserPrompt;
+
+public class ChatGptUserPromptRequestsStateful extends ChatGptUserPromptRequests implements IChatGptUserPrompt {
+    public ChatGptUserPromptRequestsStateful(
+            Configuration config,
+            ChangeSetData changeSetData,
+            GerritClientData gerritClientData,
+            Localizer localizer
+    ) {
+        super(config, changeSetData, gerritClientData, localizer);
+    }
+}
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 ec7f7fd..50dc7a9 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
@@ -54,7 +54,7 @@
         String gptRequestUserPrompt = changeSetData.getGptRequestUserPrompt();
         boolean isValidRequestUserPrompt = gptRequestUserPrompt != null && !gptRequestUserPrompt.isEmpty();
         if (isCommentEvent && isValidRequestUserPrompt) {
-            log.debug("ConfigsDynamically value found: {}", gptRequestUserPrompt);
+            log.debug("Request User Prompt retrieved: {}", gptRequestUserPrompt);
             prompt.addAll(Arrays.asList(
                     DEFAULT_GPT_REQUEST_PROMPT_DIFF,
                     patchSet,
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateless/client/prompt/ChatGptUserPromptRequestsStateless.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateless/client/prompt/ChatGptUserPromptRequestsStateless.java
new file mode 100644
index 0000000..e792f11
--- /dev/null
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateless/client/prompt/ChatGptUserPromptRequestsStateless.java
@@ -0,0 +1,29 @@
+package com.googlesource.gerrit.plugins.chatgpt.mode.stateless.client.prompt;
+
+import com.googlesource.gerrit.plugins.chatgpt.config.Configuration;
+import com.googlesource.gerrit.plugins.chatgpt.localization.Localizer;
+import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.prompt.ChatGptUserPromptRequests;
+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 com.googlesource.gerrit.plugins.chatgpt.mode.interfaces.client.prompt.IChatGptUserPrompt;
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
+public class ChatGptUserPromptRequestsStateless extends ChatGptUserPromptRequests implements IChatGptUserPrompt {
+    public ChatGptUserPromptRequestsStateless(
+            Configuration config,
+            ChangeSetData changeSetData,
+            GerritClientData gerritClientData,
+            Localizer localizer
+    ) {
+        super(config, changeSetData, gerritClientData, localizer);
+    }
+
+    protected ChatGptMessageItem getMessageItem(int i) {
+        super.getMessageItem(i);
+        setHistories(messageItem, messageHistories);
+
+        return messageItem;
+    }
+}
diff --git a/src/test/java/com/googlesource/gerrit/plugins/chatgpt/ChatGptReviewStatefulTest.java b/src/test/java/com/googlesource/gerrit/plugins/chatgpt/ChatGptReviewStatefulTest.java
index e6fbcda..73539e7 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/chatgpt/ChatGptReviewStatefulTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/chatgpt/ChatGptReviewStatefulTest.java
@@ -7,7 +7,6 @@
 import com.google.gerrit.extensions.common.DiffInfo;
 import com.google.gerrit.extensions.restapi.BinaryResult;
 import com.google.gerrit.extensions.restapi.RestApiException;
-import com.google.gson.JsonObject;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.chatgpt.ChatGptResponseContent;
 import com.googlesource.gerrit.plugins.chatgpt.mode.stateful.client.api.UriResourceLocatorStateful;
 import com.googlesource.gerrit.plugins.chatgpt.mode.stateful.client.prompt.ChatGptPromptStateful;
@@ -44,10 +43,8 @@
     private static final String CHAT_GPT_RUN_ID = "run_TEST_RUN_ID";
 
     private String formattedPatchContent;
-    private String reviewMessageCode;
-    private String reviewMessageCommitMessage;
     private ChatGptPromptStateful chatGptPromptStateful;
-    private JsonObject threadMessage;
+    private String requestContent;
 
     public ChatGptReviewStatefulTest() {
         MockitoAnnotations.openMocks(this);
@@ -151,41 +148,58 @@
     protected void initComparisonContent() {
         super.initComparisonContent();
 
-        reviewMessageCode = getReviewMessage(0);
-        reviewMessageCommitMessage = getReviewMessage(1);
+        promptTagComments = readTestFile("__files/stateful/chatGptPromptTagRequests.json");
     }
 
     protected ArgumentCaptor<ReviewInput> testRequestSent() throws RestApiException {
         ArgumentCaptor<ReviewInput> reviewInputCaptor = super.testRequestSent();
-        threadMessage = gptRequestBody.getAsJsonObject();
+        requestContent = gptRequestBody.getAsJsonObject().get("content").getAsString();
         return reviewInputCaptor;
     }
 
-    private String getReviewMessage(int tollCallId) {
-        ChatGptListResponse reviewResponse = getGson().fromJson(readTestFile(
-                "__files/chatGptRunStepsResponse.json"
-        ), ChatGptListResponse.class);
-        String reviewJsonResponse = reviewResponse.getData().get(0).getStepDetails().getToolCalls().get(tollCallId)
+    private String getReviewMessage(String responseFile, int tollCallId) {
+        ChatGptListResponse responseContent = getGson().fromJson(readTestFile(responseFile), ChatGptListResponse.class);
+        String reviewJsonResponse = responseContent.getData().get(0).getStepDetails().getToolCalls().get(tollCallId)
                 .getFunction().getArguments();
         return getGson().fromJson(reviewJsonResponse, ChatGptResponseContent.class).getReplies().get(0).getReply();
     }
 
+    private String getCapturedMessage(ArgumentCaptor<ReviewInput> captor, String filename) {
+        return captor.getAllValues().get(0).comments.get(filename).get(0).message;
+    }
+
     @Test
     public void patchSetCreatedOrUpdated() throws Exception {
+        String reviewMessageCode = getReviewMessage( "__files/chatGptRunStepsResponse.json", 0);
+        String reviewMessageCommitMessage = getReviewMessage( "__files/chatGptRunStepsResponse.json", 1);
+
         String reviewUserPrompt = chatGptPromptStateful.getDefaultGptThreadReviewMessage(formattedPatchContent);
 
         handleEventBasedOnType(false);
 
         ArgumentCaptor<ReviewInput> captor = testRequestSent();
-        String userPrompt = threadMessage.get("content").getAsString();
-        Assert.assertEquals(reviewUserPrompt, userPrompt);
-        Assert.assertEquals(
-                reviewMessageCode,
-                captor.getAllValues().get(0).comments.get("test_file_1.py").get(0).message
-        );
-        Assert.assertEquals(
-                reviewMessageCommitMessage,
-                captor.getAllValues().get(0).comments.get(GERRIT_PATCH_SET_FILENAME).get(0).message
-        );
+        Assert.assertEquals(reviewUserPrompt, requestContent);
+        Assert.assertEquals(reviewMessageCode, getCapturedMessage(captor, "test_file_1.py"));
+        Assert.assertEquals(reviewMessageCommitMessage, getCapturedMessage(captor, GERRIT_PATCH_SET_FILENAME));
+    }
+
+    @Test
+    public void gptMentionedInComment() throws RestApiException {
+        String reviewMessageCommitMessage = getReviewMessage("__files/chatGptResponseRequestStateful.json", 0);
+
+        chatGptPromptStateful.setCommentEvent(true);
+        // Mock the behavior of the ChatGPT retrieve-run-steps request
+        WireMock.stubFor(WireMock.get(WireMock.urlEqualTo(URI.create(config.getGptDomain()
+                        + UriResourceLocatorStateful.runStepsUri(CHAT_GPT_THREAD_ID, CHAT_GPT_RUN_ID)).getPath()))
+                .willReturn(WireMock.aResponse()
+                        .withStatus(HTTP_OK)
+                        .withHeader(HttpHeaders.CONTENT_TYPE, ContentType.APPLICATION_JSON.toString())
+                        .withBodyFile("chatGptResponseRequestStateful.json")));
+
+        handleEventBasedOnType(true);
+
+        ArgumentCaptor<ReviewInput> captor = testRequestSent();
+        Assert.assertEquals(promptTagComments, requestContent);
+        Assert.assertEquals(reviewMessageCommitMessage, getCapturedMessage(captor, GERRIT_PATCH_SET_FILENAME));
     }
 }
diff --git a/src/test/java/com/googlesource/gerrit/plugins/chatgpt/ChatGptReviewStatelessTest.java b/src/test/java/com/googlesource/gerrit/plugins/chatgpt/ChatGptReviewStatelessTest.java
index b3f822f..a8b8ec2 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/chatgpt/ChatGptReviewStatelessTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/chatgpt/ChatGptReviewStatelessTest.java
@@ -39,7 +39,6 @@
     private ReviewInput expectedResponseStreamed;
     private String expectedSystemPromptReview;
     private String promptTagReview;
-    private String promptTagComments;
     private String diffContent;
     private ReviewInput gerritPatchSetReview;
     private JsonArray prompts;
@@ -179,7 +178,7 @@
                 .willReturn(WireMock.aResponse()
                         .withStatus(HTTP_OK)
                         .withHeader(HttpHeaders.CONTENT_TYPE, ContentType.APPLICATION_JSON.toString())
-                        .withBodyFile("chatGptResponseRequests.json")));
+                        .withBodyFile("chatGptResponseRequestStateless.json")));
 
         handleEventBasedOnType(true);
         int commentPropertiesSize = gerritClient.getClientData(getGerritChange()).getCommentProperties().size();
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 cfee169..ee6116f 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/chatgpt/ChatGptReviewTestBase.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/chatgpt/ChatGptReviewTestBase.java
@@ -124,6 +124,7 @@
     protected PatchSetReviewer patchSetReviewer;
     protected ConfigCreator mockConfigCreator;
     protected JsonObject gptRequestBody;
+    protected String promptTagComments;
 
     @Before
     public void before() throws RestApiException {
diff --git a/src/test/resources/__files/chatGptResponseRequestStateful.json b/src/test/resources/__files/chatGptResponseRequestStateful.json
new file mode 100644
index 0000000..b66217b
--- /dev/null
+++ b/src/test/resources/__files/chatGptResponseRequestStateful.json
@@ -0,0 +1,22 @@
+{
+  "object": "list",
+  "data": [
+    {
+      "id": "step_UKMPny6XSinQjSWOhSFleu1v",
+      "object": "thread.run.step",
+      "step_details": {
+        "type": "tool_calls",
+        "tool_calls": [
+          {
+            "id": "call_LYyZRTLRqSx2Bwn0QNWq1yYU",
+            "type": "function",
+            "function": {
+              "name": "format_replies",
+              "arguments": "{\n  \"replies\": [\n    {\n      \"id\": 0,\n      \"reply\": \"The commit message 'Corrected Indentation in Module-Class Retrieval Line' accurately represents the change made in the code.\"\n    }\n  ]\n  }"
+            }
+          }
+        ]
+      }
+    }
+  ]
+}
diff --git a/src/test/resources/__files/chatGptResponseRequests.json b/src/test/resources/__files/chatGptResponseRequestStateless.json
similarity index 100%
rename from src/test/resources/__files/chatGptResponseRequests.json
rename to src/test/resources/__files/chatGptResponseRequestStateless.json
diff --git a/src/test/resources/__files/stateful/chatGptPromptTagRequests.json b/src/test/resources/__files/stateful/chatGptPromptTagRequests.json
new file mode 100644
index 0000000..4ab9486
--- /dev/null
+++ b/src/test/resources/__files/stateful/chatGptPromptTagRequests.json
@@ -0,0 +1 @@
+[{"request":"How about something like \"Corrected Indentation in Module-Class Retrieval Line\"?","id":0},{"request":"message","id":1},{"request":"message 2","id":2}]
\ No newline at end of file
