diff --git a/theodolite/src/main/kotlin/theodolite/execution/TheodoliteExecutor.kt b/theodolite/src/main/kotlin/theodolite/execution/TheodoliteExecutor.kt
index 77ebd099d4900b32b0724c0c6e50efa305453796..3879e67239c9ba7140114ee605a2e71de3409c98 100644
--- a/theodolite/src/main/kotlin/theodolite/execution/TheodoliteExecutor.kt
+++ b/theodolite/src/main/kotlin/theodolite/execution/TheodoliteExecutor.kt
@@ -128,12 +128,21 @@ class TheodoliteExecutor(
                 config.searchStrategy.benchmarkExecutor.results,
                 "${resultsFolder}exp${this.config.executionId}-result"
             )
-            // Create expXYZ_demand.csv file
-            ioHandler.writeToCSVFile(
-                "${resultsFolder}exp${this.config.executionId}_demand",
-                calculateDemandMetric(config.loads, config.searchStrategy.benchmarkExecutor.results),
-                listOf("load","resources")
-            )
+            // Create expXYZ_demand.csv file or expXYZ_capacity.csv depending on metric
+            when(config.metric) {
+                Metric.DEMAND ->
+                    ioHandler.writeToCSVFile(
+                        "${resultsFolder}exp${this.config.executionId}_demand",
+                        calculateMetric(config.loads, config.searchStrategy.benchmarkExecutor.results),
+                        listOf("load","resources")
+                    )
+                Metric.CAPACITY ->
+                    ioHandler.writeToCSVFile(
+                        "${resultsFolder}exp${this.config.executionId}_capacity",
+                        calculateMetric(config.resources, config.searchStrategy.benchmarkExecutor.results),
+                        listOf("resource", "loads")
+                    )
+            }
         }
         kubernetesBenchmark.teardownInfrastructure()
     }
@@ -148,8 +157,8 @@ class TheodoliteExecutor(
         return executionID
     }
 
-    private fun calculateDemandMetric(loads: List<Int>, results: Results): List<List<String>> {
-        return loads.map { listOf(it.toString(), results.getOptYDimensionValue(it).toString()) }
+    private fun calculateMetric(xValues: List<Int>, results: Results): List<List<String>> {
+        return xValues.map { listOf(it.toString(), results.getOptYDimensionValue(it).toString()) }
     }
 
 }
diff --git a/theodolite/src/main/kotlin/theodolite/strategies/searchstrategy/InitialGuessSearchStrategy.kt b/theodolite/src/main/kotlin/theodolite/strategies/searchstrategy/InitialGuessSearchStrategy.kt
index 7a7100189368fa3d3ef5735a5e117f956d705245..bd7fa71a2b1245a5a70dc7c2d1b1f6ae6fdb6f02 100644
--- a/theodolite/src/main/kotlin/theodolite/strategies/searchstrategy/InitialGuessSearchStrategy.kt
+++ b/theodolite/src/main/kotlin/theodolite/strategies/searchstrategy/InitialGuessSearchStrategy.kt
@@ -19,12 +19,7 @@ class InitialGuessSearchStrategy(benchmarkExecutor: BenchmarkExecutor, guessStra
 
     override fun findSuitableResource(load: Int, resources: List<Int>): Int? {
 
-        if(resources.isEmpty()) {
-            logger.info { "You need to specify resources to be checked for the InitialGuessSearchStrategy to work." }
-            return null
-        }
-
-        if(guessStrategy == null){
+        if(this.guessStrategy == null){
             logger.info { "Your InitialGuessSearchStrategy doesn't have a GuessStrategy. This is not supported." }
             return null
         }
@@ -86,14 +81,9 @@ class InitialGuessSearchStrategy(benchmarkExecutor: BenchmarkExecutor, guessStra
         return null
     }
 
-    override fun findSuitableLoad(resource: Int, loads: List<Int>): Int? {
-
-        if(loads.isEmpty()) {
-            logger.info { "You need to specify resources to be checked for the InitialGuessSearchStrategy to work." }
-            return null
-        }
+    override fun findSuitableLoad(resource: Int, loads: List<Int>): Int?{
 
-        if(guessStrategy == null){
+        if(this.guessStrategy == null){
             logger.info { "Your InitialGuessSearchStrategy doesn't have a GuessStrategy. This is not supported." }
             return null
         }
diff --git a/theodolite/src/main/kotlin/theodolite/strategies/searchstrategy/SearchStrategy.kt b/theodolite/src/main/kotlin/theodolite/strategies/searchstrategy/SearchStrategy.kt
index 85453934f22238a5d42f8e564887e62a3ef1a2d1..bd380f25a88a34919456be7102737b9168d60ddf 100644
--- a/theodolite/src/main/kotlin/theodolite/strategies/searchstrategy/SearchStrategy.kt
+++ b/theodolite/src/main/kotlin/theodolite/strategies/searchstrategy/SearchStrategy.kt
@@ -27,20 +27,19 @@ abstract class SearchStrategy(val benchmarkExecutor: BenchmarkExecutor, val gues
      */
     fun applySearchStrategyByMetric(loads: List<Int>, resources: List<Int>, metric: Metric) {
 
-        if (metric.value == "demand") {
-            // demand metric
-            for (load in loads) {
-                if (benchmarkExecutor.run.get()) {
-                    this.findSuitableResource(load, resources)
+        when(metric) {
+            Metric.DEMAND ->
+                for (load in loads) {
+                    if (benchmarkExecutor.run.get()) {
+                        this.findSuitableResource(load, resources)
+                    }
                 }
-            }
-        } else {
-            // capacity metric
-            for (resource in resources) {
-                if (benchmarkExecutor.run.get()) {
-                    this.findSuitableLoad(resource, loads)
+            Metric.CAPACITY ->
+                for (resource in resources) {
+                    if (benchmarkExecutor.run.get()) {
+                        this.findSuitableLoad(resource, loads)
+                    }
                 }
-            }
         }
     }
 
diff --git a/theodolite/src/main/kotlin/theodolite/util/Results.kt b/theodolite/src/main/kotlin/theodolite/util/Results.kt
index 3d56e0129082a63483a95ca486f4973855fee0cb..b255ec73c9c13dfb2d18c781c9d60b3ec33c99db 100644
--- a/theodolite/src/main/kotlin/theodolite/util/Results.kt
+++ b/theodolite/src/main/kotlin/theodolite/util/Results.kt
@@ -27,30 +27,31 @@ class Results (val metric: Metric) {
     fun setResult(experiment: Pair<Int, Int>, successful: Boolean) {
         this.results[experiment] = successful
 
-        if(metric.value == "demand" && optInstances.containsKey(experiment.first)){
-
-            if (optInstances[experiment.first]!! > experiment.second){
-                optInstances[experiment.first] = experiment.second
-            }
-        }
-        else if(metric.value == "demand" && !optInstances.containsKey(experiment.first)){
-            if(!successful){
-                optInstances[experiment.first] = Int.MAX_VALUE
-            }else {
-                optInstances[experiment.first] = experiment.second
-            }
-        }
-        else if(metric.value == "capacity" && optInstances.containsKey(experiment.second)){
-            if (optInstances[experiment.second]!! < experiment.first){
-                optInstances[experiment.second] = experiment.first
-            }
-        }
-        else if(metric.value == "capacity" && !optInstances.containsKey(experiment.second)){
-            if(!successful){
-                optInstances[experiment.second] = Int.MIN_VALUE
-            } else {
-                optInstances[experiment.second] = experiment.first
-            }
+        when (metric) {
+            Metric.DEMAND ->
+                if (optInstances.containsKey(experiment.first)) {
+                    if(optInstances[experiment.first]!! > experiment.second) {
+                        optInstances[experiment.first] = experiment.second
+                    }
+                } else {
+                    if(!successful){
+                        optInstances[experiment.first] = Int.MAX_VALUE
+                    }else {
+                        optInstances[experiment.first] = experiment.second
+                    }
+                }
+            Metric.CAPACITY ->
+                if (optInstances.containsKey(experiment.second)) {
+                    if (optInstances[experiment.second]!! < experiment.first){
+                        optInstances[experiment.second] = experiment.first
+                    }
+                } else {
+                    if(!successful){
+                        optInstances[experiment.second] = Int.MIN_VALUE
+                    } else {
+                        optInstances[experiment.second] = experiment.first
+                    }
+                }
         }
     }