diff --git a/CITATION.cff b/CITATION.cff
index ae409536b477586aaabde687b0bfbaef1ae422d3..b6afbc8d75810b530e3a15538301c03323e7c6e2 100644
--- a/CITATION.cff
+++ b/CITATION.cff
@@ -10,7 +10,7 @@ authors:
     given-names: Wilhelm
     orcid: "https://orcid.org/0000-0001-6625-4335"
 title: Theodolite
-version: "0.3.0"
+version: "0.4.0"
 repository-code: "https://github.com/cau-se/theodolite"
 license: "Apache-2.0"
 doi: "10.1016/j.bdr.2021.100209"
diff --git a/codemeta.json b/codemeta.json
index eff1f1ba4f3c9a70a46c3cf83c47c279e1838cf9..5696996592f63bf8ece23239d8204e0f25b9cce1 100644
--- a/codemeta.json
+++ b/codemeta.json
@@ -5,10 +5,10 @@
     "codeRepository": "https://github.com/cau-se/theodolite",
     "dateCreated": "2020-03-13",
     "datePublished": "2020-07-27",
-    "dateModified": "2021-02-11",
+    "dateModified": "2021-03-18",
     "downloadUrl": "https://github.com/cau-se/theodolite/releases",
     "name": "Theodolite",
-    "version": "0.3.0",
+    "version": "0.4.0",
     "description": "Theodolite is a framework for benchmarking the horizontal and vertical scalability of stream processing engines.",
     "developmentStatus": "active",
     "referencePublication": "https://doi.org/10.1016/j.bdr.2021.100209",
diff --git a/docs/index.yaml b/docs/index.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..86d26ece4d17293eae2cd757cc11e9b4efb5fafd
--- /dev/null
+++ b/docs/index.yaml
@@ -0,0 +1,39 @@
+apiVersion: v1
+entries:
+  theodolite:
+  - apiVersion: v2
+    appVersion: 0.4.0
+    created: "2021-03-18T15:35:40.125017837+01:00"
+    dependencies:
+    - condition: grafana.enabled
+      name: grafana
+      repository: https://grafana.github.io/helm-charts
+      version: 6.0.0
+    - condition: kube-prometheus-stack.enabled
+      name: kube-prometheus-stack
+      repository: https://prometheus-community.github.io/helm-charts
+      version: 12.0.0
+    - condition: cp-helm-charts.enabled
+      name: cp-helm-charts
+      repository: https://soerenhenning.github.io/cp-helm-charts
+      version: 0.6.0
+    - condition: kafka-lag-exporter.enabled
+      name: kafka-lag-exporter
+      repository: https://lightbend.github.io/kafka-lag-exporter/repo/
+      version: 0.6.6
+    description: Theodolite is a framework for benchmarking the scalability stream
+      processing engines.
+    digest: 45975b61b79547b152241cfc6dcf5e640090ff2c08ff9120275c77c9d9054155
+    home: https://cau-se.github.io/theodolite
+    maintainers:
+    - email: soeren.henning@email.uni-kiel.de
+      name: Sören Henning
+      url: https://www.se.informatik.uni-kiel.de/en/team/soeren-henning-m-sc
+    name: theodolite
+    sources:
+    - https://github.com/cau-se/theodolite
+    type: application
+    urls:
+    - https://github.com/cau-se/theodolite/releases/download/v0.4.0/theodolite-0.4.0.tgz
+    version: 0.4.0
+generated: "2021-03-18T15:35:40.093184237+01:00"
diff --git a/execution/helm/Chart.yaml b/execution/helm/Chart.yaml
index 4d4b32b2c63555c2d91f38497aa2317f97e68bc6..309ab9715c8cde98c7afd9f327fa09642e2d4775 100644
--- a/execution/helm/Chart.yaml
+++ b/execution/helm/Chart.yaml
@@ -29,6 +29,6 @@ dependencies:
     repository: https://lightbend.github.io/kafka-lag-exporter/repo/
     condition: kafka-lag-exporter.enabled
 
-version: 0.4.0-SNAPSHOT
+version: 0.4.0
 
-appVersion: 0.4.0-SNAPSHOT
+appVersion: 0.4.0
diff --git a/execution/run_uc.py b/execution/run_uc.py
index 904b87b377ca2db3f2d4ddd4fb70aba0136cfa21..e51468180b6ff1ba63ff67eb6ed0bd68fb045c06 100644
--- a/execution/run_uc.py
+++ b/execution/run_uc.py
@@ -156,7 +156,7 @@ def start_workload_generator(svc_yaml, wg_yaml, dim_value, uc_id):
     wg_containter = next(filter(
         lambda x: x['name'] == 'workload-generator', wg_yaml['spec']['template']['spec']['containers']))
     wg_containter['image'] = 'ghcr.io/cau-se/theodolite-uc' + uc_id + \
-        '-workload-generator:latest'
+        '-workload-generator:v0.4.0'
     # Set environment variables
 
     replace_env_value(wg_containter['env'], 'NUM_SENSORS', str(num_sensors))
@@ -239,7 +239,7 @@ def start_application(svc_yaml, svc_monitor_yaml, jmx_yaml, deploy_yaml,
         lambda x: x['name'] == 'uc-application',
         deploy_yaml['spec']['template']['spec']['containers']))
     app_container['image'] = 'ghcr.io/cau-se/theodolite-uc' + uc_id \
-        + '-kstreams-app:latest'
+        + '-kstreams-app:v0.4.0'
 
     # Set configurations environment parameters for SPE
     for k, v in configurations.items():
diff --git a/execution/theodolite.yaml b/execution/theodolite.yaml
index 06d14a0f589b2ac7a16ebaaae4d1490b840ea57b..3842cab5b9bb4c3dd17739dbb0ed4d645760244f 100644
--- a/execution/theodolite.yaml
+++ b/execution/theodolite.yaml
@@ -11,7 +11,7 @@ spec:
           claimName: theodolite-pv-claim
       containers:
         - name: theodolite
-          image: ghcr.io/cau-se/theodolite:latest
+          image: ghcr.io/cau-se/theodolite:v0.4.0
           # imagePullPolicy: Never # Used to pull "own" local image
           env:
             - name: UC # mandatory
diff --git a/execution/uc-application/aggregation-deployment.yaml b/execution/uc-application/aggregation-deployment.yaml
index 07732ca1dd1e6b2b06f098dfb10a53d38e8d5cae..cecbcc7fef730bc0aadf3c7885f8ead6f5789084 100644
--- a/execution/uc-application/aggregation-deployment.yaml
+++ b/execution/uc-application/aggregation-deployment.yaml
@@ -15,7 +15,7 @@ spec:
       terminationGracePeriodSeconds: 0
       containers:
       - name: uc-application
-        image: uc-app:latest
+        image: uc-app:v0.4.0
         ports:
         - containerPort: 5555
           name: jmx
diff --git a/execution/uc-workload-generator/workloadGenerator.yaml b/execution/uc-workload-generator/workloadGenerator.yaml
index 146e285f66d4c0e1a88d613e4ac2d5571234fad6..3c2c8ab35a4347ddb2f5b8e9f0924eb319820881 100644
--- a/execution/uc-workload-generator/workloadGenerator.yaml
+++ b/execution/uc-workload-generator/workloadGenerator.yaml
@@ -15,7 +15,7 @@ spec:
       terminationGracePeriodSeconds: 0
       containers:
       - name: workload-generator
-        image: workload-generator:latest
+        image: workload-generator:v0.4.0
         ports:
         - containerPort: 5701
           name: coordination
diff --git a/theodolite-benchmarks/docker-test/uc1-flink-docker-compose/docker-compose.yml b/theodolite-benchmarks/docker-test/uc1-flink-docker-compose/docker-compose.yml
index aa35ac2d1dee01cdf25d2eb2ac77bd056865479a..f1d365d0bd14c85280503eb996aaea700512e9a6 100755
--- a/theodolite-benchmarks/docker-test/uc1-flink-docker-compose/docker-compose.yml
+++ b/theodolite-benchmarks/docker-test/uc1-flink-docker-compose/docker-compose.yml
@@ -32,7 +32,7 @@ services:
       SCHEMA_REGISTRY_HOST_NAME: schema-registry
       SCHEMA_REGISTRY_KAFKASTORE_CONNECTION_URL: 'zookeeper:2181'
   load-generator: 
-    image: ghcr.io/cau-se/theodolite-uc1-workload-generator:latest
+    image: ghcr.io/cau-se/theodolite-uc1-workload-generator:v0.4.0
     depends_on:
       - schema-registry
       - kafka
@@ -43,7 +43,7 @@ services:
       SCHEMA_REGISTRY_URL: http://schema-registry:8081
       NUM_SENSORS: 10
   benchmark-jobmanager:
-    image: ghcr.io/cau-se/theodolite-uc1-flink:latest
+    image: ghcr.io/cau-se/theodolite-uc1-flink:v0.4.0
     ports:
       - "8080:8081"
     command: standalone-job --job-classname theodolite.uc1.application.HistoryServiceFlinkJob
@@ -58,7 +58,7 @@ services:
       - schema-registry
       - kafka
   benchmark-taskmanager:
-    image: ghcr.io/cau-se/theodolite-uc1-flink:latest
+    image: ghcr.io/cau-se/theodolite-uc1-flink:v0.4.0
     command: taskmanager
     environment:
       - |
diff --git a/theodolite-benchmarks/docker-test/uc1-kstreams-docker-compose/docker-compose.yml b/theodolite-benchmarks/docker-test/uc1-kstreams-docker-compose/docker-compose.yml
index 403becacff5a386eddfaa8e59fe7873d2adb006c..09a10efec71f60e42a1cbcbfe9de7e42a54fffd8 100755
--- a/theodolite-benchmarks/docker-test/uc1-kstreams-docker-compose/docker-compose.yml
+++ b/theodolite-benchmarks/docker-test/uc1-kstreams-docker-compose/docker-compose.yml
@@ -32,7 +32,7 @@ services:
       SCHEMA_REGISTRY_HOST_NAME: schema-registry
       SCHEMA_REGISTRY_KAFKASTORE_CONNECTION_URL: 'zookeeper:2181'
   benchmark:
-    image: ghcr.io/cau-se/theodolite-uc1-kstreams-app:latest
+    image: ghcr.io/cau-se/theodolite-uc1-kstreams-app:v0.4.0
     depends_on:
       - schema-registry
       - kafka
@@ -40,7 +40,7 @@ services:
       KAFKA_BOOTSTRAP_SERVERS: kafka:9092
       SCHEMA_REGISTRY_URL: http://schema-registry:8081
   load-generator: 
-    image: ghcr.io/cau-se/theodolite-uc1-workload-generator:latest
+    image: ghcr.io/cau-se/theodolite-uc1-workload-generator:v0.4.0
     depends_on:
       - schema-registry
       - kafka
diff --git a/theodolite-benchmarks/docker-test/uc2-flink-docker-compose/docker-compose.yml b/theodolite-benchmarks/docker-test/uc2-flink-docker-compose/docker-compose.yml
index a8bf56d52c1be7fea3f172d86f6deac27fcc24f7..eede1de89f4cd8a24b6fe769e8c6845c269f9004 100755
--- a/theodolite-benchmarks/docker-test/uc2-flink-docker-compose/docker-compose.yml
+++ b/theodolite-benchmarks/docker-test/uc2-flink-docker-compose/docker-compose.yml
@@ -33,7 +33,7 @@ services:
       SCHEMA_REGISTRY_HOST_NAME: schema-registry
       SCHEMA_REGISTRY_KAFKASTORE_CONNECTION_URL: 'zookeeper:2181'
   load-generator: 
-    image: ghcr.io/cau-se/theodolite-uc2-workload-generator:latest
+    image: ghcr.io/cau-se/theodolite-uc2-workload-generator:v0.4.0
     depends_on:
       - schema-registry
       - kafka
@@ -44,7 +44,7 @@ services:
       SCHEMA_REGISTRY_URL: http://schema-registry:8081
       NUM_SENSORS: 10  
   benchmark-jobmanager:
-    image: ghcr.io/cau-se/theodolite-uc2-flink:latest
+    image: ghcr.io/cau-se/theodolite-uc2-flink:v0.4.0
     ports:
       - "8080:8081"
     command: standalone-job --job-classname theodolite.uc2.application.HistoryServiceFlinkJob
@@ -59,7 +59,7 @@ services:
       - schema-registry
       - kafka
   benchmark-taskmanager:
-    image: ghcr.io/cau-se/theodolite-uc2-flink:latest
+    image: ghcr.io/cau-se/theodolite-uc2-flink:v0.4.0
     command: taskmanager
     environment:
       - |
diff --git a/theodolite-benchmarks/docker-test/uc2-kstreams-docker-compose/docker-compose.yml b/theodolite-benchmarks/docker-test/uc2-kstreams-docker-compose/docker-compose.yml
index 20d2c62dac13af29ec50439670308f2911f0d57a..d61207cdddc21d3f509232fd386f054313bf70b3 100755
--- a/theodolite-benchmarks/docker-test/uc2-kstreams-docker-compose/docker-compose.yml
+++ b/theodolite-benchmarks/docker-test/uc2-kstreams-docker-compose/docker-compose.yml
@@ -33,7 +33,7 @@ services:
       SCHEMA_REGISTRY_HOST_NAME: schema-registry
       SCHEMA_REGISTRY_KAFKASTORE_CONNECTION_URL: 'zookeeper:2181'
   benchmark:
-    image: ghcr.io/cau-se/theodolite-uc2-kstreams-app:latest
+    image: ghcr.io/cau-se/theodolite-uc2-kstreams-app:v0.4.0
     depends_on:
       - schema-registry
       - kafka
@@ -42,7 +42,7 @@ services:
       SCHEMA_REGISTRY_URL: http://schema-registry:8081
       KAFKA_WINDOW_DURATION_MINUTES: 60
   load-generator: 
-    image: ghcr.io/cau-se/theodolite-uc2-workload-generator:latest
+    image: ghcr.io/cau-se/theodolite-uc2-workload-generator:v0.4.0
     depends_on:
       - schema-registry
       - kafka
diff --git a/theodolite-benchmarks/docker-test/uc3-flink-docker-compose/docker-compose.yml b/theodolite-benchmarks/docker-test/uc3-flink-docker-compose/docker-compose.yml
index 9999caf046e844d066200ecfbf15d3351c167d31..e5de6ad90e236fbfb0b39c07a6431c3caae3b513 100755
--- a/theodolite-benchmarks/docker-test/uc3-flink-docker-compose/docker-compose.yml
+++ b/theodolite-benchmarks/docker-test/uc3-flink-docker-compose/docker-compose.yml
@@ -33,7 +33,7 @@ services:
       SCHEMA_REGISTRY_HOST_NAME: schema-registry
       SCHEMA_REGISTRY_KAFKASTORE_CONNECTION_URL: 'zookeeper:2181'
   load-generator: 
-    image: ghcr.io/cau-se/theodolite-uc3-workload-generator:latest
+    image: ghcr.io/cau-se/theodolite-uc3-workload-generator:v0.4.0
     depends_on:
       - schema-registry
       - kafka
@@ -44,7 +44,7 @@ services:
       SCHEMA_REGISTRY_URL: http://schema-registry:8081
       NUM_SENSORS: 10
   benchmark-jobmanager:
-    image: ghcr.io/cau-se/theodolite-uc3-flink:latest
+    image: ghcr.io/cau-se/theodolite-uc3-flink:v0.4.0
     ports:
       - "8080:8081"
     command: standalone-job --job-classname theodolite.uc3.application.HistoryServiceFlinkJob
@@ -59,7 +59,7 @@ services:
       - schema-registry
       - kafka
   benchmark-taskmanager:
-    image: ghcr.io/cau-se/theodolite-uc3-flink:latest
+    image: ghcr.io/cau-se/theodolite-uc3-flink:v0.4.0
     command: taskmanager
     environment:
       - |
diff --git a/theodolite-benchmarks/docker-test/uc3-kstreams-docker-compose/docker-compose.yml b/theodolite-benchmarks/docker-test/uc3-kstreams-docker-compose/docker-compose.yml
index ef16b858536b0d133dc49d002d16cf6c04193297..ef59b017b53584e7150b8000500b0d961052d50e 100755
--- a/theodolite-benchmarks/docker-test/uc3-kstreams-docker-compose/docker-compose.yml
+++ b/theodolite-benchmarks/docker-test/uc3-kstreams-docker-compose/docker-compose.yml
@@ -33,7 +33,7 @@ services:
       SCHEMA_REGISTRY_HOST_NAME: schema-registry
       SCHEMA_REGISTRY_KAFKASTORE_CONNECTION_URL: 'zookeeper:2181'
       benchmark:
-    image: ghcr.io/cau-se/theodolite-uc3-kstreams-app:latest
+    image: ghcr.io/cau-se/theodolite-uc3-kstreams-app:v0.4.0
     depends_on:
       - schema-registry
       - kafka
@@ -41,7 +41,7 @@ services:
       KAFKA_BOOTSTRAP_SERVERS: kafka:9092
       SCHEMA_REGISTRY_URL: http://schema-registry:8081
   load-generator: 
-    image: ghcr.io/cau-se/theodolite-uc3-workload-generator:latest
+    image: ghcr.io/cau-se/theodolite-uc3-workload-generator:v0.4.0
     depends_on:
       - schema-registry
       - kafka
diff --git a/theodolite-benchmarks/docker-test/uc4-flink-docker-compose/docker-compose.yml b/theodolite-benchmarks/docker-test/uc4-flink-docker-compose/docker-compose.yml
index 80720063991100bae2c8c148f14cd6f1a32bb0ff..6fcd596df6232ebde698083b14c76153cbafa945 100755
--- a/theodolite-benchmarks/docker-test/uc4-flink-docker-compose/docker-compose.yml
+++ b/theodolite-benchmarks/docker-test/uc4-flink-docker-compose/docker-compose.yml
@@ -32,7 +32,7 @@ services:
       SCHEMA_REGISTRY_HOST_NAME: schema-registry
       SCHEMA_REGISTRY_KAFKASTORE_CONNECTION_URL: 'zookeeper:2181'
   load-generator: 
-    image: ghcr.io/cau-se/theodolite-uc4-workload-generator:latest
+    image: ghcr.io/cau-se/theodolite-uc4-workload-generator:v0.4.0
     depends_on:
       - schema-registry
       - kafka
@@ -44,7 +44,7 @@ services:
       NUM_SENSORS: 4
       NUM_NESTED_GROUPS: 4
   benchmark-jobmanager:
-    image: ghcr.io/cau-se/theodolite-uc4-flink:latest
+    image: ghcr.io/cau-se/theodolite-uc4-flink:v0.4.0
     ports:
       - "8080:8081"
     command: standalone-job --job-classname theodolite.uc4.application.AggregationServiceFlinkJob
@@ -59,7 +59,7 @@ services:
       - schema-registry
       - kafka
   benchmark-taskmanager:
-    image: ghcr.io/cau-se/theodolite-uc4-flink:latest
+    image: ghcr.io/cau-se/theodolite-uc4-flink:v0.4.0
     command: taskmanager
     environment:
       - |
diff --git a/theodolite-benchmarks/docker-test/uc4-kstreams-docker-compose/docker-compose.yml b/theodolite-benchmarks/docker-test/uc4-kstreams-docker-compose/docker-compose.yml
index 5e4cb94469f2f6cc8c48694a7ea6c885f066622d..c2950ee8dead9819a39035b640aa1b4ad43fadd6 100755
--- a/theodolite-benchmarks/docker-test/uc4-kstreams-docker-compose/docker-compose.yml
+++ b/theodolite-benchmarks/docker-test/uc4-kstreams-docker-compose/docker-compose.yml
@@ -32,7 +32,7 @@ services:
       SCHEMA_REGISTRY_HOST_NAME: schema-registry
       SCHEMA_REGISTRY_KAFKASTORE_CONNECTION_URL: 'zookeeper:2181'
   benchmark:
-    image: ghcr.io/cau-se/theodolite-uc4-kstreams-app:latest
+    image: ghcr.io/cau-se/theodolite-uc4-kstreams-app:v0.4.0
     depends_on:
       - schema-registry
       - kafka
@@ -40,7 +40,7 @@ services:
       KAFKA_BOOTSTRAP_SERVERS: kafka:9092
       SCHEMA_REGISTRY_URL: http://schema-registry:8081
   load-generator: 
-    image: ghcr.io/cau-se/theodolite-uc4-workload-generator:latest
+    image: ghcr.io/cau-se/theodolite-uc4-workload-generator:v0.4.0
     depends_on:
       - schema-registry
       - kafka