diff --git a/src/pairs/analysis/modules.py b/src/pairs/analysis/modules.py
index 24ab2be28a5a81c837c8089c7135d5918ad0b8c8..d5311bc89780774ec5b647cb6110bb018b7b4743 100644
--- a/src/pairs/analysis/modules.py
+++ b/src/pairs/analysis/modules.py
@@ -39,8 +39,16 @@ class FetchModulesReferences(Visitor):
             self.visit(ast_node.capacity)
 
     def visit_AtomicInc(self, ast_node):
+        visit_once = self.visit_nodes_once
+        self.visit_nodes_once = False
+        # Force write after read for the same node (visited twice)
+        self.writing = False
+        self.visit(ast_node.elem)
         self.writing = True
         self.visit(ast_node.elem)
+        self.visit_nodes_once = visit_once
+
+
         self.writing = False
         self.visit(ast_node.value)
 
diff --git a/src/pairs/transformations/expressions.py b/src/pairs/transformations/expressions.py
index 1e1ab5e49abb98d489a2d0a8ed8d54424c2795c5..750bce6b0d8cb579c59ea542aac297c8f1dc9c76 100644
--- a/src/pairs/transformations/expressions.py
+++ b/src/pairs/transformations/expressions.py
@@ -194,18 +194,6 @@ class AddExpressionDeclarations(Mutator):
 
         return ast_node
     
-    def mutate_AtomicInc(self, ast_node):
-        self.writing = True
-        ast_node.elem = self.mutate(ast_node.elem)
-        self.writing = False
-        ast_node.value = self.mutate(ast_node.value)
-        atomic_inc_id = id(ast_node)
-        if atomic_inc_id not in self.declared_exprs and atomic_inc_id not in self.params:
-            self.push_decl(Decl(ast_node.sim, ast_node))
-            self.declared_exprs.append(atomic_inc_id)
-
-        return ast_node
-
     def mutate_Block(self, ast_node):
         block_id = id(ast_node)
         self.decls[block_id] = []