diff --git a/deadlock-theia-core/config.ts b/deadlock-theia-core/config.ts
new file mode 100644
index 0000000000000000000000000000000000000000..34d4aeff0212b5578f464fc2d1079c4ff8d50cbd
--- /dev/null
+++ b/deadlock-theia-core/config.ts
@@ -0,0 +1,14 @@
+import * as path from 'path';
+
+// DEV CONFIG
+
+if (!process.env['HOME']) {
+	console.error('Could not get home user.');
+}
+
+const home = process.env['HOME'] ? process.env['HOME'] : "";
+export const DEADLOCK_EXTENSION_PATH = path.join(home, 'deadlock-extension');
+export const CONFIG_PATH = path.join(DEADLOCK_EXTENSION_PATH, 'config');
+export const USER_CHALLENGE_PATH = path.join(CONFIG_PATH, 'user-challenge.json');
+export const PROJECT_SRC_PATH = path.join(DEADLOCK_EXTENSION_PATH, 'project')
+export const PROJECT_THEIA_PATH = path.join(DEADLOCK_EXTENSION_PATH, 'project-theia')
\ No newline at end of file
diff --git a/plugins/deadlock-extension/src/gitMission.ts b/deadlock-theia-core/gitMission.ts
similarity index 94%
rename from plugins/deadlock-extension/src/gitMission.ts
rename to deadlock-theia-core/gitMission.ts
index 7f6efc17c6026dd3790bfd664361eccb587ce454..302fa76c55f649c9263a27f71c2789a162a3f08f 100644
--- a/plugins/deadlock-extension/src/gitMission.ts
+++ b/deadlock-theia-core/gitMission.ts
@@ -1,6 +1,6 @@
-import userConfig, { UserConfig } from "./userConfig";
 import simpleGit, { SimpleGit, SimpleGitOptions } from 'simple-git';
 import { PROJECT_SRC_PATH } from './config';
+import UserConfig from './userConfig';
 
 const DEFAULT_REMOTE = 'deadlock';
 const DEFAULT_BRANCH = 'master';
@@ -19,7 +19,7 @@ class GitMission {
         this.git = simpleGit(options);
     }
 
-    async init() {
+    async init(userConfig: UserConfig) {
         try {
             console.log('Init Git mission..')
             console.log('prijectSRC PATH', PROJECT_SRC_PATH);
diff --git a/deadlock-theia-core/package-lock.json b/deadlock-theia-core/package-lock.json
new file mode 100644
index 0000000000000000000000000000000000000000..097ea179c21113e56c2055451ab72bbe31ef4f7e
--- /dev/null
+++ b/deadlock-theia-core/package-lock.json
@@ -0,0 +1,49 @@
+{
+	"name": "deadlock-theia-core",
+	"version": "1.0.0",
+	"lockfileVersion": 1,
+	"requires": true,
+	"dependencies": {
+		"@kwsites/file-exists": {
+			"version": "1.1.1",
+			"resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz",
+			"integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==",
+			"requires": {
+				"debug": "^4.1.1"
+			}
+		},
+		"@kwsites/promise-deferred": {
+			"version": "1.1.1",
+			"resolved": "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz",
+			"integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw=="
+		},
+		"@types/node": {
+			"version": "14.11.8",
+			"resolved": "https://registry.npmjs.org/@types/node/-/node-14.11.8.tgz",
+			"integrity": "sha512-KPcKqKm5UKDkaYPTuXSx8wEP7vE9GnuaXIZKijwRYcePpZFDVuy2a57LarFKiORbHOuTOOwYzxVxcUzsh2P2Pw=="
+		},
+		"debug": {
+			"version": "4.2.0",
+			"resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz",
+			"integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==",
+			"requires": {
+				"ms": "2.1.2"
+			}
+		},
+		"ms": {
+			"version": "2.1.2",
+			"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+			"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+		},
+		"simple-git": {
+			"version": "2.21.0",
+			"resolved": "https://registry.npmjs.org/simple-git/-/simple-git-2.21.0.tgz",
+			"integrity": "sha512-rohCHmEjD/ESXFLxF4bVeqgdb4Awc65ZyyuCKl3f7BvgMbZOBa/Ye3HN/GFnvruiUOAWWNupxhz3Rz5/3vJLTg==",
+			"requires": {
+				"@kwsites/file-exists": "^1.1.1",
+				"@kwsites/promise-deferred": "^1.1.1",
+				"debug": "^4.1.1"
+			}
+		}
+	}
+}
diff --git a/deadlock-theia-core/package.json b/deadlock-theia-core/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..ffd2b7c568b3918b3c0bf8376b2915c6170c9c45
--- /dev/null
+++ b/deadlock-theia-core/package.json
@@ -0,0 +1,15 @@
+{
+  "name": "deadlock-theia-core",
+  "version": "1.0.0",
+  "description": "",
+  "main": "index.js",
+  "scripts": {
+    "test": "echo \"Error: no test specified\" && exit 1"
+  },
+  "author": "",
+  "license": "ISC",
+  "dependencies": {
+    "@types/node": "^14.11.8",
+    "simple-git": "^2.21.0"
+  }
+}
diff --git a/plugins/deadlock-extension/src/userConfig.ts b/deadlock-theia-core/userConfig.ts
similarity index 70%
rename from plugins/deadlock-extension/src/userConfig.ts
rename to deadlock-theia-core/userConfig.ts
index ac0135907bf7300b768790815a86578d22ea1b20..0053db9be9db165d7db4ca51a1d9626eb51e6ad1 100644
--- a/plugins/deadlock-extension/src/userConfig.ts
+++ b/deadlock-theia-core/userConfig.ts
@@ -19,12 +19,9 @@ import { USER_CHALLENGE_PATH } from './config';
  * }
  */
 
-export class UserConfig {
-    private static instance: UserConfig;
+export abstract class UserConfig {
     private userConfigJson: any | undefined;
 
-    private constructor() { }
-
     getPaths(): Map<number, string> {
         return this.userConfigJson?.paths;
     }
@@ -53,19 +50,15 @@ export class UserConfig {
         return this.userConfigJson?.missionId;
     }
 
-    public static getInstance(): UserConfig {
-        if (!UserConfig.instance) {
-            UserConfig.instance = new UserConfig();
-        }
-
-        return UserConfig.instance;
-    }
+    abstract async loadUserChallengeFile(): Promise<string>;
 
     public async init() {
         try {
-            const userConfig = await vscode.workspace.openTextDocument(vscode.Uri.parse(USER_CHALLENGE_PATH));
+            // const userConfig = await vscode.workspace.openTextDocument(vscode.Uri.parse(USER_CHALLENGE_PATH));
+
+            const userConfig = await this.loadUserChallengeFile();
 
-            this.userConfigJson = JSON.parse(userConfig.getText());
+            this.userConfigJson = JSON.parse(userConfig);
             return Promise.resolve();
         } catch (e) {
             console.error(e);
@@ -74,6 +67,4 @@ export class UserConfig {
     }
 }
 
-const userConfig = UserConfig.getInstance();
-
-export default userConfig;
+export default UserConfig;
diff --git a/recorder/.gitignore b/deadlock-theia-recorder/.gitignore
similarity index 100%
rename from recorder/.gitignore
rename to deadlock-theia-recorder/.gitignore
diff --git a/recorder/command-recorder.js b/deadlock-theia-recorder/command-recorder.js
similarity index 100%
rename from recorder/command-recorder.js
rename to deadlock-theia-recorder/command-recorder.js
diff --git a/recorder/commit.js b/deadlock-theia-recorder/commit.js
similarity index 100%
rename from recorder/commit.js
rename to deadlock-theia-recorder/commit.js
diff --git a/deadlock-theia-recorder/package-lock.json b/deadlock-theia-recorder/package-lock.json
new file mode 100644
index 0000000000000000000000000000000000000000..a6928b146d6c928dc297fb62494fd9d12adaca4f
--- /dev/null
+++ b/deadlock-theia-recorder/package-lock.json
@@ -0,0 +1,49 @@
+{
+	"name": "deadlock-theia-recorder",
+	"version": "1.0.0",
+	"lockfileVersion": 1,
+	"requires": true,
+	"dependencies": {
+		"@kwsites/file-exists": {
+			"version": "1.1.1",
+			"resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz",
+			"integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==",
+			"requires": {
+				"debug": "^4.1.1"
+			}
+		},
+		"@kwsites/promise-deferred": {
+			"version": "1.1.1",
+			"resolved": "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz",
+			"integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw=="
+		},
+		"@types/node": {
+			"version": "14.11.8",
+			"resolved": "https://registry.npmjs.org/@types/node/-/node-14.11.8.tgz",
+			"integrity": "sha512-KPcKqKm5UKDkaYPTuXSx8wEP7vE9GnuaXIZKijwRYcePpZFDVuy2a57LarFKiORbHOuTOOwYzxVxcUzsh2P2Pw=="
+		},
+		"debug": {
+			"version": "4.2.0",
+			"resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz",
+			"integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==",
+			"requires": {
+				"ms": "2.1.2"
+			}
+		},
+		"ms": {
+			"version": "2.1.2",
+			"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+			"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+		},
+		"simple-git": {
+			"version": "2.21.0",
+			"resolved": "https://registry.npmjs.org/simple-git/-/simple-git-2.21.0.tgz",
+			"integrity": "sha512-rohCHmEjD/ESXFLxF4bVeqgdb4Awc65ZyyuCKl3f7BvgMbZOBa/Ye3HN/GFnvruiUOAWWNupxhz3Rz5/3vJLTg==",
+			"requires": {
+				"@kwsites/file-exists": "^1.1.1",
+				"@kwsites/promise-deferred": "^1.1.1",
+				"debug": "^4.1.1"
+			}
+		}
+	}
+}
diff --git a/deadlock-theia-recorder/package.json b/deadlock-theia-recorder/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..c962c1ceb4d5f763bcdaa94e785673609d535d8a
--- /dev/null
+++ b/deadlock-theia-recorder/package.json
@@ -0,0 +1,16 @@
+{
+  "name": "deadlock-theia-recorder",
+  "version": "1.0.0",
+  "description": "",
+  "main": "command-recorder.js",
+  "scripts": {
+    "test": "echo \"Error: no test specified\" && exit 1"
+  },
+  "author": "",
+  "license": "ISC",
+  "dependencies": {
+    "@types/node": "^14.11.8",
+    "deadlock-theia-core": "^1.0.0",
+    "simple-git": "^2.21.0"
+  }
+}
diff --git a/recorder/test.js b/deadlock-theia-recorder/test.js
similarity index 100%
rename from recorder/test.js
rename to deadlock-theia-recorder/test.js
diff --git a/lerna.json b/lerna.json
new file mode 100644
index 0000000000000000000000000000000000000000..b34ead76150afd038a9c9e33e44cd72baaf71ac0
--- /dev/null
+++ b/lerna.json
@@ -0,0 +1,8 @@
+{
+  "packages": [
+    "plugins/*",
+    "deadlock-theia-core/",
+    "deadlock-theia-recorder/"
+  ],
+  "version": "0.0.0"
+}
diff --git a/package.json b/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..99f61af8d684aa03c9c5795366e54799a9cba83d
--- /dev/null
+++ b/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "root",
+  "private": true,
+  "devDependencies": {
+    "lerna": "^3.22.1"
+  }
+}
diff --git a/plugins/deadlock-extension/package-lock.json b/plugins/deadlock-extension/package-lock.json
index 743451f8b85435df9b4dfacb9f573aba80e53d74..7f50f80e96376c40c11236e1f26786a8d77482a7 100644
--- a/plugins/deadlock-extension/package-lock.json
+++ b/plugins/deadlock-extension/package-lock.json
@@ -1,5 +1,5 @@
 {
-	"name": "deadlock-coding",
+	"name": "deadlock-extension-coding",
 	"version": "0.0.1",
 	"lockfileVersion": 1,
 	"requires": true,
@@ -67,10 +67,9 @@
 			"integrity": "sha512-j8XXj6/l9kFvCwMyVqozznqpd/nk80krrW+QiIJN60Uu9gX5Pvn4/qPJ2YngQrR3QREPwmrE1f9/EWKVTFzoEw=="
 		},
 		"@types/node": {
-			"version": "12.12.35",
-			"resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.35.tgz",
-			"integrity": "sha512-ASYsaKecA7TUsDrqIGPNk3JeEox0z/0XR/WsJJ8BIX/9+SkMSImQXKWfU/yBrSyc7ZSE/NPqLu36Nur0miCFfQ==",
-			"dev": true
+			"version": "14.11.8",
+			"resolved": "https://registry.npmjs.org/@types/node/-/node-14.11.8.tgz",
+			"integrity": "sha512-KPcKqKm5UKDkaYPTuXSx8wEP7vE9GnuaXIZKijwRYcePpZFDVuy2a57LarFKiORbHOuTOOwYzxVxcUzsh2P2Pw=="
 		},
 		"@types/vscode": {
 			"version": "1.38.0",
diff --git a/plugins/deadlock-extension/package.json b/plugins/deadlock-extension/package.json
index 6d8578e5d9ae148cc1930b97616c3e8323ca6e4c..076819dd6738667d6ea9820dc9700a818546c62a 100644
--- a/plugins/deadlock-extension/package.json
+++ b/plugins/deadlock-extension/package.json
@@ -1,5 +1,5 @@
 {
-	"name": "deadlock-coding",
+	"name": "deadlock-extension-coding",
 	"description": "Deadlock Coding",
 	"version": "0.0.1",
 	"publisher": "Deadlock",
@@ -61,16 +61,18 @@
 	},
 	"dependencies": {
 		"@types/marked": "^1.1.0",
+		"@types/node": "^14.11.8",
+		"deadlock-theia-core": "^1.0.0",
 		"keycloak-js": "^11.0.0",
 		"marked": "^1.1.1",
 		"simple-git": "^2.21.0"
 	},
 	"devDependencies": {
 		"@types/node": "^12.12.0",
+		"@types/vscode": "^1.38.0",
 		"@typescript-eslint/eslint-plugin": "^3.0.2",
 		"@typescript-eslint/parser": "^3.0.2",
 		"eslint": "^7.1.0",
-		"typescript": "^3.9.4",
-		"@types/vscode": "^1.38.0"
+		"typescript": "^3.9.4"
 	}
 }
diff --git a/plugins/deadlock-extension/src/extension.ts b/plugins/deadlock-extension/src/extension.ts
index d518c1b162dc447e8a50d69dc9fb6c680ab29f6e..d6277494260867a4f44998848fd502147191c6da 100644
--- a/plugins/deadlock-extension/src/extension.ts
+++ b/plugins/deadlock-extension/src/extension.ts
@@ -8,8 +8,9 @@ import View from './view/view';
 import { OPEN_BRIEFING_COMMAND } from './command';
 import { PROJECT_SRC_PATH, PROJECT_THEIA_PATH } from './config';
 
-import userConfig from './userConfig';
-import gitMission from './gitMission';
+import userConfig from './userConfigTheia';
+import gitMission from 'deadlock-theia-core/gitMission';
+
 
 export function initViews(extensionPath: string) {
   new BriefingView(extensionPath);
diff --git a/plugins/deadlock-extension/src/userConfigTheia.ts b/plugins/deadlock-extension/src/userConfigTheia.ts
new file mode 100644
index 0000000000000000000000000000000000000000..173bd9ff67ff01fae71ec602db480f311c03ecab
--- /dev/null
+++ b/plugins/deadlock-extension/src/userConfigTheia.ts
@@ -0,0 +1,14 @@
+import UserConfig from "deadlock-theia-core/userConfig";
+
+class UserConfigTheia extends UserConfig {
+
+    constructor() {
+        super();
+    }
+
+    loadUserChallengeFile(): Promise<string> {
+        throw new Error("Method not implemented.");
+    }
+}
+
+export default UserConfigTheia;
\ No newline at end of file