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 1bc22f7ca842207fc8c490dac33677b72e10c3e3..d238bc955c03c07d8c56a2b0a03b15881c0c7284 100644
--- a/theodolite-quarkus/src/main/kotlin/theodolite/strategies/searchstrategy/BinarySearch.kt
+++ b/theodolite-quarkus/src/main/kotlin/theodolite/strategies/searchstrategy/BinarySearch.kt
@@ -15,10 +15,10 @@ class BinarySearch(benchmarkExecutor: BenchmarkExecutor) : SearchStrategy(benchm
     }
 
     private fun search (load: LoadDimension, resources: List<Resource>, lower: Int, upper: Int): Int {
-        if (lower + 1 < upper ) {
+        if (lower > upper) {
             throw IllegalArgumentException()
         }
-        if (lower >= upper ) {
+        if (lower == upper ) {
             if (this.benchmarkExecutor.runExperiment(load, resources[upper])) return upper;
             else {
                 if (lower + 1 == resources.size) return - 1
@@ -27,6 +27,9 @@ class BinarySearch(benchmarkExecutor: BenchmarkExecutor) : SearchStrategy(benchm
         } else {
             val mid = (upper + lower) / 2
             if (this.benchmarkExecutor.runExperiment(load, resources[mid])) {
+                if (mid == lower) {
+                    return search(load, resources, lower, lower );
+                }
                 return search(load, resources, lower, mid - 1 );
             } else {
               return search(load, resources, mid + 1 , upper);
diff --git a/theodolite-quarkus/src/test/kotlin/theodolite/CompositeStrategyTest.kt b/theodolite-quarkus/src/test/kotlin/theodolite/CompositeStrategyTest.kt
index 3bf4815e1843dc88c1880631603a74cdc96e5a4f..0fa48dafc416900930ed9e398a865e7ca0dae36c 100644
--- a/theodolite-quarkus/src/test/kotlin/theodolite/CompositeStrategyTest.kt
+++ b/theodolite-quarkus/src/test/kotlin/theodolite/CompositeStrategyTest.kt
@@ -4,6 +4,7 @@ import io.quarkus.test.junit.QuarkusTest
 import org.junit.jupiter.api.Assertions.*
 import org.junit.jupiter.api.Test
 import theodolite.strategies.searchstrategy.LinearSearch
+import theodolite.strategies.searchstrategy.BinarySearch
 import theodolite.strategies.restriction.LowerBoundRestriction
 import theodolite.strategies.searchstrategy.CompositeStrategy
 import theodolite.execution.TestBenchmarkExecutor
@@ -15,7 +16,7 @@ import theodolite.util.Results
 class CompositeStrategyTest {
 
     @Test
-    fun testEnd2End() {
+    fun testEnd2EndLinearSearch() {
         val mockResults = arrayOf(
             arrayOf( true , true , true , true , true , true , true),
             arrayOf( false, false, true , true , true , true , true),
@@ -44,6 +45,36 @@ class CompositeStrategyTest {
         assertEquals(actual, expected)
     }
 
+    @Test
+    fun testEnd2EndBinarySearch() {
+        val mockResults = arrayOf(
+            arrayOf( true , true , true , true , true , true , true),
+            arrayOf( false, false, true , true , true , true , true),
+            arrayOf( false, false, true , true , true , true , true),
+            arrayOf( false, false, false, true , true , true , true),
+            arrayOf( false, false, false, false, true , true , true),
+            arrayOf( false, false, false, false, false, false, true),
+            arrayOf( false, false, false, false, false, false, false)
+        )
+        val mockLoads: List<LoadDimension> =  (0..6).map{number -> LoadDimension(number)}
+        val mockResources: List<Resource> =  (0..6).map{number -> Resource(number)}
+        val benchmarkExecutor: TestBenchmarkExecutor = TestBenchmarkExecutor(mockResults)
+        val binarySearch: BinarySearch = BinarySearch(benchmarkExecutor);
+        val results: Results = Results();
+        val lowerBoundRestriction: LowerBoundRestriction = LowerBoundRestriction(results, mockLoads);
+        val strategy: CompositeStrategy = CompositeStrategy(benchmarkExecutor, binarySearch, listOf(lowerBoundRestriction))
+
+        val actual: ArrayList<Resource?> = ArrayList<Resource?>()
+        val expected: ArrayList<Resource?> = ArrayList(listOf(0,2,2,3,4,6).map{ x -> Resource(x)})
+        expected.add(null)
+
+        for(load in mockLoads) {
+            actual.add(strategy.findSuitableResources(load, mockResources))
+        }
+
+        assertEquals(actual, expected)
+    }
+
 
 
 }
\ No newline at end of file