diff --git a/scripts/errors/coll/ParamMatchingType.py b/scripts/errors/coll/ParamMatchingType.py
index 8680e4f75258dd11d27e88e06344084cd9b970b6..f8757a22a52f2ba5826d359b4395b2cf02f94e40 100644
--- a/scripts/errors/coll/ParamMatchingType.py
+++ b/scripts/errors/coll/ParamMatchingType.py
@@ -145,23 +145,22 @@ class InvalidComErrorColl(ErrorGenerator):
 
     def generate(self, generate_level, real_world_score_table):
 
+        types = predefined_types + user_defined_types
         combinations_to_use = []
         for f in self.functions_to_use:
-            for t1 in predefined_types + user_defined_types:
-                for t2 in predefined_types + user_defined_types:
-                    for comm in predefined_comms + comm_creators + intercomms:
+            for comm in predefined_comms + comm_creators + intercomms:
+                for i, t1 in enumerate(types):
+                    if generate_level == REAL_WORLD_TEST_LEVEL and not is_combination_important(real_world_score_table,
+                                                                                                f, datatype=t1.lower(),
+                                                                                                communicator=comm):
+                        continue
+                    for t2 in types[i:]:
+                        if generate_level == REAL_WORLD_TEST_LEVEL and not is_combination_important(
+                                real_world_score_table, f, datatype=t2.lower(), communicator=comm):
+                            continue
                         if is_combination_compatible(t1, t2, f):
                             combinations_to_use.append((t1, t2, f, comm))
 
-        if generate_level == REAL_WORLD_TEST_LEVEL:
-            combinations_to_use = [(t1, t2, f, comm) for (t1, t2, f, comm) in combinations_to_use if
-                                   is_combination_important(real_world_score_table,
-                                                            f, datatype=t1.lower(),
-                                                            communicator=comm) and
-                                   is_combination_important(real_world_score_table,
-                                                            f, datatype=t2.lower(),
-                                                            communicator=comm)]
-
         if generate_level == SUFFICIENT_TEST_LEVEL:
             types_checked = set()
             combinations_to_use_filtered = []