diff --git a/benchmarks/model_checking/Rust/CAN_BUS_tlc.rs b/benchmarks/model_checking/Rust/CAN_BUS_tlc.rs
index 564a59a407c5fd65054d7ca75591e56daacab8ee..66dffc50da5e566954f05a11fdc60e89c1ef53fd 100644
--- a/benchmarks/model_checking/Rust/CAN_BUS_tlc.rs
+++ b/benchmarks/model_checking/Rust/CAN_BUS_tlc.rs
@@ -1567,10 +1567,6 @@ impl CAN_BUS_tlc {
             let tx = tx.clone();
             //println!("Thread {:?} spawning a thread", thread::current().id());
             threadPool.execute(move|| {
-                if !Self::checkInvariants(&state, last_op, is_caching) {
-                    let _ = tx.send(Err("INVARIANT VIOLATED"));
-                }
-
                 let next_states = Self::generateNextStates(&mut state, is_caching, transitions);
                 if next_states.is_empty() { let _ = tx.send(Err("DEADLOCK DETECTED")); }
 
@@ -1579,6 +1575,9 @@ impl CAN_BUS_tlc {
                            .filter(|(next_state, _)| states.insert((*next_state).clone()))
                            .for_each(|(next_state, last_op)| states_to_process.lock().unwrap().push_back((next_state, last_op)));
 
+                if !Self::checkInvariants(&state, last_op, is_caching) {
+                    let _ = tx.send(Err("INVARIANT VIOLATED"));
+                }
                 //println!("Thread {:?} done", thread::current().id());
                 let _ = tx.send(Ok(1));
             });
@@ -1592,7 +1591,7 @@ impl CAN_BUS_tlc {
 
             while states_to_process_mutex.lock().unwrap().is_empty() && spawned_tasks - finished_tasks > 0 {
                 //println!("Thread {:?} (main) waiting for a thread to finish", thread::current().id());
-                match rx.recv_timeout(Duration::from_secs(1)) {
+                match rx.try_recv() {
                     Ok(val)  => match val {
                             Ok(_) => finished_tasks += 1,
                             Err(msg) => { println!("{}", msg); stop_threads = true; },
diff --git a/benchmarks/model_checking/Rust/Cruise_finite1_deterministic_MC.rs b/benchmarks/model_checking/Rust/Cruise_finite1_deterministic_MC.rs
index 3c75c4370810b7ebd5c4a6236b0d6f245220c94d..54815c76044f105c16132a73e9b6bdb1a8c0f636 100644
--- a/benchmarks/model_checking/Rust/Cruise_finite1_deterministic_MC.rs
+++ b/benchmarks/model_checking/Rust/Cruise_finite1_deterministic_MC.rs
@@ -1876,10 +1876,6 @@ impl Cruise_finite1_deterministic_MC {
             let tx = tx.clone();
             //println!("Thread {:?} spawning a thread", thread::current().id());
             threadPool.execute(move|| {
-                if !Self::checkInvariants(&state, last_op, is_caching) {
-                    let _ = tx.send(Err("INVARIANT VIOLATED"));
-                }
-
                 let next_states = Self::generateNextStates(&mut state, is_caching, transitions);
                 if next_states.is_empty() { let _ = tx.send(Err("DEADLOCK DETECTED")); }
 
@@ -1888,6 +1884,9 @@ impl Cruise_finite1_deterministic_MC {
                            .filter(|(next_state, _)| states.insert((*next_state).clone()))
                            .for_each(|(next_state, last_op)| states_to_process.lock().unwrap().push_back((next_state, last_op)));
 
+                if !Self::checkInvariants(&state, last_op, is_caching) {
+                    let _ = tx.send(Err("INVARIANT VIOLATED"));
+                }
                 //println!("Thread {:?} done", thread::current().id());
                 let _ = tx.send(Ok(1));
             });
@@ -1901,7 +1900,7 @@ impl Cruise_finite1_deterministic_MC {
 
             while states_to_process_mutex.lock().unwrap().is_empty() && spawned_tasks - finished_tasks > 0 {
                 //println!("Thread {:?} (main) waiting for a thread to finish", thread::current().id());
-                match rx.recv_timeout(Duration::from_secs(1)) {
+                match rx.try_recv() {
                     Ok(val)  => match val {
                             Ok(_) => finished_tasks += 1,
                             Err(msg) => { println!("{}", msg); stop_threads = true; },
diff --git a/benchmarks/model_checking/Rust/LandingGear_R6.rs b/benchmarks/model_checking/Rust/LandingGear_R6.rs
index 60e94590d2447ac06c93eaa51f5268bdb9425edf..016ef4e20cbc8eb49f226ee94c8e80b597d27e9a 100644
--- a/benchmarks/model_checking/Rust/LandingGear_R6.rs
+++ b/benchmarks/model_checking/Rust/LandingGear_R6.rs
@@ -2283,10 +2283,6 @@ impl LandingGear_R6 {
             let tx = tx.clone();
             //println!("Thread {:?} spawning a thread", thread::current().id());
             threadPool.execute(move|| {
-                if !Self::checkInvariants(&state, last_op, is_caching) {
-                    let _ = tx.send(Err("INVARIANT VIOLATED"));
-                }
-
                 let next_states = Self::generateNextStates(&mut state, is_caching, transitions);
                 if next_states.is_empty() { let _ = tx.send(Err("DEADLOCK DETECTED")); }
 
@@ -2295,6 +2291,9 @@ impl LandingGear_R6 {
                            .filter(|(next_state, _)| states.insert((*next_state).clone()))
                            .for_each(|(next_state, last_op)| states_to_process.lock().unwrap().push_back((next_state, last_op)));
 
+                if !Self::checkInvariants(&state, last_op, is_caching) {
+                    let _ = tx.send(Err("INVARIANT VIOLATED"));
+                }
                 //println!("Thread {:?} done", thread::current().id());
                 let _ = tx.send(Ok(1));
             });
@@ -2308,7 +2307,7 @@ impl LandingGear_R6 {
 
             while states_to_process_mutex.lock().unwrap().is_empty() && spawned_tasks - finished_tasks > 0 {
                 //println!("Thread {:?} (main) waiting for a thread to finish", thread::current().id());
-                match rx.recv_timeout(Duration::from_secs(1)) {
+                match rx.try_recv() {
                     Ok(val)  => match val {
                             Ok(_) => finished_tasks += 1,
                             Err(msg) => { println!("{}", msg); stop_threads = true; },
diff --git a/benchmarks/model_checking/Rust/Lift_MC_Large.rs b/benchmarks/model_checking/Rust/Lift_MC_Large.rs
index 3e458e750db453b1496c8f2180f4adad6cb05ba4..a6d2852de22649ab73a611cb329f53dc86ed28a6 100644
--- a/benchmarks/model_checking/Rust/Lift_MC_Large.rs
+++ b/benchmarks/model_checking/Rust/Lift_MC_Large.rs
@@ -270,10 +270,6 @@ impl Lift_MC_Large {
             let tx = tx.clone();
             //println!("Thread {:?} spawning a thread", thread::current().id());
             threadPool.execute(move|| {
-                if !Self::checkInvariants(&state, last_op, is_caching) {
-                    let _ = tx.send(Err("INVARIANT VIOLATED"));
-                }
-
                 let next_states = Self::generateNextStates(&mut state, is_caching, transitions);
                 if next_states.is_empty() { let _ = tx.send(Err("DEADLOCK DETECTED")); }
 
@@ -282,6 +278,9 @@ impl Lift_MC_Large {
                            .filter(|(next_state, _)| states.insert((*next_state).clone()))
                            .for_each(|(next_state, last_op)| states_to_process.lock().unwrap().push_back((next_state, last_op)));
 
+                if !Self::checkInvariants(&state, last_op, is_caching) {
+                    let _ = tx.send(Err("INVARIANT VIOLATED"));
+                }
                 //println!("Thread {:?} done", thread::current().id());
                 let _ = tx.send(Ok(1));
             });
@@ -295,7 +294,7 @@ impl Lift_MC_Large {
 
             while states_to_process_mutex.lock().unwrap().is_empty() && spawned_tasks - finished_tasks > 0 {
                 //println!("Thread {:?} (main) waiting for a thread to finish", thread::current().id());
-                match rx.recv_timeout(Duration::from_secs(1)) {
+                match rx.try_recv() {
                     Ok(val)  => match val {
                             Ok(_) => finished_tasks += 1,
                             Err(msg) => { println!("{}", msg); stop_threads = true; },
diff --git a/benchmarks/model_checking/Rust/QueensWithEvents_4.rs b/benchmarks/model_checking/Rust/QueensWithEvents_4.rs
index 7af2de3e37a983b86532ea80f68806712bb7c82c..868655dc95ec98eabcddfa98264acf21ccd6cd2b 100644
--- a/benchmarks/model_checking/Rust/QueensWithEvents_4.rs
+++ b/benchmarks/model_checking/Rust/QueensWithEvents_4.rs
@@ -356,10 +356,6 @@ impl QueensWithEvents_4 {
             let tx = tx.clone();
             //println!("Thread {:?} spawning a thread", thread::current().id());
             threadPool.execute(move|| {
-                if !Self::checkInvariants(&state, last_op, is_caching) {
-                    let _ = tx.send(Err("INVARIANT VIOLATED"));
-                }
-
                 let next_states = Self::generateNextStates(&mut state, is_caching, transitions);
                 if next_states.is_empty() { let _ = tx.send(Err("DEADLOCK DETECTED")); }
 
@@ -368,6 +364,9 @@ impl QueensWithEvents_4 {
                            .filter(|(next_state, _)| states.insert((*next_state).clone()))
                            .for_each(|(next_state, last_op)| states_to_process.lock().unwrap().push_back((next_state, last_op)));
 
+                if !Self::checkInvariants(&state, last_op, is_caching) {
+                    let _ = tx.send(Err("INVARIANT VIOLATED"));
+                }
                 //println!("Thread {:?} done", thread::current().id());
                 let _ = tx.send(Ok(1));
             });
@@ -381,7 +380,7 @@ impl QueensWithEvents_4 {
 
             while states_to_process_mutex.lock().unwrap().is_empty() && spawned_tasks - finished_tasks > 0 {
                 //println!("Thread {:?} (main) waiting for a thread to finish", thread::current().id());
-                match rx.recv_timeout(Duration::from_secs(1)) {
+                match rx.try_recv() {
                     Ok(val)  => match val {
                             Ok(_) => finished_tasks += 1,
                             Err(msg) => { println!("{}", msg); stop_threads = true; },
diff --git a/benchmarks/model_checking/Rust/Train1_Lukas_POR_v3.rs b/benchmarks/model_checking/Rust/Train1_Lukas_POR_v3.rs
index 52284d90848b429bfabb17488bac0f9601df55da..f601ad28fbf11b6e90f03b4072c9234a538dd99b 100644
--- a/benchmarks/model_checking/Rust/Train1_Lukas_POR_v3.rs
+++ b/benchmarks/model_checking/Rust/Train1_Lukas_POR_v3.rs
@@ -933,10 +933,6 @@ impl Train1_Lukas_POR_v3 {
             let tx = tx.clone();
             //println!("Thread {:?} spawning a thread", thread::current().id());
             threadPool.execute(move|| {
-                if !Self::checkInvariants(&state, last_op, is_caching) {
-                    let _ = tx.send(Err("INVARIANT VIOLATED"));
-                }
-
                 let next_states = Self::generateNextStates(&mut state, is_caching, transitions);
                 if next_states.is_empty() { let _ = tx.send(Err("DEADLOCK DETECTED")); }
 
@@ -945,6 +941,9 @@ impl Train1_Lukas_POR_v3 {
                            .filter(|(next_state, _)| states.insert((*next_state).clone()))
                            .for_each(|(next_state, last_op)| states_to_process.lock().unwrap().push_back((next_state, last_op)));
 
+                if !Self::checkInvariants(&state, last_op, is_caching) {
+                    let _ = tx.send(Err("INVARIANT VIOLATED"));
+                }
                 //println!("Thread {:?} done", thread::current().id());
                 let _ = tx.send(Ok(1));
             });
@@ -958,7 +957,7 @@ impl Train1_Lukas_POR_v3 {
 
             while states_to_process_mutex.lock().unwrap().is_empty() && spawned_tasks - finished_tasks > 0 {
                 //println!("Thread {:?} (main) waiting for a thread to finish", thread::current().id());
-                match rx.recv_timeout(Duration::from_secs(1)) {
+                match rx.try_recv() {
                     Ok(val)  => match val {
                             Ok(_) => finished_tasks += 1,
                             Err(msg) => { println!("{}", msg); stop_threads = true; },
diff --git a/benchmarks/model_checking/Rust/Train_1_beebook_deterministic_MC_POR_v2.rs b/benchmarks/model_checking/Rust/Train_1_beebook_deterministic_MC_POR_v2.rs
index b74c92f7d41671bae902e106caef881648b1e5bf..a9a40e693cea1af095cff8d02033635815a0e2b3 100644
--- a/benchmarks/model_checking/Rust/Train_1_beebook_deterministic_MC_POR_v2.rs
+++ b/benchmarks/model_checking/Rust/Train_1_beebook_deterministic_MC_POR_v2.rs
@@ -956,10 +956,6 @@ impl Train_1_beebook_deterministic_MC_POR_v2 {
             let tx = tx.clone();
             //println!("Thread {:?} spawning a thread", thread::current().id());
             threadPool.execute(move|| {
-                if !Self::checkInvariants(&state, last_op, is_caching) {
-                    let _ = tx.send(Err("INVARIANT VIOLATED"));
-                }
-
                 let next_states = Self::generateNextStates(&mut state, is_caching, transitions);
                 if next_states.is_empty() { let _ = tx.send(Err("DEADLOCK DETECTED")); }
 
@@ -968,6 +964,9 @@ impl Train_1_beebook_deterministic_MC_POR_v2 {
                            .filter(|(next_state, _)| states.insert((*next_state).clone()))
                            .for_each(|(next_state, last_op)| states_to_process.lock().unwrap().push_back((next_state, last_op)));
 
+                if !Self::checkInvariants(&state, last_op, is_caching) {
+                    let _ = tx.send(Err("INVARIANT VIOLATED"));
+                }
                 //println!("Thread {:?} done", thread::current().id());
                 let _ = tx.send(Ok(1));
             });
@@ -981,7 +980,7 @@ impl Train_1_beebook_deterministic_MC_POR_v2 {
 
             while states_to_process_mutex.lock().unwrap().is_empty() && spawned_tasks - finished_tasks > 0 {
                 //println!("Thread {:?} (main) waiting for a thread to finish", thread::current().id());
-                match rx.recv_timeout(Duration::from_secs(1)) {
+                match rx.try_recv() {
                     Ok(val)  => match val {
                             Ok(_) => finished_tasks += 1,
                             Err(msg) => { println!("{}", msg); stop_threads = true; },
diff --git a/benchmarks/model_checking/Rust/nota_v2.rs b/benchmarks/model_checking/Rust/nota_v2.rs
index e4be01aa8806f081bb2e82ecdd48c11871f6c6c7..a52fae3f44cc3204d082dd6708e30d80c765ebde 100644
--- a/benchmarks/model_checking/Rust/nota_v2.rs
+++ b/benchmarks/model_checking/Rust/nota_v2.rs
@@ -1658,10 +1658,6 @@ impl nota_v2 {
             let tx = tx.clone();
             //println!("Thread {:?} spawning a thread", thread::current().id());
             threadPool.execute(move|| {
-                if !Self::checkInvariants(&state, last_op, is_caching) {
-                    let _ = tx.send(Err("INVARIANT VIOLATED"));
-                }
-
                 let next_states = Self::generateNextStates(&mut state, is_caching, transitions);
                 if next_states.is_empty() { let _ = tx.send(Err("DEADLOCK DETECTED")); }
 
@@ -1670,6 +1666,9 @@ impl nota_v2 {
                            .filter(|(next_state, _)| states.insert((*next_state).clone()))
                            .for_each(|(next_state, last_op)| states_to_process.lock().unwrap().push_back((next_state, last_op)));
 
+                if !Self::checkInvariants(&state, last_op, is_caching) {
+                    let _ = tx.send(Err("INVARIANT VIOLATED"));
+                }
                 //println!("Thread {:?} done", thread::current().id());
                 let _ = tx.send(Ok(1));
             });
@@ -1683,7 +1682,7 @@ impl nota_v2 {
 
             while states_to_process_mutex.lock().unwrap().is_empty() && spawned_tasks - finished_tasks > 0 {
                 //println!("Thread {:?} (main) waiting for a thread to finish", thread::current().id());
-                match rx.recv_timeout(Duration::from_secs(1)) {
+                match rx.try_recv() {
                     Ok(val)  => match val {
                             Ok(_) => finished_tasks += 1,
                             Err(msg) => { println!("{}", msg); stop_threads = true; },
diff --git a/benchmarks/model_checking/Rust/sort_m2_data1000_MC.rs b/benchmarks/model_checking/Rust/sort_m2_data1000_MC.rs
index 73fe42acfa8168b695363fadb0193e6783041433..66673ae8f99ad16bd79dca71435b5e7901ca9760 100644
--- a/benchmarks/model_checking/Rust/sort_m2_data1000_MC.rs
+++ b/benchmarks/model_checking/Rust/sort_m2_data1000_MC.rs
@@ -442,10 +442,6 @@ impl sort_m2_data1000_MC {
             let tx = tx.clone();
             //println!("Thread {:?} spawning a thread", thread::current().id());
             threadPool.execute(move|| {
-                if !Self::checkInvariants(&state, last_op, is_caching) {
-                    let _ = tx.send(Err("INVARIANT VIOLATED"));
-                }
-
                 let next_states = Self::generateNextStates(&mut state, is_caching, transitions);
                 if next_states.is_empty() { let _ = tx.send(Err("DEADLOCK DETECTED")); }
 
@@ -454,6 +450,9 @@ impl sort_m2_data1000_MC {
                            .filter(|(next_state, _)| states.insert((*next_state).clone()))
                            .for_each(|(next_state, last_op)| states_to_process.lock().unwrap().push_back((next_state, last_op)));
 
+                if !Self::checkInvariants(&state, last_op, is_caching) {
+                    let _ = tx.send(Err("INVARIANT VIOLATED"));
+                }
                 //println!("Thread {:?} done", thread::current().id());
                 let _ = tx.send(Ok(1));
             });
@@ -467,7 +466,7 @@ impl sort_m2_data1000_MC {
 
             while states_to_process_mutex.lock().unwrap().is_empty() && spawned_tasks - finished_tasks > 0 {
                 //println!("Thread {:?} (main) waiting for a thread to finish", thread::current().id());
-                match rx.recv_timeout(Duration::from_secs(1)) {
+                match rx.try_recv() {
                     Ok(val)  => match val {
                             Ok(_) => finished_tasks += 1,
                             Err(msg) => { println!("{}", msg); stop_threads = true; },
diff --git a/btypes_primitives/src/main/rust/btypes/src/brelation.rs b/btypes_primitives/src/main/rust/btypes/src/brelation.rs
index d1eab3dffa1067b36e38952b53c5f77198e25e49..2b9cac648fa5ccd76766dffe6c447182e3f2e5e8 100644
--- a/btypes_primitives/src/main/rust/btypes/src/brelation.rs
+++ b/btypes_primitives/src/main/rust/btypes/src/brelation.rs
@@ -84,19 +84,9 @@ impl<L: BObject, R: BObject> Hash for BRelation<L, R> {
         if cache.is_none() {
             let mut hasher = DefaultHasher::new();
             self.map.hash(&mut hasher);
-            /*
-            let mut kvs = self.map.iter().collect::<Vec<(&L, &OrdSet<R>)>>();
-            kvs.sort_by(|(k1, _v1), (k2, _v2)| k1.cmp(k2));
-            for (key, value) in kvs {
-                key.hash(&mut hasher);
-                value.iter().for_each(|v| v.hash(&mut hasher));
-            }
-            */
             hash = hasher.finish();
-            //println!("BRelation: cache miss");
             self.hash_cache.replace(Option::Some(hash));
         } else {
-            //println!("BRelation: cache hit");
             hash = cache.unwrap();
         }
         hash.hash(state);
diff --git a/src/main/resources/de/hhu/stups/codegenerator/RustTemplate.stg b/src/main/resources/de/hhu/stups/codegenerator/RustTemplate.stg
index b0171b192148a704bdf536336b034fd3e8576426..63e8c5dab228b56bf87ccf5af82c22b389003ead 100644
--- a/src/main/resources/de/hhu/stups/codegenerator/RustTemplate.stg
+++ b/src/main/resources/de/hhu/stups/codegenerator/RustTemplate.stg
@@ -951,10 +951,6 @@ fn modelCheckMultiThreaded(mc_type: MC_TYPE, threads: usize, is_caching: bool) {
         let tx = tx.clone();
         //println!("Thread {:?} spawning a thread", thread::current().id());
         threadPool.execute(move|| {
-            if !Self::checkInvariants(&state, last_op, is_caching) {
-                let _ = tx.send(Err("INVARIANT VIOLATED"));
-            }
-
             let next_states = Self::generateNextStates(&mut state, is_caching, transitions);
             if next_states.is_empty() { let _ = tx.send(Err("DEADLOCK DETECTED")); }
 
@@ -963,6 +959,9 @@ fn modelCheckMultiThreaded(mc_type: MC_TYPE, threads: usize, is_caching: bool) {
                        .filter(|(next_state, _)| states.insert((*next_state).clone()))
                        .for_each(|(next_state, last_op)| states_to_process.lock().unwrap().push_back((next_state, last_op)));
 
+            if !Self::checkInvariants(&state, last_op, is_caching) {
+                let _ = tx.send(Err("INVARIANT VIOLATED"));
+            }
             //println!("Thread {:?} done", thread::current().id());
             let _ = tx.send(Ok(1));
         });
@@ -976,7 +975,7 @@ fn modelCheckMultiThreaded(mc_type: MC_TYPE, threads: usize, is_caching: bool) {
 
         while states_to_process_mutex.lock().unwrap().is_empty() && spawned_tasks - finished_tasks > 0 {
             //println!("Thread {:?} (main) waiting for a thread to finish", thread::current().id());
-            match rx.recv_timeout(Duration::from_secs(1)) {
+            match rx.try_recv() {
                 Ok(val)  => match val {
                         Ok(_) => finished_tasks += 1,
                         Err(msg) => { println!("{}", msg); stop_threads = true; },