diff --git a/loopy/schedule/__init__.py b/loopy/schedule/__init__.py
index fde967c65c214d200fd860f04e8691a19d2896ae..ccfe0d5ff9b403b9ed68bfabf7d69ec36bd66b57 100644
--- a/loopy/schedule/__init__.py
+++ b/loopy/schedule/__init__.py
@@ -1045,8 +1045,9 @@ def generate_loop_schedules_internal(
                     sched_state.active_group_counts.keys()):
                 new_insn_ids_to_try = None
 
-            new_toposorted_insns = sched_state.insns_in_topologically_sorted_order[:]
-            new_toposorted_insns.remove(insn)
+            # explicitly use id to compare to avoid performance issues like #199
+            new_toposorted_insns = [x for x in
+                sched_state.insns_in_topologically_sorted_order if x.id != insn.id]
 
             # }}}