diff --git a/AssignmentChecker/package-lock.json b/AssignmentChecker/package-lock.json
index ecbf96c76d4d91dedd640b14c31a583071f2a1c9..630265524093023cf9e1f08cc79fe433b0057932 100644
--- a/AssignmentChecker/package-lock.json
+++ b/AssignmentChecker/package-lock.json
@@ -743,6 +743,45 @@
                 "node": ">=18.20.0"
             }
         },
+        "node_modules/@gitbeaker/core": {
+            "version": "40.0.3",
+            "resolved": "https://registry.npmjs.org/@gitbeaker/core/-/core-40.0.3.tgz",
+            "integrity": "sha512-MzeY4oCtoa9zmPIkQIdC2KU8cGmHIXwnAi0L6jjjouqjy6kcA4BydZf8W5Xsj27Rw5iiyhfj8YC1/O3CgrzvCQ==",
+            "dependencies": {
+                "@gitbeaker/requester-utils": "^40.0.3",
+                "qs": "^6.11.2",
+                "xcase": "^2.0.1"
+            },
+            "engines": {
+                "node": ">=18.0.0"
+            }
+        },
+        "node_modules/@gitbeaker/requester-utils": {
+            "version": "40.0.3",
+            "resolved": "https://registry.npmjs.org/@gitbeaker/requester-utils/-/requester-utils-40.0.3.tgz",
+            "integrity": "sha512-L8JpuMIsvXTHfu/2wXzkc5QyfQJSWg4XyEPStHq1ig5SAcbxxqbBoe8ed27eUXLah+PcGrPInMK4cCMxhQm41g==",
+            "dependencies": {
+                "picomatch-browser": "^2.2.6",
+                "qs": "^6.11.2",
+                "rate-limiter-flexible": "^4.0.0",
+                "xcase": "^2.0.1"
+            },
+            "engines": {
+                "node": ">=18.0.0"
+            }
+        },
+        "node_modules/@gitbeaker/rest": {
+            "version": "40.0.3",
+            "resolved": "https://registry.npmjs.org/@gitbeaker/rest/-/rest-40.0.3.tgz",
+            "integrity": "sha512-ihaA0GX3yCo4oUWbISkcjFMIw+WxDAC9L+bEYq2irz4wpv/0EpAU/0jKjggPzY4cGWL9VAyPhew77VeACv4YWw==",
+            "dependencies": {
+                "@gitbeaker/core": "^40.0.3",
+                "@gitbeaker/requester-utils": "^40.0.3"
+            },
+            "engines": {
+                "node": ">=18.0.0"
+            }
+        },
         "node_modules/@humanwhocodes/config-array": {
             "version": "0.13.0",
             "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz",
@@ -4650,6 +4689,11 @@
             "integrity": "sha512-2/dGHpDFpeA0+755oUkW+EKyklqLS9lu0go9pDsbhqQjZcxfRyJ6LA4JI0+HAdZ2bemD/oOjUeZQB2lCZqXQfQ==",
             "license": "ISC"
         },
+        "node_modules/rate-limiter-flexible": {
+            "version": "4.0.1",
+            "resolved": "https://registry.npmjs.org/rate-limiter-flexible/-/rate-limiter-flexible-4.0.1.tgz",
+            "integrity": "sha512-2/dGHpDFpeA0+755oUkW+EKyklqLS9lu0go9pDsbhqQjZcxfRyJ6LA4JI0+HAdZ2bemD/oOjUeZQB2lCZqXQfQ=="
+        },
         "node_modules/rc": {
             "version": "1.2.8",
             "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
@@ -4912,6 +4956,22 @@
                 "node": ">=10"
             }
         },
+        "node_modules/set-function-length": {
+            "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.4",
+                "es-errors": "^1.3.0",
+                "function-bind": "^1.1.2",
+                "get-intrinsic": "^1.2.4",
+                "gopd": "^1.0.1",
+                "has-property-descriptors": "^1.0.2"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            }
+        },
         "node_modules/shebang-command": {
             "version": "2.0.0",
             "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
diff --git a/AssignmentChecker/package.json b/AssignmentChecker/package.json
index eb4d674f1b89c0b664a541bc12ec984021cacbd2..deeb1dd3fd6dcbaad598c5a5e7daaa7be41fd657 100644
--- a/AssignmentChecker/package.json
+++ b/AssignmentChecker/package.json
@@ -8,9 +8,9 @@
     "bin"            : {
         "dirmanager": "./dist/app.js"
     },
-    "pkg"            : {
+    "pkg": {
         "scripts": [],
-        "assets" : [
+        "assets": [
             "node_modules/axios/dist/node/axios.cjs",
             "config.env",
             ".env",
diff --git a/AssignmentChecker/src/app.ts b/AssignmentChecker/src/app.ts
index fa0d5ce014b6a1da2c9e011e7b12a419dd1c7c06..a5af9721cd3dbbb4e3f1ad8b1f8e3b8e4fc19aec 100644
--- a/AssignmentChecker/src/app.ts
+++ b/AssignmentChecker/src/app.ts
@@ -40,7 +40,7 @@ import SharedAssignmentHelper        from './shared/helpers/Dojo/SharedAssignmen
                 success ? resolve() : reject();
             });
 
-            assignmentValidator.run();
+            assignmentValidator.run(false, true);
         });
     } catch ( error ) { /* empty */ }
 
diff --git a/AssignmentChecker/src/config/Config.ts b/AssignmentChecker/src/config/Config.ts
index ecca8446741bdbb776593441277440b671a0ccc1..f08e4c039d4f02cfb9e7953fd7642c4bb7f1a59b 100644
--- a/AssignmentChecker/src/config/Config.ts
+++ b/AssignmentChecker/src/config/Config.ts
@@ -13,19 +13,26 @@ class Config {
         project: string; resultsVolume: string; resultsDojo: string; resultsExercise: string;
     };
 
-    public readonly assignment: {
+    public readonly assignment!: {
         name: string; secret: string;
     };
 
-    public readonly dockerhub: {
+    public readonly dockerhub!: {
         repositories: {
             assignmentChecker: string
         }
     };
 
+    public readonly assignment!: {
+        name: string; secret: string;
+    };
+
+        
     constructor() { }
 
     async init() {
+        this.appName = process.env.APP_NAME || '';
+        
         const apiUrl = process.env.API_URL ?? '';
 
         await ClientsSharedConfig.init(apiUrl);
@@ -53,6 +60,11 @@ class Config {
                 assignmentChecker: getEnvVar('DOCKERHUB_ASSIGNMENT_CHECKER_REPOSITORY', '')
             }
         };
+
+        this.assignment = {
+            name  : process.env.DOJO_ASSIGNMENT_NAME || '',
+            secret: process.env.DOJO_ASSIGNMENT_SECRET || ''
+        };
     }
 
     private resetResultsVolume(): void {
diff --git a/Dockerfile_AssignmentChecker b/Dockerfile_AssignmentChecker
index a89d6c511034e1558587bdc4598df9c6517e3948..57c4e3f994265f41394d57835e6ead4682be9882 100644
--- a/Dockerfile_AssignmentChecker
+++ b/Dockerfile_AssignmentChecker
@@ -36,4 +36,6 @@ RUN apk add git
 
 ARG BUILD_WORKDIR
 
-COPY --from=builder ${BUILD_WORKDIR}/bin/app /usr/local/bin/dojo_assignment_checker
\ No newline at end of file
+COPY --from=builder ${BUILD_WORKDIR}/bin/app /usr/local/bin/dojo_assignment_checker
+
+ADD sonar/ /sonar/
diff --git a/sonar/Dockerfile b/sonar/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..cc163bca27eb2fff8d20660d501ccae283facbf3
--- /dev/null
+++ b/sonar/Dockerfile
@@ -0,0 +1,28 @@
+FROM gcc:14
+
+ARG SONAR_HOST_URL=https://isc-sonar.edu.hesge.ch
+
+RUN apt update && apt install -y curl unzip build-essential make g++ clang && apt clean
+
+# Download sonar tools
+RUN mkdir -p /sonar && \
+    curl -sSLo sonar-scanner.zip https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-5.0.1.3006-linux.zip && \
+    unzip -o sonar-scanner.zip -d /sonar && \
+    mv /sonar/sonar-scanner-5.0.1.3006-linux/* /sonar/ && \
+    ln -s /sonar/bin/sonar-scanner /usr/local/bin/sonar-scanner && \
+    curl --insecure -sSLo build-wrapper-linux-x86.zip  "$SONAR_HOST_URL/static/cpp/build-wrapper-linux-x86.zip" && \
+    unzip -o build-wrapper-linux-x86.zip -d /tmp && \
+    mv /tmp/build-wrapper-linux-x86/* /usr/local/bin/ && \
+    rm build-wrapper-linux-x86.zip sonar-scanner.zip
+
+
+COPY ./cacerts /tmp/cacerts
+ENV SONAR_SCANNER_OPTS="-Djavax.net.ssl.trustStore=/tmp/cacerts"
+RUN mkdir -p /usr/src && \
+  useradd -m sonar && \
+  chown sonar:sonar /usr/src && \
+  chmod 744 /tmp/cacerts
+
+USER sonar
+WORKDIR /usr/src
+
diff --git a/sonar/cacerts b/sonar/cacerts
new file mode 100644
index 0000000000000000000000000000000000000000..3259ae13ad7391f25b7f093d12f71fb5da333272
Binary files /dev/null and b/sonar/cacerts differ