diff --git a/build.gradle b/build.gradle
index e921d22c4193f01455edd845c2f9ee28e7e98da0..768aa9c204794067a9c687ed7db5333fabfc238d 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,64 +1,64 @@
 apply plugin: "com.github.psxpaul.execfork"
 apply plugin: 'com.github.johnrengelman.shadow'
 
-ext{
+ext {
     tocciVersion = '1.0.1'
-    docciVersion = '1.0.1'
+    docciVersion = '1.0.4'
     cocciVersion = '1.0.0'
 }
 
 buildscript {
-  repositories {
-    maven {
-      url "https://plugins.gradle.org/m2/"
-    }
-  }
-  dependencies {
-    classpath "gradle.plugin.com.github.psxpaul:gradle-execfork-plugin:0.1.8"
-    classpath "com.github.jengelman.gradle.plugins:shadow:4.0.3"
-  }
+    repositories {
+        maven {
+            url "https://plugins.gradle.org/m2/"
+        }
+    }
+    dependencies {
+        classpath "gradle.plugin.com.github.psxpaul:gradle-execfork-plugin:0.1.8"
+        classpath "com.github.jengelman.gradle.plugins:shadow:4.0.3"
+    }
 }
 
 
 allprojects {
     apply plugin: 'java'
-	apply plugin: 'eclipse'
-	apply plugin: 'maven'
-	
+    apply plugin: 'eclipse'
+    apply plugin: 'maven'
+
     sourceCompatibility = 1.8
     targetCompatibility = 1.8
-    
+
     repositories {
 
-	    mavenCentral()
-	    maven {
-	          url "https://nexus.informatik.uni-goettingen.de/content/repositories/thirdparty/"
-	    }
-	    maven {
-	          url "https://nexus.informatik.uni-goettingen.de/content/repositories/rwm/"
-	    }
-	}
-	
-	javadoc {
-    	source = sourceSets.main.allJava
-   	 	classpath = configurations.compile
-    	failOnError = true
-	}
-	
-	test {
-    	testLogging.showStandardStreams = true
+        mavenCentral()
+        maven {
+            url "https://nexus.informatik.uni-goettingen.de/content/repositories/thirdparty/"
+        }
+        maven {
+            url "https://nexus.informatik.uni-goettingen.de/content/repositories/rwm/"
+        }
+    }
+
+    javadoc {
+        source = sourceSets.main.allJava
+        classpath = configurations.compile
+        failOnError = true
+    }
+
+    test {
+        testLogging.showStandardStreams = true
         testLogging {
-        	exceptionFormat = 'full'
-    	}
-	}
+            exceptionFormat = 'full'
+        }
+    }
 }
 
 configure([project(':de.ugoe.cs.rwm.mocci.connector'), project(':de.ugoe.cs.rwm.mocci.connector.dummy'), rootProject]) {
     apply plugin: 'checkstyle'
     apply plugin: 'findbugs'
     apply plugin: 'jacoco'
-    	
-   	checkstyle {
+
+    checkstyle {
         toolVersion = '8.2'
         configFile = rootProject.file('config/checkstyle/checkstyle.xml')
         configProperties = [
@@ -67,104 +67,105 @@ configure([project(':de.ugoe.cs.rwm.mocci.connector'), project(':de.ugoe.cs.rwm.
         ignoreFailures = false
         showViolations = true
     }
-    
+
     findbugs {
-    	sourceSets = [sourceSets.main]
-    	ignoreFailures = true
-	}
-
-	tasks.withType(FindBugs) {
-	    reports {
-	        xml.enabled false
-	        html.enabled true
-	    }
-	}
-	
-	test.finalizedBy jacocoTestReport
-
-	jacoco {
-	    toolVersion = "0.8.1"
-	}
-
-	jacocoTestReport {
-	     additionalSourceDirs = files(sourceSets.main.allSource.srcDirs)
-	     sourceDirectories = files(sourceSets.main.allSource.srcDirs)
-	     classDirectories =  files(sourceSets.main.output)
-	     reports {
-		     xml.enabled false
-		     csv.enabled false
-		}
-	} 
+        sourceSets = [sourceSets.main]
+        ignoreFailures = true
+    }
+
+    tasks.withType(FindBugs) {
+        reports {
+            xml.enabled false
+            html.enabled true
+        }
+    }
+
+    test.finalizedBy jacocoTestReport
+
+    jacoco {
+        toolVersion = "0.8.1"
+    }
+
+    jacocoTestReport {
+        additionalSourceDirs = files(sourceSets.main.allSource.srcDirs)
+        sourceDirectories = files(sourceSets.main.allSource.srcDirs)
+        classDirectories = files(sourceSets.main.output)
+        reports {
+            xml.enabled false
+            csv.enabled false
+        }
+    }
 }
 
 sourceSets {
-  startMartServer {
-    resources {
-      srcDir 'src/test/resources'
+    startMartServer {
+        resources {
+            srcDir 'src/test/resources'
+        }
     }
-  }
 }
 
-eclipse.classpath.file.beforeMerged{ classpath -> classpath.entries.clear() }
-
-dependencies {	
-	//occiware
-	compile group: 'org.eclipse.cmf.occi', name: 'core', version: '1.0.0'
-	compile group: 'org.eclipse.cmf.occi', name: 'infrastructure', version: '1.0.0'
-	compile group: 'org.eclipse.cmf.occi', name: 'crtp', version: '1.0.0'
-	
-	compile group: 'org.modmacao', name: 'core', version: '1.0.0'
-	compile group: 'org.modmacao', name: 'placement', version: '1.0.0'
-	compile group: 'org.modmacao.occi', name: 'platform', version: '1.0.0'
-	compile group: 'org.modmacao.openstack', name: 'runtime', version: '1.0.0'
-	compile group: 'org.modmacao.openstack.swe', name: 'runtime', version: '1.0.0'
-	compile group: 'org.modmacao', name: 'ansible', version: '1.0.0'
-	
-	
-    //own
-	compile group: 'de.ugoe.cs.rwm', name: 'cocci', version: cocciVersion
-	compile group: 'de.ugoe.cs.rwm', name: 'docci', version: docciVersion
-	compile group: 'de.ugoe.cs.rwm', name: 'tocci', version: tocciVersion
-	compile group: 'de.ugoe.cs.rwm.pog', name: 'model', version: '1.0.0'
-	//compile group: 'de.ugoe.cs.rwm.mocci', name: 'model', version: '1.0.0'
-	compile project(':de.ugoe.cs.rwm.mocci.model')
-
-	//maven
-	compile group: 'log4j', name: 'log4j', version: '1.2.17'
-	compile group: 'com.google.guava', name: 'guava', version: '25.1-jre'
-	compile group: 'org.apache.logging.log4j', name: 'log4j-slf4j-impl', version: '2.11.0'
-	compile "org.eclipse.core:org.eclipse.core.runtime:3.7.0"
-	compile group: 'com.googlecode.json-simple', name: 'json-simple', version: '1.1.1'
-	compile group: 'com.jcraft', name: 'jsch', version: '0.1.54'
-	
-	//Nexus
-	compile "org.eclipse.uml2:org.eclipse.uml2.uml:4.1.2"
-	//runtime?
-	compile "org.eclipse.uml2:org.eclipse.uml2.types:1.1.0"
-	compile "org.eclipse.uml2:org.eclipse.uml2.common:1.8.2"
-	compile group: 'org.eclipse.ocl', name: 'pivot', version: '1.3.0'
-	
-	testCompile group: 'junit', name: 'junit', version: '4.12'
-}
+eclipse.classpath.file.beforeMerged { classpath -> classpath.entries.clear() }
 
+dependencies {
+    //occiware
+    compile group: 'org.eclipse.cmf.occi', name: 'core', version: '1.0.0'
+    compile group: 'org.eclipse.cmf.occi', name: 'infrastructure', version: '1.0.0'
+    compile group: 'org.eclipse.cmf.occi', name: 'crtp', version: '1.0.0'
 
+    compile group: 'org.modmacao', name: 'core', version: '1.0.0'
+    compile group: 'org.modmacao', name: 'placement', version: '1.0.0'
+    compile group: 'org.modmacao.occi', name: 'platform', version: '1.0.0'
+    compile group: 'org.modmacao.openstack', name: 'runtime', version: '1.0.1'
+    compile group: 'org.modmacao.openstack.swe', name: 'runtime', version: '1.0.0'
+    compile group: 'org.modmacao', name: 'ansible', version: '1.0.0'
+    compile group: 'org.eclipse.cmf.occi', name: 'docker', version: '1.0.0'
 
-project(':de.ugoe.cs.rwm.mocci.model.edit') { 
-  dependencies {
+
+    //own
+    compile group: 'de.ugoe.cs.rwm.domain', name: 'workload', version: '1.0.1'
+    compile group: 'de.ugoe.cs.rwm', name: 'cocci', version: cocciVersion
+    compile group: 'de.ugoe.cs.rwm', name: 'docci', version: docciVersion
+    compile group: 'de.ugoe.cs.rwm', name: 'tocci', version: tocciVersion
+    compile group: 'de.ugoe.cs.rwm.pog', name: 'model', version: '1.0.0'
+    //compile group: 'de.ugoe.cs.rwm.mocci', name: 'model', version: '1.0.0'
     compile project(':de.ugoe.cs.rwm.mocci.model')
-  }
+
+    //maven
+    compile group: 'log4j', name: 'log4j', version: '1.2.17'
+    compile group: 'com.google.guava', name: 'guava', version: '25.1-jre'
+    compile group: 'org.apache.logging.log4j', name: 'log4j-slf4j-impl', version: '2.11.0'
+    compile "org.eclipse.core:org.eclipse.core.runtime:3.7.0"
+    compile group: 'com.googlecode.json-simple', name: 'json-simple', version: '1.1.1'
+    compile group: 'com.jcraft', name: 'jsch', version: '0.1.54'
+
+    //Nexus
+    compile "org.eclipse.uml2:org.eclipse.uml2.uml:4.1.2"
+    //runtime?
+    compile "org.eclipse.uml2:org.eclipse.uml2.types:1.1.0"
+    compile "org.eclipse.uml2:org.eclipse.uml2.common:1.8.2"
+    compile group: 'org.eclipse.ocl', name: 'pivot', version: '1.3.0'
+
+    testCompile group: 'junit', name: 'junit', version: '4.12'
 }
 
-project(':de.ugoe.cs.rwm.mocci.connector') { 
-  dependencies {
-    compile project(':de.ugoe.cs.rwm.mocci.model')
-  }
+
+project(':de.ugoe.cs.rwm.mocci.model.edit') {
+    dependencies {
+        compile project(':de.ugoe.cs.rwm.mocci.model')
+    }
 }
 
-project(':de.ugoe.cs.rwm.mocci.connector.dummy') { 
-  dependencies {
-    compile project(':de.ugoe.cs.rwm.mocci.model')
-  }
+project(':de.ugoe.cs.rwm.mocci.connector') {
+    dependencies {
+        compile project(':de.ugoe.cs.rwm.mocci.model')
+    }
+}
+
+project(':de.ugoe.cs.rwm.mocci.connector.dummy') {
+    dependencies {
+        compile project(':de.ugoe.cs.rwm.mocci.model')
+    }
 }
 
 jar {
@@ -198,7 +199,7 @@ task jacocoRootReport(type: org.gradle.testing.jacoco.tasks.JacocoReport) {
     dependsOn = subprojects.test
     additionalSourceDirs = files([project(':de.ugoe.cs.rwm.mocci.connector.dummy'), rootProject].sourceSets.main.allSource.srcDirs)
     sourceDirectories = files([project(':de.ugoe.cs.rwm.mocci.connector.dummy'), rootProject].sourceSets.main.allSource.srcDirs)
-    classDirectories =  files([project(':de.ugoe.cs.rwm.mocci.connector.dummy'), rootProject].sourceSets.main.output)
+    classDirectories = files([project(':de.ugoe.cs.rwm.mocci.connector.dummy'), rootProject].sourceSets.main.output)
     executionData = files([project(':de.ugoe.cs.rwm.mocci.connector.dummy'), rootProject].jacocoTestReport.executionData)
     reports {
         xml.enabled false
@@ -208,17 +209,17 @@ task jacocoRootReport(type: org.gradle.testing.jacoco.tasks.JacocoReport) {
 
 uploadArchives {
     repositories {
-       mavenDeployer {
-             repository(url: "https://nexus.informatik.uni-goettingen.de/content/repositories/rwm/") {
-             authentication(userName: System.getenv('NEXUSUSER'), password: System.getenv('NEXUSPASSWORD'))
+        mavenDeployer {
+            repository(url: "https://nexus.informatik.uni-goettingen.de/content/repositories/rwm/") {
+                authentication(userName: System.getenv('NEXUSUSER'), password: System.getenv('NEXUSPASSWORD'))
+            }
+            if (System.getenv('VERSION') != null) {
+                pom.version = System.getenv('VERSION')
+                println "Version is set to: " + System.getenv('VERSION')
             }
-             if (System.getenv('VERSION') != null) {
-                  pom.version = System.getenv('VERSION')
-                  println "Version is set to: " + System.getenv('VERSION')
-             }
-             pom.version = "SNAPSHOT"
-             pom.artifactId = "mocci"
-             pom.groupId = "de.ugoe.cs.rwm"
-       }
+            pom.version = "SNAPSHOT"
+            pom.artifactId = "mocci"
+            pom.groupId = "de.ugoe.cs.rwm"
+        }
     }
 }
diff --git a/src/main/java/de/ugoe/cs/rwm/mocci/UpScalerSpark.java b/src/main/java/de/ugoe/cs/rwm/mocci/UpScalerSpark.java
new file mode 100644
index 0000000000000000000000000000000000000000..00642fe38263378d518137bfda8073bbb61c4397
--- /dev/null
+++ b/src/main/java/de/ugoe/cs/rwm/mocci/UpScalerSpark.java
@@ -0,0 +1,260 @@
+/**
+ * Copyright (c) 2018-2019 University of Goettingen
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * - Johannes Erbel <johannes.erbel@cs.uni-goettingen.de>
+ */
+
+package de.ugoe.cs.rwm.mocci;
+
+import java.nio.file.Path;
+
+import org.eclipse.cmf.occi.core.AttributeState;
+import org.eclipse.cmf.occi.core.Configuration;
+import org.eclipse.cmf.occi.core.Mixin;
+import org.eclipse.cmf.occi.core.MixinBase;
+import org.eclipse.cmf.occi.docker.Container;
+import org.eclipse.cmf.occi.docker.DockerFactory;
+import org.eclipse.cmf.occi.infrastructure.Compute;
+import org.eclipse.cmf.occi.infrastructure.ComputeStatus;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.modmacao.occi.platform.Application;
+import org.modmacao.occi.platform.Component;
+import org.modmacao.occi.platform.Componentlink;
+import org.modmacao.placement.Placementlink;
+
+import de.ugoe.cs.rwm.docci.ModelUtility;
+import de.ugoe.cs.rwm.docci.connector.Connector;
+import de.ugoe.cs.rwm.domain.workload.Componentsim;
+import de.ugoe.cs.rwm.domain.workload.Computesim;
+import de.ugoe.cs.rwm.domain.workload.Sensorsim;
+import de.ugoe.cs.rwm.domain.workload.WorkloadFactory;
+import monitoring.*;
+
+public class UpScalerSpark extends AbsScaler {
+
+	public UpScalerSpark(Connector conn, Path runtimePath) {
+		this.conn = conn;
+		this.runtimePath = runtimePath;
+	}
+
+	@SuppressWarnings("unused")
+	public Resource upScaleNodes() {
+		runtimeModel = ModelUtility.loadOCCIintoEMFResource(conn.loadRuntimeModel(runtimePath));
+		Configuration config = ((Configuration) runtimeModel.getContents().get(0));
+
+		Compute comp = addCompute(config);
+		Component worker = addWorkerComponent(config, comp);
+		Sensor sens = addSensor(config, comp);
+		Resultprovider rp = addResultProvider(config, comp, sens);
+
+		config.getResources().add(comp);
+		config.getResources().add(worker);
+		config.getResources().add(sens);
+		config.getResources().add(rp);
+
+		return runtimeModel;
+	}
+
+	private Compute addCompute(Configuration config) {
+		System.out.println("         Adding Compute Node to Model");
+		Compute comp = iFactory.createCompute();
+		comp.setOcciComputeState(ComputeStatus.ACTIVE);
+		Container cont = DockerFactory.eINSTANCE.createContainer();
+
+		comp.setKind(cont.getKind());
+
+		AttributeState state = factory.createAttributeState();
+		state.setName("occi.compute.state");
+		state.setValue("active");
+		comp.getAttributes().add(state);
+		config.getResources().add(comp);
+
+		comp.setTitle("Hadoop-Worker-additional");
+
+		AttributeState hostname = factory.createAttributeState();
+		hostname.setName("occi.compute.hostname");
+		hostname.setValue("Hadoop-Worker-additional");
+		comp.getAttributes().add(hostname);
+
+		Computesim sim = WorkloadFactory.eINSTANCE.createComputesim();
+		comp.getParts().add(sim);
+
+		return comp;
+	}
+
+	private Component addWorkerComponent(Configuration config, Compute comp) {
+		System.out.println("         Adding Worker Component to Model");
+		Component worker = pFactory.createComponent();
+		worker.setTitle("hWorker");
+		// worker.setOcciComponentState(Status.ACTIVE);
+		config.getResources().add(worker);
+
+		AttributeState attr = factory.createAttributeState();
+		attr.setName("occi.core.id");
+		attr.setValue(worker.getId());
+		worker.getAttributes().add(attr);
+
+		MixinBase mBase = factory.createMixinBase();
+		mBase.setMixin(getMixin("hadoop-worker", config));
+		worker.getParts().add(mBase);
+
+		Placementlink pLink = placeFactory.createPlacementlink();
+		pLink.setSource(worker);
+		pLink.setTarget(comp);
+
+		Componentlink compLink = pFactory.createComponentlink();
+		compLink.setSource(getResourceById(config.getResources(), getApplicationId(config)));
+		compLink.setTarget(worker);
+
+		Componentsim sim = WorkloadFactory.eINSTANCE.createComponentsim();
+		worker.getParts().add(sim);
+
+		MAPE.newComp = worker;
+		return worker;
+	}
+
+	private String getApplicationId(Configuration config) {
+		for (org.eclipse.cmf.occi.core.Resource res : config.getResources()) {
+			if (res instanceof Application) {
+				if (res.getTitle().toLowerCase().contains("hadoop")) {
+					return res.getId();
+				}
+			}
+		}
+		return "";
+	}
+
+	private Sensor addSensor(Configuration config, Compute comp) {
+		System.out.println("         Adding Sensor to Model");
+		Sensor sens = mFactory.createSensor();
+		sens.setTitle("CPUSensor");
+		config.getResources().add(sens);
+
+		AttributeState attr = factory.createAttributeState();
+		attr.setName("occi.core.id");
+		attr.setValue(sens.getId());
+		sens.getAttributes().add(attr);
+
+		Monitorableproperty mp = mFactory.createMonitorableproperty();
+		mp.setTitle("monProp");
+		mp.setMonitoringProperty("CPU");
+		AttributeState attrProp = factory.createAttributeState();
+		attrProp.setName("monitoring.property");
+		attrProp.setValue("CPU");
+		mp.getAttributes().add(attrProp);
+		mp.setSource(sens);
+		mp.setTarget(comp);
+
+		Sensorsim sim = WorkloadFactory.eINSTANCE.createSensorsim();
+		sim.setSimChangeRate(3000);
+		sim.setSimMonitoringResults("None, None, High, Critical");
+		sens.getParts().add(sim);
+
+		return sens;
+	}
+
+	private Datagatherer addDataGatherer(Configuration config, Compute comp, Sensor sens) {
+		System.out.println("             Adding Datagatherer to Model");
+		Datagatherer dg = mFactory.createDatagatherer();
+		dg.setTitle("CPUGatherer");
+		config.getResources().add(dg);
+
+		AttributeState attr = factory.createAttributeState();
+		attr.setName("occi.core.id");
+		attr.setValue(dg.getId());
+		dg.getAttributes().add(attr);
+
+		MixinBase mBase = factory.createMixinBase();
+		mBase.setMixin(getMixin("cpugatherer", config));
+		dg.getParts().add(mBase);
+
+		Componentlink c1 = pFactory.createComponentlink();
+		c1.setSource(sens);
+		c1.setTarget(dg);
+
+		Placementlink pl = placeFactory.createPlacementlink();
+		pl.setSource(dg);
+		pl.setTarget(comp);
+
+		return dg;
+	}
+
+	private Dataprocessor addDataProcessor(Configuration config, Compute comp, Sensor sens, Datagatherer dg) {
+		System.out.println("             Adding Dataprocessor to Model");
+		Dataprocessor dp = mFactory.createDataprocessor();
+		dp.setTitle("CPUProcessor");
+		config.getResources().add(dp);
+
+		AttributeState attr = factory.createAttributeState();
+		attr.setName("occi.core.id");
+		attr.setValue(dp.getId());
+		dp.getAttributes().add(attr);
+
+		MixinBase mBase = factory.createMixinBase();
+		mBase.setMixin(getMixin("cpuprocessorlocal", config));
+		dp.getParts().add(mBase);
+
+		Componentlink c2 = pFactory.createComponentlink();
+		c2.setSource(sens);
+		c2.setTarget(dp);
+		Placementlink pl = placeFactory.createPlacementlink();
+		pl.setSource(dp);
+		pl.setTarget(comp);
+		Componentlink cl = pFactory.createComponentlink();
+		cl.setSource(dp);
+		cl.setTarget(dg);
+		return dp;
+	}
+
+	private Resultprovider addResultProvider(Configuration config, Compute comp, Sensor sens) {
+		System.out.println("             Adding Resultprovider to Model");
+		Resultprovider rp = mFactory.createResultprovider();
+		rp.setTitle("CPUProvider");
+		config.getResources().add(rp);
+
+		Occiresultprovider orp = mFactory.createOcciresultprovider();
+		orp.setResultProviderEndpoint("localhost:8080");
+		AttributeState attrOP = factory.createAttributeState();
+		attrOP.setName("result.provider.endpoint");
+		attrOP.setValue("localhost:8080");
+		rp.getAttributes().add(attrOP);
+
+		rp.getParts().add(orp);
+
+		MixinBase mBase = factory.createMixinBase();
+		mBase.setMixin(getMixin("cpupublisher", config));
+		rp.getParts().add(mBase);
+
+		AttributeState attr = factory.createAttributeState();
+		attr.setName("occi.core.id");
+		attr.setValue(rp.getId());
+		rp.getAttributes().add(attr);
+
+		Componentlink c3 = pFactory.createComponentlink();
+		c3.setSource(sens);
+		c3.setTarget(rp);
+
+		Placementlink pl = placeFactory.createPlacementlink();
+		pl.setSource(rp);
+		pl.setTarget(comp);
+
+		Componentsim sim = WorkloadFactory.eINSTANCE.createComponentsim();
+		rp.getParts().add(sim);
+
+		return rp;
+	}
+
+	private Mixin getMixin(String string, Configuration config) {
+		for (Mixin mix : config.getMixins()) {
+			if (mix.getTerm().equals(string)) {
+				return mix;
+			}
+		}
+		return null;
+	}
+}