diff --git a/deadlock-plugins/deadlock-extension/src/core/api.service.ts b/deadlock-plugins/deadlock-extension/src/core/api.service.ts
index 3e1aa50c78a641ceb0e02c9f5ac75ff34929fb62..116dfceb286b9e29019acedd9a29b01ea2ba1745 100644
--- a/deadlock-plugins/deadlock-extension/src/core/api.service.ts
+++ b/deadlock-plugins/deadlock-extension/src/core/api.service.ts
@@ -7,7 +7,7 @@ import Controller from './controller';
 import ExtensionStore from './extensionStore';
 import KeycloakOAuth2DeviceFlowConnection from './keycloakOAuth2DeviceFlowConnection';
 import { MissionUser } from './mission/model/missionUser';
-import { User } from './mission/model/userChallenge';
+import { User } from './mission/model/userMission';
 
 export default class ApiService {
   private axiosInstance: AxiosInstance;
diff --git a/deadlock-plugins/deadlock-extension/src/core/controller.ts b/deadlock-plugins/deadlock-extension/src/core/controller.ts
index 5fc0a303fec3b680370761eb36a3fb48c8a37ce2..eb8f402acebc0342cd9f967ec0ac272559cd5901 100644
--- a/deadlock-plugins/deadlock-extension/src/core/controller.ts
+++ b/deadlock-plugins/deadlock-extension/src/core/controller.ts
@@ -13,7 +13,7 @@ import { createSshKeyFiles } from './sshKeyManager';
 import { emptyDirectories, removeFilesOrDirectories } from '../recorder/utils/workdir';
 import { missionWorkdir, userSshKeyFolderPath } from './config';
 import { hasStatusNumber } from './utils/typeguards';
-import { User } from './mission/model/userChallenge';
+import { User } from './mission/model/userMission';
 import { existsSync, mkdirSync, writeFileSync } from 'fs';
 import { extract } from 'tar';
 import { parse } from 'yaml';
diff --git a/deadlock-plugins/deadlock-extension/src/core/gitMission.ts b/deadlock-plugins/deadlock-extension/src/core/gitMission.ts
index 91bc7b5d9a8a3365d4bfdc037a428bee3c91d1f7..d80bf52184346a68dd050c30d796080ba4be17ea 100644
--- a/deadlock-plugins/deadlock-extension/src/core/gitMission.ts
+++ b/deadlock-plugins/deadlock-extension/src/core/gitMission.ts
@@ -41,7 +41,7 @@ export default class GitMission {
     try {
       await exec(`ssh-add /tmp/.ssh/id_rsa`);
       await exec(
-        `eval "$(ssh-agent -s)" && ssh-keyscan -p ${this.userConfig.getGiteaSshPort()} -H ${this.userConfig.getGiteaHost()} >> ~/.ssh/known_hosts`,
+        `eval "$(ssh-agent -s)" && ssh-keyscan -p ${this.userConfig.userConfigJson.giteaSshPort} -H ${this.userConfig.userConfigJson.giteaHost} >> ~/.ssh/known_hosts`,
       );
     } catch (err) {
       this.log(err);
@@ -58,7 +58,7 @@ export default class GitMission {
   }
 
   get author() {
-    return this.userConfig.getUsername();
+    return this.userConfig.userConfigJson.username;
   }
 
   async init() {
@@ -76,10 +76,10 @@ export default class GitMission {
       const remotePath = this.getRemotePath();
 
       await this.git.addRemote(defaultRemote, remotePath);
-      await this.git.addConfig('user.email', this.userConfig.getCurrentUserDetails().email, false, 'local');
+      await this.git.addConfig('user.email', this.userConfig.userConfigJson.email, false, 'local');
       await this.git.addConfig(
         'user.name',
-        `${this.userConfig.getCurrentUserDetails().lastName} ${this.userConfig.getCurrentUserDetails().firstName}`,
+        `${this.userConfig.userConfigJson.currentUserDetails.lastName} ${this.userConfig.userConfigJson.currentUserDetails.firstName}`,
         false,
         'local',
       );
@@ -92,7 +92,7 @@ export default class GitMission {
   }
 
   private getRemotePath() {
-    return `ssh://git@${this.userConfig.getGiteaHost()}:${this.userConfig.getGiteaSshPort()}/${this.userConfig.getRemoteGitUsername()}/${this.userConfig.getMissionId()}`;
+    return `ssh://git@${this.userConfig.userConfigJson.giteaHost}:${this.userConfig.userConfigJson.giteaSshPort}/${this.userConfig.userConfigJson.remoteGitUsername}/${this.userConfig.userConfigJson.missionId}`;
   }
 
   async readRemote() {
diff --git a/deadlock-plugins/deadlock-extension/src/core/mission/missionDevContainer.ts b/deadlock-plugins/deadlock-extension/src/core/mission/missionDevContainer.ts
index 4d155c96fe87454f7a8a8d1fbb50cf01ddfe6e34..f1959c9404fac4d6dfef6b2df200301c0f82d615 100644
--- a/deadlock-plugins/deadlock-extension/src/core/mission/missionDevContainer.ts
+++ b/deadlock-plugins/deadlock-extension/src/core/mission/missionDevContainer.ts
@@ -7,7 +7,7 @@ import { existsSync, copyFileSync } from 'fs';
 import { join } from 'path';
 
 import assert = require('assert');
-import UserChallenge, { User } from './model/userChallenge';
+import UserMission, { User } from './model/userMission';
 import { REGISTRY_MISSION_URL } from '../../config';
 import { getReviewedStudentWorkdirPath } from '../utils/mission.utils';
 
@@ -94,7 +94,7 @@ export class MissionDevContainer {
     return writeFile(
       `${this.dirs.config}/user-challenge.json`,
       (() => {
-        const userChallengeJson: UserChallenge = {
+        const userChallengeJson: UserMission = {
           giteaHost: this.giteaProperties.sshHost,
           giteaSshPort: this.giteaProperties.sshPort,
           username: this.user.id.split('-').join(''),
diff --git a/deadlock-plugins/deadlock-extension/src/core/mission/model/userChallenge.ts b/deadlock-plugins/deadlock-extension/src/core/mission/model/userMission.ts
similarity index 76%
rename from deadlock-plugins/deadlock-extension/src/core/mission/model/userChallenge.ts
rename to deadlock-plugins/deadlock-extension/src/core/mission/model/userMission.ts
index cd1a92fc5e213b715bcb03c3b3530a1ccc243d6f..7917a776dbddf2cf20eaccb11a1f01bd281fe5dc 100644
--- a/deadlock-plugins/deadlock-extension/src/core/mission/model/userChallenge.ts
+++ b/deadlock-plugins/deadlock-extension/src/core/mission/model/userMission.ts
@@ -1,4 +1,4 @@
-interface UserChallenge {
+interface UserMission {
   giteaHost: string;
   giteaSshPort: number;
   username: string;
@@ -11,7 +11,7 @@ interface UserChallenge {
   remoteUserDetails: UserDetails;
 }
 
-export default UserChallenge;
+export default UserMission;
 
 export interface UserDetails {
   id: string;
@@ -30,3 +30,7 @@ export interface User {
   id: string;
   details: UserDetails;
 }
+
+export function isReviewingStudent(userMission: UserMission) {
+  return userMission.currentUserId !== userMission.remoteUserDetails.id;
+}
diff --git a/deadlock-plugins/deadlock-extension/src/core/userConfig.ts b/deadlock-plugins/deadlock-extension/src/core/userConfig.ts
index 39a5f8b20dcf87cea9810b8605b9f9d4ea35f29a..30f705760515891e7b104daf7ae1ae4290ab2701 100644
--- a/deadlock-plugins/deadlock-extension/src/core/userConfig.ts
+++ b/deadlock-plugins/deadlock-extension/src/core/userConfig.ts
@@ -17,69 +17,22 @@
 import { Uri, workspace } from 'vscode';
 import { recorderError as error } from '../recorder/utils/log';
 import { USER_CHALLENGE_PATH } from './config';
-import { UserDetails } from './mission/model/userChallenge';
+import UserMission from './mission/model/userMission';
 
 export default class UserConfig {
-  private userConfigJson: any | undefined;
+  private _userConfigJson?: UserMission;
 
-  getPaths(): Map<number, string> {
-    return this.userConfigJson?.paths;
-  }
-
-  getHost(): string {
-    return this.userConfigJson?.host;
-  }
-  getGiteaHost(): string {
-    return this.userConfigJson?.giteaHost;
-  }
-
-  getGiteaSshPort(): number {
-    return this.userConfigJson?.giteaSshPort;
-  }
-
-  getUsername(): string {
-    return this.userConfigJson?.username;
-  }
-
-  getRemoteGitUsername(): string {
-    return this.userConfigJson?.remoteGitUsername;
-  }
-
-  getMissionId(): string {
-    return this.userConfigJson?.missionId;
-  }
-
-  getEmail(): string {
-    return this.userConfigJson?.email;
-  }
-
-  isProfessor(): boolean {
-    return this.userConfigJson?.professor;
-  }
-
-  getCurrentUserDetails(): UserDetails {
-    return this.userConfigJson?.currentUserDetails;
-  }
-
-  getRemoteUserDetails(): UserDetails {
-    return this.userConfigJson?.remoteUserDetails;
-  }
-
-  async loadText(): Promise<string> {
-    const textDocument = await workspace.openTextDocument(Uri.parse(USER_CHALLENGE_PATH));
-    return Promise.resolve(textDocument.getText());
-  }
-
-  public async init() {
+  async init() {
     try {
-      const userConfig = await this.loadText();
-
-      this.userConfigJson = JSON.parse(userConfig);
-      return Promise.resolve();
+      const textDocument = await workspace.openTextDocument(Uri.parse(USER_CHALLENGE_PATH));
+      this._userConfigJson = JSON.parse(textDocument.getText());
     } catch (e) {
-      error('Cannot load userConfig');
-      error(e);
-      return Promise.reject();
+      error(`Error loading user config: ${e}`);
+      throw e;
     }
   }
+
+  get userConfigJson(): UserMission {
+    return this._userConfigJson!;
+  }
 }
diff --git a/deadlock-plugins/deadlock-extension/src/core/utils/mission.utils.ts b/deadlock-plugins/deadlock-extension/src/core/utils/mission.utils.ts
index d279e45fc4f9d44ad328c917658a1d7b6f7f7ceb..edb8400ddb479d80c011c594a022b6de4b9020ce 100644
--- a/deadlock-plugins/deadlock-extension/src/core/utils/mission.utils.ts
+++ b/deadlock-plugins/deadlock-extension/src/core/utils/mission.utils.ts
@@ -1,14 +1,14 @@
 import { PathLike, readFileSync } from 'fs';
 import { join } from 'path';
 import { missionWorkdir, USER_CHALLENGE_PATH } from '../config';
-import UserChallenge from '../mission/model/userChallenge';
+import UserMission from '../mission/model/userMission';
 import isDocker from './isdocker';
 
 export function getReviewedStudentWorkdirPath(userId: string): string {
   return join(missionWorkdir, 'students', `${userId}`);
 }
 
-export function getUserChallenge(userId: string, missionid: string, isReviewing = false): UserChallenge {
+export function getUserChallenge(userId: string, missionid: string, isReviewing = false): UserMission {
   let path: number | PathLike;
   if (isDocker()) {
     path = USER_CHALLENGE_PATH;
diff --git a/deadlock-plugins/deadlock-extension/src/extension.ts b/deadlock-plugins/deadlock-extension/src/extension.ts
index a4f51b356bee9808a5b49e917018e5581fecf6ce..4a2b288c90a43cf0846aaf7cf5870665972a917b 100644
--- a/deadlock-plugins/deadlock-extension/src/extension.ts
+++ b/deadlock-plugins/deadlock-extension/src/extension.ts
@@ -53,6 +53,6 @@ export async function activate(context: ExtensionContext) {
       error(JSON.stringify(e));
       window.showErrorMessage("Le recorder n'a pas pu être lancé");
     }
-    runTimer(userConfig.getCurrentUserDetails().id, userConfig.getMissionId(), context);
+    runTimer(userConfig.userConfigJson.currentUserId, userConfig.userConfigJson.missionId, context);
   }
 }
diff --git a/deadlock-plugins/deadlock-extension/src/recorder/recorder.ts b/deadlock-plugins/deadlock-extension/src/recorder/recorder.ts
index 0d9d69ef7cbe50a00db3afe67df128a0fba291e7..262354ac8003f2432b5b012b92081286cd1e67d3 100644
--- a/deadlock-plugins/deadlock-extension/src/recorder/recorder.ts
+++ b/deadlock-plugins/deadlock-extension/src/recorder/recorder.ts
@@ -8,6 +8,7 @@ import UserConfig from '../core/userConfig';
 import AutomaticSave from './services/automatic-save';
 import { clearFilesExceptGit, copyProjectSources, renameTempToUserGitFiles } from './utils/workdir';
 import aquirePermissions from './utils/permission';
+import { isReviewingStudent } from '../core/mission/model/userMission';
 
 export default class Recorder {
   private _gitMission?: GitMission;
@@ -31,7 +32,7 @@ export default class Recorder {
   }
 
   async setupProject(userConfig: UserConfig, gitMission?: GitMission) {
-    if (!userConfig.isProfessor()) {
+    if (!isReviewingStudent(userConfig.userConfigJson)) {
       await copyProjectSources(PROJECT_SRC_PATH, PROJECT_DEADLOCK_DESKTOP_PATH, ['.git/']);
 
       if (gitMission) {
diff --git a/deadlock-plugins/deadlock-extension/src/view/briefingView.ts b/deadlock-plugins/deadlock-extension/src/view/briefingView.ts
index af1a24effe00821b5d2e2902d36c0df6be457ce3..9d8b40c2b454d4bf0749b91da81979c0795ec814 100644
--- a/deadlock-plugins/deadlock-extension/src/view/briefingView.ts
+++ b/deadlock-plugins/deadlock-extension/src/view/briefingView.ts
@@ -3,7 +3,8 @@ import { marked } from 'marked';
 import { join } from 'path';
 import { setInterval } from 'timers';
 import { Uri, workspace } from 'vscode';
-import { BRIEFING_FILE_NAME, DOCS_PATH, ENV_FILE_PATH, SERVICES_PATHS_PATH } from '../core/config';
+import { BRIEFING_FILE_NAME, DOCS_PATH } from '../core/config';
+import { isReviewingStudent } from '../core/mission/model/userMission';
 import isDocker from '../core/utils/isdocker';
 import { userConfig } from '../extension';
 import { openBriefingCommand } from '../theia/command';
@@ -68,14 +69,10 @@ export default class BriefingView extends WebviewBase {
   render() {
     let output = '';
 
-    if (userConfig.isProfessor()) {
+    if (isReviewingStudent(userConfig.userConfigJson)) {
       output += `
         <h2>Professeur</h2>
-        Bonjour ${userConfig.getCurrentUserDetails().lastName} ${
-        userConfig.getCurrentUserDetails().firstName
-      } vous êtes actuellement entrain de relire le code de <b>${userConfig.getRemoteUserDetails().lastName} ${
-        userConfig.getRemoteUserDetails().firstName
-      }</b>.<br />
+        Bonjour ${userConfig.userConfigJson.currentUserDetails.lastName} ${userConfig.userConfigJson.currentUserDetails.firstName} vous êtes actuellement entrain de relire le code de <b>${userConfig.userConfigJson.currentUserDetails.lastName} ${userConfig.userConfigJson.currentUserDetails.firstName}</b>.<br />
         Vous pouvez consulter chaque exécution de son code dans l'onglet à gauche de GitLens. Chaque commit sur <b>master</b> représente une exécution.
         <br />
       `;
@@ -91,48 +88,6 @@ export default class BriefingView extends WebviewBase {
 
     output += '<br/>';
 
-    if (userConfig.getUsername()) {
-      output += this.renderUserMissionConfig();
-    } else {
-      output += 'Loading help..';
-    }
-
     return output;
   }
-
-  private renderUserMissionConfig() {
-    let adresses = '';
-
-    let pathsLength = 0;
-    const paths = userConfig.getPaths();
-    for (const key in paths) {
-      if (key !== '3000') {
-        pathsLength++;
-        const path = paths[key];
-        if (userConfig.getHost() === 'localhost') {
-          adresses += `<li>${key} binded on <a href="http://${userConfig.getHost()}:${path}">${path}</a></li>`;
-        } else {
-          adresses += `<li>${key} binded on <a href="https://${path}.${userConfig.getHost()}">${path}</a></li>`;
-        }
-      }
-    }
-
-    if (pathsLength > 0) {
-      return `<h3>Configuration</h3>
-      You have the following adresses availables for your mission : <ul>${adresses}</ul>
-      </br>
-      You also have access to these paths from:
-      <ul>
-        <li>
-        environment variables (file <b>${ENV_FILE_PATH}</b> already exported)
-        </li>
-        <li>
-        JSON file <b>${SERVICES_PATHS_PATH}</b>
-        </li>
-      </ul>
-      </br>`;
-    }
-
-    return '';
-  }
 }
diff --git a/deadlock-plugins/deadlock-extension/src/view/startedMissionsView.ts b/deadlock-plugins/deadlock-extension/src/view/startedMissionsView.ts
index aaff928f3f95c3f0f749ea25e6a90b0e3ba84297..c0354e5a92bbfc2e421ed3bebf90b707649ae96a 100644
--- a/deadlock-plugins/deadlock-extension/src/view/startedMissionsView.ts
+++ b/deadlock-plugins/deadlock-extension/src/view/startedMissionsView.ts
@@ -3,10 +3,10 @@ import { existsSync, readdirSync, readFileSync } from 'fs';
 import { join } from 'path';
 import { ExtensionContext, Webview, WebviewView, WebviewViewProvider } from 'vscode';
 import Controller from '../core/controller';
-import UserChallenge from '../core/mission/model/userChallenge';
 import { extensionWarn } from '../recorder/utils/log';
 import { getUri } from './webviewBase';
 import { missionWorkdir } from '../core/config';
+import UserMission from '../core/mission/model/userMission';
 export default class StartedMissionsView implements WebviewViewProvider {
   private readonly controller: Controller;
   constructor(private context: ExtensionContext) {
@@ -27,7 +27,7 @@ export default class StartedMissionsView implements WebviewViewProvider {
     switch (message.command) {
       case 'openMission': {
         const path = join(missionWorkdir, message.mission, '.config', 'user-challenge.json');
-        const userChallenge: UserChallenge = JSON.parse(readFileSync(path, 'utf8'));
+        const userChallenge: UserMission = JSON.parse(readFileSync(path, 'utf8'));
         Controller.getInstance().launchMission(userChallenge.missionId, userChallenge.missionVersion);
         return;
       }
@@ -53,7 +53,7 @@ export default class StartedMissionsView implements WebviewViewProvider {
       readdirSync(missionWorkdir).forEach((mission) => {
         if (existsSync(join(missionWorkdir, mission, '.config', 'user-challenge.json'))) {
           try {
-            const userChallenge: UserChallenge = JSON.parse(
+            const userChallenge: UserMission = JSON.parse(
               readFileSync(join(missionWorkdir, mission, '.config', 'user-challenge.json'), 'utf8'),
             );
             missionsHtml += `<vscode-button onclick="openMission('${userChallenge.missionId}')" class="item" appearance="primary">${userChallenge.missionId}</vscode-button>`;