diff --git a/theodolite-quarkus/YAML/aggregation-deployment.yaml b/theodolite-quarkus/YAML/aggregation-deployment.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..07732ca1dd1e6b2b06f098dfb10a53d38e8d5cae
--- /dev/null
+++ b/theodolite-quarkus/YAML/aggregation-deployment.yaml
@@ -0,0 +1,55 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  name: titan-ccp-aggregation
+spec:
+  selector:
+    matchLabels:
+      app: titan-ccp-aggregation
+  replicas: 1
+  template:
+    metadata:
+      labels:
+        app: titan-ccp-aggregation
+    spec:
+      terminationGracePeriodSeconds: 0
+      containers:
+      - name: uc-application
+        image: uc-app:latest
+        ports:
+        - containerPort: 5555
+          name: jmx
+        env:
+        - name: KAFKA_BOOTSTRAP_SERVERS
+          value: "my-confluent-cp-kafka:9092"
+        - name: SCHEMA_REGISTRY_URL
+          value: "http://my-confluent-cp-schema-registry:8081"
+        - name: JAVA_OPTS
+          value: "-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.port=5555"
+        - name: COMMIT_INTERVAL_MS # Set as default for the applications
+          value: "100"
+        resources:
+          limits:
+            memory: 4Gi
+            cpu: 1000m
+      - name: prometheus-jmx-exporter
+        image: "solsson/kafka-prometheus-jmx-exporter@sha256:6f82e2b0464f50da8104acd7363fb9b995001ddff77d248379f8788e78946143"
+        command:
+          - java
+          - -XX:+UnlockExperimentalVMOptions
+          - -XX:+UseCGroupMemoryLimitForHeap
+          - -XX:MaxRAMFraction=1
+          - -XshowSettings:vm
+          - -jar
+          - jmx_prometheus_httpserver.jar
+          - "5556"
+          - /etc/jmx-aggregation/jmx-kafka-prometheus.yml
+        ports:
+          - containerPort: 5556
+        volumeMounts:
+          - name: jmx-config
+            mountPath: /etc/jmx-aggregation
+      volumes:
+        - name: jmx-config
+          configMap:
+            name: aggregation-jmx-configmap
diff --git a/theodolite-quarkus/YAML/aggregation-service.yaml b/theodolite-quarkus/YAML/aggregation-service.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..916dd6677d60370b1d62e5d7e708c3ee966bda23
--- /dev/null
+++ b/theodolite-quarkus/YAML/aggregation-service.yaml
@@ -0,0 +1,17 @@
+apiVersion: v1
+kind: Service
+metadata:  
+  name: titan-ccp-aggregation
+  labels:
+    app: titan-ccp-aggregation
+spec:
+  #type: NodePort
+  selector:    
+    app: titan-ccp-aggregation
+  ports:  
+  - name: http
+    port: 80
+    targetPort: 80
+    protocol: TCP
+  - name: metrics
+    port: 9980
diff --git a/theodolite-quarkus/YAML/jmx-configmap.yaml b/theodolite-quarkus/YAML/jmx-configmap.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..78496a86b1242a89b9e844ead3e700fd0b9a9667
--- /dev/null
+++ b/theodolite-quarkus/YAML/jmx-configmap.yaml
@@ -0,0 +1,10 @@
+apiVersion: v1
+kind: ConfigMap
+metadata:
+  name: aggregation-jmx-configmap
+data:
+  jmx-kafka-prometheus.yml: |+
+    jmxUrl: service:jmx:rmi:///jndi/rmi://localhost:5555/jmxrmi
+    lowercaseOutputName: true
+    lowercaseOutputLabelNames: true
+    ssl: false
diff --git a/theodolite-quarkus/YAML/theodolite.yaml b/theodolite-quarkus/YAML/theodolite.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..68d53386bcf5e77ce08d964f3c04eb000794575c
--- /dev/null
+++ b/theodolite-quarkus/YAML/theodolite.yaml
@@ -0,0 +1,51 @@
+apiVersion: batch/v1
+kind: Job
+metadata:
+  name: theodolite
+spec:
+  template:
+    spec:
+      volumes:
+      - name: theodolite-pv-storage
+        persistentVolumeClaim:
+          claimName: theodolite-pv-claim
+      containers:
+        - name: theodolite
+          image: bvonheid/theodolite:latest
+          # imagePullPolicy: Never # Used to pull "own" local image
+          env:
+            - name: UC # mandatory
+              value: "1"
+            - name: LOADS # mandatory
+              value: "100000, 200000"
+            - name: INSTANCES # mandatory
+              value: "1, 2, 3"
+            # - name: DURATION
+            #   value: "5"
+            # - name: PARTITIONS
+            #   value: "40"
+            # - name: DOMAIN_RESTRICTION
+            #   value: "True"
+            # - name: SEARCH_STRATEGY
+            #   value: "linear-search"
+            # - name: CPU_LIMIT
+            #   value: "1000m"
+            # - name: MEMORY_LIMIT
+            #   value: "4Gi"
+            - name: PROMETHEUS_BASE_URL
+              value: "http://prometheus-operated:9090"
+            # - name: NAMESPACE
+            #   value: "default"
+            # - name: CONFIGURATIONS
+            #   value: "COMMIT_INTERVAL_MS=100, NUM_STREAM_THREADS=1"
+            - name: RESULT_PATH
+              value: "results"
+            - name: PYTHONUNBUFFERED # Enable logs in Kubernetes
+              value: "1"
+          volumeMounts:
+            - mountPath: "/app/results"
+              name: theodolite-pv-storage
+      restartPolicy: Never
+      # Uncomment if RBAC is enabled and configured
+      # serviceAccountName: theodolite
+  backoffLimit: 4
diff --git a/theodolite-quarkus/YAML/workloadGenerator.yaml b/theodolite-quarkus/YAML/workloadGenerator.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..794468b18dc74ca09872577b5b3c115605bd4620
--- /dev/null
+++ b/theodolite-quarkus/YAML/workloadGenerator.yaml
@@ -0,0 +1,38 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  name: titan-ccp-load-generator
+spec:
+  selector:
+    matchLabels:
+      app: titan-ccp-load-generator
+  replicas: 1
+  template:
+    metadata:
+      labels:
+        app: titan-ccp-load-generator
+    spec:
+      terminationGracePeriodSeconds: 0
+      containers:
+      - name: workload-generator
+        image: workload-generator:latest
+        env:
+        # Order need to be preserved for run_uc.py
+        - name: NUM_SENSORS
+          value: "25000"
+        - name: INSTANCES
+          value: "1"
+        - name: NUM_NESTED_GROUPS
+          value: "5"
+        - name: ZK_HOST
+          value: "my-confluent-cp-zookeeper"
+        - name: ZK_PORT
+          value: "2181"
+        - name: KAFKA_BOOTSTRAP_SERVERS
+          value: "my-confluent-cp-kafka:9092"
+        - name: SCHEMA_REGISTRY_URL
+          value: "http://my-confluent-cp-schema-registry:8081"
+        - name: POD_NAME
+          valueFrom:
+            fieldRef:
+              fieldPath: metadata.name
diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/Main.kt b/theodolite-quarkus/src/main/kotlin/theodolite/Main.kt
index a102bcfb045a70ee804dadb2b809e81bbe79290f..3aae49e5a805c62284c54d0a905eabf89c306588 100644
--- a/theodolite-quarkus/src/main/kotlin/theodolite/Main.kt
+++ b/theodolite-quarkus/src/main/kotlin/theodolite/Main.kt
@@ -1,4 +1,5 @@
 package theodolite
+
 import io.quarkus.runtime.annotations.QuarkusMain
 import theodolite.execution.TheodoliteExecutor
 import mu.KotlinLogging
diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/execution/KafkaBenchmarkExecutor.kt b/theodolite-quarkus/src/main/kotlin/theodolite/execution/KafkaBenchmarkExecutor.kt
index 9a3885e2540b6828e4d2d78273738c0e122d9ca3..5b95685367c0a2471f6b7264bc66ec37cdd9cd29 100644
--- a/theodolite-quarkus/src/main/kotlin/theodolite/execution/KafkaBenchmarkExecutor.kt
+++ b/theodolite-quarkus/src/main/kotlin/theodolite/execution/KafkaBenchmarkExecutor.kt
@@ -11,7 +11,7 @@ private val logger = KotlinLogging.logger {}
 
 class KafkaBenchmarkExecutor(benchmark: Benchmark, results: Results, executionDuration: Duration) : BenchmarkExecutor(benchmark, results, executionDuration) {
     override fun runExperiment(load: LoadDimension, res: Resource): Boolean {
-        benchmark.start()
+        benchmark.start(load, res)
         this.waitAndLog()
         benchmark.stop()
         // todo evaluate
diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/execution/TheodoliteExecutor.kt b/theodolite-quarkus/src/main/kotlin/theodolite/execution/TheodoliteExecutor.kt
index b6554a6a90293954d5548a1270c8d08a0b480356..3ca0840c4cb9248147133c137a31a72baf053b3c 100644
--- a/theodolite-quarkus/src/main/kotlin/theodolite/execution/TheodoliteExecutor.kt
+++ b/theodolite-quarkus/src/main/kotlin/theodolite/execution/TheodoliteExecutor.kt
@@ -8,7 +8,7 @@ import java.time.Duration
 
 class TheodoliteExecutor() {
     private fun loadConfig(): Config {
-        val benchmark: Benchmark = KafkaBenchmark(emptyMap())
+        val benchmark: KafkaBenchmark = KafkaBenchmark(emptyMap())
         val results: Results = Results()
         val executionDuration = Duration.ofSeconds(60*5 )
         val executor: BenchmarkExecutor = KafkaBenchmarkExecutor(benchmark, results, executionDuration)
diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/k8s/ConfigMapManager.kt b/theodolite-quarkus/src/main/kotlin/theodolite/k8s/ConfigMapManager.kt
new file mode 100644
index 0000000000000000000000000000000000000000..fe11085c6060e7bca099e6ab27bcd0480cc41168
--- /dev/null
+++ b/theodolite-quarkus/src/main/kotlin/theodolite/k8s/ConfigMapManager.kt
@@ -0,0 +1,20 @@
+package theodolite.k8s
+
+import io.fabric8.kubernetes.api.model.ConfigMap
+import io.fabric8.kubernetes.client.NamespacedKubernetesClient
+
+class ConfigMapManager(client: NamespacedKubernetesClient) {
+    var client: NamespacedKubernetesClient
+
+    init {
+        this.client = client
+    }
+
+    fun deploy(configMap: ConfigMap) {
+        client.configMaps().create(configMap)
+    }
+
+    fun delete(configMap: ConfigMap) {
+        client.configMaps().delete(configMap)
+    }
+}
diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/k8s/DeploymentManager.kt b/theodolite-quarkus/src/main/kotlin/theodolite/k8s/DeploymentManager.kt
new file mode 100644
index 0000000000000000000000000000000000000000..2c87a85448c2623f5f703937c9215c3c89c2212a
--- /dev/null
+++ b/theodolite-quarkus/src/main/kotlin/theodolite/k8s/DeploymentManager.kt
@@ -0,0 +1,78 @@
+package theodolite.k8s
+
+import io.fabric8.kubernetes.api.model.Container
+import io.fabric8.kubernetes.api.model.EnvVar
+import io.fabric8.kubernetes.api.model.EnvVarSource
+import io.fabric8.kubernetes.api.model.Quantity
+import io.fabric8.kubernetes.api.model.apps.Deployment
+import io.fabric8.kubernetes.client.NamespacedKubernetesClient
+import mu.KotlinLogging
+
+private val logger = KotlinLogging.logger {}
+
+class DeploymentManager(client: NamespacedKubernetesClient) {
+    var client: NamespacedKubernetesClient
+
+    init {
+        this.client = client
+    }
+
+    /**
+     * Sets the ContainerEvironmentVariables, creates new if variable don t exist.
+     * @param container - The Container
+     * @param map - Map of k=Name,v =Value of EnviromentVariables
+     */
+    private fun setContainerEnv(container: Container, map: Map<String, String>) {
+        map.forEach { k, v ->
+            // filter for mathing name and set value
+            val x = container.env.filter { envVar -> envVar.name == k }
+
+            if (x.isEmpty()) {
+                val newVar = EnvVar(k, v, EnvVarSource())
+                container.env.add(newVar)
+            } else {
+                x.forEach {
+                    it.value = v
+                }
+            }
+        }
+    }
+
+    /**
+     * Set the enviroment Variable for a container
+     */
+    fun setWorkloadEnv(workloadDeployment: Deployment, containerName: String, map: Map<String, String>) {
+        workloadDeployment.spec.template.spec.containers.filter { it.name == containerName }
+            .forEach { it: Container ->
+                setContainerEnv(it, map)
+            }
+    }
+
+    /**
+     *  Change the RessourceLimit of a container (Usally SUT)
+     */
+    fun changeRessourceLimits(deployment: Deployment, ressource: String, containerName: String, limit: String) {
+        deployment.spec.template.spec.containers.filter { it.name == containerName }.forEach {
+            it.resources.limits.replace(ressource, Quantity(limit))
+        }
+    }
+
+    /**
+     * Change the image name of a container (SUT and the Worklaodgenerators)
+     */
+    fun setImageName(deployment: Deployment, containerName: String, image: String) {
+        deployment.spec.template.spec.containers.filter { it.name == containerName }.forEach {
+            it.image = image
+        }
+    }
+
+    // TODO potential add exception handling
+    fun deploy(deployment: Deployment) {
+        client.apps().deployments().create(deployment)
+    }
+
+    // TODO potential add exception handling
+    fun delete(deployment: Deployment) {
+        client.apps().deployments().delete(deployment)
+    }
+}
diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/k8s/ServiceManager.kt b/theodolite-quarkus/src/main/kotlin/theodolite/k8s/ServiceManager.kt
new file mode 100644
index 0000000000000000000000000000000000000000..16e5bbd646d99f4155bd1b232d148be463a8c37c
--- /dev/null
+++ b/theodolite-quarkus/src/main/kotlin/theodolite/k8s/ServiceManager.kt
@@ -0,0 +1,27 @@
+package theodolite.k8s
+
+import io.fabric8.kubernetes.api.model.Service
+import io.fabric8.kubernetes.client.NamespacedKubernetesClient
+
+class ServiceManager(client: NamespacedKubernetesClient) {
+    var client: NamespacedKubernetesClient
+
+    init {
+        this.client = client
+    }
+
+    fun changeServiceName(service: Service, newName: String) {
+
+        service.metadata.apply {
+            name = newName
+        }
+    }
+
+    fun deploy(service: Service) {
+        client.services().create(service)
+    }
+
+    fun delete(service: Service) {
+        client.services().delete(service)
+    }
+}
diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/k8s/TopicManager.kt b/theodolite-quarkus/src/main/kotlin/theodolite/k8s/TopicManager.kt
index 73daeda6f80372c3c35725b7e12c309a7d8fbce8..23954d19831e022a2590c5493509e9b4d688ca93 100644
--- a/theodolite-quarkus/src/main/kotlin/theodolite/k8s/TopicManager.kt
+++ b/theodolite-quarkus/src/main/kotlin/theodolite/k8s/TopicManager.kt
@@ -12,7 +12,7 @@ class TopicManager(boostrapIp: String) {
     init {
         try {
             kafkaAdmin = AdminClient.create(props)
-        } catch (e : Exception) {
+        } catch (e: Exception) {
             System.out.println(e.toString())
         }
     }
@@ -45,7 +45,7 @@ class TopicManager(boostrapIp: String) {
 
         try {
             result.all().get()
-        } catch (ex:Exception) {
+        } catch (ex: Exception) {
             System.out.println(ex.toString())
         }
         System.out.println("Topics deleted")
diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/k8s/WorkloadGeneratorStateCleaner.kt b/theodolite-quarkus/src/main/kotlin/theodolite/k8s/WorkloadGeneratorStateCleaner.kt
index 5ab9ad222756383cc841768a12a6aa72cab165a1..ec94e32c4dbfd0015dfc5f48ca811c7ea8ce0f10 100644
--- a/theodolite-quarkus/src/main/kotlin/theodolite/k8s/WorkloadGeneratorStateCleaner.kt
+++ b/theodolite-quarkus/src/main/kotlin/theodolite/k8s/WorkloadGeneratorStateCleaner.kt
@@ -1,4 +1,4 @@
-package theodolite
+package theodolite.k8s
 
 import org.apache.zookeeper.KeeperException
 import org.apache.zookeeper.WatchedEvent
@@ -15,7 +15,7 @@ class WorkloadGeneratorStateCleaner(ip: String) {
         try {
             val watcher: Watcher = ZookeperWatcher()  // defined below
             zookeeperClient = ZooKeeper(ip, sessionTimeout, watcher)
-        } catch (e:Exception) {
+        } catch (e: Exception) {
             System.out.println(e.toString())
         }
     }
@@ -33,12 +33,14 @@ class WorkloadGeneratorStateCleaner(ip: String) {
 
             try {
                 val clients = zookeeperClient.getChildren(path, true)
-                if (clients.isEmpty()){
+                if (clients.isEmpty()) {
                     break;
                 }
             } catch (ex: Exception) {
                 when (ex) {
-                    is KeeperException -> { deleted = true }
+                    is KeeperException -> {
+                        deleted = true
+                    }
                     is InterruptedException -> {
                         System.out.println(ex.toString())
                     }
diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/k8s/YamlLoader.kt b/theodolite-quarkus/src/main/kotlin/theodolite/k8s/YamlLoader.kt
new file mode 100644
index 0000000000000000000000000000000000000000..884d3d49714a9b42c957d042c13cc7c63c86773a
--- /dev/null
+++ b/theodolite-quarkus/src/main/kotlin/theodolite/k8s/YamlLoader.kt
@@ -0,0 +1,65 @@
+package theodolite.k8s
+
+import io.fabric8.kubernetes.api.model.ConfigMap
+import io.fabric8.kubernetes.api.model.Service
+import io.fabric8.kubernetes.api.model.apps.Deployment
+import io.fabric8.kubernetes.client.NamespacedKubernetesClient
+import mu.KotlinLogging
+
+private val logger = KotlinLogging.logger {}
+
+class YamlLoader(client: NamespacedKubernetesClient) {
+    var client: NamespacedKubernetesClient
+
+    init {
+        this.client = client
+    }
+
+    /**
+     * Parses a Service from a servive yaml
+     * @param path of the yaml file
+     * @return service from fabric8
+     */
+    fun loadService(path: String): Service? {
+
+        val service = loadGenericRessource(path, { x: String -> client.services().load(x).get() })
+        return service
+    }
+
+    /**
+     * Parses a Deployment from a Deployment yaml
+     * @param path of the yaml file
+     * @return Deployment from fabric8
+     */
+    fun loadDeployment(path: String): Deployment? {
+        val deployment = loadGenericRessource(path, { x: String -> client.apps().deployments().load(x).get() })
+        return deployment
+    }
+
+    /**
+     * Parses a ConfigMap from a ConfigMap yaml
+     * @param path of the yaml file
+     * @return ConfigMap from fabric8
+     */
+    fun loadConfigmap(path: String): ConfigMap? {
+        val configMap = loadGenericRessource(path, { x: String -> client.configMaps().load(x).get() })
+        return configMap
+    }
+
+    /**
+     * Generic helper function to load a resource.
+     * @param path of the resource
+     * @param f fuction that shall be applied to the resource.
+     */
+    private fun <T> loadGenericRessource(path: String, f: (String) -> T): T? {
+        var resource: T? = null
+
+        try {
+            resource = f(path)
+        } catch (e: Exception) {
+            logger.info("You potentially  misspelled the path: $path")
+            logger.info("$e")
+        }
+        return resource
+    }
+}
diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/util/KafkaBenchmark.kt b/theodolite-quarkus/src/main/kotlin/theodolite/util/KafkaBenchmark.kt
index 74201393b07e8f5e480ee8360f5265fb388fd4d1..d8b8405f5abfb839942514a07a2220287a653daa 100644
--- a/theodolite-quarkus/src/main/kotlin/theodolite/util/KafkaBenchmark.kt
+++ b/theodolite-quarkus/src/main/kotlin/theodolite/util/KafkaBenchmark.kt
@@ -2,7 +2,7 @@ package theodolite.util
 
 class KafkaBenchmark(config: Map<String, Any>): Benchmark(config) {
 
-    override fun start() {
+    override fun start(load: LoadDimension, resources: Resource) {
         TODO("Not yet implemented")
     }
 
@@ -10,8 +10,7 @@ class KafkaBenchmark(config: Map<String, Any>): Benchmark(config) {
         TODO("Not yet implemented")
     }
 
-    override fun startWorkloadGenerator(wg: String, dimValue: Int, ucId: String) {
+    override fun startWorkloadGenerator(wg: String, load: LoadDimension, ucId: String) {
         TODO("Not yet implemented")
     }
-
 }
\ No newline at end of file