diff --git a/loopy/kernel/__init__.py b/loopy/kernel/__init__.py
index a7b358698c0b7c1bd17fa9431dc12223ff8ded46..9c4f86fb58723f53067838f01b908117cf1c49b6 100644
--- a/loopy/kernel/__init__.py
+++ b/loopy/kernel/__init__.py
@@ -901,20 +901,14 @@ class LoopKernel(ImmutableRecordWithoutPickling):
         global_barrier_to_ordinal = dict(
                 (b, i) for i, b in enumerate(self.global_barrier_order))
 
-        def get_barrier_ordinal(barrier_id):
-            return (global_barrier_to_ordinal[barrier_id]
-                    if barrier_id is not None
-                    else -1)
+        barriers = set(dep
+                for dep in self.recursive_insn_dep_map()[insn_id]
+                if is_barrier(dep))
 
-        direct_barrier_dependencies = set(
-                dep for dep in insn.depends_on if is_barrier(dep))
-
-        if len(direct_barrier_dependencies) > 0:
-            return max(direct_barrier_dependencies, key=get_barrier_ordinal)
+        if len(barriers) > 0:
+            return max(barriers, key=lambda b: global_barrier_to_ordinal[b])
         else:
-            return max((self.find_most_recent_global_barrier(dep)
-                        for dep in insn.depends_on),
-                    key=get_barrier_ordinal)
+            return None
 
     @property
     @memoize_method