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 187d7c2..719cb5e 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/PatchSetReviewer.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/PatchSetReviewer.java
@@ -3,7 +3,6 @@
 import com.google.inject.Inject;
 import com.googlesource.gerrit.plugins.chatgpt.config.Configuration;
 import com.googlesource.gerrit.plugins.chatgpt.data.ChangeSetDataHandler;
-import com.googlesource.gerrit.plugins.chatgpt.mode.ModeClassLoader;
 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.GerritClientReview;
@@ -33,19 +32,20 @@
     private final Configuration config;
     private final GerritClient gerritClient;
     private final ChangeSetData changeSetData;
-
     @Getter
-    private IChatGptClient chatGptClient;
+    private final IChatGptClient chatGptClient;
+
     private GerritCommentRange gerritCommentRange;
     private List<ReviewBatch> reviewBatches;
     private List<GerritComment> commentProperties;
     private List<Integer> reviewScores;
 
     @Inject
-    PatchSetReviewer(GerritClient gerritClient, Configuration config, ChangeSetData changeSetData) {
+    PatchSetReviewer(GerritClient gerritClient, Configuration config, ChangeSetData changeSetData, IChatGptClient chatGptClient) {
         this.config = config;
         this.gerritClient = gerritClient;
         this.changeSetData = changeSetData;
+        this.chatGptClient = chatGptClient;
     }
 
     public void review(GerritChange change) throws Exception {
@@ -131,8 +131,6 @@
             log.warn("Patch set too large. Skipping review. changeId: {}", change.getFullChangeId());
             return String.format(SPLIT_REVIEW_MSG, config.getMaxReviewLines());
         }
-        chatGptClient = (IChatGptClient) ModeClassLoader.getInstance(
-                "client.api.chatgpt.ChatGptClient", config);
         registerDynamicClasses(ChatGptClientStateless.class);
 
         return chatGptClient.ask(config, changeSetData, change, patchSet);
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 9baa8ef..0d76a17 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
@@ -6,6 +6,12 @@
 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 com.googlesource.gerrit.plugins.chatgpt.mode.interfaces.client.api.chatgpt.IChatGptClient;
+import com.googlesource.gerrit.plugins.chatgpt.mode.interfaces.client.api.gerrit.IGerritClientPatchSet;
+import com.googlesource.gerrit.plugins.chatgpt.mode.stateful.client.api.chatgpt.ChatGptClientStateful;
+import com.googlesource.gerrit.plugins.chatgpt.mode.stateful.client.api.gerrit.GerritClientPatchSetStateful;
+import com.googlesource.gerrit.plugins.chatgpt.mode.stateless.client.api.chatgpt.ChatGptClientStateless;
+import com.googlesource.gerrit.plugins.chatgpt.mode.stateless.client.api.gerrit.GerritClientPatchSetStateless;
 
 import static com.google.inject.Scopes.SINGLETON;
 
@@ -20,8 +26,25 @@
 
     @Override
     protected void configure() {
+        bind(IChatGptClient.class).to(getChatGptMode());
+        bind(IGerritClientPatchSet.class).to(getClientPatchSet());
+
         bind(Configuration.class).toInstance(config);
         bind(GerritChange.class).toInstance(new GerritChange(event));
         bind(ChangeSetData.class).toProvider(ChangeSetDataProvider.class).in(SINGLETON);
     }
+
+    private Class<? extends IChatGptClient> getChatGptMode() {
+        return switch (config.getGptMode()){
+            case stateful -> ChatGptClientStateful.class;
+            case stateless -> ChatGptClientStateless.class;
+        };
+    }
+
+    private Class<? extends IGerritClientPatchSet> getClientPatchSet() {
+        return switch (config.getGptMode()){
+            case stateful -> GerritClientPatchSetStateful.class;
+            case stateless -> GerritClientPatchSetStateless.class;
+        };
+    }
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/ModeClassLoader.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/ModeClassLoader.java
deleted file mode 100644
index 4a67dfe..0000000
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/ModeClassLoader.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package com.googlesource.gerrit.plugins.chatgpt.mode;
-
-import com.googlesource.gerrit.plugins.chatgpt.config.Configuration;
-import com.googlesource.gerrit.plugins.chatgpt.utils.CustomClassLoader;
-import lombok.extern.slf4j.Slf4j;
-
-import java.util.ArrayList;
-
-import static com.googlesource.gerrit.plugins.chatgpt.utils.ClassUtils.createNewInstanceWithArgs;
-import static com.googlesource.gerrit.plugins.chatgpt.utils.ClassUtils.joinUsingDotNotation;
-import static com.googlesource.gerrit.plugins.chatgpt.utils.StringUtils.capitalizeFirstLetter;
-
-@Slf4j
-public class ModeClassLoader {
-    private static final String BASE_NAME = "com.googlesource.gerrit.plugins.chatgpt.mode";
-
-    public static Object getInstance(String className, Configuration config, Object... constructorArgs) {
-        CustomClassLoader customClassLoader = new CustomClassLoader();
-        String fullClassName = getFullClassName(className, config);
-        log.debug("Attempt to load Class '{}'", fullClassName);
-        try {
-            Class<?> DynamicallyLoadedClass = Class.forName(fullClassName, true, customClassLoader);
-            log.debug("Class '{}' loaded", fullClassName);
-            return createNewInstanceWithArgs(DynamicallyLoadedClass, constructorArgs);
-        } catch (ClassNotFoundException e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    private static String getFullClassName(String className, Configuration config) {
-        String mode = config.getGptMode().name();
-        return joinUsingDotNotation(new ArrayList<>() {{
-            add(BASE_NAME);
-            add(mode);
-            add(className + capitalizeFirstLetter(mode));
-        }});
-    }
-
-}
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 0da1a4e..ff744d1 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
@@ -2,7 +2,6 @@
 
 import com.google.inject.Inject;
 import com.googlesource.gerrit.plugins.chatgpt.config.Configuration;
-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;
@@ -24,10 +23,9 @@
     private final GerritClientComments gerritClientComments;
 
     @Inject
-    public GerritClientFacade(Configuration config, ChangeSetData changeSetData) {
+    public GerritClientFacade(Configuration config, ChangeSetData changeSetData, IGerritClientPatchSet gerritClientPatchSet) {
         gerritClientDetail = new GerritClientDetail(config, changeSetData);
-        gerritClientPatchSet = (IGerritClientPatchSet) ModeClassLoader.getInstance(
-                "client.api.gerrit.GerritClientPatchSet", config, config);
+        this.gerritClientPatchSet = gerritClientPatchSet;
         this.changeSetData = changeSetData;
         registerDynamicClasses(GerritClientPatchSetStateless.class, GerritClientPatchSetStateful.class);
         gerritClientComments = new GerritClientComments(config, changeSetData);
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 e563337..0b62eb0 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,5 +1,6 @@
 package com.googlesource.gerrit.plugins.chatgpt.mode.stateful.client.api.gerrit;
 
+import com.google.inject.Inject;
 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;
@@ -11,6 +12,7 @@
 @Slf4j
 public class GerritClientPatchSetStateful extends GerritClientPatchSet implements IGerritClientPatchSet {
 
+    @Inject
     public GerritClientPatchSetStateful(Configuration config) {
         super(config);
     }
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 a843172..531d872 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
@@ -2,6 +2,7 @@
 
 import com.google.gson.JsonElement;
 import com.google.gson.JsonObject;
+import com.google.inject.Inject;
 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.api.gerrit.GerritClientPatchSet;
@@ -26,6 +27,7 @@
     private final List<String> diffs;
     private boolean isCommitMessage;
 
+    @Inject
     public GerritClientPatchSetStateless(Configuration config) {
         super(config);
         diffs = new ArrayList<>();
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 c63ec7e..4966a2a 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/chatgpt/ChatGptReviewTestBase.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/chatgpt/ChatGptReviewTestBase.java
@@ -33,7 +33,13 @@
 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.interfaces.client.api.chatgpt.IChatGptClient;
+import com.googlesource.gerrit.plugins.chatgpt.mode.interfaces.client.api.gerrit.IGerritClientPatchSet;
+import com.googlesource.gerrit.plugins.chatgpt.mode.stateful.client.api.chatgpt.ChatGptClientStateful;
+import com.googlesource.gerrit.plugins.chatgpt.mode.stateful.client.api.gerrit.GerritClientPatchSetStateful;
 import com.googlesource.gerrit.plugins.chatgpt.mode.stateful.client.api.git.GitRepoFiles;
+import com.googlesource.gerrit.plugins.chatgpt.mode.stateless.client.api.chatgpt.ChatGptClientStateless;
+import com.googlesource.gerrit.plugins.chatgpt.mode.stateless.client.api.gerrit.GerritClientPatchSetStateless;
 import lombok.NonNull;
 import org.apache.http.entity.ContentType;
 import org.junit.Assert;
@@ -241,10 +247,10 @@
         prompts = gptRequestBody.get("messages").getAsJsonArray();
     }
 
-    private void initTest () throws NoSuchProjectException {
+    private void initTest() {
         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);
+        gerritClient = new GerritClient(new GerritClientFacade(config, changeSetData, getGerritClientPatchSet()));
+        patchSetReviewer = new PatchSetReviewer(gerritClient, config, changeSetData, getChatGptClient());
         mockConfigCreator = mock(ConfigCreator.class);
     }
 
@@ -299,4 +305,18 @@
 
         return accountCache;
     }
+
+    private IChatGptClient getChatGptClient() {
+        return switch (config.getGptMode()) {
+            case stateful -> new ChatGptClientStateful();
+            case stateless -> new ChatGptClientStateless();
+        };
+    }
+
+    private IGerritClientPatchSet getGerritClientPatchSet() {
+        return switch (config.getGptMode()) {
+            case stateful -> new GerritClientPatchSetStateful(config);
+            case stateless -> new GerritClientPatchSetStateless(config);
+        };
+    }
 }
