diff --git a/app.js b/app.js
index 1d30a6d04a1e72bd97aa8c44351eca6eb1e0f7e5..c334e546d90a77730ba4a347ff28adaa186fae23 100644
--- a/app.js
+++ b/app.js
@@ -59,12 +59,13 @@ let clientCounter = 0;
 
 
 	app.get('/download', function(req, res, next){
+		const checkedFiles = req.query.checkedFiles.split(',');
 		let clientName;
 		const zip = new JSZip();
 		zip.file("README.txt", "text for README");
 		//holds promises for backend and/or frontend for synchronizing
 		const promiseArray = []
-		const checkedFiles = req.query.checkedFiles.split(',');
+		
 
 
 		if (clientCounter > 5){
@@ -98,7 +99,7 @@ if (backendChecked){
 			return backendFunctions.backendClean(clientName, fileName).then(function(){
 				return backendFunctions.backendPull(clientName, fileName).then(function(){
 					return backendFunctions.backendInstallAddons(checkedFiles,downloadFiles,clientName).then(function(){
-						return backendFunctions.backendBuild(clientName, fileName)
+						return backendFunctions.backendBuild(checkedFiles, clientName, fileName)
 					})
 				})
 			})
diff --git a/backendFunctions.js b/backendFunctions.js
index c5eed744f0168bb366ce9eb6d0832ae8fe78a0b0..4cc6c31d9dedc5cb98625ef2e92f6b3d59dab03d 100644
--- a/backendFunctions.js
+++ b/backendFunctions.js
@@ -1,37 +1,36 @@
-const express    = require('express');
-const exec       = require('child_process').exec;		
-
+	const express    = require('express');
+	const exec       = require('child_process').exec;		
+	
 
+	function prepareClientFolder(clientName, fileName){
+		return new Promise((resolve,reject)=>{
 
+			exec('cp -R ' + fileName + ' ' + clientName + '/',(error,stdout,stderr)=>{
 
-function prepareClientFolder(clientName, fileName){
-	return new Promise((resolve,reject)=>{
+				if (error) {
+					reject(error);
+					return;
+				}
 
-		exec('cp -R ' + fileName + ' ' + clientName + '/',(error,stdout,stderr)=>{
+				console.log(stdout);
+				console.log(stderr);
 
-			if (error) {
-				reject(error);
-				return;
-			}
+				resolve(fileName);
 
-			console.log(stdout);
-			console.log(stderr);
-
-			resolve(fileName);
-
-		})	
-	})
+			})	
+		})
 
 
-}
-
+	}
 
 
+//remove addons from former builds
 function backendClean(clientName, fileName){
-	
-	return new Promise((resolve,reject)=>{
-		exec('cd ' + clientName + '/explorviz-ui-backend/plugins/net/explorviz/ && rm -rf plugins/*', (error, stdout,stderr)=>{
 
+	return new Promise((resolve,reject)=>{
+		const path= process.cwd()+'/' + clientName + '/explorviz-ui-backend/plugins/net/explorviz/';
+		exec('rm -rf plugins/*',{cwd:path}, (error, stdout,stderr)=>{
+			
 			if (error) {
 				console.log('backendClean:', error);
 				reject(error);
@@ -48,11 +47,12 @@ function backendClean(clientName, fileName){
 }
 
 function backendPull(clientName, fileName){
-	
-	return new Promise((resolve, reject)=> {
 
-		exec('cd ' + clientName + '/' + fileName + ' && git pull ', (error, stdout, stderr) => {
+	return new Promise((resolve, reject)=> {
 
+		const path= process.cwd()+'/'+clientName + '/'+ fileName;
+		exec('git pull ',{cwd:path} ,(error, stdout, stderr) => {
+			
 			if (error) {
 				console.log('backendPull:', error);
 				reject(error);
@@ -72,6 +72,8 @@ function backendPull(clientName, fileName){
 function backendInstallAddons(checkedFiles,downloadFiles,clientName){
 
 	return new Promise((resolve, reject)=>{
+
+
 		checkedPlugins = checkedFiles.filter(function(file){
 			return /\bexplorviz-backend-plugin-\w*/.exec(file);
 		});
@@ -79,22 +81,24 @@ function backendInstallAddons(checkedFiles,downloadFiles,clientName){
 		if(checkedPlugins.length !== 0 ){
 
 			checkedPlugins.forEach((pluginName) => {
-						exec('cd '+ pluginName + ' && git pull ' + ' && rsync -av . ' + ' ../' + clientName +'/explorviz-ui-backend/plugins/net/explorviz/plugins/ ' + ' --exclude .git', (error, stdout, stderr) => { //'cd explorviz-ui-backend/plugins/net/explorviz/plugins/ ' + 
-							
-							if (error) {
-								console.log('backendInstallAddons:', error);
-								reject(error);
-								return;
-							}
-
-							console.log(stdout);
-							console.log(stderr);
-							
-							resolve();
-
-						});
-
-					})
+				
+				const path= process.cwd()+'/'+ pluginName;
+							exec('git pull ' + ' && rsync -av . ' + ' ../' + clientName +'/explorviz-ui-backend/plugins/net/explorviz/plugins/ ' + ' --exclude .git',{cwd:path}, (error, stdout, stderr) => { //'cd explorviz-ui-backend/plugins/net/explorviz/plugins/ ' + 
+								
+								if (error) {
+									console.log('backendInstallAddons:', error);
+									reject(error);
+									return;
+								}
+
+								console.log(stdout);
+								console.log(stderr);
+								
+								resolve();
+
+							});
+
+						})
 		} else {
 			resolve();
 		}
@@ -103,10 +107,16 @@ function backendInstallAddons(checkedFiles,downloadFiles,clientName){
 
 
 }
-function backendBuild(clientName, fileName){
-	
+function backendBuild(checkedFiles, clientName, fileName){
+
 	return new Promise((resolve,reject)=>{
-		exec('cd '+ clientName + '/' + fileName + ' && mvn compile war:war', (error,stdout,stderr)=> {
+
+		
+		
+		const path= process.cwd()+'/'+clientName + '/' + fileName;
+		exec('mvn compile war:war',{cwd:path}, (error,stdout,stderr)=> {
+			
+
 			if (error) {
 				console.log('backendBuild:', error);
 				reject(error);
@@ -115,6 +125,7 @@ function backendBuild(clientName, fileName){
 
 			console.log(stdout);
 			console.log(stderr);
+
 			resolve({zipFileName:'backend.war', path: clientName + '/explorviz-ui-backend/target/explorviz-ui-backend-1.0-SNAPSHOT.war'});
 
 
diff --git a/frontendFunctions.js b/frontendFunctions.js
index c27b5faece3032f4fc436995a4a3b277d3b68e45..2de7d85f8f9a181dc6b5a242cbca53557bd53b83 100644
--- a/frontendFunctions.js
+++ b/frontendFunctions.js
@@ -1,78 +1,84 @@
-	let express    = require('express');
-	let exec       = require('child_process').exec;		
+	const express    = require('express');
+	const exec       = require('child_process').exec;		
 
-	
 
-function prepareClientFolder(clientName, fileName){
-return new Promise((resolve,reject)=>{
+	function prepareClientFolder(clientName, fileName){
+		return new Promise((resolve,reject)=>{
 
-exec('cp -R ' + fileName + '/ ' + clientName + '/',(error,stdout,stderr)=>{
+			exec('cp -R ' + fileName + '/ ' + clientName + '/',(error,stdout,stderr)=>{
 
-		if (error) {
-				reject(error);
-				return;
-			}
+				if (error) {
+					reject(error);
+					return;
+				}
 
-			console.log(stdout);
-			console.log(stderr);
+				console.log(stdout);
+				console.log(stderr);
 
-			resolve(fileName);
+				resolve(fileName);
 
-})	
-})
+			})	
+		})
 
 
-}
+	}
+
+//remove addons from former builds
+function frontendClean(clientName, fileName){
+	return new Promise((resolve, reject) => {
 
-	function frontendClean(clientName, fileName){
-		return new Promise((resolve, reject) => {
+		const path= process.cwd() + '/'+ clientName + '/' + fileName;
+		exec('git checkout package.json && npm prune ', {cwd:path}, (error, stdout, stderr) => {
 			
-			exec('cd ' + clientName + '/' + fileName + ' && git checkout package.json && npm prune ', (error, stdout, stderr) => {
+			if (error) {
+				reject(error)
+				return;
+			}
 
-				if (error) {
-					reject(error)
-					return;
-				}
+			console.log(stdout);
+			console.log(stderr);
 
-				console.log(stdout);
-				console.log(stderr);
-				resolve();
-			});
-		})
+			resolve();
+		});
+	})
+
+}
 
-	}
 
+function frontendPull(clientName, fileName){
 
-	function frontendPull(clientName, fileName){
+	return new Promise((resolve, reject) => {
 
-		return new Promise((resolve, reject) => {
+		const path= process.cwd() + '/'+ clientName + '/' + fileName;
+		exec('git pull ', {cwd:path}, (error, stdout, stderr) => {
 			
-			exec('cd ' + clientName + '/' + fileName +' && git pull ', (error, stdout, stderr) => {
+			if (error) {
+				reject(error)
+				return;
+			}
 
-				if (error) {
-					reject(error)
-					return;
-				}
+			console.log(stdout);
+			console.log(stderr);
 
-				console.log(stdout);
-				console.log(stderr);
-				resolve();
-			});
-		})
-	} 
+			resolve();
+		});
+	})
+} 
 
-	function frontendInstallAddons(clientName, fileName, checkedFiles, downloadFiles){
-		
-		return new Promise((resolve, reject) => {
+function frontendInstallAddons(clientName, fileName, checkedFiles, downloadFiles){
+	let pluginsFinished=0;
+	return new Promise((resolve, reject) => {
 
-			checkedPlugins = checkedFiles.filter(function(file){
-				return /\bexplorviz-frontend-plugin-\w*/.exec(file);
-			});
+		checkedPlugins = checkedFiles.filter(function(file){
+			return /\bexplorviz-frontend-plugin-\w*/.exec(file);
+		});
 
-			if(checkedPlugins.length !== 0 ){
-				checkedPlugins.forEach((pluginName) => {
-					//TODO now addon is listed under dependencies-section in package.json
-					exec('cd ' + clientName + '/' + fileName + ' && ember install ' + downloadFiles[pluginName] + ' --save', (error, stdout, stderr) => {
+		if(checkedPlugins.length !== 0 ){
+			checkedPlugins.forEach((pluginName) => {
+
+				const path= process.cwd() + '/'+ clientName + '/' + fileName;
+					//--save: addon is listed under dependencies-section in package.json
+					exec('ember install ' + downloadFiles[pluginName] + ' --save', {cwd:path}, (error, stdout, stderr) => {
 						
 						if (error) {
 							reject(error);
@@ -82,46 +88,57 @@ exec('cp -R ' + fileName + '/ ' + clientName + '/',(error,stdout,stderr)=>{
 						console.log(stdout);
 						console.log(stderr);
 
-						resolve();
+						pluginsFinished = pluginsFinished +1;
+						
+						console.log('checkedPlugins.length: ',checkedPlugins.length);
+						console.log('pluginsFinished: ', pluginsFinished);
+						if (checkedPlugins.length == pluginsFinished){
+
+							resolve();
 
+						}
 					});
 
 				})
-				//If no plugins were checked by the user, the downloader skips this step by resolving immediately.
-			} else {
-				resolve();
-			}
 
-		})
-	}
 
-	function frontendBuild(clientName, fileName){
+		} else {
+
+			//If no plugins were checked by the user, the downloader skips this step by resolving immediately.
+			resolve();
+		}
 
-		return new Promise((resolve,reject)=> {
+	})
+}
+
+function frontendBuild(clientName, fileName){
+
+	return new Promise((resolve,reject)=> {
+		
+		const path= process.cwd() + '/'+ clientName + '/' + fileName;
+		exec('ember build --environment=production', {cwd:path}, (error, stdout, stderr) => {
 			
-			exec('cd ' + clientName + '/' + fileName + ' && ember build --environment=production', (error, stdout, stderr) => {
+			if (error) {
+				reject(error);
+				return;
+			}
 
-				if (error) {
-					reject(error);
-					return;
-				}
+			console.log(stdout);
+			console.log(stderr);
 
-				console.log(stdout);
-				console.log(stderr);
+			resolve({zipFileName:'frontend', path: clientName + '/explorviz-ui-frontend/dist/'});
+		});
 
-				resolve({zipFileName:'frontend', path: clientName + '/explorviz-ui-frontend/dist/'});
-			});
 
 
+	})
 
-		})
-		
-	}
+}
 
-	module.exports = {
-		prepareClientFolder,
-		frontendClean,
-		frontendPull,
-		frontendInstallAddons,
-		frontendBuild
-	}
+module.exports = {
+	prepareClientFolder,
+	frontendClean,
+	frontendPull,
+	frontendInstallAddons,
+	frontendBuild
+}
diff --git a/package.json b/package.json
index 815839030e81d7c778fc1adbe415800397cf5020..ae6abbd2f4023055b043768a03aa80003be102cd 100644
--- a/package.json
+++ b/package.json
@@ -11,6 +11,8 @@
   "dependencies": {
     "body-parser": "^1.17.1",
     "child_process": "^1.0.2",
+    "ember-cli-test-plugin": "git+https://github.com/ExplorViz/explorviz-frontend-plugin-example.git",
+    "explorviz-frontend-plugin-colorpicker": "git+https://github.com/ExplorViz/explorviz-frontend-plugin-colorpicker.git",
     "express": "^4.15.2",
     "express-handlebars": "^3.0.0",
     "fs": "0.0.1-security",
diff --git a/zipFunctions.js b/zipFunctions.js
index afd8521efd5ceb53c62c25e0a5026750385169a2..99ca9ea3136be06784088ae39e6feb990c3ab28f 100644
--- a/zipFunctions.js
+++ b/zipFunctions.js
@@ -1,9 +1,9 @@
-	const express    = require('express');
-	const fs         = require('fs');
-	const fsReaddir = require('fs-readdir');
-	const JSZip = require('jszip');
+const express    = require('express');
+const fs         = require('fs');
+const fsReaddir = require('fs-readdir');
+const JSZip = require('jszip');
  
- const clientFolder = require('./clientFolder.js');
+const clientFolder = require('./clientFolder.js');