diff --git a/combinatoric-solver/src/collection.rs b/combinatoric-solver/src/collection.rs
index a7c1dd9303322c8545e2403fdfa2c626e3acafc4..d21d0f6caeb47662eff77a87f23e21cc080d7ec6 100644
--- a/combinatoric-solver/src/collection.rs
+++ b/combinatoric-solver/src/collection.rs
@@ -7,39 +7,39 @@ where
     V: ItemVariant,
 {
     pub score: S,
-    pub item_quantity: usize,
     pub item_variant: [V; MAX_ITEMS],
 }
 
 impl<const MAX_ITEMS: usize, S: Score, V: ItemVariant> Collection<MAX_ITEMS, S, V> {
-    pub fn push(&self, item_variant: V) -> Self {
+    #[inline]
+    pub fn push(&self, iteration: usize, item_variant: V) -> Self {
         let mut new = self.clone();
-        new.item_variant[self.item_quantity] = item_variant;
-        new.item_quantity += 1;
+        new.item_variant[iteration] = item_variant;
         new
     }
 }
 
 impl<const MAX_ITEMS: usize, S: Score, V: ItemVariant> Default for Collection<MAX_ITEMS, S, V> {
+    #[inline]
     fn default() -> Self {
         let score = S::default();
-        let item_quantity = 0;
         let item_variant = [V::default(); MAX_ITEMS];
         Self {
             score,
-            item_quantity,
             item_variant,
         }
     }
 }
 
 impl<const MAX_ITEMS: usize, S: Score, V: ItemVariant> PartialEq for Collection<MAX_ITEMS, S, V> {
+    #[inline]
     fn eq(&self, other: &Self) -> bool {
         self.item_variant == other.item_variant
     }
 }
 
 impl<const MAX_ITEMS: usize, S: Score, V: ItemVariant> PartialOrd for Collection<MAX_ITEMS, S, V> {
+    #[inline]
     fn partial_cmp(&self, other: &Self) -> Option<std::cmp::Ordering> {
         self.score.partial_cmp(&other.score)
     }
@@ -48,6 +48,7 @@ impl<const MAX_ITEMS: usize, S: Score, V: ItemVariant> PartialOrd for Collection
 impl<const MAX_ITEMS: usize, S: Score, V: ItemVariant> Eq for Collection<MAX_ITEMS, S, V> {}
 
 impl<const MAX_ITEMS: usize, S: Score, V: ItemVariant> Ord for Collection<MAX_ITEMS, S, V> {
+    #[inline]
     fn cmp(&self, other: &Self) -> std::cmp::Ordering {
         self.score.cmp(&other.score)
     }
diff --git a/combinatoric-solver/src/solver.rs b/combinatoric-solver/src/solver.rs
index 863a28795b985889b69b3673a064f841f4b723c6..eb27c4730e8e9eac385bf8045d45c0e47760f057 100644
--- a/combinatoric-solver/src/solver.rs
+++ b/combinatoric-solver/src/solver.rs
@@ -49,7 +49,7 @@ where
         }
 
         for variant in items[i].variants() {
-            let collections = collection.push(variant);
+            let collections = collection.push(i, variant);
             Self::rec_iter(i + 1, collections, items, top_items);
         }
     }