diff --git a/theodolite/src/main/kotlin/theodolite/execution/TheodoliteExecutor.kt b/theodolite/src/main/kotlin/theodolite/execution/TheodoliteExecutor.kt
index a334dc8f3126a23dfb913da754344d56a2cfbdcf..becac28494a34afee4ae37f207ade16e74cdaf9d 100644
--- a/theodolite/src/main/kotlin/theodolite/execution/TheodoliteExecutor.kt
+++ b/theodolite/src/main/kotlin/theodolite/execution/TheodoliteExecutor.kt
@@ -118,19 +118,25 @@ class TheodoliteExecutor(
         )
 
         val config = buildConfig()
-        //TODO: Differentiate metrics here
 
-//        when (config.metric) {
-//            "demand" -> // execute benchmarks for each load
-//            "capacity" -> // execute benchmarks for each resource amount
-//        }
-        // execute benchmarks for each load
+        //execute benchmarks for each load for the demand metric, or for each resource amount for capacity metric
         try {
-            for (load in config.loads) {
-                if (executor.run.get()) {
-                    config.searchStrategy.findSuitableResource(load, config.resources)
+            if (config.metric == "demand") {
+                //demand metric
+                for (load in config.loads) {
+                    if (executor.run.get()) {
+                        config.searchStrategy.findSuitableResource(load, config.resources)
+                    }
+                }
+            } else {
+                //capacity metric
+                for (resource in config.resources) {
+                    if (executor.run.get()) {
+                        config.searchStrategy.findSuitableLoad(resource, config.loads)
+                    }
                 }
             }
+
         } finally {
             ioHandler.writeToJSONFile(
                 config.searchStrategy.benchmarkExecutor.results,
diff --git a/theodolite/src/main/kotlin/theodolite/strategies/searchstrategy/BinarySearch.kt b/theodolite/src/main/kotlin/theodolite/strategies/searchstrategy/BinarySearch.kt
index 28e8194c699cd074026c8cb7e6f3ce4ec347023b..eaa5c0cd573bf1901241d336bf1ad2d05e0b575a 100644
--- a/theodolite/src/main/kotlin/theodolite/strategies/searchstrategy/BinarySearch.kt
+++ b/theodolite/src/main/kotlin/theodolite/strategies/searchstrategy/BinarySearch.kt
@@ -21,6 +21,10 @@ class BinarySearch(benchmarkExecutor: BenchmarkExecutor) : SearchStrategy(benchm
         return resources[result]
     }
 
+    override fun findSuitableLoad(resource: Resource, loads: List<LoadDimension>): LoadDimension? {
+        TODO("Not yet implemented")
+    }
+
     /**
      * Apply binary search.
      *
diff --git a/theodolite/src/main/kotlin/theodolite/strategies/searchstrategy/FullSearch.kt b/theodolite/src/main/kotlin/theodolite/strategies/searchstrategy/FullSearch.kt
index cb0dd2d8ab528e42e8290f59f26c8b9b32f384c7..237124b8f930d375e0bc2e88743c4b274123d015 100644
--- a/theodolite/src/main/kotlin/theodolite/strategies/searchstrategy/FullSearch.kt
+++ b/theodolite/src/main/kotlin/theodolite/strategies/searchstrategy/FullSearch.kt
@@ -22,10 +22,20 @@ class FullSearch(benchmarkExecutor: BenchmarkExecutor) : SearchStrategy(benchmar
         for (res in resources) {
             logger.info { "Running experiment with load '${load.get()}' and resources '${res.get()}'" }
             val result = this.benchmarkExecutor.runExperiment(load, res)
+            //TODO: that actually doesnt make sense no? Shouldnt it be == null?
             if (result && minimalSuitableResources != null) {
                 minimalSuitableResources = res
             }
         }
         return minimalSuitableResources
     }
+
+    override fun findSuitableLoad(resource: Resource, loads: List<LoadDimension>): LoadDimension? {
+        var maxSuitableLoad: LoadDimension? = null
+        for (load in loads) {
+            logger.info { "Running experiment with resources '${resource.get()}' and load '${load.get()}'" }
+            if (this.benchmarkExecutor.runExperiment(load, resource)) maxSuitableLoad = load
+        }
+        return maxSuitableLoad
+    }
 }
diff --git a/theodolite/src/main/kotlin/theodolite/strategies/searchstrategy/InitialGuessSearchStrategy.kt b/theodolite/src/main/kotlin/theodolite/strategies/searchstrategy/InitialGuessSearchStrategy.kt
index d97fb62cc9d37dd50122199e5d089c491784e511..61c42ba7815a5045aaf36575e7cae0ea31e945e4 100644
--- a/theodolite/src/main/kotlin/theodolite/strategies/searchstrategy/InitialGuessSearchStrategy.kt
+++ b/theodolite/src/main/kotlin/theodolite/strategies/searchstrategy/InitialGuessSearchStrategy.kt
@@ -90,4 +90,8 @@ class InitialGuessSearchStrategy(benchmarkExecutor: BenchmarkExecutor, guessStra
         }
         return null
     }
+
+    override fun findSuitableLoad(resource: Resource, loads: List<LoadDimension>): LoadDimension? {
+        TODO("Not yet implemented")
+    }
 }
\ No newline at end of file
diff --git a/theodolite/src/main/kotlin/theodolite/strategies/searchstrategy/LinearSearch.kt b/theodolite/src/main/kotlin/theodolite/strategies/searchstrategy/LinearSearch.kt
index 85deaf6fa75437199bfc560404eb5b40bb4a986a..752b3301fb985af103d8fd50a0d75b11f74aaa49 100644
--- a/theodolite/src/main/kotlin/theodolite/strategies/searchstrategy/LinearSearch.kt
+++ b/theodolite/src/main/kotlin/theodolite/strategies/searchstrategy/LinearSearch.kt
@@ -16,10 +16,22 @@ class LinearSearch(benchmarkExecutor: BenchmarkExecutor) : SearchStrategy(benchm
 
     override fun findSuitableResource(load: LoadDimension, resources: List<Resource>): Resource? {
         for (res in resources) {
-
             logger.info { "Running experiment with load '${load.get()}' and resources '${res.get()}'" }
             if (this.benchmarkExecutor.runExperiment(load, res)) return res
         }
         return null
     }
+
+    // Stops after having the first load which is not possible anymore with the current resource, maybe some later load still possible tho
+    // kinda like GuessSearchStrat case -> differentiate or is it fine like that?
+    override fun findSuitableLoad(resource: Resource, loads: List<LoadDimension>): LoadDimension? {
+        var maxSuitableLoad: LoadDimension? = null
+        for (load in loads) {
+            logger.info { "Running experiment with resources '${resource.get()}' and load '${load.get()}'" }
+            if (this.benchmarkExecutor.runExperiment(load, resource)) {
+                maxSuitableLoad = load
+            } else break
+        }
+        return maxSuitableLoad
+    }
 }
diff --git a/theodolite/src/main/kotlin/theodolite/strategies/searchstrategy/RestrictionSearch.kt b/theodolite/src/main/kotlin/theodolite/strategies/searchstrategy/RestrictionSearch.kt
index 776cdeba513c0c396ae96cd6bec5eb1c712b3f95..f09371cb43a0b5f6a7435709ea2880e2b0706653 100644
--- a/theodolite/src/main/kotlin/theodolite/strategies/searchstrategy/RestrictionSearch.kt
+++ b/theodolite/src/main/kotlin/theodolite/strategies/searchstrategy/RestrictionSearch.kt
@@ -27,4 +27,10 @@ class RestrictionSearch(
         }
         return this.searchStrategy.findSuitableResource(load, restrictedResources)
     }
+
+    //TODO: not sure if it makes sense but actually doing the same as for finding suitable resource with the restrictions
+    override fun findSuitableLoad(resource: Resource, loads: List<LoadDimension>): LoadDimension? {
+        //erste Zeile komisch, wird auch bei resource so gemacht aber warum? das ist doch ne liste warum also toList?
+        TODO("Not yet implemented")
+    }
 }
\ No newline at end of file
diff --git a/theodolite/src/main/kotlin/theodolite/strategies/searchstrategy/SearchStrategy.kt b/theodolite/src/main/kotlin/theodolite/strategies/searchstrategy/SearchStrategy.kt
index 97c723f2cfe459081cbb327f6860e48319c8f4f1..ef366a1b282eaf0ea3dcdaf4a5ce792d0acc1a1b 100644
--- a/theodolite/src/main/kotlin/theodolite/strategies/searchstrategy/SearchStrategy.kt
+++ b/theodolite/src/main/kotlin/theodolite/strategies/searchstrategy/SearchStrategy.kt
@@ -25,4 +25,14 @@ abstract class SearchStrategy(val benchmarkExecutor: BenchmarkExecutor, val gues
      * @return suitable resource for the specified load, or null if no suitable resource exists.
      */
     abstract fun findSuitableResource(load: LoadDimension, resources: List<Resource>): Resource?
+
+    /**
+     * Find biggest suitable load from the specified load list for the given resource amount.
+     *
+     * @param resource the [Resource] to be tested.
+     * @param loads List of all possible [LoadDimension]s.
+     *
+     * @return suitable load for the specified resource amount, or null if no suitable load exists.
+     */
+    abstract fun findSuitableLoad(resource: Resource, loads: List<LoadDimension>) : LoadDimension?
 }