diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/execution/TestBenchmarkExecutor.kt b/theodolite-quarkus/src/main/kotlin/theodolite/execution/TestBenchmarkExecutor.kt
index 9fd2453c1d7d516a671fb09e18a7041e4abf05a7..65cb4220300a43f14bdac7637c5e79e34f691d46 100644
--- a/theodolite-quarkus/src/main/kotlin/theodolite/execution/TestBenchmarkExecutor.kt
+++ b/theodolite-quarkus/src/main/kotlin/theodolite/execution/TestBenchmarkExecutor.kt
@@ -7,6 +7,7 @@ import theodolite.util.Resource
 class TestBenchmarkExecutor(val mockResults: Array<Array<Boolean>>): BenchmarkExecutor {
 
     override fun runExperiment(load: LoadDimension, res: Resource): Boolean {
+        System.out.println("load :" + load.get().toString() + ", res: " + res.get().toString())
         return this.mockResults[load.get()][res.get()]
     }
 }
\ No newline at end of file
diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/strategies/restriction/LowerBoundRestriction.kt b/theodolite-quarkus/src/main/kotlin/theodolite/strategies/restriction/LowerBoundRestriction.kt
index 73792f3ce63d3808df657bc155d7ca6420723fa2..6f71a949e47739bc01916e042e2625e89a215785 100644
--- a/theodolite-quarkus/src/main/kotlin/theodolite/strategies/restriction/LowerBoundRestriction.kt
+++ b/theodolite-quarkus/src/main/kotlin/theodolite/strategies/restriction/LowerBoundRestriction.kt
@@ -3,10 +3,12 @@ package theodolite.strategies.restriction
 import theodolite.util.Results
 import theodolite.util.LoadDimension
 import theodolite.util.Resource
+import kotlin.math.max
 
-class LowerBoundRestriction(results: Results, loads: List<LoadDimension>) : RestrictionStrategy(results, loads) {
+class LowerBoundRestriction(results: Results) : RestrictionStrategy(results) {
     override fun next(load: LoadDimension, resources: List<Resource>): List<Resource> {
-            var lowerBound: Resource? = this.results.getRequiredInstances(load)
+            val maxLoad: LoadDimension? = this.results.getMaxBenchmarkedLoad(load)
+            var lowerBound: Resource? = this.results.getRequiredInstances(maxLoad)
             if(lowerBound == null) {
                 lowerBound = Resource(0) // TODO handle the null case
             }
diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/strategies/restriction/RestrictionStrategy.kt b/theodolite-quarkus/src/main/kotlin/theodolite/strategies/restriction/RestrictionStrategy.kt
index bf04156283b7291bd84180ed8a3f5715f68a1503..60a6eccfb37e5941455f3fc33876092a2317276a 100644
--- a/theodolite-quarkus/src/main/kotlin/theodolite/strategies/restriction/RestrictionStrategy.kt
+++ b/theodolite-quarkus/src/main/kotlin/theodolite/strategies/restriction/RestrictionStrategy.kt
@@ -4,6 +4,6 @@ import theodolite.util.Results
 import theodolite.util.LoadDimension
 import theodolite.util.Resource
 
-abstract class RestrictionStrategy(val results: Results, val loads: List<LoadDimension>) {
+abstract class RestrictionStrategy(val results: Results) {
     public abstract fun next(load: LoadDimension, resources: List<Resource>): List<Resource>;
 }
\ No newline at end of file
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 d238bc955c03c07d8c56a2b0a03b15881c0c7284..32cfe2191ee4e9d640fcc271ddcc596920296575 100644
--- a/theodolite-quarkus/src/main/kotlin/theodolite/strategies/searchstrategy/BinarySearch.kt
+++ b/theodolite-quarkus/src/main/kotlin/theodolite/strategies/searchstrategy/BinarySearch.kt
@@ -3,9 +3,10 @@ package theodolite.strategies.searchstrategy
 import theodolite.execution.BenchmarkExecutor
 import theodolite.util.LoadDimension
 import theodolite.util.Resource
+import theodolite.util.Results
 import java.lang.IllegalArgumentException
 
-class BinarySearch(benchmarkExecutor: BenchmarkExecutor) : SearchStrategy(benchmarkExecutor) {
+class BinarySearch(benchmarkExecutor: BenchmarkExecutor, results: Results) : SearchStrategy(benchmarkExecutor, results) {
     override fun findSuitableResources(load: LoadDimension, resources: List<Resource>): Resource? {
         val result =  search(load, resources, 0, resources.size - 1)
         if( result == -1 ) {
diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/strategies/searchstrategy/CompositeStrategy.kt b/theodolite-quarkus/src/main/kotlin/theodolite/strategies/searchstrategy/CompositeStrategy.kt
index e69ee0bad1c2df5f8677fd7e6743cf69910cab8d..7a100e5abb600ea976fe35b11076b55a6e58b25b 100644
--- a/theodolite-quarkus/src/main/kotlin/theodolite/strategies/searchstrategy/CompositeStrategy.kt
+++ b/theodolite-quarkus/src/main/kotlin/theodolite/strategies/searchstrategy/CompositeStrategy.kt
@@ -4,14 +4,15 @@ import theodolite.execution.BenchmarkExecutor
 import theodolite.strategies.restriction.RestrictionStrategy
 import theodolite.util.LoadDimension
 import theodolite.util.Resource
+import theodolite.util.Results
 
-class CompositeStrategy(benchmarkExecutor: BenchmarkExecutor, val searchStrategy: SearchStrategy, val restrictionStrategies: List<RestrictionStrategy>) : SearchStrategy(benchmarkExecutor) {
+class CompositeStrategy(benchmarkExecutor: BenchmarkExecutor, val searchStrategy: SearchStrategy, val restrictionStrategies: List<RestrictionStrategy>, results: Results) : SearchStrategy(benchmarkExecutor, results) {
 
     override fun findSuitableResources(load: LoadDimension,resources: List<Resource>): Resource? {
-        var restrictedResources: List<Resource> = resources
+        var restricted = resources
         for (strategy in this.restrictionStrategies) {
-            restrictedResources.intersect(strategy.next(load, resources))
+            restricted = restricted.intersect(strategy.next(load, resources)).toList() // erstellt das eine liste oder verändert das die liste?
         }
-        return this.searchStrategy.findSuitableResources(load, restrictedResources)
+        return this.searchStrategy.findSuitableResources(load, restricted)
     }
 }
\ No newline at end of file
diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/strategies/searchstrategy/LinearSearch.kt b/theodolite-quarkus/src/main/kotlin/theodolite/strategies/searchstrategy/LinearSearch.kt
index 919689ed925fd331ee4afa8d2c65e170d637f320..6381f9e6280bcf0dff93c6a58004b2fa668adc4f 100644
--- a/theodolite-quarkus/src/main/kotlin/theodolite/strategies/searchstrategy/LinearSearch.kt
+++ b/theodolite-quarkus/src/main/kotlin/theodolite/strategies/searchstrategy/LinearSearch.kt
@@ -3,12 +3,18 @@ package theodolite.strategies.searchstrategy
 import theodolite.execution.BenchmarkExecutor
 import theodolite.util.LoadDimension
 import theodolite.util.Resource
+import theodolite.util.Results
 
-class LinearSearch(benchmarkExecutor: BenchmarkExecutor) : SearchStrategy(benchmarkExecutor) {
+class LinearSearch(benchmarkExecutor: BenchmarkExecutor, results: Results) : SearchStrategy(benchmarkExecutor, results) {
 
     override fun findSuitableResources(load: LoadDimension, resources: List<Resource>): Resource? {
         for (res in resources) {
-            if (this.benchmarkExecutor.runExperiment(load, res)) return res;
+            if (this.benchmarkExecutor.runExperiment(load, res)) {
+                this.results.setResult(Pair(load, res), true)
+                return res
+            } else {
+                this.results.setResult(Pair(load, res), false)
+            }
         }
         return null;
     }
diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/strategies/searchstrategy/SearchStrategy.kt b/theodolite-quarkus/src/main/kotlin/theodolite/strategies/searchstrategy/SearchStrategy.kt
index 48749978475c63c3fb667e92054654c5f9a9260c..7e151ef6f3cfaf16a48c43f7369bbfc8041e9295 100644
--- a/theodolite-quarkus/src/main/kotlin/theodolite/strategies/searchstrategy/SearchStrategy.kt
+++ b/theodolite-quarkus/src/main/kotlin/theodolite/strategies/searchstrategy/SearchStrategy.kt
@@ -3,7 +3,8 @@ package theodolite.strategies.searchstrategy
 import theodolite.execution.BenchmarkExecutor
 import theodolite.util.LoadDimension
 import theodolite.util.Resource
+import theodolite.util.Results
 
-abstract class SearchStrategy(val benchmarkExecutor: BenchmarkExecutor) {
+abstract class SearchStrategy(val benchmarkExecutor: BenchmarkExecutor, val results: Results) {
     abstract fun findSuitableResources(load: LoadDimension, resources: List<Resource>): Resource?;
 }
\ No newline at end of file
diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/util/LoadDimension.kt b/theodolite-quarkus/src/main/kotlin/theodolite/util/LoadDimension.kt
index 84de466a86ecd094d905a2b8203cce663f0802fb..6a3953b6be6f8964ed7fb9cfbd6e92053b8b886c 100644
--- a/theodolite-quarkus/src/main/kotlin/theodolite/util/LoadDimension.kt
+++ b/theodolite-quarkus/src/main/kotlin/theodolite/util/LoadDimension.kt
@@ -1,6 +1,6 @@
 package theodolite.util
 
-class LoadDimension(val number: Int) {
+class LoadDimension(val number: Int) { // data class ?
     public fun get(): Int {
         return this.number;
     }
@@ -14,4 +14,4 @@ class LoadDimension(val number: Int) {
     override fun hashCode(): Int {
         return this.get().hashCode()
     }
-}
\ No newline at end of file
+}
diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/util/Results.kt b/theodolite-quarkus/src/main/kotlin/theodolite/util/Results.kt
index 1a4107612b8007346300c480a269b885369cc8aa..01e303ceb49637b9a094174c4d785c1defbac95d 100644
--- a/theodolite-quarkus/src/main/kotlin/theodolite/util/Results.kt
+++ b/theodolite-quarkus/src/main/kotlin/theodolite/util/Results.kt
@@ -6,7 +6,7 @@ import kotlin.math.exp
 
 class Results {
     // load, instances
-    private val results: MutableMap<Pair<LoadDimension, Resource>, Boolean> = mutableMapOf()
+    private val results: MutableMap<Pair<LoadDimension, Resource>, Boolean> = mutableMapOf() // multi map guava
 
     public fun setResult(experiment: Pair<LoadDimension, Resource>, successful: Boolean) {
         this.results.put(experiment, successful)
@@ -16,7 +16,7 @@ class Results {
         return this.results.get(experiment)
     }
 
-    public fun getRequiredInstances(load: LoadDimension): Resource? {
+    public fun getRequiredInstances(load: LoadDimension?): Resource? {
         var requiredInstances: Resource? = null;
         for(experiment in results) {
             if(experiment.key.first == load && experiment.value){
@@ -29,4 +29,20 @@ class Results {
         }
         return requiredInstances
     }
+
+    public fun getMaxBenchmarkedLoad(load: LoadDimension): LoadDimension? {
+        var maxBenchmarkedLoad: LoadDimension = LoadDimension(0)
+        for(experiment in results) {
+            if (experiment.value) {
+                if(experiment.key.first.get() <= load.get()) {
+                    if (experiment.value && maxBenchmarkedLoad == null) {
+                        maxBenchmarkedLoad = experiment.key.first
+                    } else if (experiment.value && maxBenchmarkedLoad.get() < experiment.key.first.get()) {
+                        maxBenchmarkedLoad = experiment.key.first
+                    }
+                }
+            }
+        }
+        return maxBenchmarkedLoad
+    }
 }
\ No newline at end of file
diff --git a/theodolite-quarkus/src/test/kotlin/theodolite/CompositeStrategyTest.kt b/theodolite-quarkus/src/test/kotlin/theodolite/CompositeStrategyTest.kt
index 0fa48dafc416900930ed9e398a865e7ca0dae36c..c9ab93992e73cbf9655ddb585c96308529ce3b9b 100644
--- a/theodolite-quarkus/src/test/kotlin/theodolite/CompositeStrategyTest.kt
+++ b/theodolite-quarkus/src/test/kotlin/theodolite/CompositeStrategyTest.kt
@@ -29,10 +29,10 @@ class CompositeStrategyTest {
         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 linearSearch: LinearSearch = LinearSearch(benchmarkExecutor);
         val results: Results = Results();
-        val lowerBoundRestriction: LowerBoundRestriction = LowerBoundRestriction(results, mockLoads);
-        val strategy: CompositeStrategy = CompositeStrategy(benchmarkExecutor, linearSearch, listOf(lowerBoundRestriction))
+        val linearSearch: LinearSearch = LinearSearch(benchmarkExecutor, results);
+        val lowerBoundRestriction: LowerBoundRestriction = LowerBoundRestriction(results);
+        val strategy: CompositeStrategy = CompositeStrategy(benchmarkExecutor, linearSearch, listOf(lowerBoundRestriction), results)
 
         val actual: ArrayList<Resource?> = ArrayList<Resource?>()
         val expected: ArrayList<Resource?> = ArrayList(listOf(0,2,2,3,4,6).map{ x -> Resource(x)})
@@ -59,10 +59,10 @@ class CompositeStrategyTest {
         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 binarySearch: BinarySearch = BinarySearch(benchmarkExecutor, results);
+        val lowerBoundRestriction: LowerBoundRestriction = LowerBoundRestriction(results);
+        val strategy: CompositeStrategy = CompositeStrategy(benchmarkExecutor, binarySearch, listOf(lowerBoundRestriction), results) // sets instead of lists
 
         val actual: ArrayList<Resource?> = ArrayList<Resource?>()
         val expected: ArrayList<Resource?> = ArrayList(listOf(0,2,2,3,4,6).map{ x -> Resource(x)})