diff --git a/arraycontext/impl/pyopencl/__init__.py b/arraycontext/impl/pyopencl/__init__.py
index 4064689b6d49e5206ce3a58dc54949613d99d937..982fd431f4a6cf5537ef497cf0814f88a95c5dc7 100644
--- a/arraycontext/impl/pyopencl/__init__.py
+++ b/arraycontext/impl/pyopencl/__init__.py
@@ -268,17 +268,17 @@ class PyOpenCLArrayContext(ArrayContext):
 
     def call_loopy(self, t_unit, **kwargs):
         try:
-            t_unit = self._loopy_transform_cache[t_unit]
+            executor = self._loopy_transform_cache[t_unit]
         except KeyError:
             orig_t_unit = t_unit
-            t_unit = self.transform_loopy_program(t_unit)
-            self._loopy_transform_cache[orig_t_unit] = t_unit
+            executor = self.transform_loopy_program(t_unit).executor(self.context)
+            self._loopy_transform_cache[orig_t_unit] = executor
             del orig_t_unit
 
-        evt, result = t_unit(self.queue, **kwargs, allocator=self.allocator)
+        evt, result = executor(self.queue, **kwargs, allocator=self.allocator)
 
         if self._wait_event_queue_length is not False:
-            prg_name = t_unit.default_entrypoint.name
+            prg_name = executor.t_unit.default_entrypoint.name
             wait_event_queue = self._kernel_name_to_wait_event_queue.setdefault(
                     prg_name, [])