diff --git a/examples/kernels b/examples/kernels
index f167b2d49ac4a56faea58b801bf8f0da24f66789..3109f5227506745635f0bd4711d299925cb84345 100644
--- a/examples/kernels
+++ b/examples/kernels
@@ -1,775 +1,770 @@
 digraph AST {
 	node [color=lightblue2 style=filled]
 	size="6,6"
-	n139969368120288 [label=Block]
-	n139969367650200 [label=Module]
-	n139969368120288 -> n139969367650200
-	n139969367650256 [label=Module]
-	n139969368120288 -> n139969367650256
-	n139969367650200 [label=Module]
-	n139969367650144 [label=Block]
-	n139969367650200 -> n139969367650144
-	n139969367650144 [label=Block]
-	n139969367647400 [label=ParticleFor]
-	n139969367650144 -> n139969367647400
-	n139969367647400 [label=ParticleFor]
-	n139969366898952 [label=Block]
-	n139969367647400 -> n139969366898952
-	n139969370135744 [label=nlocal]
-	n139969367647400 -> n139969370135744
-	n139969366898952 [label=Block]
-	n139969366899120 [label=For]
-	n139969366898952 -> n139969366899120
-	n139969366899400 [label="*"]
-	n139969366898784 [label="Iter(14)"]
-	n139969366899400 -> n139969366898784
-	n139969367646952 [label=neighborlist_capacity]
-	n139969366899400 -> n139969367646952
-	n139969366898784 [label="Iter(14)"]
-	n139969367646952 [label=neighborlist_capacity]
-	n139969366899624 [label=PropertyAccess]
-	n139969368120512 [label=position]
-	n139969366899624 -> n139969368120512
-	n139969366898784 [label="Iter(14)"]
-	n139969366899624 -> n139969366898784
-	n139969366925440 [label="*"]
-	n139969366899624 -> n139969366925440
-	n139969366927288 [label="+"]
-	n139969366899624 -> n139969366927288
-	n139969366929080 [label="+"]
-	n139969366899624 -> n139969366929080
-	n139969368120512 [label=position]
-	n139969366925440 [label="*"]
-	n139969366898784 [label="Iter(14)"]
-	n139969366925440 -> n139969366898784
-	n139969366925496 [label=3]
-	n139969366925440 -> n139969366925496
-	n139969366925496 [label=3]
-	n139969366927288 [label="+"]
-	n139969366927120 [label="*"]
-	n139969366927288 -> n139969366927120
-	n139969366927344 [label=1]
-	n139969366927288 -> n139969366927344
-	n139969366927120 [label="*"]
-	n139969366898784 [label="Iter(14)"]
-	n139969366927120 -> n139969366898784
-	n139969366927176 [label=3]
-	n139969366927120 -> n139969366927176
-	n139969366927176 [label=3]
-	n139969366927344 [label=1]
-	n139969366929080 [label="+"]
-	n139969366928912 [label="*"]
-	n139969366929080 -> n139969366928912
-	n139969366929136 [label=2]
-	n139969366929080 -> n139969366929136
-	n139969366928912 [label="*"]
-	n139969366898784 [label="Iter(14)"]
-	n139969366928912 -> n139969366898784
-	n139969366928968 [label=3]
-	n139969366928912 -> n139969366928968
-	n139969366928968 [label=3]
-	n139969366929136 [label=2]
-	n139969366900016 [label="*"]
-	n139969366898784 [label="Iter(14)"]
-	n139969366900016 -> n139969366898784
-	n139969366900072 [label=3]
-	n139969366900016 -> n139969366900072
-	n139969366900072 [label=3]
-	n139969366926336 [label="*"]
-	n139969366898784 [label="Iter(14)"]
-	n139969366926336 -> n139969366898784
-	n139969366926392 [label=3]
-	n139969366926336 -> n139969366926392
-	n139969366926392 [label=3]
-	n139969366926504 [label="+"]
-	n139969366926336 [label="*"]
-	n139969366926504 -> n139969366926336
-	n139969366926560 [label=1]
-	n139969366926504 -> n139969366926560
-	n139969366926560 [label=1]
-	n139969366928128 [label="*"]
-	n139969366898784 [label="Iter(14)"]
-	n139969366928128 -> n139969366898784
-	n139969366928184 [label=3]
-	n139969366928128 -> n139969366928184
-	n139969366928184 [label=3]
-	n139969366928296 [label="+"]
-	n139969366928128 [label="*"]
-	n139969366928296 -> n139969366928128
-	n139969366928352 [label=2]
-	n139969366928296 -> n139969366928352
-	n139969366928352 [label=2]
-	n139969367692344 [label="*"]
-	n139969366898784 [label="Iter(14)"]
-	n139969367692344 -> n139969366898784
-	n139969367692288 [label=3]
-	n139969367692344 -> n139969367692288
-	n139969367692288 [label=3]
-	n139969367691616 [label="*"]
-	n139969366898784 [label="Iter(14)"]
-	n139969367691616 -> n139969366898784
-	n139969367691672 [label=3]
-	n139969367691616 -> n139969367691672
-	n139969367691672 [label=3]
-	n139969367692120 [label="*"]
-	n139969366898784 [label="Iter(14)"]
-	n139969367692120 -> n139969366898784
-	n139969367692176 [label=3]
-	n139969367692120 -> n139969367692176
-	n139969367692176 [label=3]
-	n139969367692456 [label="+"]
-	n139969367692120 [label="*"]
-	n139969367692456 -> n139969367692120
-	n139969367692512 [label=1]
-	n139969367692456 -> n139969367692512
-	n139969367692512 [label=1]
-	n139969367692624 [label="*"]
-	n139969366898784 [label="Iter(14)"]
-	n139969367692624 -> n139969366898784
-	n139969367692680 [label=3]
-	n139969367692624 -> n139969367692680
-	n139969367692680 [label=3]
-	n139969367694024 [label="+"]
-	n139969367692624 [label="*"]
-	n139969367694024 -> n139969367692624
-	n139969367692792 [label=1]
-	n139969367694024 -> n139969367692792
-	n139969367692792 [label=1]
-	n139969367694248 [label="*"]
-	n139969366898784 [label="Iter(14)"]
-	n139969367694248 -> n139969366898784
-	n139969367694640 [label=3]
-	n139969367694248 -> n139969367694640
-	n139969367694640 [label=3]
-	n139969367694808 [label="+"]
-	n139969367694248 [label="*"]
-	n139969367694808 -> n139969367694248
-	n139969367695088 [label=2]
-	n139969367694808 -> n139969367695088
-	n139969367695088 [label=2]
-	n139969367695256 [label="*"]
-	n139969366898784 [label="Iter(14)"]
-	n139969367695256 -> n139969366898784
-	n139969367695312 [label=3]
-	n139969367695256 -> n139969367695312
-	n139969367695312 [label=3]
-	n139969367826560 [label="+"]
-	n139969367695256 [label="*"]
-	n139969367826560 -> n139969367695256
-	n139969367826616 [label=2]
-	n139969367826560 -> n139969367826616
-	n139969367826616 [label=2]
-	n139969366899120 [label=For]
-	n139969366899176 [label="Iter(15)"]
-	n139969366899120 -> n139969366899176
-	n139969366899288 [label=Block]
-	n139969366899120 -> n139969366899288
-	n139969366899232 [label=0]
-	n139969366899120 -> n139969366899232
-	n139969366899064 [label=ArrayAccess]
-	n139969366899120 -> n139969366899064
-	n139969366899176 [label="Iter(15)"]
-	n139969366899288 [label=Block]
-	n139969366958768 [label=Filter]
-	n139969366899288 -> n139969366958768
-	n139969366899512 [label="+"]
-	n139969366899400 [label="*"]
-	n139969366899512 -> n139969366899400
-	n139969366899176 [label="Iter(15)"]
-	n139969366899512 -> n139969366899176
-	n139969366899736 [label=PropertyAccess]
-	n139969368120512 [label=position]
-	n139969366899736 -> n139969368120512
-	n139969366899344 [label=ArrayAccess]
-	n139969366899736 -> n139969366899344
-	n139969366925776 [label="*"]
-	n139969366899736 -> n139969366925776
-	n139969366927624 [label="+"]
-	n139969366899736 -> n139969366927624
-	n139969366958152 [label="+"]
-	n139969366899736 -> n139969366958152
-	n139969366899344 [label=ArrayAccess]
-	n139969367647008 [label=neighborlists]
-	n139969366899344 -> n139969367647008
-	n139969366899512 [label="+"]
-	n139969366899344 -> n139969366899512
-	n139969367647008 [label=neighborlists]
-	n139969366925776 [label="*"]
-	n139969366899344 [label=ArrayAccess]
-	n139969366925776 -> n139969366899344
-	n139969366925832 [label=3]
-	n139969366925776 -> n139969366925832
-	n139969366925832 [label=3]
-	n139969366927624 [label="+"]
-	n139969366927456 [label="*"]
-	n139969366927624 -> n139969366927456
-	n139969366927680 [label=1]
-	n139969366927624 -> n139969366927680
-	n139969366927456 [label="*"]
-	n139969366899344 [label=ArrayAccess]
-	n139969366927456 -> n139969366899344
-	n139969366927512 [label=3]
-	n139969366927456 -> n139969366927512
-	n139969366927512 [label=3]
-	n139969366927680 [label=1]
-	n139969366958152 [label="+"]
-	n139969366929248 [label="*"]
-	n139969366958152 -> n139969366929248
-	n139969366958208 [label=2]
-	n139969366958152 -> n139969366958208
-	n139969366929248 [label="*"]
-	n139969366899344 [label=ArrayAccess]
-	n139969366929248 -> n139969366899344
-	n139969366929304 [label=3]
-	n139969366929248 -> n139969366929304
-	n139969366929304 [label=3]
-	n139969366958208 [label=2]
-	n139969366899848 [label="-"]
-	n139969366899624 [label=PropertyAccess]
-	n139969366899848 -> n139969366899624
-	n139969366899736 [label=PropertyAccess]
-	n139969366899848 -> n139969366899736
-	n139969366900352 [label="*"]
-	n139969366899344 [label=ArrayAccess]
-	n139969366900352 -> n139969366899344
-	n139969366900408 [label=3]
-	n139969366900352 -> n139969366900408
-	n139969366900408 [label=3]
-	n139969366926168 [label="*"]
-	n139969366900688 [label=VectorAccess]
-	n139969366926168 -> n139969366900688
-	n139969366926112 [label=VectorAccess]
-	n139969366926168 -> n139969366926112
-	n139969366900688 [label=VectorAccess]
-	n139969366899848 [label="-"]
-	n139969366900688 -> n139969366899848
-	n139969366926112 [label=VectorAccess]
-	n139969366899848 [label="-"]
-	n139969366926112 -> n139969366899848
-	n139969366926672 [label="*"]
-	n139969366899344 [label=ArrayAccess]
-	n139969366926672 -> n139969366899344
-	n139969366926728 [label=3]
-	n139969366926672 -> n139969366926728
-	n139969366926728 [label=3]
-	n139969366926840 [label="+"]
-	n139969366926672 [label="*"]
-	n139969366926840 -> n139969366926672
-	n139969366926896 [label=1]
-	n139969366926840 -> n139969366926896
-	n139969366926896 [label=1]
-	n139969366927848 [label="*"]
-	n139969366927008 [label=VectorAccess]
-	n139969366927848 -> n139969366927008
-	n139969366927792 [label=VectorAccess]
-	n139969366927848 -> n139969366927792
-	n139969366927008 [label=VectorAccess]
-	n139969366899848 [label="-"]
-	n139969366927008 -> n139969366899848
-	n139969366927792 [label=VectorAccess]
-	n139969366899848 [label="-"]
-	n139969366927792 -> n139969366899848
-	n139969366927960 [label="+"]
-	n139969366926168 [label="*"]
-	n139969366927960 -> n139969366926168
-	n139969366927848 [label="*"]
-	n139969366927960 -> n139969366927848
-	n139969366928464 [label="*"]
-	n139969366899344 [label=ArrayAccess]
-	n139969366928464 -> n139969366899344
-	n139969366928520 [label=3]
-	n139969366928464 -> n139969366928520
-	n139969366928520 [label=3]
-	n139969366928632 [label="+"]
-	n139969366928464 [label="*"]
-	n139969366928632 -> n139969366928464
-	n139969366928688 [label=2]
-	n139969366928632 -> n139969366928688
-	n139969366928688 [label=2]
-	n139969366958376 [label="*"]
-	n139969366928800 [label=VectorAccess]
-	n139969366958376 -> n139969366928800
-	n139969366958320 [label=VectorAccess]
-	n139969366958376 -> n139969366958320
-	n139969366928800 [label=VectorAccess]
-	n139969366899848 [label="-"]
-	n139969366928800 -> n139969366899848
-	n139969366958320 [label=VectorAccess]
-	n139969366899848 [label="-"]
-	n139969366958320 -> n139969366899848
-	n139969366958488 [label="+"]
-	n139969366927960 [label="+"]
-	n139969366958488 -> n139969366927960
-	n139969366958376 [label="*"]
-	n139969366958488 -> n139969366958376
-	n139969366958600 [label="<"]
-	n139969366958488 [label="+"]
-	n139969366958600 -> n139969366958488
-	n139969366958656 [label=2.5]
-	n139969366958600 -> n139969366958656
-	n139969366958656 [label=2.5]
-	n139969366958768 [label=Filter]
-	n139969366958600 [label="<"]
-	n139969366958768 -> n139969366958600
-	n139969367650088 [label=Block]
-	n139969366958768 -> n139969367650088
-	n139969367650088 [label=Block]
-	n139969367693296 [label=Assign]
-	n139969367650088 -> n139969367693296
-	n139969367694976 [label="/"]
-	n139969367694864 [label=1.0]
-	n139969367694976 -> n139969367694864
-	n139969366958488 [label="+"]
-	n139969367694976 -> n139969366958488
-	n139969367694864 [label=1.0]
-	n139969367694696 [label="*"]
-	n139969367694976 [label="/"]
-	n139969367694696 -> n139969367694976
-	n139969367694976 [label="/"]
-	n139969367694696 -> n139969367694976
-	n139969367694472 [label="*"]
-	n139969367694696 [label="*"]
-	n139969367694472 -> n139969367694696
-	n139969367694976 [label="/"]
-	n139969367694472 -> n139969367694976
-	n139969367694920 [label=PropertyAccess]
-	n139969368120624 [label=force]
-	n139969367694920 -> n139969368120624
-	n139969366898784 [label="Iter(14)"]
-	n139969367694920 -> n139969366898784
-	n139969367691616 [label="*"]
-	n139969367694920 -> n139969367691616
-	n139969367694024 [label="+"]
-	n139969367694920 -> n139969367694024
-	n139969367826560 [label="+"]
-	n139969367694920 -> n139969367826560
-	n139969368120624 [label=force]
-	n139969367693856 [label="*"]
-	n139969366899848 [label="-"]
-	n139969367693856 -> n139969366899848
-	n139969367693744 [label=48.0]
-	n139969367693856 -> n139969367693744
-	n139969367693744 [label=48.0]
-	n139969367693632 [label="*"]
-	n139969366899848 [label="-"]
-	n139969367693632 -> n139969366899848
-	n139969367370328 [label="*"]
-	n139969367693632 -> n139969367370328
-	n139969367370328 [label="*"]
-	n139969367693744 [label=48.0]
-	n139969367370328 -> n139969367693744
-	n139969367694472 [label="*"]
-	n139969367370328 -> n139969367694472
-	n139969367693464 [label="-"]
-	n139969367694472 [label="*"]
-	n139969367693464 -> n139969367694472
-	n139969367693520 [label=0.5]
-	n139969367693464 -> n139969367693520
-	n139969367693520 [label=0.5]
-	n139969367693352 [label="*"]
-	n139969366899848 [label="-"]
-	n139969367693352 -> n139969366899848
-	n139969367370440 [label="*"]
-	n139969367693352 -> n139969367370440
-	n139969367370440 [label="*"]
-	n139969367370328 [label="*"]
-	n139969367370440 -> n139969367370328
-	n139969367693464 [label="-"]
-	n139969367370440 -> n139969367693464
-	n139969367692904 [label="*"]
-	n139969366899848 [label="-"]
-	n139969367692904 -> n139969366899848
-	n139969366959328 [label="*"]
-	n139969367692904 -> n139969366959328
-	n139969366959328 [label="*"]
-	n139969367370440 [label="*"]
-	n139969366959328 -> n139969367370440
-	n139969367694976 [label="/"]
-	n139969366959328 -> n139969367694976
-	n139969367693016 [label="*"]
-	n139969366899848 [label="-"]
-	n139969367693016 -> n139969366899848
-	n139969366959328 [label="*"]
-	n139969367693016 -> n139969366959328
-	n139969367693240 [label="+"]
-	n139969367694920 [label=PropertyAccess]
-	n139969367693240 -> n139969367694920
-	n139969367693016 [label="*"]
-	n139969367693240 -> n139969367693016
-	n139969367693296 [label=Assign]
-	n139969367692008 [label=VectorAccess]
-	n139969367693296 -> n139969367692008
-	n139969367691560 [label=VectorAccess]
-	n139969367693296 -> n139969367691560
-	n139969367694192 [label=VectorAccess]
-	n139969367693296 -> n139969367694192
-	n139969367692568 [label=VectorAccess]
-	n139969367693296 -> n139969367692568
-	n139969367826784 [label=VectorAccess]
-	n139969367693296 -> n139969367826784
-	n139969367695200 [label=VectorAccess]
-	n139969367693296 -> n139969367695200
-	n139969367692008 [label=VectorAccess]
-	n139969367694920 [label=PropertyAccess]
-	n139969367692008 -> n139969367694920
-	n139969367691560 [label=VectorAccess]
-	n139969367693240 [label="+"]
-	n139969367691560 -> n139969367693240
-	n139969367694192 [label=VectorAccess]
-	n139969367694920 [label=PropertyAccess]
-	n139969367694192 -> n139969367694920
-	n139969367692568 [label=VectorAccess]
-	n139969367693240 [label="+"]
-	n139969367692568 -> n139969367693240
-	n139969367826784 [label=VectorAccess]
-	n139969367694920 [label=PropertyAccess]
-	n139969367826784 -> n139969367694920
-	n139969367695200 [label=VectorAccess]
-	n139969367693240 [label="+"]
-	n139969367695200 -> n139969367693240
-	n139969366899232 [label=0]
-	n139969366899064 [label=ArrayAccess]
-	n139969367647064 [label=numneighs]
-	n139969366899064 -> n139969367647064
-	n139969366898784 [label="Iter(14)"]
-	n139969366899064 -> n139969366898784
-	n139969367647064 [label=numneighs]
-	n139969370135744 [label=nlocal]
-	n139969367650256 [label=Module]
-	n139969367647512 [label=Block]
-	n139969367650256 -> n139969367647512
-	n139969367647512 [label=Block]
-	n139969367649808 [label=ParticleFor]
-	n139969367647512 -> n139969367649808
-	n139969367649808 [label=ParticleFor]
-	n139969367647736 [label=Block]
-	n139969367649808 -> n139969367647736
-	n139969370135744 [label=nlocal]
-	n139969367649808 -> n139969370135744
-	n139969367647736 [label=Block]
-	n139969367827568 [label=Assign]
-	n139969367647736 -> n139969367827568
-	n139969367344464 [label=Assign]
-	n139969367647736 -> n139969367344464
-	n139969367826896 [label=PropertyAccess]
-	n139969368120568 [label=velocity]
-	n139969367826896 -> n139969368120568
-	n139969367648800 [label="Iter(0)"]
-	n139969367826896 -> n139969367648800
-	n139969367828072 [label="*"]
-	n139969367826896 -> n139969367828072
-	n139969367829808 [label="+"]
-	n139969367826896 -> n139969367829808
-	n139969367343680 [label="+"]
-	n139969367826896 -> n139969367343680
-	n139969368120568 [label=velocity]
-	n139969367648800 [label="Iter(0)"]
-	n139969367828072 [label="*"]
-	n139969367648800 [label="Iter(0)"]
-	n139969367828072 -> n139969367648800
-	n139969367828464 [label=3]
-	n139969367828072 -> n139969367828464
-	n139969367828464 [label=3]
-	n139969367829808 [label="+"]
-	n139969367829304 [label="*"]
-	n139969367829808 -> n139969367829304
-	n139969367829864 [label=1]
-	n139969367829808 -> n139969367829864
-	n139969367829304 [label="*"]
-	n139969367648800 [label="Iter(0)"]
-	n139969367829304 -> n139969367648800
-	n139969367829696 [label=3]
-	n139969367829304 -> n139969367829696
-	n139969367829696 [label=3]
-	n139969367829864 [label=1]
-	n139969367343680 [label="+"]
-	n139969367343176 [label="*"]
-	n139969367343680 -> n139969367343176
-	n139969367343736 [label=2]
-	n139969367343680 -> n139969367343736
-	n139969367343176 [label="*"]
-	n139969367648800 [label="Iter(0)"]
-	n139969367343176 -> n139969367648800
-	n139969367343568 [label=3]
-	n139969367343176 -> n139969367343568
-	n139969367343568 [label=3]
-	n139969367343736 [label=2]
-	n139969367827008 [label=PropertyAccess]
-	n139969368120624 [label=force]
-	n139969367827008 -> n139969368120624
-	n139969367648800 [label="Iter(0)"]
-	n139969367827008 -> n139969367648800
-	n139969367828128 [label="*"]
-	n139969367827008 -> n139969367828128
-	n139969367829528 [label="+"]
-	n139969367827008 -> n139969367829528
-	n139969367343400 [label="+"]
-	n139969367827008 -> n139969367343400
-	n139969367828128 [label="*"]
-	n139969367648800 [label="Iter(0)"]
-	n139969367828128 -> n139969367648800
-	n139969367828184 [label=3]
-	n139969367828128 -> n139969367828184
-	n139969367828184 [label=3]
-	n139969367829528 [label="+"]
-	n139969367829360 [label="*"]
-	n139969367829528 -> n139969367829360
-	n139969367829584 [label=1]
-	n139969367829528 -> n139969367829584
-	n139969367829360 [label="*"]
-	n139969367648800 [label="Iter(0)"]
-	n139969367829360 -> n139969367648800
-	n139969367829416 [label=3]
-	n139969367829360 -> n139969367829416
-	n139969367829416 [label=3]
-	n139969367829584 [label=1]
-	n139969367343400 [label="+"]
-	n139969367343232 [label="*"]
-	n139969367343400 -> n139969367343232
-	n139969367343456 [label=2]
-	n139969367343400 -> n139969367343456
-	n139969367343232 [label="*"]
-	n139969367648800 [label="Iter(0)"]
-	n139969367343232 -> n139969367648800
-	n139969367343288 [label=3]
-	n139969367343232 -> n139969367343288
-	n139969367343288 [label=3]
-	n139969367343456 [label=2]
-	n139969367827120 [label="*"]
-	n139969367827176 [label=0.005]
-	n139969367827120 -> n139969367827176
-	n139969367827008 [label=PropertyAccess]
-	n139969367827120 -> n139969367827008
-	n139969367827176 [label=0.005]
-	n139969367827288 [label=PropertyAccess]
-	n139969368120456 [label=mass]
-	n139969367827288 -> n139969368120456
-	n139969367648800 [label="Iter(0)"]
-	n139969367827288 -> n139969367648800
-	n139969368120456 [label=mass]
-	n139969367827344 [label="/"]
-	n139969367827120 [label="*"]
-	n139969367827344 -> n139969367827120
-	n139969367827288 [label=PropertyAccess]
-	n139969367827344 -> n139969367827288
-	n139969367827456 [label="+"]
-	n139969367826896 [label=PropertyAccess]
-	n139969367827456 -> n139969367826896
-	n139969367827344 [label="/"]
-	n139969367827456 -> n139969367827344
-	n139969367827680 [label="*"]
-	n139969367648800 [label="Iter(0)"]
-	n139969367827680 -> n139969367648800
-	n139969367827736 [label=3]
-	n139969367827680 -> n139969367827736
-	n139969367827736 [label=3]
-	n139969367828912 [label="*"]
-	n139969367648800 [label="Iter(0)"]
-	n139969367828912 -> n139969367648800
-	n139969367828968 [label=3]
-	n139969367828912 -> n139969367828968
-	n139969367828968 [label=3]
-	n139969367829080 [label="+"]
-	n139969367828912 [label="*"]
-	n139969367829080 -> n139969367828912
-	n139969367829136 [label=1]
-	n139969367829080 -> n139969367829136
-	n139969367829136 [label=1]
-	n139969367830144 [label="*"]
-	n139969367648800 [label="Iter(0)"]
-	n139969367830144 -> n139969367648800
-	n139969367830200 [label=3]
-	n139969367830144 -> n139969367830200
-	n139969367830200 [label=3]
-	n139969367830312 [label="+"]
-	n139969367830144 [label="*"]
-	n139969367830312 -> n139969367830144
-	n139969367830368 [label=2]
-	n139969367830312 -> n139969367830368
-	n139969367830368 [label=2]
-	n139969367827568 [label=Assign]
-	n139969367828800 [label=VectorAccess]
-	n139969367827568 -> n139969367828800
-	n139969367828016 [label=VectorAccess]
-	n139969367827568 -> n139969367828016
-	n139969367830032 [label=VectorAccess]
-	n139969367827568 -> n139969367830032
-	n139969367829248 [label=VectorAccess]
-	n139969367827568 -> n139969367829248
-	n139969367343904 [label=VectorAccess]
-	n139969367827568 -> n139969367343904
-	n139969367830480 [label=VectorAccess]
-	n139969367827568 -> n139969367830480
-	n139969367828800 [label=VectorAccess]
-	n139969367826896 [label=PropertyAccess]
-	n139969367828800 -> n139969367826896
-	n139969367828016 [label=VectorAccess]
-	n139969367827456 [label="+"]
-	n139969367828016 -> n139969367827456
-	n139969367830032 [label=VectorAccess]
-	n139969367826896 [label=PropertyAccess]
-	n139969367830032 -> n139969367826896
-	n139969367829248 [label=VectorAccess]
-	n139969367827456 [label="+"]
-	n139969367829248 -> n139969367827456
-	n139969367343904 [label=VectorAccess]
-	n139969367826896 [label=PropertyAccess]
-	n139969367343904 -> n139969367826896
-	n139969367830480 [label=VectorAccess]
-	n139969367827456 [label="+"]
-	n139969367830480 -> n139969367827456
-	n139969367343960 [label=PropertyAccess]
-	n139969368120512 [label=position]
-	n139969367343960 -> n139969368120512
-	n139969367648800 [label="Iter(0)"]
-	n139969367343960 -> n139969367648800
-	n139969367345304 [label="*"]
-	n139969367343960 -> n139969367345304
-	n139969367346704 [label="+"]
-	n139969367343960 -> n139969367346704
-	n139969367368480 [label="+"]
-	n139969367343960 -> n139969367368480
-	n139969367345304 [label="*"]
-	n139969367648800 [label="Iter(0)"]
-	n139969367345304 -> n139969367648800
-	n139969367345360 [label=3]
-	n139969367345304 -> n139969367345360
-	n139969367345360 [label=3]
-	n139969367346704 [label="+"]
-	n139969367346536 [label="*"]
-	n139969367346704 -> n139969367346536
-	n139969367346760 [label=1]
-	n139969367346704 -> n139969367346760
-	n139969367346536 [label="*"]
-	n139969367648800 [label="Iter(0)"]
-	n139969367346536 -> n139969367648800
-	n139969367346592 [label=3]
-	n139969367346536 -> n139969367346592
-	n139969367346592 [label=3]
-	n139969367346760 [label=1]
-	n139969367368480 [label="+"]
-	n139969367368312 [label="*"]
-	n139969367368480 -> n139969367368312
-	n139969367368536 [label=2]
-	n139969367368480 -> n139969367368536
-	n139969367368312 [label="*"]
-	n139969367648800 [label="Iter(0)"]
-	n139969367368312 -> n139969367648800
-	n139969367368368 [label=3]
-	n139969367368312 -> n139969367368368
-	n139969367368368 [label=3]
-	n139969367368536 [label=2]
-	n139969367344072 [label=PropertyAccess]
-	n139969368120568 [label=velocity]
-	n139969367344072 -> n139969368120568
-	n139969367648800 [label="Iter(0)"]
-	n139969367344072 -> n139969367648800
-	n139969367344968 [label="*"]
-	n139969367344072 -> n139969367344968
-	n139969367346368 [label="+"]
-	n139969367344072 -> n139969367346368
-	n139969367368144 [label="+"]
-	n139969367344072 -> n139969367368144
-	n139969367344968 [label="*"]
-	n139969367648800 [label="Iter(0)"]
-	n139969367344968 -> n139969367648800
-	n139969367345024 [label=3]
-	n139969367344968 -> n139969367345024
-	n139969367345024 [label=3]
-	n139969367346368 [label="+"]
-	n139969367346200 [label="*"]
-	n139969367346368 -> n139969367346200
-	n139969367346424 [label=1]
-	n139969367346368 -> n139969367346424
-	n139969367346200 [label="*"]
-	n139969367648800 [label="Iter(0)"]
-	n139969367346200 -> n139969367648800
-	n139969367346256 [label=3]
-	n139969367346200 -> n139969367346256
-	n139969367346256 [label=3]
-	n139969367346424 [label=1]
-	n139969367368144 [label="+"]
-	n139969367367976 [label="*"]
-	n139969367368144 -> n139969367367976
-	n139969367368200 [label=2]
-	n139969367368144 -> n139969367368200
-	n139969367367976 [label="*"]
-	n139969367648800 [label="Iter(0)"]
-	n139969367367976 -> n139969367648800
-	n139969367368032 [label=3]
-	n139969367367976 -> n139969367368032
-	n139969367368032 [label=3]
-	n139969367368200 [label=2]
-	n139969367344184 [label="*"]
-	n139969367344240 [label=0.005]
-	n139969367344184 -> n139969367344240
-	n139969367344072 [label=PropertyAccess]
-	n139969367344184 -> n139969367344072
-	n139969367344240 [label=0.005]
-	n139969367344352 [label="+"]
-	n139969367343960 [label=PropertyAccess]
-	n139969367344352 -> n139969367343960
-	n139969367344184 [label="*"]
-	n139969367344352 -> n139969367344184
-	n139969367344576 [label="*"]
-	n139969367648800 [label="Iter(0)"]
-	n139969367344576 -> n139969367648800
-	n139969367344632 [label=3]
-	n139969367344576 -> n139969367344632
-	n139969367344632 [label=3]
-	n139969367345808 [label="*"]
-	n139969367648800 [label="Iter(0)"]
-	n139969367345808 -> n139969367648800
-	n139969367345864 [label=3]
-	n139969367345808 -> n139969367345864
-	n139969367345864 [label=3]
-	n139969367345976 [label="+"]
-	n139969367345808 [label="*"]
-	n139969367345976 -> n139969367345808
-	n139969367346032 [label=1]
-	n139969367345976 -> n139969367346032
-	n139969367346032 [label=1]
-	n139969367347040 [label="*"]
-	n139969367648800 [label="Iter(0)"]
-	n139969367347040 -> n139969367648800
-	n139969367347096 [label=3]
-	n139969367347040 -> n139969367347096
-	n139969367347096 [label=3]
-	n139969367367752 [label="+"]
-	n139969367347040 [label="*"]
-	n139969367367752 -> n139969367347040
-	n139969367367808 [label=2]
-	n139969367367752 -> n139969367367808
-	n139969367367808 [label=2]
-	n139969367344464 [label=Assign]
-	n139969367345696 [label=VectorAccess]
-	n139969367344464 -> n139969367345696
-	n139969367344912 [label=VectorAccess]
-	n139969367344464 -> n139969367344912
-	n139969367346928 [label=VectorAccess]
-	n139969367344464 -> n139969367346928
-	n139969367346144 [label=VectorAccess]
-	n139969367344464 -> n139969367346144
-	n139969367368704 [label=VectorAccess]
-	n139969367344464 -> n139969367368704
-	n139969367367920 [label=VectorAccess]
-	n139969367344464 -> n139969367367920
-	n139969367345696 [label=VectorAccess]
-	n139969367343960 [label=PropertyAccess]
-	n139969367345696 -> n139969367343960
-	n139969367344912 [label=VectorAccess]
-	n139969367344352 [label="+"]
-	n139969367344912 -> n139969367344352
-	n139969367346928 [label=VectorAccess]
-	n139969367343960 [label=PropertyAccess]
-	n139969367346928 -> n139969367343960
-	n139969367346144 [label=VectorAccess]
-	n139969367344352 [label="+"]
-	n139969367346144 -> n139969367344352
-	n139969367368704 [label=VectorAccess]
-	n139969367343960 [label=PropertyAccess]
-	n139969367368704 -> n139969367343960
-	n139969367367920 [label=VectorAccess]
-	n139969367344352 [label="+"]
-	n139969367367920 -> n139969367344352
+	n140343105889616 [label=Block]
+	n140343105956160 [label=Module]
+	n140343105889616 -> n140343105956160
+	n140343105956216 [label=Module]
+	n140343105889616 -> n140343105956216
+	n140343105956160 [label=Module]
+	n140343105956104 [label=Block]
+	n140343105956160 -> n140343105956104
+	n140343105956104 [label=Block]
+	n140343105954200 [label=ParticleFor]
+	n140343105956104 -> n140343105954200
+	n140343105954200 [label=ParticleFor]
+	n140343105184936 [label=Block]
+	n140343105954200 -> n140343105184936
+	n140343108419712 [label=nlocal]
+	n140343105954200 -> n140343108419712
+	n140343105184936 [label=Block]
+	n140343105185104 [label=For]
+	n140343105184936 -> n140343105185104
+	n140343105185384 [label="*"]
+	n140343105184768 [label="Iter(14)"]
+	n140343105185384 -> n140343105184768
+	n140343105891352 [label=neighborlist_capacity]
+	n140343105185384 -> n140343105891352
+	n140343105184768 [label="Iter(14)"]
+	n140343105891352 [label=neighborlist_capacity]
+	n140343105185608 [label=PropertyAccess]
+	n140343105889840 [label=position]
+	n140343105185608 -> n140343105889840
+	n140343105184768 [label="Iter(14)"]
+	n140343105185608 -> n140343105184768
+	n140343105186784 [label="*"]
+	n140343105185608 -> n140343105186784
+	n140343105225560 [label="+"]
+	n140343105185608 -> n140343105225560
+	n140343105227352 [label="+"]
+	n140343105185608 -> n140343105227352
+	n140343105889840 [label=position]
+	n140343105186784 [label="*"]
+	n140343105184768 [label="Iter(14)"]
+	n140343105186784 -> n140343105184768
+	n140343105186840 [label=3]
+	n140343105186784 -> n140343105186840
+	n140343105186840 [label=3]
+	n140343105225560 [label="+"]
+	n140343105225392 [label="*"]
+	n140343105225560 -> n140343105225392
+	n140343105225616 [label=1]
+	n140343105225560 -> n140343105225616
+	n140343105225392 [label="*"]
+	n140343105184768 [label="Iter(14)"]
+	n140343105225392 -> n140343105184768
+	n140343105225448 [label=3]
+	n140343105225392 -> n140343105225448
+	n140343105225448 [label=3]
+	n140343105225616 [label=1]
+	n140343105227352 [label="+"]
+	n140343105227184 [label="*"]
+	n140343105227352 -> n140343105227184
+	n140343105227408 [label=2]
+	n140343105227352 -> n140343105227408
+	n140343105227184 [label="*"]
+	n140343105184768 [label="Iter(14)"]
+	n140343105227184 -> n140343105184768
+	n140343105227240 [label=3]
+	n140343105227184 -> n140343105227240
+	n140343105227240 [label=3]
+	n140343105227408 [label=2]
+	n140343105186000 [label="*"]
+	n140343105184768 [label="Iter(14)"]
+	n140343105186000 -> n140343105184768
+	n140343105186056 [label=3]
+	n140343105186000 -> n140343105186056
+	n140343105186056 [label=3]
+	n140343105187680 [label="*"]
+	n140343105184768 [label="Iter(14)"]
+	n140343105187680 -> n140343105184768
+	n140343105187736 [label=3]
+	n140343105187680 -> n140343105187736
+	n140343105187736 [label=3]
+	n140343105224776 [label="+"]
+	n140343105187680 [label="*"]
+	n140343105224776 -> n140343105187680
+	n140343105224832 [label=1]
+	n140343105224776 -> n140343105224832
+	n140343105224832 [label=1]
+	n140343105226400 [label="*"]
+	n140343105184768 [label="Iter(14)"]
+	n140343105226400 -> n140343105184768
+	n140343105226456 [label=3]
+	n140343105226400 -> n140343105226456
+	n140343105226456 [label=3]
+	n140343105226568 [label="+"]
+	n140343105226400 [label="*"]
+	n140343105226568 -> n140343105226400
+	n140343105226624 [label=2]
+	n140343105226568 -> n140343105226624
+	n140343105226624 [label=2]
+	n140343106084936 [label="*"]
+	n140343105184768 [label="Iter(14)"]
+	n140343106084936 -> n140343105184768
+	n140343106084992 [label=3]
+	n140343106084936 -> n140343106084992
+	n140343106084992 [label=3]
+	n140343106085328 [label="*"]
+	n140343105184768 [label="Iter(14)"]
+	n140343106085328 -> n140343105184768
+	n140343106085384 [label=3]
+	n140343106085328 -> n140343106085384
+	n140343106085384 [label=3]
+	n140343106085832 [label="*"]
+	n140343105184768 [label="Iter(14)"]
+	n140343106085832 -> n140343105184768
+	n140343106085888 [label=3]
+	n140343106085832 -> n140343106085888
+	n140343106085888 [label=3]
+	n140343106086000 [label="+"]
+	n140343106085832 [label="*"]
+	n140343106086000 -> n140343106085832
+	n140343106086056 [label=1]
+	n140343106086000 -> n140343106086056
+	n140343106086056 [label=1]
+	n140343106086224 [label="*"]
+	n140343105184768 [label="Iter(14)"]
+	n140343106086224 -> n140343105184768
+	n140343106086280 [label=3]
+	n140343106086224 -> n140343106086280
+	n140343106086280 [label=3]
+	n140343106086392 [label="+"]
+	n140343106086224 [label="*"]
+	n140343106086392 -> n140343106086224
+	n140343106086448 [label=1]
+	n140343106086392 -> n140343106086448
+	n140343106086448 [label=1]
+	n140343106086728 [label="*"]
+	n140343105184768 [label="Iter(14)"]
+	n140343106086728 -> n140343105184768
+	n140343106086784 [label=3]
+	n140343106086728 -> n140343106086784
+	n140343106086784 [label=3]
+	n140343106086896 [label="+"]
+	n140343106086728 [label="*"]
+	n140343106086896 -> n140343106086728
+	n140343106086952 [label=2]
+	n140343106086896 -> n140343106086952
+	n140343106086952 [label=2]
+	n140343106087120 [label="*"]
+	n140343105184768 [label="Iter(14)"]
+	n140343106087120 -> n140343105184768
+	n140343106087176 [label=3]
+	n140343106087120 -> n140343106087176
+	n140343106087176 [label=3]
+	n140343106087288 [label="+"]
+	n140343106087120 [label="*"]
+	n140343106087288 -> n140343106087120
+	n140343106087344 [label=2]
+	n140343106087288 -> n140343106087344
+	n140343106087344 [label=2]
+	n140343105185104 [label=For]
+	n140343105185160 [label="Iter(15)"]
+	n140343105185104 -> n140343105185160
+	n140343105185272 [label=Block]
+	n140343105185104 -> n140343105185272
+	n140343105185216 [label=0]
+	n140343105185104 -> n140343105185216
+	n140343105185048 [label=ArrayAccess]
+	n140343105185104 -> n140343105185048
+	n140343105185160 [label="Iter(15)"]
+	n140343105185272 [label=Block]
+	n140343105228304 [label=Filter]
+	n140343105185272 -> n140343105228304
+	n140343105185496 [label="+"]
+	n140343105185384 [label="*"]
+	n140343105185496 -> n140343105185384
+	n140343105185160 [label="Iter(15)"]
+	n140343105185496 -> n140343105185160
+	n140343105185720 [label=PropertyAccess]
+	n140343105889840 [label=position]
+	n140343105185720 -> n140343105889840
+	n140343105185328 [label=ArrayAccess]
+	n140343105185720 -> n140343105185328
+	n140343105187120 [label="*"]
+	n140343105185720 -> n140343105187120
+	n140343105225896 [label="+"]
+	n140343105185720 -> n140343105225896
+	n140343105227688 [label="+"]
+	n140343105185720 -> n140343105227688
+	n140343105185328 [label=ArrayAccess]
+	n140343105891408 [label=neighborlists]
+	n140343105185328 -> n140343105891408
+	n140343105185496 [label="+"]
+	n140343105185328 -> n140343105185496
+	n140343105891408 [label=neighborlists]
+	n140343105187120 [label="*"]
+	n140343105185328 [label=ArrayAccess]
+	n140343105187120 -> n140343105185328
+	n140343105187176 [label=3]
+	n140343105187120 -> n140343105187176
+	n140343105187176 [label=3]
+	n140343105225896 [label="+"]
+	n140343105225728 [label="*"]
+	n140343105225896 -> n140343105225728
+	n140343105225952 [label=1]
+	n140343105225896 -> n140343105225952
+	n140343105225728 [label="*"]
+	n140343105185328 [label=ArrayAccess]
+	n140343105225728 -> n140343105185328
+	n140343105225784 [label=3]
+	n140343105225728 -> n140343105225784
+	n140343105225784 [label=3]
+	n140343105225952 [label=1]
+	n140343105227688 [label="+"]
+	n140343105227520 [label="*"]
+	n140343105227688 -> n140343105227520
+	n140343105227744 [label=2]
+	n140343105227688 -> n140343105227744
+	n140343105227520 [label="*"]
+	n140343105185328 [label=ArrayAccess]
+	n140343105227520 -> n140343105185328
+	n140343105227576 [label=3]
+	n140343105227520 -> n140343105227576
+	n140343105227576 [label=3]
+	n140343105227744 [label=2]
+	n140343105185832 [label="-"]
+	n140343105185608 [label=PropertyAccess]
+	n140343105185832 -> n140343105185608
+	n140343105185720 [label=PropertyAccess]
+	n140343105185832 -> n140343105185720
+	n140343105186336 [label="*"]
+	n140343105185328 [label=ArrayAccess]
+	n140343105186336 -> n140343105185328
+	n140343105186392 [label=3]
+	n140343105186336 -> n140343105186392
+	n140343105186392 [label=3]
+	n140343105187512 [label="*"]
+	n140343105186672 [label=VectorAccess]
+	n140343105187512 -> n140343105186672
+	n140343105187456 [label=VectorAccess]
+	n140343105187512 -> n140343105187456
+	n140343105186672 [label=VectorAccess]
+	n140343105185832 [label="-"]
+	n140343105186672 -> n140343105185832
+	n140343105187456 [label=VectorAccess]
+	n140343105185832 [label="-"]
+	n140343105187456 -> n140343105185832
+	n140343105224944 [label="*"]
+	n140343105185328 [label=ArrayAccess]
+	n140343105224944 -> n140343105185328
+	n140343105225000 [label=3]
+	n140343105224944 -> n140343105225000
+	n140343105225000 [label=3]
+	n140343105225112 [label="+"]
+	n140343105224944 [label="*"]
+	n140343105225112 -> n140343105224944
+	n140343105225168 [label=1]
+	n140343105225112 -> n140343105225168
+	n140343105225168 [label=1]
+	n140343105226120 [label="*"]
+	n140343105225280 [label=VectorAccess]
+	n140343105226120 -> n140343105225280
+	n140343105226064 [label=VectorAccess]
+	n140343105226120 -> n140343105226064
+	n140343105225280 [label=VectorAccess]
+	n140343105185832 [label="-"]
+	n140343105225280 -> n140343105185832
+	n140343105226064 [label=VectorAccess]
+	n140343105185832 [label="-"]
+	n140343105226064 -> n140343105185832
+	n140343105226232 [label="+"]
+	n140343105187512 [label="*"]
+	n140343105226232 -> n140343105187512
+	n140343105226120 [label="*"]
+	n140343105226232 -> n140343105226120
+	n140343105226736 [label="*"]
+	n140343105185328 [label=ArrayAccess]
+	n140343105226736 -> n140343105185328
+	n140343105226792 [label=3]
+	n140343105226736 -> n140343105226792
+	n140343105226792 [label=3]
+	n140343105226904 [label="+"]
+	n140343105226736 [label="*"]
+	n140343105226904 -> n140343105226736
+	n140343105226960 [label=2]
+	n140343105226904 -> n140343105226960
+	n140343105226960 [label=2]
+	n140343105227912 [label="*"]
+	n140343105227072 [label=VectorAccess]
+	n140343105227912 -> n140343105227072
+	n140343105227856 [label=VectorAccess]
+	n140343105227912 -> n140343105227856
+	n140343105227072 [label=VectorAccess]
+	n140343105185832 [label="-"]
+	n140343105227072 -> n140343105185832
+	n140343105227856 [label=VectorAccess]
+	n140343105185832 [label="-"]
+	n140343105227856 -> n140343105185832
+	n140343105228024 [label="+"]
+	n140343105226232 [label="+"]
+	n140343105228024 -> n140343105226232
+	n140343105227912 [label="*"]
+	n140343105228024 -> n140343105227912
+	n140343105228136 [label="<"]
+	n140343105228024 [label="+"]
+	n140343105228136 -> n140343105228024
+	n140343105228192 [label=2.5]
+	n140343105228136 -> n140343105228192
+	n140343105228192 [label=2.5]
+	n140343105228304 [label=Filter]
+	n140343105228136 [label="<"]
+	n140343105228304 -> n140343105228136
+	n140343105956048 [label=Block]
+	n140343105228304 -> n140343105956048
+	n140343105956048 [label=Block]
+	n140343105891968 [label=Assign]
+	n140343105956048 -> n140343105891968
+	n140343105956384 [label="/"]
+	n140343105956440 [label=1.0]
+	n140343105956384 -> n140343105956440
+	n140343105228024 [label="+"]
+	n140343105956384 -> n140343105228024
+	n140343105956440 [label=1.0]
+	n140343105956552 [label="*"]
+	n140343105956384 [label="/"]
+	n140343105956552 -> n140343105956384
+	n140343105956384 [label="/"]
+	n140343105956552 -> n140343105956384
+	n140343105956664 [label="*"]
+	n140343105956552 [label="*"]
+	n140343105956664 -> n140343105956552
+	n140343105956384 [label="/"]
+	n140343105956664 -> n140343105956384
+	n140343105956328 [label=PropertyAccess]
+	n140343105889952 [label=force]
+	n140343105956328 -> n140343105889952
+	n140343105184768 [label="Iter(14)"]
+	n140343105956328 -> n140343105184768
+	n140343106085328 [label="*"]
+	n140343105956328 -> n140343106085328
+	n140343106086392 [label="+"]
+	n140343105956328 -> n140343106086392
+	n140343106087288 [label="+"]
+	n140343105956328 -> n140343106087288
+	n140343105889952 [label=force]
+	n140343105957000 [label="*"]
+	n140343105185832 [label="-"]
+	n140343105957000 -> n140343105185832
+	n140343105957056 [label=48.0]
+	n140343105957000 -> n140343105957056
+	n140343105957056 [label=48.0]
+	n140343105957336 [label="*"]
+	n140343105185832 [label="-"]
+	n140343105957336 -> n140343105185832
+	n140343105601432 [label="*"]
+	n140343105957336 -> n140343105601432
+	n140343105601432 [label="*"]
+	n140343105957056 [label=48.0]
+	n140343105601432 -> n140343105957056
+	n140343105956664 [label="*"]
+	n140343105601432 -> n140343105956664
+	n140343105957448 [label="-"]
+	n140343105956664 [label="*"]
+	n140343105957448 -> n140343105956664
+	n140343105957504 [label=0.5]
+	n140343105957448 -> n140343105957504
+	n140343105957504 [label=0.5]
+	n140343105957616 [label="*"]
+	n140343105185832 [label="-"]
+	n140343105957616 -> n140343105185832
+	n140343105597904 [label="*"]
+	n140343105957616 -> n140343105597904
+	n140343105597904 [label="*"]
+	n140343105601432 [label="*"]
+	n140343105597904 -> n140343105601432
+	n140343105957448 [label="-"]
+	n140343105597904 -> n140343105957448
+	n140343105892024 [label="*"]
+	n140343105185832 [label="-"]
+	n140343105892024 -> n140343105185832
+	n140343105597624 [label="*"]
+	n140343105892024 -> n140343105597624
+	n140343105597624 [label="*"]
+	n140343105597904 [label="*"]
+	n140343105597624 -> n140343105597904
+	n140343105956384 [label="/"]
+	n140343105597624 -> n140343105956384
+	n140343105892304 [label="+"]
+	n140343105956328 [label=PropertyAccess]
+	n140343105892304 -> n140343105956328
+	n140343105892024 [label="*"]
+	n140343105892304 -> n140343105892024
+	n140343105891968 [label=Assign]
+	n140343106085720 [label=VectorAccess]
+	n140343105891968 -> n140343106085720
+	n140343106085272 [label=VectorAccess]
+	n140343105891968 -> n140343106085272
+	n140343106086616 [label=VectorAccess]
+	n140343105891968 -> n140343106086616
+	n140343106086168 [label=VectorAccess]
+	n140343105891968 -> n140343106086168
+	n140343106087512 [label=VectorAccess]
+	n140343105891968 -> n140343106087512
+	n140343106087064 [label=VectorAccess]
+	n140343105891968 -> n140343106087064
+	n140343106085720 [label=VectorAccess]
+	n140343105956328 [label=PropertyAccess]
+	n140343106085720 -> n140343105956328
+	n140343106085272 [label=VectorAccess]
+	n140343105892304 [label="+"]
+	n140343106085272 -> n140343105892304
+	n140343106086616 [label=VectorAccess]
+	n140343105956328 [label=PropertyAccess]
+	n140343106086616 -> n140343105956328
+	n140343106086168 [label=VectorAccess]
+	n140343105892304 [label="+"]
+	n140343106086168 -> n140343105892304
+	n140343106087512 [label=VectorAccess]
+	n140343105956328 [label=PropertyAccess]
+	n140343106087512 -> n140343105956328
+	n140343106087064 [label=VectorAccess]
+	n140343105892304 [label="+"]
+	n140343106087064 -> n140343105892304
+	n140343105185216 [label=0]
+	n140343105185048 [label=ArrayAccess]
+	n140343105891464 [label=numneighs]
+	n140343105185048 -> n140343105891464
+	n140343105184768 [label="Iter(14)"]
+	n140343105185048 -> n140343105184768
+	n140343105891464 [label=numneighs]
+	n140343108419712 [label=nlocal]
+	n140343105956216 [label=Module]
+	n140343105954368 [label=Block]
+	n140343105956216 -> n140343105954368
+	n140343105954368 [label=Block]
+	n140343105955768 [label=ParticleFor]
+	n140343105954368 -> n140343105955768
+	n140343105955768 [label=ParticleFor]
+	n140343105957280 [label=Block]
+	n140343105955768 -> n140343105957280
+	n140343108419712 [label=nlocal]
+	n140343105955768 -> n140343108419712
+	n140343105957280 [label=Block]
+	n140343106088352 [label=Assign]
+	n140343105957280 -> n140343106088352
+	n140343105601152 [label=Assign]
+	n140343105957280 -> n140343105601152
+	n140343106087624 [label=PropertyAccess]
+	n140343105889896 [label=velocity]
+	n140343106087624 -> n140343105889896
+	n140343105954872 [label="Iter(0)"]
+	n140343106087624 -> n140343105954872
+	n140343106088856 [label="*"]
+	n140343106087624 -> n140343106088856
+	n140343105599136 [label="+"]
+	n140343106087624 -> n140343105599136
+	n140343105600368 [label="+"]
+	n140343106087624 -> n140343105600368
+	n140343105889896 [label=velocity]
+	n140343105954872 [label="Iter(0)"]
+	n140343106088856 [label="*"]
+	n140343105954872 [label="Iter(0)"]
+	n140343106088856 -> n140343105954872
+	n140343105597792 [label=3]
+	n140343106088856 -> n140343105597792
+	n140343105597792 [label=3]
+	n140343105599136 [label="+"]
+	n140343105598632 [label="*"]
+	n140343105599136 -> n140343105598632
+	n140343105599192 [label=1]
+	n140343105599136 -> n140343105599192
+	n140343105598632 [label="*"]
+	n140343105954872 [label="Iter(0)"]
+	n140343105598632 -> n140343105954872
+	n140343105599024 [label=3]
+	n140343105598632 -> n140343105599024
+	n140343105599024 [label=3]
+	n140343105599192 [label=1]
+	n140343105600368 [label="+"]
+	n140343105599864 [label="*"]
+	n140343105600368 -> n140343105599864
+	n140343105600424 [label=2]
+	n140343105600368 -> n140343105600424
+	n140343105599864 [label="*"]
+	n140343105954872 [label="Iter(0)"]
+	n140343105599864 -> n140343105954872
+	n140343105600256 [label=3]
+	n140343105599864 -> n140343105600256
+	n140343105600256 [label=3]
+	n140343105600424 [label=2]
+	n140343106087736 [label=PropertyAccess]
+	n140343105889952 [label=force]
+	n140343106087736 -> n140343105889952
+	n140343105954872 [label="Iter(0)"]
+	n140343106087736 -> n140343105954872
+	n140343106088912 [label="*"]
+	n140343106087736 -> n140343106088912
+	n140343105598856 [label="+"]
+	n140343106087736 -> n140343105598856
+	n140343105600088 [label="+"]
+	n140343106087736 -> n140343105600088
+	n140343106088912 [label="*"]
+	n140343105954872 [label="Iter(0)"]
+	n140343106088912 -> n140343105954872
+	n140343105597512 [label=3]
+	n140343106088912 -> n140343105597512
+	n140343105597512 [label=3]
+	n140343105598856 [label="+"]
+	n140343105598688 [label="*"]
+	n140343105598856 -> n140343105598688
+	n140343105598912 [label=1]
+	n140343105598856 -> n140343105598912
+	n140343105598688 [label="*"]
+	n140343105954872 [label="Iter(0)"]
+	n140343105598688 -> n140343105954872
+	n140343105598744 [label=3]
+	n140343105598688 -> n140343105598744
+	n140343105598744 [label=3]
+	n140343105598912 [label=1]
+	n140343105600088 [label="+"]
+	n140343105599920 [label="*"]
+	n140343105600088 -> n140343105599920
+	n140343105600144 [label=2]
+	n140343105600088 -> n140343105600144
+	n140343105599920 [label="*"]
+	n140343105954872 [label="Iter(0)"]
+	n140343105599920 -> n140343105954872
+	n140343105599976 [label=3]
+	n140343105599920 -> n140343105599976
+	n140343105599976 [label=3]
+	n140343105600144 [label=2]
+	n140343106087848 [label="*"]
+	n140343106087904 [label=0.005]
+	n140343106087848 -> n140343106087904
+	n140343106087736 [label=PropertyAccess]
+	n140343106087848 -> n140343106087736
+	n140343106087904 [label=0.005]
+	n140343106088016 [label=PropertyAccess]
+	n140343105889784 [label=mass]
+	n140343106088016 -> n140343105889784
+	n140343105954872 [label="Iter(0)"]
+	n140343106088016 -> n140343105954872
+	n140343105889784 [label=mass]
+	n140343106088128 [label="/"]
+	n140343106087848 [label="*"]
+	n140343106088128 -> n140343106087848
+	n140343106088016 [label=PropertyAccess]
+	n140343106088128 -> n140343106088016
+	n140343106088240 [label="+"]
+	n140343106087624 [label=PropertyAccess]
+	n140343106088240 -> n140343106087624
+	n140343106088128 [label="/"]
+	n140343106088240 -> n140343106088128
+	n140343106088464 [label="*"]
+	n140343105954872 [label="Iter(0)"]
+	n140343106088464 -> n140343105954872
+	n140343106088520 [label=3]
+	n140343106088464 -> n140343106088520
+	n140343106088520 [label=3]
+	n140343105598240 [label="*"]
+	n140343105954872 [label="Iter(0)"]
+	n140343105598240 -> n140343105954872
+	n140343105598296 [label=3]
+	n140343105598240 -> n140343105598296
+	n140343105598296 [label=3]
+	n140343105598408 [label="+"]
+	n140343105598240 [label="*"]
+	n140343105598408 -> n140343105598240
+	n140343105598464 [label=1]
+	n140343105598408 -> n140343105598464
+	n140343105598464 [label=1]
+	n140343105599472 [label="*"]
+	n140343105954872 [label="Iter(0)"]
+	n140343105599472 -> n140343105954872
+	n140343105599528 [label=3]
+	n140343105599472 -> n140343105599528
+	n140343105599528 [label=3]
+	n140343105599640 [label="+"]
+	n140343105599472 [label="*"]
+	n140343105599640 -> n140343105599472
+	n140343105599696 [label=2]
+	n140343105599640 -> n140343105599696
+	n140343105599696 [label=2]
+	n140343106088352 [label=Assign]
+	n140343105598128 [label=VectorAccess]
+	n140343106088352 -> n140343105598128
+	n140343106088800 [label=VectorAccess]
+	n140343106088352 -> n140343106088800
+	n140343105599360 [label=VectorAccess]
+	n140343106088352 -> n140343105599360
+	n140343105598576 [label=VectorAccess]
+	n140343106088352 -> n140343105598576
+	n140343105600592 [label=VectorAccess]
+	n140343106088352 -> n140343105600592
+	n140343105599808 [label=VectorAccess]
+	n140343106088352 -> n140343105599808
+	n140343105598128 [label=VectorAccess]
+	n140343106087624 [label=PropertyAccess]
+	n140343105598128 -> n140343106087624
+	n140343106088800 [label=VectorAccess]
+	n140343106088240 [label="+"]
+	n140343106088800 -> n140343106088240
+	n140343105599360 [label=VectorAccess]
+	n140343106087624 [label=PropertyAccess]
+	n140343105599360 -> n140343106087624
+	n140343105598576 [label=VectorAccess]
+	n140343106088240 [label="+"]
+	n140343105598576 -> n140343106088240
+	n140343105600592 [label=VectorAccess]
+	n140343106087624 [label=PropertyAccess]
+	n140343105600592 -> n140343106087624
+	n140343105599808 [label=VectorAccess]
+	n140343106088240 [label="+"]
+	n140343105599808 -> n140343106088240
+	n140343105600648 [label=PropertyAccess]
+	n140343105889840 [label=position]
+	n140343105600648 -> n140343105889840
+	n140343105954872 [label="Iter(0)"]
+	n140343105600648 -> n140343105954872
+	n140343105630728 [label="*"]
+	n140343105600648 -> n140343105630728
+	n140343105632128 [label="+"]
+	n140343105600648 -> n140343105632128
+	n140343105633360 [label="+"]
+	n140343105600648 -> n140343105633360
+	n140343105630728 [label="*"]
+	n140343105954872 [label="Iter(0)"]
+	n140343105630728 -> n140343105954872
+	n140343105630784 [label=3]
+	n140343105630728 -> n140343105630784
+	n140343105630784 [label=3]
+	n140343105632128 [label="+"]
+	n140343105631960 [label="*"]
+	n140343105632128 -> n140343105631960
+	n140343105632184 [label=1]
+	n140343105632128 -> n140343105632184
+	n140343105631960 [label="*"]
+	n140343105954872 [label="Iter(0)"]
+	n140343105631960 -> n140343105954872
+	n140343105632016 [label=3]
+	n140343105631960 -> n140343105632016
+	n140343105632016 [label=3]
+	n140343105632184 [label=1]
+	n140343105633360 [label="+"]
+	n140343105633192 [label="*"]
+	n140343105633360 -> n140343105633192
+	n140343105633416 [label=2]
+	n140343105633360 -> n140343105633416
+	n140343105633192 [label="*"]
+	n140343105954872 [label="Iter(0)"]
+	n140343105633192 -> n140343105954872
+	n140343105633248 [label=3]
+	n140343105633192 -> n140343105633248
+	n140343105633248 [label=3]
+	n140343105633416 [label=2]
+	n140343105600760 [label=PropertyAccess]
+	n140343105889896 [label=velocity]
+	n140343105600760 -> n140343105889896
+	n140343105954872 [label="Iter(0)"]
+	n140343105600760 -> n140343105954872
+	n140343105630392 [label="*"]
+	n140343105600760 -> n140343105630392
+	n140343105631792 [label="+"]
+	n140343105600760 -> n140343105631792
+	n140343105633024 [label="+"]
+	n140343105600760 -> n140343105633024
+	n140343105630392 [label="*"]
+	n140343105954872 [label="Iter(0)"]
+	n140343105630392 -> n140343105954872
+	n140343105630448 [label=3]
+	n140343105630392 -> n140343105630448
+	n140343105630448 [label=3]
+	n140343105631792 [label="+"]
+	n140343105631624 [label="*"]
+	n140343105631792 -> n140343105631624
+	n140343105631848 [label=1]
+	n140343105631792 -> n140343105631848
+	n140343105631624 [label="*"]
+	n140343105954872 [label="Iter(0)"]
+	n140343105631624 -> n140343105954872
+	n140343105631680 [label=3]
+	n140343105631624 -> n140343105631680
+	n140343105631680 [label=3]
+	n140343105631848 [label=1]
+	n140343105633024 [label="+"]
+	n140343105632856 [label="*"]
+	n140343105633024 -> n140343105632856
+	n140343105633080 [label=2]
+	n140343105633024 -> n140343105633080
+	n140343105632856 [label="*"]
+	n140343105954872 [label="Iter(0)"]
+	n140343105632856 -> n140343105954872
+	n140343105632912 [label=3]
+	n140343105632856 -> n140343105632912
+	n140343105632912 [label=3]
+	n140343105633080 [label=2]
+	n140343105600872 [label="*"]
+	n140343105600928 [label=0.005]
+	n140343105600872 -> n140343105600928
+	n140343105600760 [label=PropertyAccess]
+	n140343105600872 -> n140343105600760
+	n140343105600928 [label=0.005]
+	n140343105601040 [label="+"]
+	n140343105600648 [label=PropertyAccess]
+	n140343105601040 -> n140343105600648
+	n140343105600872 [label="*"]
+	n140343105601040 -> n140343105600872
+	n140343105601264 [label="*"]
+	n140343105954872 [label="Iter(0)"]
+	n140343105601264 -> n140343105954872
+	n140343105601320 [label=3]
+	n140343105601264 -> n140343105601320
+	n140343105601320 [label=3]
+	n140343105631232 [label="*"]
+	n140343105954872 [label="Iter(0)"]
+	n140343105631232 -> n140343105954872
+	n140343105631288 [label=3]
+	n140343105631232 -> n140343105631288
+	n140343105631288 [label=3]
+	n140343105631400 [label="+"]
+	n140343105631232 [label="*"]
+	n140343105631400 -> n140343105631232
+	n140343105631456 [label=1]
+	n140343105631400 -> n140343105631456
+	n140343105631456 [label=1]
+	n140343105632464 [label="*"]
+	n140343105954872 [label="Iter(0)"]
+	n140343105632464 -> n140343105954872
+	n140343105632520 [label=3]
+	n140343105632464 -> n140343105632520
+	n140343105632520 [label=3]
+	n140343105632632 [label="+"]
+	n140343105632464 [label="*"]
+	n140343105632632 -> n140343105632464
+	n140343105632688 [label=2]
+	n140343105632632 -> n140343105632688
+	n140343105632688 [label=2]
+	n140343105601152 [label=Assign]
+	n140343105631120 [label=VectorAccess]
+	n140343105601152 -> n140343105631120
+	n140343105630336 [label=VectorAccess]
+	n140343105601152 -> n140343105630336
+	n140343105632352 [label=VectorAccess]
+	n140343105601152 -> n140343105632352
+	n140343105631568 [label=VectorAccess]
+	n140343105601152 -> n140343105631568
+	n140343105633584 [label=VectorAccess]
+	n140343105601152 -> n140343105633584
+	n140343105632800 [label=VectorAccess]
+	n140343105601152 -> n140343105632800
+	n140343105631120 [label=VectorAccess]
+	n140343105600648 [label=PropertyAccess]
+	n140343105631120 -> n140343105600648
+	n140343105630336 [label=VectorAccess]
+	n140343105601040 [label="+"]
+	n140343105630336 -> n140343105601040
+	n140343105632352 [label=VectorAccess]
+	n140343105600648 [label=PropertyAccess]
+	n140343105632352 -> n140343105600648
+	n140343105631568 [label=VectorAccess]
+	n140343105601040 [label="+"]
+	n140343105631568 -> n140343105601040
+	n140343105633584 [label=VectorAccess]
+	n140343105600648 [label=PropertyAccess]
+	n140343105633584 -> n140343105600648
+	n140343105632800 [label=VectorAccess]
+	n140343105601040 [label="+"]
+	n140343105632800 -> n140343105601040
 }
diff --git a/examples/kernels.pdf b/examples/kernels.pdf
index 56dd14b421cb95edcb4f5acd752c28738c52aa3f..f16bb711858657aee5396a32b5e93be43df0a19d 100644
Binary files a/examples/kernels.pdf and b/examples/kernels.pdf differ
diff --git a/examples/lj_func.py b/examples/lj_func.py
index 162d88df4b4a658b4d2cd520de41751cb3f4d770..61c8119f8ef5f5f1e92729f7ab4b51ca08e2efa1 100644
--- a/examples/lj_func.py
+++ b/examples/lj_func.py
@@ -31,5 +31,6 @@ psim.periodic(2.8)
 psim.vtk_output("output/test")
 psim.compute(lj, cutoff_radius, {'sigma6': sigma6, 'epsilon': epsilon})
 psim.compute(euler, symbols={'dt': dt})
-psim.target(pairs.target_gpu())
+psim.target(pairs.target_cpu())
+#psim.target(pairs.target_gpu())
 psim.generate()
diff --git a/examples/lj_ns.cpp b/examples/lj_ns.cpp
index a0c06bf204d09975018d1d765a3af43a031f8e70..c9cccf4d852b3bd36e27fcae80e8b2672e0027e2 100644
--- a/examples/lj_ns.cpp
+++ b/examples/lj_ns.cpp
@@ -671,8 +671,8 @@ int main() {
     int *numneighs = (int *) malloc((sizeof(int) * particle_capacity));
     int *pbc_map = (int *) malloc((sizeof(int) * pbc_capacity));
     int *pbc_mult = (int *) malloc((sizeof(int) * (pbc_capacity * 3)));
-    unsigned long long int prop_hflags[1] = {18446744073709551615};
-    unsigned long long int prop_dflags[1] = {0};
+    unsigned long long int prop_hflags[1] = {18446744073709551615ULL};
+    unsigned long long int prop_dflags[1] = {0ULL};
     double *mass = (double *) malloc((sizeof(double) * (particle_capacity + pbc_capacity)));
     ps->addProperty(Property(0, "mass", mass, Prop_Float));
     double *position = (double *) malloc((sizeof(double) * ((particle_capacity + pbc_capacity) * 3)));
@@ -871,28 +871,28 @@ int main() {
         prop_hflags[0] = e531;
         module_0(neighborlist_capacity, nlocal, neighborlists, numneighs, position, force);
         const unsigned long long int a131 = prop_dflags[0];
-        const unsigned long long int e532 = a131 & 1;
+        const unsigned long long int e532 = a131 & 8;
         const bool e533 = e532 == 0;
         if(e533) {
-            pairs::copy_to_device(mass)
+            pairs::copy_to_device(force)
         }
         const unsigned long long int a132 = prop_dflags[0];
-        const unsigned long long int e534 = a132 & 8;
+        const unsigned long long int e534 = a132 & 2;
         const bool e535 = e534 == 0;
         if(e535) {
-            pairs::copy_to_device(force)
+            pairs::copy_to_device(position)
         }
         const unsigned long long int a133 = prop_dflags[0];
-        const unsigned long long int e536 = a133 & 2;
+        const unsigned long long int e536 = a133 & 4;
         const bool e537 = e536 == 0;
         if(e537) {
-            pairs::copy_to_device(position)
+            pairs::copy_to_device(velocity)
         }
         const unsigned long long int a134 = prop_dflags[0];
-        const unsigned long long int e538 = a134 & 4;
+        const unsigned long long int e538 = a134 & 1;
         const bool e539 = e538 == 0;
         if(e539) {
-            pairs::copy_to_device(velocity)
+            pairs::copy_to_device(mass)
         }
         const unsigned long long int a136 = prop_dflags[0];
         const unsigned long long int e540 = a136 | 15;
diff --git a/setup.py b/setup.py
index 09e85066997bff1c93ece7e7feecfb52d5157f6c..018a268c3f1ab1b90cdb9307b50065eca7db9532 100644
--- a/setup.py
+++ b/setup.py
@@ -7,6 +7,7 @@ def readme():
 
 
 modules = [
+    'analysis',
     'code_gen',
     'coupling',
     'graph',
diff --git a/src/pairs/analysis/__init__.py b/src/pairs/analysis/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..5cd89c2932f7653d7c7813e5ebdaf405daa009f3
--- /dev/null
+++ b/src/pairs/analysis/__init__.py
@@ -0,0 +1,28 @@
+from pairs.analysis.bin_ops import SetBinOpTerminals, SetUsedBinOps
+from pairs.analysis.blocks import SetBlockVariants, SetParentBlock
+from pairs.analysis.modules import FetchModulesReferences
+
+
+class Analysis:
+    def __init__(self, ast):
+        self._ast = ast
+        self._set_used_bin_ops = SetUsedBinOps(ast)
+        self._set_bin_op_terminals = SetBinOpTerminals(ast)
+        self._set_block_variants = SetBlockVariants(ast)
+        self._set_parent_block = SetParentBlock(ast)
+        self._fetch_modules_references = FetchModulesReferences(ast)
+
+    def set_used_bin_ops(self):
+        self._set_used_bin_ops.visit()
+
+    def set_bin_op_terminals(self):
+        self._set_bin_op_terminals.visit()
+
+    def set_block_variants(self):
+        self._set_block_variants.mutate()
+
+    def set_parent_block(self):
+        self._set_parent_block.visit()
+
+    def fetch_modules_references(self):
+        self._fetch_modules_references.visit()
diff --git a/src/pairs/analysis/bin_ops.py b/src/pairs/analysis/bin_ops.py
new file mode 100644
index 0000000000000000000000000000000000000000..3750caaccb9e031766e3822e86b1c8f25deefb38
--- /dev/null
+++ b/src/pairs/analysis/bin_ops.py
@@ -0,0 +1,54 @@
+from pairs.ir.visitor import Visitor
+
+
+class SetBinOpTerminals(Visitor):
+    def __init__(self, ast):
+        super().__init__(ast)
+        self.elems = []
+
+    def push_terminal(self, ast_node):
+        for e in self.elems:
+            e.add_terminal(ast_node.name())
+
+    def visit_BinOp(self, ast_node):
+        self.elems.append(ast_node)
+        self.visit_children(ast_node)
+        self.elems.pop()
+
+    def visit_PropertyAccess(self, ast_node):
+        self.elems.append(ast_node)
+        self.visit_children(ast_node)
+        self.elems.pop()
+
+    def visit_Array(self, ast_node):
+        self.push_terminal(ast_node)
+
+    # TODO: Array should be enough
+    def visit_ArrayND(self, ast_node):
+        self.push_terminal(ast_node)
+
+    def visit_Iter(self, ast_node):
+        self.push_terminal(ast_node)
+
+    def visit_Property(self, ast_node):
+        self.push_terminal(ast_node)
+
+    def visit_Var(self, ast_node):
+        self.push_terminal(ast_node)
+
+
+class SetUsedBinOps(Visitor):
+    def __init__(self, ast):
+        super().__init__(ast)
+        self.bin_ops = []
+
+    def visit_BinOp(self, ast_node):
+        ast_node.decl.used = True
+        self.visit_children(ast_node)
+
+    def visit_Decl(self, ast_node):
+        pass
+
+    def visit_PropertyAccess(self, ast_node):
+        ast_node.decl.used = True
+        self.visit_children(ast_node)
diff --git a/src/pairs/transformations/LICM.py b/src/pairs/analysis/blocks.py
similarity index 56%
rename from src/pairs/transformations/LICM.py
rename to src/pairs/analysis/blocks.py
index 264aa37fea89a79fa0716511e45bd1bbb6acd1e5..ec4b7b6b8a70fc407dfc536bf0e179f2d62d41b1 100644
--- a/src/pairs/transformations/LICM.py
+++ b/src/pairs/analysis/blocks.py
@@ -1,7 +1,5 @@
-from pairs.ir.bin_op import BinOp
 from pairs.ir.loops import For, While
 from pairs.ir.mutator import Mutator
-from pairs.ir.properties import PropertyAccess
 from pairs.ir.visitor import Visitor
 
 
@@ -121,99 +119,3 @@ class SetParentBlock(Visitor):
         assert isinstance(ast_node, (For, While)), "Node must be a loop!"
         loop_id = id(ast_node)
         return self.parents[loop_id] if loop_id in self.parents else None
-
-
-class SetBinOpTerminals(Visitor):
-    def __init__(self, ast):
-        super().__init__(ast)
-        self.elems = []
-
-    def push_terminal(self, ast_node):
-        for e in self.elems:
-            e.add_terminal(ast_node.name())
-
-    def visit_BinOp(self, ast_node):
-        self.elems.append(ast_node)
-        self.visit_children(ast_node)
-        self.elems.pop()
-
-    def visit_PropertyAccess(self, ast_node):
-        self.elems.append(ast_node)
-        self.visit_children(ast_node)
-        self.elems.pop()
-
-    def visit_Array(self, ast_node):
-        self.push_terminal(ast_node)
-
-    # TODO: Array should be enough
-    def visit_ArrayND(self, ast_node):
-        self.push_terminal(ast_node)
-
-    def visit_Iter(self, ast_node):
-        self.push_terminal(ast_node)
-
-    def visit_Property(self, ast_node):
-        self.push_terminal(ast_node)
-
-    def visit_Var(self, ast_node):
-        self.push_terminal(ast_node)
-
-
-class LICM(Mutator):
-    def __init__(self, ast):
-        super().__init__(ast)
-        self.lifts = {}
-        self.loops = []
-
-    def mutate_For(self, ast_node):
-        self.lifts[id(ast_node)] = []
-        self.loops.append(ast_node)
-        ast_node.iterator = self.mutate(ast_node.iterator)
-        ast_node.block = self.mutate(ast_node.block)
-        self.loops.pop()
-        return ast_node
-
-    def mutate_While(self, ast_node):
-        self.lifts[id(ast_node)] = []
-        self.loops.append(ast_node)
-        ast_node.cond = self.mutate(ast_node.cond)
-        ast_node.block = self.mutate(ast_node.block)
-        self.loops.pop()
-        return ast_node
-
-    def mutate_Decl(self, ast_node):
-        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.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
-
-        return ast_node
-
-    def mutate_Block(self, ast_node):
-        new_stmts = []
-        stmts = [self.mutate(s) for s in ast_node.stmts]
-
-        for s in stmts:
-            if s is not None:
-                s_id = id(s)
-                if isinstance(s, (For, While)) and s_id in self.lifts:
-                    new_stmts = new_stmts + self.lifts[s_id]
-
-                new_stmts.append(s)
-
-        ast_node.stmts = new_stmts
-        return ast_node
-
-
-def move_loop_invariant_code(ast):
-    set_parent_block = SetParentBlock(ast)
-    set_parent_block.visit()
-    set_block_variants = SetBlockVariants(ast)
-    set_block_variants.mutate()
-    set_bin_op_terminals = SetBinOpTerminals(ast)
-    set_bin_op_terminals.visit()
-    licm = LICM(ast)
-    licm.mutate()
diff --git a/src/pairs/analysis/modules.py b/src/pairs/analysis/modules.py
new file mode 100644
index 0000000000000000000000000000000000000000..4da4846e1100f9f0eb93923d77ea88c86f247f11
--- /dev/null
+++ b/src/pairs/analysis/modules.py
@@ -0,0 +1,34 @@
+from pairs.ir.visitor import Visitor
+
+
+class FetchModulesReferences(Visitor):
+    def __init__(self, ast):
+        super().__init__(ast)
+        self.module_stack = []
+        self.writing = False
+
+    def visit_Assign(self, ast_node):
+        self.writing = True
+        for c in ast_node.destinations():
+            self.visit(c)
+
+        self.writing = False
+        for c in ast_node.sources():
+            self.visit(c)
+
+    def visit_Module(self, ast_node):
+        self.module_stack.append(ast_node)
+        self.visit_children(ast_node)
+        self.module_stack.pop()
+
+    def visit_Array(self, ast_node):
+        for m in self.module_stack:
+            m.add_array(ast_node, self.writing)
+
+    def visit_Property(self, ast_node):
+        for m in self.module_stack:
+            m.add_property(ast_node, self.writing)
+
+    def visit_Var(self, ast_node):
+        for m in self.module_stack:
+            m.add_variable(ast_node, self.writing)
diff --git a/src/pairs/sim/simulation.py b/src/pairs/sim/simulation.py
index 5aa9c4ca42bfb9c8936a92bfce2d0c13bd963a67..d5ad6fe8f49b013d99ed58df13e92df34a61b37a 100644
--- a/src/pairs/sim/simulation.py
+++ b/src/pairs/sim/simulation.py
@@ -20,15 +20,7 @@ from pairs.sim.read_from_file import ReadFromFile
 from pairs.sim.timestep import Timestep
 from pairs.sim.variables import VariablesDecl
 from pairs.sim.vtk import VTKWrite
-from pairs.transformations.add_device_copies import AddDeviceCopies
-from pairs.transformations.prioritize_scalar_ops import prioritize_scalar_ops
-from pairs.transformations.set_used_bin_ops import set_used_bin_ops
-from pairs.transformations.simplify import simplify_expressions
-from pairs.transformations.LICM import move_loop_invariant_code
-from pairs.transformations.lower import lower_everything
-from pairs.transformations.merge_adjacent_blocks import merge_adjacent_blocks
-from pairs.transformations.modules import modularize
-from pairs.transformations.replace_symbols import replace_symbols
+from pairs.transformations import Transformations
 
 
 class Simulation:
@@ -248,22 +240,10 @@ class Simulation:
         ])
 
         program = Module(self, name='main', block=Block.merge_blocks(decls, body))
-        if self._target.is_gpu():
-            add_copies = AddDeviceCopies(program)
-
-        # Transformations
-        lower_everything(program)
-        replace_symbols(program)
-        merge_adjacent_blocks(program)
-        prioritize_scalar_ops(program)
-        simplify_expressions(program)
-        move_loop_invariant_code(program)
-        set_used_bin_ops(program)
-        modularize(program)
-        merge_adjacent_blocks(program)
-
-        if self._target.is_gpu():
-            add_copies.mutate()
+
+        # Apply transformations
+        transformations = Transformations(program, self._target)
+        transformations.apply_all()
 
         # For this part on, all bin ops are generated without usage verification
         self.check_decl_usage = False
diff --git a/src/pairs/transformations/__init__.py b/src/pairs/transformations/__init__.py
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..edd3b334066238a50127bbf24952640701b57711 100644
--- a/src/pairs/transformations/__init__.py
+++ b/src/pairs/transformations/__init__.py
@@ -0,0 +1,66 @@
+from pairs.analysis import Analysis
+from pairs.transformations.blocks import MergeAdjacentBlocks
+from pairs.transformations.devices import AddDeviceCopies
+from pairs.transformations.expressions import ReplaceSymbols, SimplifyExpressions, PrioritizeScalarOps
+from pairs.transformations.loops import LICM
+from pairs.transformations.lower import Lower
+from pairs.transformations.modules import DereferenceWriteVariables, AddResizeLogic, ReplaceModulesByCalls
+
+
+class Transformations:
+    def __init__(self, ast, target):
+        self._ast = ast
+        self._target = target
+        self._analysis = Analysis(ast)
+        self._merge_adjacent_blocks = MergeAdjacentBlocks(ast)
+        self._replace_symbols = ReplaceSymbols(ast)
+        self._simplify_expressions = SimplifyExpressions(ast)
+        self._prioritize_scalar_ops = PrioritizeScalarOps(ast)
+        self._licm = LICM(ast)
+        self._dereference_write_variables = DereferenceWriteVariables(ast)
+        self._add_resize_logic = AddResizeLogic(ast)
+        self._replace_modules_by_calls = ReplaceModulesByCalls(ast)
+
+        if target.is_gpu():
+            self._add_device_copies = AddDeviceCopies(ast)
+
+    def lower_everything(self):
+        nlowered = 1
+        while nlowered > 0:
+            lower = Lower(self._ast)
+            lower.mutate()
+            nlowered = lower.lowered_nodes
+
+        self._merge_adjacent_blocks.mutate()
+
+    def optimize_expressions(self):
+        self._replace_symbols.mutate()
+        self._simplify_expressions.mutate()
+        self._prioritize_scalar_ops.mutate()
+        self._simplify_expressions.mutate()
+        self._analysis.set_used_bin_ops()
+
+    def licm(self):
+        self._analysis.set_parent_block()
+        self._analysis.set_block_variants()
+        self._analysis.set_bin_op_terminals()
+        self._licm.mutate()
+
+    def modularize(self):
+        self._add_resize_logic.mutate()
+        self._analysis.fetch_modules_references()
+        self._dereference_write_variables.mutate()
+        self._replace_modules_by_calls.set_module_resizes(self._add_resize_logic.module_resizes)
+        self._replace_modules_by_calls.mutate()
+        self._merge_adjacent_blocks.mutate()
+
+    def add_device_copies(self):
+        if self._target.is_gpu():
+            self._add_device_copies.mutate()
+
+    def apply_all(self):
+        self.lower_everything()
+        self.optimize_expressions()
+        self.licm()
+        self.modularize()
+        self.add_device_copies()
diff --git a/src/pairs/transformations/merge_adjacent_blocks.py b/src/pairs/transformations/blocks.py
similarity index 85%
rename from src/pairs/transformations/merge_adjacent_blocks.py
rename to src/pairs/transformations/blocks.py
index 10951443a57202ee34bae5e02fade8635843a764..e2f7964af68982cf66ef83535bd38e35d00f9887 100644
--- a/src/pairs/transformations/merge_adjacent_blocks.py
+++ b/src/pairs/transformations/blocks.py
@@ -18,8 +18,3 @@ class MergeAdjacentBlocks(Mutator):
 
         ast_node.stmts = new_stmts 
         return ast_node
-
-
-def merge_adjacent_blocks(ast):
-    merge = MergeAdjacentBlocks(ast)
-    merge.mutate()
diff --git a/src/pairs/transformations/add_device_copies.py b/src/pairs/transformations/devices.py
similarity index 100%
rename from src/pairs/transformations/add_device_copies.py
rename to src/pairs/transformations/devices.py
diff --git a/src/pairs/transformations/prioritize_scalar_ops.py b/src/pairs/transformations/expressions.py
similarity index 64%
rename from src/pairs/transformations/prioritize_scalar_ops.py
rename to src/pairs/transformations/expressions.py
index f43637d02a5f41a8ebd9bf700f93d56b662d1201..068f434e48016bd5475d7225d75209e7a1edb4a0 100644
--- a/src/pairs/transformations/prioritize_scalar_ops.py
+++ b/src/pairs/transformations/expressions.py
@@ -1,8 +1,45 @@
 from pairs.ir.bin_op import BinOp
+from pairs.ir.lit import Lit
 from pairs.ir.mutator import Mutator
 from pairs.ir.types import Types
 
 
+class ReplaceSymbols(Mutator):
+    def __init__(self, ast):
+        super().__init__(ast)
+
+    def mutate_Symbol(self, ast_node):
+        return ast_node.assign_to
+
+
+class SimplifyExpressions(Mutator):
+    def __init__(self, ast):
+        super().__init__(ast)
+
+    def mutate_BinOp(self, ast_node):
+        sim = ast_node.lhs.sim
+        ast_node.lhs = self.mutate(ast_node.lhs)
+        ast_node.rhs = self.mutate(ast_node.rhs)
+        ast_node.expressions = {i: self.mutate(e) for i, e in ast_node.expressions.items()}
+
+        if ast_node.op in ['+', '-'] and ast_node.rhs == 0:
+            return ast_node.lhs
+
+        if ast_node.op in ['+'] and ast_node.lhs == 0:
+            return ast_node.rhs
+
+        if ast_node.op in ['*', '/'] and ast_node.rhs == 1:
+            return ast_node.lhs
+
+        if ast_node.op == '*' and ast_node.lhs == 1:
+            return ast_node.rhs
+
+        if ast_node.op == '*' and ast_node.lhs == 0:
+            return Lit(sim, 0 if Types.is_integer(ast_node.type()) else 0.0)
+
+        return ast_node
+
+
 class PrioritizeScalarOps(Mutator):
     def __init__(self, ast):
         super().__init__(ast)
@@ -43,8 +80,3 @@ class PrioritizeScalarOps(Mutator):
                     #return BinOp(sim, rhs.rhs, BinOp(sim, rhs.lhs, lhs, op), op)
 
         return ast_node
-
-
-def prioritize_scalar_ops(ast_node):
-    prioritize = PrioritizeScalarOps(ast_node)
-    prioritize.mutate()
diff --git a/src/pairs/transformations/loops.py b/src/pairs/transformations/loops.py
new file mode 100644
index 0000000000000000000000000000000000000000..1b3c3b56ec197c0a54b170965f7c468c524bf53e
--- /dev/null
+++ b/src/pairs/transformations/loops.py
@@ -0,0 +1,53 @@
+from pairs.ir.bin_op import BinOp
+from pairs.ir.loops import For, While
+from pairs.ir.mutator import Mutator
+from pairs.ir.properties import PropertyAccess
+
+
+class LICM(Mutator):
+    def __init__(self, ast):
+        super().__init__(ast)
+        self.lifts = {}
+        self.loops = []
+
+    def mutate_For(self, ast_node):
+        self.lifts[id(ast_node)] = []
+        self.loops.append(ast_node)
+        ast_node.iterator = self.mutate(ast_node.iterator)
+        ast_node.block = self.mutate(ast_node.block)
+        self.loops.pop()
+        return ast_node
+
+    def mutate_While(self, ast_node):
+        self.lifts[id(ast_node)] = []
+        self.loops.append(ast_node)
+        ast_node.cond = self.mutate(ast_node.cond)
+        ast_node.block = self.mutate(ast_node.block)
+        self.loops.pop()
+        return ast_node
+
+    def mutate_Decl(self, ast_node):
+        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.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
+
+        return ast_node
+
+    def mutate_Block(self, ast_node):
+        new_stmts = []
+        stmts = [self.mutate(s) for s in ast_node.stmts]
+
+        for s in stmts:
+            if s is not None:
+                s_id = id(s)
+                if isinstance(s, (For, While)) and s_id in self.lifts:
+                    new_stmts = new_stmts + self.lifts[s_id]
+
+                new_stmts.append(s)
+
+        ast_node.stmts = new_stmts
+        return ast_node
diff --git a/src/pairs/transformations/lower.py b/src/pairs/transformations/lower.py
index c2fb14f14d87671439bbf74197b7986938aba749..7bb0c471112e9b9365dcaf2197925891f2fe7962 100644
--- a/src/pairs/transformations/lower.py
+++ b/src/pairs/transformations/lower.py
@@ -13,11 +13,3 @@ class Lower(Mutator):
             return ast_node.lower()
 
         return ast_node
-
-
-def lower_everything(ast):
-    nlowered = 1
-    while nlowered > 0:
-        lower = Lower(ast)
-        lower.mutate()
-        nlowered = lower.lowered_nodes
diff --git a/src/pairs/transformations/modules.py b/src/pairs/transformations/modules.py
index d2a0127f69f61a560c43df541550a0722b090143..a0801d594db1507a9978919650d3ee258225fc4a 100644
--- a/src/pairs/transformations/modules.py
+++ b/src/pairs/transformations/modules.py
@@ -11,45 +11,11 @@ from pairs.ir.mutator import Mutator
 from pairs.ir.properties import UpdateProperty
 from pairs.ir.types import Types
 from pairs.ir.variables import Var, Deref
-from pairs.ir.visitor import Visitor
 from functools import reduce
 import operator
 
 
-class FetchModulesReferences(Visitor):
-    def __init__(self, ast):
-        super().__init__(ast)
-        self.module_stack = []
-        self.writing = False
-
-    def visit_Assign(self, ast_node):
-        self.writing = True
-        for c in ast_node.destinations():
-            self.visit(c)
-
-        self.writing = False
-        for c in ast_node.sources():
-            self.visit(c)
-
-    def visit_Module(self, ast_node):
-        self.module_stack.append(ast_node)
-        self.visit_children(ast_node)
-        self.module_stack.pop()
-
-    def visit_Array(self, ast_node):
-        for m in self.module_stack:
-            m.add_array(ast_node, self.writing)
-
-    def visit_Property(self, ast_node):
-        for m in self.module_stack:
-            m.add_property(ast_node, self.writing)
-
-    def visit_Var(self, ast_node):
-        for m in self.module_stack:
-            m.add_variable(ast_node, self.writing)
-
-
-class AddDereferencesToWriteVariables(Mutator):
+class DereferenceWriteVariables(Mutator):
     def __init__(self, ast):
         super().__init__(ast)
         self.module_stack = []
@@ -153,11 +119,14 @@ class AddResizeLogic(Mutator):
 
 
 class ReplaceModulesByCalls(Mutator):
-    def __init__(self, ast, module_resizes, grow_fn=None):
+    def __init__(self, ast, grow_fn=None):
         super().__init__(ast)
-        self.module_resizes = module_resizes
+        self.module_resizes = None
         self.grow_fn = grow_fn if grow_fn is not None else (lambda x: x * 2)
 
+    def set_module_resizes(self, module_resizes):
+        self.module_resizes = module_resizes
+
     def mutate_Module(self, ast_node):
         ast_node._block = self.mutate(ast_node._block)
         if ast_node.name == 'main':
@@ -194,14 +163,3 @@ class ReplaceModulesByCalls(Mutator):
             return Block(sim, init_stmts + [While(sim, branch_cond, Block(sim, reset_stmts + [call] + resize_stmts))])
 
         return call
-
-
-def modularize(ast):
-    add_resize_logic = AddResizeLogic(ast)
-    add_resize_logic.mutate()
-    fetch_refs = FetchModulesReferences(ast)
-    fetch_refs.visit()
-    add_derefs_to_write_vars = AddDereferencesToWriteVariables(ast)
-    add_derefs_to_write_vars.mutate()
-    replace = ReplaceModulesByCalls(ast, add_resize_logic.module_resizes)
-    replace.mutate()
diff --git a/src/pairs/transformations/replace_symbols.py b/src/pairs/transformations/replace_symbols.py
deleted file mode 100644
index a23a5a26705504bddbfc8bed004809e2d62bd95e..0000000000000000000000000000000000000000
--- a/src/pairs/transformations/replace_symbols.py
+++ /dev/null
@@ -1,14 +0,0 @@
-from pairs.ir.mutator import Mutator
-
-
-class ReplaceSymbols(Mutator):
-    def __init__(self, ast):
-        super().__init__(ast)
-
-    def mutate_Symbol(self, ast_node):
-        return ast_node.assign_to
-
-
-def replace_symbols(ast):
-    replace = ReplaceSymbols(ast)
-    replace.mutate()
diff --git a/src/pairs/transformations/set_used_bin_ops.py b/src/pairs/transformations/set_used_bin_ops.py
deleted file mode 100644
index ac26bf13f7f2b272b2558817dcfe7d345b3625a4..0000000000000000000000000000000000000000
--- a/src/pairs/transformations/set_used_bin_ops.py
+++ /dev/null
@@ -1,22 +0,0 @@
-from pairs.ir.visitor import Visitor
-
-
-class SetUsedBinOps(Visitor):
-    def __init__(self, ast):
-        super().__init__(ast)
-        self.bin_ops = []
-
-    def visit_BinOp(self, ast_node):
-        ast_node.decl.used = True
-        self.visit_children(ast_node)
-
-    def visit_Decl(self, ast_node):
-        pass
-
-    def visit_PropertyAccess(self, ast_node):
-        ast_node.decl.used = True
-        self.visit_children(ast_node)
-
-def set_used_bin_ops(ast):
-    set_used_binops = SetUsedBinOps(ast)
-    set_used_binops.visit()
diff --git a/src/pairs/transformations/simplify.py b/src/pairs/transformations/simplify.py
deleted file mode 100644
index 4491f2c65e734e110ca649fd211dbf32c35a23ba..0000000000000000000000000000000000000000
--- a/src/pairs/transformations/simplify.py
+++ /dev/null
@@ -1,36 +0,0 @@
-from pairs.ir.lit import Lit
-from pairs.ir.mutator import Mutator
-from pairs.ir.types import Types
-
-
-class SimplifyExpressions(Mutator):
-    def __init__(self, ast):
-        super().__init__(ast)
-
-    def mutate_BinOp(self, ast_node):
-        sim = ast_node.lhs.sim
-        ast_node.lhs = self.mutate(ast_node.lhs)
-        ast_node.rhs = self.mutate(ast_node.rhs)
-        ast_node.expressions = {i: self.mutate(e) for i, e in ast_node.expressions.items()}
-
-        if ast_node.op in ['+', '-'] and ast_node.rhs == 0:
-            return ast_node.lhs
-
-        if ast_node.op in ['+'] and ast_node.lhs == 0:
-            return ast_node.rhs
-
-        if ast_node.op in ['*', '/'] and ast_node.rhs == 1:
-            return ast_node.lhs
-
-        if ast_node.op == '*' and ast_node.lhs == 1:
-            return ast_node.rhs
-
-        if ast_node.op == '*' and ast_node.lhs == 0:
-            return Lit(sim, 0 if Types.is_integer(ast_node.type()) else 0.0)
-
-        return ast_node
-
-
-def simplify_expressions(ast_node):
-    simplify = SimplifyExpressions(ast_node)
-    simplify.mutate()