diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/data/PluginDataHandler.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/data/PluginDataHandler.java
index 55585d2..bfa16e8 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/data/PluginDataHandler.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/data/PluginDataHandler.java
@@ -1,12 +1,14 @@
 package com.googlesource.gerrit.plugins.chatgpt.data;
 
 import com.google.inject.Inject;
+import com.google.inject.Singleton;
 
 import java.io.IOException;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.util.Properties;
 
+@Singleton
 public class PluginDataHandler {
     private final Path configFile;
     private final Properties configProperties = new Properties();
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/data/ProjectDataHandler.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/data/ProjectDataHandler.java
deleted file mode 100644
index 9df9944..0000000
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/data/ProjectDataHandler.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package com.googlesource.gerrit.plugins.chatgpt.data;
-
-import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritChange;
-import lombok.extern.slf4j.Slf4j;
-
-@Slf4j
-public class ProjectDataHandler {
-    private static PluginDataHandler pluginDataHandler;
-
-    public static void createNewInstance(PluginDataHandler loadedPluginDataHandler) {
-        pluginDataHandler = loadedPluginDataHandler;
-    }
-
-    public static synchronized void setValue(GerritChange change, String key, String value) {
-        pluginDataHandler.setValue(getProjectKey(change, key), value);
-    }
-
-    public static String getValue(GerritChange change, String key) {
-        return pluginDataHandler.getValue(getProjectKey(change, key));
-    }
-
-    public static synchronized void removeValue(GerritChange change, String key) {
-        pluginDataHandler.removeValue(getProjectKey(change, key));
-    }
-
-    private static String getProjectKey(GerritChange change, String key) {
-        return change.getProjectName() + "." + key;
-    }
-
-}
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 ea6b1fe..b1877bf 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,12 +8,9 @@
 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.PluginDataHandler;
-import com.googlesource.gerrit.plugins.chatgpt.data.ProjectDataHandler;
 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.model.data.ChangeSetData;
-import com.googlesource.gerrit.plugins.chatgpt.mode.stateful.client.api.git.GitRepoFiles;
 import lombok.extern.slf4j.Slf4j;
 
 import java.util.List;
@@ -39,7 +36,6 @@
     private final ChangeSetData changeSetData;
     private final GerritChange change;
     private final PatchSetReviewer reviewer;
-    private final PluginDataHandler pluginDataHandler;
 
     @Inject
     EventHandlerTask(
@@ -47,15 +43,13 @@
             ChangeSetData changeSetData,
             GerritChange change,
             PatchSetReviewer reviewer,
-            GerritClient gerritClient,
-            PluginDataHandler pluginDataHandler
+            GerritClient gerritClient
     ) {
         this.changeSetData = changeSetData;
         this.change = change;
         this.reviewer = reviewer;
         this.gerritClient = gerritClient;
         this.config = config;
-        this.pluginDataHandler = pluginDataHandler;
     }
 
     @Override
@@ -65,8 +59,6 @@
 
     @VisibleForTesting
     public Result execute() {
-        ProjectDataHandler.createNewInstance(pluginDataHandler);
-
         if (!preProcessEvent(change, changeSetData)) {
             return Result.NOT_SUPPORTED;
         }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/api/chatgpt/ChatGptAssistant.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/api/chatgpt/ChatGptAssistant.java
index 4b4a86d..7a8071a 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/api/chatgpt/ChatGptAssistant.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/api/chatgpt/ChatGptAssistant.java
@@ -1,7 +1,7 @@
 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.ProjectDataHandler;
+import com.googlesource.gerrit.plugins.chatgpt.data.PluginDataHandler;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.ClientBase;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.chatgpt.ChatGptTools;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritChange;
@@ -33,20 +33,22 @@
     private final HttpClient httpClient = new HttpClient();
     private final GerritChange change;
     private final GitRepoFiles gitRepoFiles;
+    private final PluginDataHandler pluginDataHandler;
 
-    public ChatGptAssistant(Configuration config, GerritChange change, GitRepoFiles gitRepoFiles) {
+    public ChatGptAssistant(Configuration config, GerritChange change, GitRepoFiles gitRepoFiles, PluginDataHandler pluginDataHandler) {
         super(config);
         this.change = change;
         this.gitRepoFiles = gitRepoFiles;
+        this.pluginDataHandler = pluginDataHandler;
     }
 
     public void setupAssistant() {
-        String assistantId = ProjectDataHandler.getValue(change, KEY_ASSISTANT_ID);
+        String assistantId = pluginDataHandler.getValue(KEY_ASSISTANT_ID);
         if (assistantId == null) {
             String fileId = uploadRepoFiles();
-            ProjectDataHandler.setValue(change, KEY_FILE_ID, fileId);
+            pluginDataHandler.setValue(KEY_FILE_ID, fileId);
             assistantId = createAssistant(fileId);
-            ProjectDataHandler.setValue(change, KEY_ASSISTANT_ID, assistantId);
+            pluginDataHandler.setValue(KEY_ASSISTANT_ID, assistantId);
             log.info("Project assistant created with ID: {}", assistantId);
         }
         else {
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 22107e1..257cddf 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.inject.Inject;
 import com.googlesource.gerrit.plugins.chatgpt.config.Configuration;
+import com.googlesource.gerrit.plugins.chatgpt.data.PluginDataHandler;
 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;
@@ -13,15 +14,17 @@
 @Slf4j
 public class GerritClientPatchSetStateful extends GerritClientPatchSet implements IGerritClientPatchSet {
     private final GitRepoFiles gitRepoFiles;
+    private final PluginDataHandler pluginDataHandler;
 
     @Inject
-    public GerritClientPatchSetStateful(Configuration config, GitRepoFiles gitRepoFiles) {
+    public GerritClientPatchSetStateful(Configuration config, GitRepoFiles gitRepoFiles, PluginDataHandler pluginDataHandler) {
         super(config);
         this.gitRepoFiles = gitRepoFiles;
+        this.pluginDataHandler = pluginDataHandler;
     }
 
     public String getPatchSet(ChangeSetData changeSetData, GerritChange change) {
-        ChatGptAssistant chatGptAssistant = new ChatGptAssistant(config, change, gitRepoFiles);
+        ChatGptAssistant chatGptAssistant = new ChatGptAssistant(config, change, gitRepoFiles, pluginDataHandler);
         chatGptAssistant.setupAssistant();
 
         return "";
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 432e7f9..852531d 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/chatgpt/ChatGptReviewStatefulTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/chatgpt/ChatGptReviewStatefulTest.java
@@ -7,18 +7,12 @@
 import com.googlesource.gerrit.plugins.chatgpt.settings.Settings.MODES;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.http.entity.ContentType;
-import org.junit.Assert;
-import org.junit.Test;
 import org.mockito.Mockito;
 import org.mockito.MockitoAnnotations;
 
 import java.net.URI;
-import java.util.HashMap;
-import java.util.Map;
 
-import static com.googlesource.gerrit.plugins.chatgpt.mode.stateful.client.api.chatgpt.ChatGptAssistant.*;
 import static java.net.HttpURLConnection.HTTP_OK;
-import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.*;
 
 @Slf4j
@@ -71,30 +65,4 @@
         super.initComparisonContent();
     }
 
-    private void setupAssistantCreatedTest(Map<String, String> mockedPluginDataHandler) {
-        // Mock the behavior of the Git Repository Manager
-        String repoJson = readTestFile("__files/gitProjectFiles.json");
-        when(gitRepoFiles.getGitRepoFiles(any())).thenReturn(repoJson);
-
-        // Mock the behavior of the `setValue` method of the Plugin Data Handler
-        doAnswer(invocation -> {
-            String key = invocation.getArgument(0);
-            String value = invocation.getArgument(1);
-            mockedPluginDataHandler.put(key, value);
-            return null;  // since setValue is void
-        }).when(pluginDataHandler).setValue(anyString(), anyString());
-    }
-
-    @Test
-    public void assistantCreated() {
-        Map<String, String> mockedPluginDataHandler = new HashMap<>();
-        setupAssistantCreatedTest(mockedPluginDataHandler);
-        handleEventBasedOnType(false);
-
-        String projectFileIdKey = PROJECT_NAME + "." + KEY_FILE_ID;
-        Assert.assertEquals(mockedPluginDataHandler.get(projectFileIdKey), CHAT_GPT_FILE_ID);
-        String projectAssistantKey = PROJECT_NAME + "." + KEY_ASSISTANT_ID;
-        Assert.assertEquals(mockedPluginDataHandler.get(projectAssistantKey), CHAT_GPT_ASSISTANT_ID);
-    }
-
 }
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 305ff60..a8af5a5 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/chatgpt/ChatGptReviewTestBase.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/chatgpt/ChatGptReviewTestBase.java
@@ -315,7 +315,7 @@
 
     private IGerritClientPatchSet getGerritClientPatchSet() {
         return switch (config.getGptMode()) {
-            case stateful -> new GerritClientPatchSetStateful(config, gitRepoFiles);
+            case stateful -> new GerritClientPatchSetStateful(config, gitRepoFiles, pluginDataHandler);
             case stateless -> new GerritClientPatchSetStateless(config);
         };
     }
