diff --git a/ExerciseChecker/.idea/.gitignore b/ExerciseChecker/.idea/.gitignore
index 13566b81b018ad684f3a35fee301741b2734c8f4..a9d7db9c0a81b2db47ca92e4e180b30090b27632 100644
--- a/ExerciseChecker/.idea/.gitignore
+++ b/ExerciseChecker/.idea/.gitignore
@@ -6,3 +6,5 @@
 # Datasource local storage ignored files
 /dataSources/
 /dataSources.local.xml
+# GitHub Copilot persisted chat sessions
+/copilot/chatSessions
diff --git a/ExerciseChecker/.idea/jetbrainsConfiguration b/ExerciseChecker/.idea/jetbrainsConfiguration
index ffc5d65f9f0f0e825688177425e526131aa84631..f572bf3afa0a98675247df85c599b5d1e5a62d0d 160000
--- a/ExerciseChecker/.idea/jetbrainsConfiguration
+++ b/ExerciseChecker/.idea/jetbrainsConfiguration
@@ -1 +1 @@
-Subproject commit ffc5d65f9f0f0e825688177425e526131aa84631
+Subproject commit f572bf3afa0a98675247df85c599b5d1e5a62d0d
diff --git a/ExerciseChecker/package-lock.json b/ExerciseChecker/package-lock.json
index 0299647e7605c1ca0e88aaec392b5c994017463b..6287b2da07a12860e6ed20b9eaedfc1f65f0f0f2 100644
--- a/ExerciseChecker/package-lock.json
+++ b/ExerciseChecker/package-lock.json
@@ -9,7 +9,7 @@
             "version": "3.6.0",
             "license": "AGPLv3",
             "dependencies": {
-                "@gitbeaker/rest": "^39.34.3",
+                "@gitbeaker/rest": "^40.0.1",
                 "axios": "^1.6.5",
                 "boxen": "^5.1.2",
                 "chalk": "^4.1.2",
@@ -256,11 +256,11 @@
             }
         },
         "node_modules/@gitbeaker/core": {
-            "version": "39.34.3",
-            "resolved": "https://registry.npmjs.org/@gitbeaker/core/-/core-39.34.3.tgz",
-            "integrity": "sha512-/3qBXme2MjO38QU2F/MYGon9a4wHKrgtwNzdHHdjpbYJ2/wOGNgbEWSZcibcFkiWVgAjbPXdYqC5sY8hcwGO1w==",
+            "version": "40.0.1",
+            "resolved": "https://registry.npmjs.org/@gitbeaker/core/-/core-40.0.1.tgz",
+            "integrity": "sha512-Zh2eVUgy2kYVnp7Db4gWoFqFbjgsnm2FvBEERbH3UM3cOA/iMqM+tw/of+Qk4yO+gv6tGZ9f4nF7+vK0tQFmDA==",
             "dependencies": {
-                "@gitbeaker/requester-utils": "^39.34.3",
+                "@gitbeaker/requester-utils": "^40.0.1",
                 "qs": "^6.11.2",
                 "xcase": "^2.0.1"
             },
@@ -269,9 +269,9 @@
             }
         },
         "node_modules/@gitbeaker/requester-utils": {
-            "version": "39.34.3",
-            "resolved": "https://registry.npmjs.org/@gitbeaker/requester-utils/-/requester-utils-39.34.3.tgz",
-            "integrity": "sha512-nMnTkTo4UixHPwPYsYIjp8UdKrmSw3TjvRESexliAeNNq4/LVeyVUyRqBUa1ZI8MXt1nPPnPX3wh8s7rqlm7uA==",
+            "version": "40.0.1",
+            "resolved": "https://registry.npmjs.org/@gitbeaker/requester-utils/-/requester-utils-40.0.1.tgz",
+            "integrity": "sha512-cn6fltKuQ3TbthoMTg+JsKQfozqGcRcz1jT9Nqzr4gpHWgjdQ/nr5JpjwzKABQNVL2JH3UJWr6Eji60CFZDZ6Q==",
             "dependencies": {
                 "picomatch-browser": "^2.2.6",
                 "qs": "^6.11.2",
@@ -283,12 +283,12 @@
             }
         },
         "node_modules/@gitbeaker/rest": {
-            "version": "39.34.3",
-            "resolved": "https://registry.npmjs.org/@gitbeaker/rest/-/rest-39.34.3.tgz",
-            "integrity": "sha512-SuceThS6WhJtqNNcKmW8j0yUU7aXA4k5a29OWcd6bn7peQ3MXlIpbfvLLRnmuUaYUuxHLnUzZhAfuxaNf4DVtQ==",
+            "version": "40.0.1",
+            "resolved": "https://registry.npmjs.org/@gitbeaker/rest/-/rest-40.0.1.tgz",
+            "integrity": "sha512-JEd9WNuzgur7gLiJPMWPYKaWe5uX1ic8CGKR1fMtBityFZ2xyZkTZ+LG0nqWTV1MyiowYnJ1swTh8Yff+kLsKA==",
             "dependencies": {
-                "@gitbeaker/core": "^39.34.3",
-                "@gitbeaker/requester-utils": "^39.34.3"
+                "@gitbeaker/core": "^40.0.1",
+                "@gitbeaker/requester-utils": "^40.0.1"
             },
             "engines": {
                 "node": ">=18.0.0"
@@ -3940,11 +3940,11 @@
             }
         },
         "node_modules/qs": {
-            "version": "6.11.2",
-            "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz",
-            "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==",
+            "version": "6.12.0",
+            "resolved": "https://registry.npmjs.org/qs/-/qs-6.12.0.tgz",
+            "integrity": "sha512-trVZiI6RMOkO476zLGaBIzszOdFPnCCXHPG9kn0yuS1uz6xdVxPfZdB3vUig9pxPFDM9BRAgz/YUIVQ1/vuiUg==",
             "dependencies": {
-                "side-channel": "^1.0.4"
+                "side-channel": "^1.0.6"
             },
             "engines": {
                 "node": ">=0.6"
@@ -4205,16 +4205,16 @@
             }
         },
         "node_modules/set-function-length": {
-            "version": "1.2.1",
-            "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz",
-            "integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==",
+            "version": "1.2.2",
+            "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
+            "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
             "dependencies": {
-                "define-data-property": "^1.1.2",
+                "define-data-property": "^1.1.4",
                 "es-errors": "^1.3.0",
                 "function-bind": "^1.1.2",
-                "get-intrinsic": "^1.2.3",
+                "get-intrinsic": "^1.2.4",
                 "gopd": "^1.0.1",
-                "has-property-descriptors": "^1.0.1"
+                "has-property-descriptors": "^1.0.2"
             },
             "engines": {
                 "node": ">= 0.4"
diff --git a/ExerciseChecker/package.json b/ExerciseChecker/package.json
index 233dc30319f284b19e01ff49c494932c21a1b6c4..50acfa34b8aef04f608f9ac05921f53c5fdce558 100644
--- a/ExerciseChecker/package.json
+++ b/ExerciseChecker/package.json
@@ -29,7 +29,7 @@
         "test"        : "echo \"Error: no test specified\" && exit 1"
     },
     "dependencies"   : {
-        "@gitbeaker/rest"     : "^39.34.3",
+        "@gitbeaker/rest"     : "^40.0.1",
         "axios"               : "^1.6.5",
         "boxen"               : "^5.1.2",
         "chalk"               : "^4.1.2",
diff --git a/ExerciseChecker/src/app.ts b/ExerciseChecker/src/app.ts
index fd63ba82c031bcfb5f0e6ecdc3964f20e38e6add..4ffeb034bcdd412ce20b80677f15fe5c5d93f39d 100644
--- a/ExerciseChecker/src/app.ts
+++ b/ExerciseChecker/src/app.ts
@@ -50,9 +50,11 @@ async function downloadImmutablesFiles() {
     }
 
     exerciseAssignment.immutable.forEach(immutableFile => {
-        const filePath = path.join(Config.folders.project, immutableFile.file_path);
-        fs.mkdirSync(path.dirname(filePath), { recursive: true });
-        fs.writeFileSync(filePath, immutableFile.content, { encoding: 'base64' });
+        if ( typeof immutableFile.content === 'string' ) {
+            const filePath = path.join(Config.folders.project, immutableFile.file_path);
+            fs.mkdirSync(path.dirname(filePath), { recursive: true });
+            fs.writeFileSync(filePath, immutableFile.content, { encoding: 'base64' });
+        }
     });
 
     haveResultsVolume = exerciseAssignment.assignmentFile.result.volume !== undefined;
diff --git a/ExerciseChecker/src/managers/GitlabManager.ts b/ExerciseChecker/src/managers/GitlabManager.ts
new file mode 100644
index 0000000000000000000000000000000000000000..3d1c0503d69366e46ceda7d60f383748c7229c2f
--- /dev/null
+++ b/ExerciseChecker/src/managers/GitlabManager.ts
@@ -0,0 +1,13 @@
+import SharedGitlabManager from '../shared/managers/SharedGitlabManager';
+
+// NOT USED
+// File present only for prevent errors from shared submodules
+
+class GitlabManager extends SharedGitlabManager {
+    constructor() {
+        super('');
+    }
+}
+
+
+export default new GitlabManager();
\ No newline at end of file
diff --git a/ExerciseChecker/src/shared b/ExerciseChecker/src/shared
index 75fedb26c47bb6f707725307a79a45a13e62496d..6e78095b3fe73f2c2987de1a3d3b55511335a2bf 160000
--- a/ExerciseChecker/src/shared
+++ b/ExerciseChecker/src/shared
@@ -1 +1 @@
-Subproject commit 75fedb26c47bb6f707725307a79a45a13e62496d
+Subproject commit 6e78095b3fe73f2c2987de1a3d3b55511335a2bf
diff --git a/ExerciseChecker/src/sharedByClients b/ExerciseChecker/src/sharedByClients
index c4efbcfb2a50e7108e101fb673e84f87fad8e246..8ae82abcc7f11e595060b1a48f340290e7b2ebac 160000
--- a/ExerciseChecker/src/sharedByClients
+++ b/ExerciseChecker/src/sharedByClients
@@ -1 +1 @@
-Subproject commit c4efbcfb2a50e7108e101fb673e84f87fad8e246
+Subproject commit 8ae82abcc7f11e595060b1a48f340290e7b2ebac