Your code constantly updates because `nPts` is local to a module enclosing the `Manipulate`. If the `Manipulate` enclosed the module, your code wouldn't work as you would like, but it wouldn't be constantly updating. Here is a much simpler example showing the same behavior. Module[{n = 1}, Manipulate[Row[{"n = ", n++}], {t, 0, 5}]] constantly updates, but Manipulate[Module[{n = 1}, Row[{"n = ", n++}]], {t, 0, 5}] doesn't. I would take a different approach. I wouldn't use locators to add more particles to the simulation; rather I would use a [`ClickPane`](http://reference.wolfram.com/mathematica/ref/ClickPane.html). Nor would I use a slider to generate update events; rather I would use a [`Button`](http://reference.wolfram.com/mathematica/ref/Button.html) Manipulate[ If[update, update = False; pts = Plus @@@ Transpose[{pts, RandomReal[{-1, 1}, {Length@pts, 2}]}]]; ClickPane[ Framed@Graphics[{Blue, PointSize[0.02], Point[pts]}, PlotRange -> {{-5, 5}, {-5, 5}}], AppendTo[pts, #] &], {{update, False}, ControlType -> None}, {{pts, {{0, 0}}}, ControlType -> None}, Button["Update", update = True]] ![manipulate][1] This is much simpler than your code, but still performs the simulation you are trying to implement. Give it a try and see if it satisfies your needs. [1]: https://i.sstatic.net/H3xiV.png