diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/execution/BenchmarkExecutor.kt b/theodolite-quarkus/src/main/kotlin/theodolite/execution/BenchmarkExecutor.kt
index 591a2bc10960ddaf49bb4bbe10eea1b8258c7978..4f43e4c8cdd87d835a5d72987981253e742c5a75 100644
--- a/theodolite-quarkus/src/main/kotlin/theodolite/execution/BenchmarkExecutor.kt
+++ b/theodolite-quarkus/src/main/kotlin/theodolite/execution/BenchmarkExecutor.kt
@@ -4,7 +4,8 @@ import theodolite.util.Benchmark
 import theodolite.util.LoadDimension
 import theodolite.util.Resource
 import theodolite.util.Results
+import java.time.Duration
 
-abstract class BenchmarkExecutor(val benchmark: Benchmark, val results: Results) {
+abstract class BenchmarkExecutor(val benchmark: Benchmark, val results: Results, val executionDuration: Duration) {
     abstract fun runExperiment(load: LoadDimension, res: Resource): Boolean;
 }
\ No newline at end of file
diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/execution/KafkaBenchmarkExecutor.kt b/theodolite-quarkus/src/main/kotlin/theodolite/execution/KafkaBenchmarkExecutor.kt
index b2323b83eb9a196d5f2617c7d7b6ee0f8716af23..730be87652b42c64f1aba9b7eee54427db05fcb7 100644
--- a/theodolite-quarkus/src/main/kotlin/theodolite/execution/KafkaBenchmarkExecutor.kt
+++ b/theodolite-quarkus/src/main/kotlin/theodolite/execution/KafkaBenchmarkExecutor.kt
@@ -4,12 +4,13 @@ import theodolite.util.Benchmark
 import theodolite.util.LoadDimension
 import theodolite.util.Resource
 import theodolite.util.Results
+import java.time.Duration
 
-class KafkaBenchmarkExecutor(benchmark: Benchmark, results: Results) : BenchmarkExecutor(benchmark, results) {
+class KafkaBenchmarkExecutor(benchmark: Benchmark, results: Results, executionDuration: Duration) : BenchmarkExecutor(benchmark, results, executionDuration) {
     override fun runExperiment(load: LoadDimension, res: Resource): Boolean {
         benchmark.start()
         // wait
-        benchmark.stop();
+        benchmark.stop()
         // evaluate
         val result = false // if success else false
         this.results.setResult(Pair(load, res), result)
diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/execution/TheodoliteExecutor.kt b/theodolite-quarkus/src/main/kotlin/theodolite/execution/TheodoliteExecutor.kt
index e2c56c70c2772c3ddda245f5f210a32049e3b855..b6554a6a90293954d5548a1270c8d08a0b480356 100644
--- a/theodolite-quarkus/src/main/kotlin/theodolite/execution/TheodoliteExecutor.kt
+++ b/theodolite-quarkus/src/main/kotlin/theodolite/execution/TheodoliteExecutor.kt
@@ -4,12 +4,14 @@ import theodolite.strategies.restriction.LowerBoundRestriction
 import theodolite.strategies.searchstrategy.CompositeStrategy
 import theodolite.strategies.searchstrategy.LinearSearch
 import theodolite.util.*
+import java.time.Duration
 
 class TheodoliteExecutor() {
     private fun loadConfig(): Config {
-        val benchmark: Benchmark = KafkaBenchmark()
+        val benchmark: Benchmark = KafkaBenchmark(emptyMap())
         val results: Results = Results()
-        val executor: BenchmarkExecutor = KafkaBenchmarkExecutor(benchmark, results)
+        val executionDuration = Duration.ofSeconds(60*5 )
+        val executor: BenchmarkExecutor = KafkaBenchmarkExecutor(benchmark, results, executionDuration)
 
         val restrictionStrategy = LowerBoundRestriction(results)
         val searchStrategy = LinearSearch(executor, results)
@@ -17,7 +19,8 @@ class TheodoliteExecutor() {
         return Config(
             loads = (0..6).map{ number -> LoadDimension(number) },
             resources = (0..6).map{ number -> Resource(number) },
-            compositeStrategy = CompositeStrategy(executor, searchStrategy, restrictionStrategies = setOf(restrictionStrategy), results = results)
+            compositeStrategy = CompositeStrategy(executor, searchStrategy, restrictionStrategies = setOf(restrictionStrategy), results = results),
+            executionDuration = executionDuration
         )
     }
 
diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/strategies/searchstrategy/BinarySearch.kt b/theodolite-quarkus/src/main/kotlin/theodolite/strategies/searchstrategy/BinarySearch.kt
index 1ce43d7bb2c73faf2e0ca418f1e574082dd2d1ed..a1e1c8f3f112519fa46ccbe139e07ba7a591223b 100644
--- a/theodolite-quarkus/src/main/kotlin/theodolite/strategies/searchstrategy/BinarySearch.kt
+++ b/theodolite-quarkus/src/main/kotlin/theodolite/strategies/searchstrategy/BinarySearch.kt
@@ -20,7 +20,7 @@ class BinarySearch(benchmarkExecutor: BenchmarkExecutor, results: Results) : Sea
             throw IllegalArgumentException()
         }
         if (lower == upper ) {
-            if (this.benchmarkExecutor.runExperiment(load, resources[upper])) return upper;
+            if (this.benchmarkExecutor.runExperiment(load, resources[lower])) return lower;
             else {
                 if (lower + 1 == resources.size) return - 1
                 return lower + 1;
diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/util/Benchmark.kt b/theodolite-quarkus/src/main/kotlin/theodolite/util/Benchmark.kt
index f757128a2bf1ca997fbe6f777f6bfb9de37cf776..c4cb2be1715ad0387aa7d90d1a45eb708e9bfba2 100644
--- a/theodolite-quarkus/src/main/kotlin/theodolite/util/Benchmark.kt
+++ b/theodolite-quarkus/src/main/kotlin/theodolite/util/Benchmark.kt
@@ -1,9 +1,8 @@
 package theodolite.util
 
 // todo: needs cluster and resource config
-interface Benchmark {
+abstract class Benchmark(val config: Map<String, Any>) {
+    abstract fun start();
 
-    fun start();
-
-    fun stop();
+    abstract fun stop();
 }
\ No newline at end of file
diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/util/Config.kt b/theodolite-quarkus/src/main/kotlin/theodolite/util/Config.kt
index 7dff743661d7d19b421de46874f2f70c5e76ec42..6fb680c0ae0dfeb80418f98093494386eda97fb4 100644
--- a/theodolite-quarkus/src/main/kotlin/theodolite/util/Config.kt
+++ b/theodolite-quarkus/src/main/kotlin/theodolite/util/Config.kt
@@ -3,11 +3,13 @@ package theodolite.util
 import theodolite.strategies.restriction.RestrictionStrategy
 import theodolite.strategies.searchstrategy.CompositeStrategy
 import theodolite.strategies.searchstrategy.SearchStrategy
+import java.time.Duration
 
 data class Config(
     val loads: List<LoadDimension>,
     val resources: List<Resource>,
-    val compositeStrategy: CompositeStrategy
+    val compositeStrategy: CompositeStrategy,
+    val executionDuration: Duration
 ) {
 
 }
\ No newline at end of file
diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/util/KafkaBenchmark.kt b/theodolite-quarkus/src/main/kotlin/theodolite/util/KafkaBenchmark.kt
index fdbb1cc932c33b076404db682d43763d88fc6398..3ed499bf6f4f2dfc16b7af6c297be424ac2ba8a7 100644
--- a/theodolite-quarkus/src/main/kotlin/theodolite/util/KafkaBenchmark.kt
+++ b/theodolite-quarkus/src/main/kotlin/theodolite/util/KafkaBenchmark.kt
@@ -1,6 +1,6 @@
 package theodolite.util
 
-class KafkaBenchmark: Benchmark {
+class KafkaBenchmark(config: Map<String, Any>): Benchmark(config) {
 
     override fun start() {
         TODO("Not yet implemented")
diff --git a/theodolite-quarkus/src/test/kotlin/theodolite/CompositeStrategyTest.kt b/theodolite-quarkus/src/test/kotlin/theodolite/CompositeStrategyTest.kt
index ce031ddb101008e518f8bace40c315dca3a60530..0f9b1b850b9963aa9e9851f963e4f02abcf09924 100644
--- a/theodolite-quarkus/src/test/kotlin/theodolite/CompositeStrategyTest.kt
+++ b/theodolite-quarkus/src/test/kotlin/theodolite/CompositeStrategyTest.kt
@@ -8,6 +8,8 @@ import theodolite.strategies.searchstrategy.BinarySearch
 import theodolite.strategies.restriction.LowerBoundRestriction
 import theodolite.strategies.searchstrategy.CompositeStrategy
 import theodolite.execution.TestBenchmarkExecutor
+import theodolite.strategies.restriction.RestrictionStrategy
+import theodolite.strategies.searchstrategy.SearchStrategy
 import theodolite.util.*
 
 @QuarkusTest
@@ -75,6 +77,34 @@ class CompositeStrategyTest {
         assertEquals(actual, expected)
     }
 
+    @Test
+    fun testEnd2EndBinarySearch2() {
+        val mockResults = arrayOf(
+            arrayOf( true , true , true , true , true , true , true, true),
+            arrayOf( false, false, true , true , true , true , true, true),
+            arrayOf( false, false, true , true , true , true , true, true),
+            arrayOf( false, false, false, true , true , true , true, true),
+            arrayOf( false, false, false, false, true , true , true, true),
+            arrayOf( false, false, false, false, false, false, true, true),
+            arrayOf( false, false, false, false, false, false, false, true)
+        )
+        val mockLoads: List<LoadDimension> =  (0..6).map{number -> LoadDimension(number)}
+        val mockResources: List<Resource> =  (0..7).map{number -> Resource(number)}
+        val results: Results = Results();
+        val benchmark = TestBenchmark()
+        val benchmarkExecutor: TestBenchmarkExecutor = TestBenchmarkExecutor(mockResults, benchmark, results)
+        val binarySearch: BinarySearch = BinarySearch(benchmarkExecutor, results);
+        val lowerBoundRestriction: LowerBoundRestriction = LowerBoundRestriction(results);
+        val strategy: CompositeStrategy = CompositeStrategy(benchmarkExecutor, binarySearch, setOf(lowerBoundRestriction), results) // sets instead of lists
+
+        val actual: ArrayList<Resource?> = ArrayList<Resource?>()
+        val expected: ArrayList<Resource?> = ArrayList(listOf(0,2,2,3,4,6,7).map{ x -> Resource(x)})
 
+        for(load in mockLoads) {
+            actual.add(strategy.findSuitableResources(load, mockResources))
+        }
+
+        assertEquals(actual, expected)
+    }
 
 }
\ No newline at end of file