diff --git a/transformations/LICM.py b/transformations/LICM.py
index e6e86fd1cdf689c04b6c09e710f9e45e7c684996..ffa3327c80877cdc2217bc181530312d0893ac4b 100644
--- a/transformations/LICM.py
+++ b/transformations/LICM.py
@@ -37,6 +37,18 @@ class SetBlockVariants(Mutator):
         ast_node.block = self.mutate(ast_node.block)
         return ast_node
 
+    def mutate_BinOp(self, ast_node):
+        # For property accesses, we only want to include the property name, and not
+        # the index that is also present in the expression
+        ast_node.lhs = self.mutate(ast_node.lhs)
+        return ast_node
+
+    def mutate_ArrayAccess(self, ast_node):
+        # For array accesses, we only want to include the array name, and not
+        # the index that is also present in the access node
+        ast_node.array = self.mutate(ast_node.array)
+        return ast_node
+
     def mutate_Array(self, ast_node):
         return self.push_variant(ast_node)
 
@@ -155,7 +167,7 @@ class LICM(Mutator):
             last_loop = self.loops[-1]
             #print(f"variants = {last_loop.block.variants}, terminals = {ast_node.bin_op.terminals}")
             if not last_loop.block.variants.intersection(ast_node.bin_op.terminals):
-                print(f'lifting {ast_node.bin_op.id()}')
+                #print(f'lifting {ast_node.bin_op.id()}')
                 self.lifts[id(last_loop)].append(ast_node)
                 return None