diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/patch/diff/FileDiffProcessed.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/patch/diff/FileDiffProcessed.java
index 75206de..1ea641f 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/patch/diff/FileDiffProcessed.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/patch/diff/FileDiffProcessed.java
@@ -4,13 +4,13 @@
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.gerrit.GerritPatchSetFileDiff;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.patch.code.CodeFinderDiff;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.patch.diff.DiffContent;
+import com.googlesource.gerrit.plugins.chatgpt.settings.Settings;
 import lombok.Getter;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.RandomStringUtils;
 
 import java.lang.reflect.Field;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 import java.util.TreeMap;
 
@@ -19,14 +19,6 @@
 @Slf4j
 public class FileDiffProcessed {
     private static final int MIN_RANDOM_PLACEHOLDER_VARIABLE_LENGTH = 1;
-    private static final String[] COMMIT_MESSAGE_FILTER_OUT_PREFIXES = {
-            "Parent:",
-            "Author:",
-            "AuthorDate:",
-            "Commit:",
-            "CommitDate:",
-            "Change-Id:"
-    };
 
     private final Configuration config;
     private final boolean isCommitMessage;
@@ -85,7 +77,7 @@
 
     private void filterCommitMessageContent(List<String> fieldValue) {
         fieldValue.removeIf(s ->
-                s.isEmpty() || Arrays.stream(COMMIT_MESSAGE_FILTER_OUT_PREFIXES).anyMatch(s::startsWith));
+                s.isEmpty() || Settings.COMMIT_MESSAGE_FILTER_OUT_PREFIXES.values().stream().anyMatch(s::startsWith));
     }
 
     private void updateCodeEntities(Field diffField, List<String> diffLines) throws IllegalAccessException {
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 a987954..74f0cd3 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
@@ -2,6 +2,7 @@
 
 import com.google.common.annotations.VisibleForTesting;
 import com.google.gerrit.server.account.AccountCache;
+import com.google.gerrit.server.util.ManualRequestContext;
 import com.google.inject.Inject;
 import com.googlesource.gerrit.plugins.chatgpt.config.Configuration;
 import com.googlesource.gerrit.plugins.chatgpt.data.PluginDataHandler;
@@ -13,11 +14,17 @@
 import com.googlesource.gerrit.plugins.chatgpt.mode.stateful.client.api.git.GitRepoFiles;
 import lombok.extern.slf4j.Slf4j;
 
+import java.util.regex.Pattern;
+
+import static com.googlesource.gerrit.plugins.chatgpt.settings.Settings.COMMIT_MESSAGE_FILTER_OUT_PREFIXES;
+
 @Slf4j
 public class GerritClientPatchSetStateful extends GerritClientPatchSet implements IGerritClientPatchSet {
     private final GitRepoFiles gitRepoFiles;
     private final PluginDataHandler pluginDataHandler;
 
+    private GerritChange change;
+
     @VisibleForTesting
     @Inject
     public GerritClientPatchSetStateful(
@@ -30,11 +37,39 @@
         this.pluginDataHandler = pluginDataHandler;
     }
 
-    public String getPatchSet(ChangeSetData changeSetData, GerritChange change) {
+    public String getPatchSet(ChangeSetData changeSetData, GerritChange change) throws Exception {
+        this.change = change;
         ChatGptAssistant chatGptAssistant = new ChatGptAssistant(config, change, gitRepoFiles, pluginDataHandler);
         chatGptAssistant.setupAssistant();
 
-        return "";
+        return getPatchFromGerrit();
+    }
+
+    private String getPatchFromGerrit() throws Exception {
+        try (ManualRequestContext requestContext = config.openRequestContext()) {
+            String gerritPatch = config
+                .getGerritApi()
+                .changes()
+                .id(
+                        change.getProjectName(),
+                        change.getBranchNameKey().shortName(),
+                        change.getChangeKey().get())
+                .current()
+                .patch()
+                .asString();
+            log.debug("Gerrit Patch retrieved: {}", gerritPatch);
+
+            return filterPatch(gerritPatch);
+        }
+    }
+
+    private String filterPatch(String gerritPatch) {
+        // Remove Patch heading up to the Change-Id annotation
+        Pattern CONFIG_ID_HEADING_PATTERN = Pattern.compile(
+                "^.*?" + COMMIT_MESSAGE_FILTER_OUT_PREFIXES.get("CHANGE_ID") + " " + change.getChangeKey().get(),
+                Pattern.DOTALL
+        );
+        return CONFIG_ID_HEADING_PATTERN.matcher(gerritPatch).replaceAll("");
     }
 
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/settings/Settings.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/settings/Settings.java
index 24a6521..b9ecb3a 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/settings/Settings.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/settings/Settings.java
@@ -1,9 +1,20 @@
 package com.googlesource.gerrit.plugins.chatgpt.settings;
 
+import java.util.Map;
+
 public class Settings {
     public static final String GERRIT_PATCH_SET_FILENAME = "/PATCHSET_LEVEL";
     public static final String GERRIT_DEFAULT_MESSAGE_DONE = "Done";
     public static final String GERRIT_AUTOGENERATED_PREFIX = "autogenerated:";
+    public static final Map<String , String> COMMIT_MESSAGE_FILTER_OUT_PREFIXES = Map.of(
+            "PARENT","Parent:",
+            "AUTHOR","Author:",
+            "AUTHOR_DATE", "AuthorDate:",
+            "COMMIT","Commit:",
+            "COMMIT_DATE", "CommitDate:",
+            "CHANGE_ID", "Change-Id:"
+    );
+
     public static final String EMPTY_REVIEW_MESSAGE = "No update to show for this Change Set";
 
     public enum MODES {
