   y_force_mult = 2
 
   total_ticks = 0
-
-  while true
-    stable = tick alpha
-    alpha *= decay
-    total_ticks += 1
-
-    stable ||= alpha <= min_alpha
-
-    aborted = opts.abort?()
-    break if stable || aborted
-
-
-  if !aborted
-    positions = {}
-    for o, i in nodes
-      positions[parseInt(opinions[i].user.substring(6))] = \
-        [Math.round((o.x - o.radius) * 10) / 10, Math.round((o.y - o.radius) * 10) / 10]
-
-    opts.done?(positions)
-
-  histo_run_next_job(opts)
+  collisions = 0 
+
+  loc = fetch 'location'
+  if loc.query_params.show_histogram_physics
+    iterate = => 
+      stable = tick alpha
+      alpha *= decay
+      total_ticks += 1
+
+      console.log "Tick: #{total_ticks} Collisions: #{collisions}"
+      collisions = 0
+
+      stable ||= alpha <= min_alpha
+
+      if !aborted
+        write_positions()
+
+      aborted = opts.abort?()
+      if stable || aborted
+        histo_run_next_job(opts)
+      else 
+        setTimeout iterate, loc.query_params.show_histogram_physics or 100
+    iterate()
+
+  else 
+    while true
+      stable = tick alpha
+      alpha *= decay
+      total_ticks += 1
+
+      stable ||= alpha <= min_alpha
+
+      aborted = opts.abort?()
+      break if stable || aborted
+
+
+    if !aborted
+      write_positions()
+
+    histo_run_next_job(opts)
 
 
 

              y1 > ny2 ||
              y2 < ny1



  ##############
  # Initialize positions of each node

  collide = (p1, alpha) ->

    return (quad, x1, y1, x2, y2) ->
      collisions += 1

      p2 = quad.point
      if quad.leaf && p2 && p2 != p1
        dx = Math.abs (p1.x - p2.x)
