diff --git a/src/pairs/code_gen/cgen.py b/src/pairs/code_gen/cgen.py
index 4efca1aae8ce954ee517f502fdc90537db8b683a..984cdc91f832c8cf1ef3c9fd50ae319323eb201b 100644
--- a/src/pairs/code_gen/cgen.py
+++ b/src/pairs/code_gen/cgen.py
@@ -582,11 +582,7 @@ class CGen:
                 index_g = self.generate_expression(index_expr)
                 return f"{prop_name}[{index_g}]"
 
-            acc_ref = f"p{ast_node.id()}"
-            if ast_node.is_vector_kind():
-                acc_ref += f"_{index}"
-
-            return acc_ref
+            return f"p{ast_node.id()}" + (f"_{index}" if ast_node.is_vector_kind() else "")
 
         if isinstance(ast_node, PropertyList):
             tid = CGen.temp_id
diff --git a/src/pairs/ir/loops.py b/src/pairs/ir/loops.py
index b2ea4af46230f3a77c2516b9dfecca2d2797a41e..553b5ad689ddeefd17e8aa376c189a8ea5d3229c 100644
--- a/src/pairs/ir/loops.py
+++ b/src/pairs/ir/loops.py
@@ -44,6 +44,7 @@ class For(ASTNode):
         self.min = Lit.cvt(sim, range_min)
         self.max = Lit.cvt(sim, range_max)
         self.block = Block(sim, []) if block is None else block
+        self.kernel = None
 
     def __str__(self):
         return f"For<{self.iterator}, {self.min} ... {self.max}>"
diff --git a/src/pairs/transformations/devices.py b/src/pairs/transformations/devices.py
index 9ced48786e90982fc4a0bdd71834efcbeff83455..a5b18f647033317709e36044c71226706c3f8964 100644
--- a/src/pairs/transformations/devices.py
+++ b/src/pairs/transformations/devices.py
@@ -72,10 +72,13 @@ class AddDeviceKernels(Mutator):
             for s in ast_node._block.stmts:
                 if s is not None:
                     if isinstance(s, For) and (not isinstance(s.min, Lit) or not isinstance(s.max, Lit)):
-                        kernel_block = Filter(ast_node.sim, BinOp.inline(s.iterator < s.max), s.block)
-                        kernel = Kernel(ast_node.sim, f"{ast_node.name}_kernel{kernel_id}", kernel_block, s.iterator)
-                        new_stmts.append(KernelLaunch(ast_node.sim, kernel, s.iterator, s.min, s.max))
-                        kernel_id += 1
+                        if s.kernel is None:
+                            s.kernel = Kernel(ast_node.sim, f"{ast_node.name}_kernel{kernel_id}",
+                                              Filter(ast_node.sim, BinOp.inline(s.iterator < s.max), s.block), s.iterator)
+                            kernel_id += 1
+
+                        new_stmts.append(KernelLaunch(ast_node.sim, s.kernel, s.iterator, s.min, s.max))
+
                     else:
                         new_stmts.append(s)