diff --git a/ir/bin_op.py b/ir/bin_op.py
index 809510cd8c244b493668aa38fd512ecd64b4be8d..46c3e4deb8caf619236447a5b798ecc755f6839d 100644
--- a/ir/bin_op.py
+++ b/ir/bin_op.py
@@ -267,3 +267,5 @@ class VectorAccess(ASTTerm):
     def sub(self, other):
         return self.sim.add_statement(Assign(self.sim, self, self - other))
 
+    def children(self):
+        return [self.expr]
diff --git a/sim/particle_simulation.py b/sim/particle_simulation.py
index 8232700153c848975c7cb62d315a9b7493e7fb2c..9bf20a5d28ac07f1277a533e6f55f3395fdc7276 100644
--- a/sim/particle_simulation.py
+++ b/sim/particle_simulation.py
@@ -212,7 +212,7 @@ class ParticleSimulation:
         # Transformations
         prioritaze_scalar_ops(program)
         simplify_expressions(program)
-        #move_loop_invariant_code(program)
+        move_loop_invariant_code(program)
         set_used_bin_ops(program)
 
         # For this part on, all bin ops are generated without usage verification
diff --git a/transformations/LICM.py b/transformations/LICM.py
index 4a655b79689f961653b3aed348b6513adda5637a..0ac4d37d15d1018d115c1f17a5edd26d37fb258b 100644
--- a/transformations/LICM.py
+++ b/transformations/LICM.py
@@ -155,7 +155,6 @@ class SetBinOpTerminals(Visitor):
     def visit_Property(self, ast_node):
         self.push_terminal(ast_node)
 
-
     def visit_Var(self, ast_node):
         self.push_terminal(ast_node)
 
@@ -183,11 +182,11 @@ class LICM(Mutator):
         return ast_node
 
     def mutate_Decl(self, ast_node):
-        if self.loops:
+        if self.loops and isinstance(ast_node.elem, (BinOp, PropertyAccess)):
             last_loop = self.loops[-1]
-            #print(f"variants = {last_loop.block.variants}, terminals = {ast_node.bin_op.terminals}")
-            if isinstance(ast_node.elem, (BinOp, PropertyAccess)) and not last_loop.block.variants.intersection(ast_node.elem.terminals):
-                #print(f'lifting {ast_node.bin_op.id()}')
+            #print(f"variants = {last_loop.block.variants}, terminals = {ast_node.elem.terminals}")
+            if not last_loop.block.variants.intersection(ast_node.elem.terminals):
+                #print(f'lifting {ast_node.elem.id()}')
                 self.lifts[id(last_loop)].append(ast_node)
                 return None