diff --git a/astnodes.py b/astnodes.py
index 89d3a85449f86b3bd77986661e0a1a37e80b6712..df48c6d4a4e30266506d7f6936f460ce4b14f22f 100644
--- a/astnodes.py
+++ b/astnodes.py
@@ -268,8 +268,12 @@ class Block(Node):
 
         # move all assignment (definitions to the top)
         if isinstance(newNode, SympyAssignment) and newNode.isDeclaration:
-            while idx > 0 and not (isinstance(self._nodes[idx-1], SympyAssignment) and self._nodes[idx-1].isDeclaration):
-                idx -= 1
+            while idx > 0:
+                pn = self._nodes[idx - 1]
+                if isinstance(pn, LoopOverCoordinate) or isinstance(pn, Conditional):
+                    idx -= 1
+                else:
+                    break
         self._nodes.insert(idx, newNode)
 
     def append(self, node):