 
 (def ^:private ^:dynamic *animating* nil)
 
-(defonce
-  render-loop
-  (request-animation-frame
-    (fn render[frame-ms]
-      (binding [*animating* true]
-        (reset! frame-time frame-ms)
-        (when enable-fps-instrumentation
-          (if (identical? instrumentation-i 14)
-            (do
-              (reset! fps (* 1000 (/ 15 (- frame-ms last-instrumentation-time))))
-              (set! instrumentation-i 0))
-            (set! instrumentation-i (inc instrumentation-i)))
-          (when (identical? 0 instrumentation-i)
-            (set! last-instrumentation-time frame-ms)))
-        (let [queue render-queue
-              n (alength queue)]
-          (when (> n 0)
-            (set! render-queue #js [])
-            (loop [i 0]
-              (when (< i n)
-                ((aget queue i))
-                (recur (inc i)))))))
-      (request-animation-frame render))))
+(def ^:private animation-requested false)
+
+(declare render-fn)
+
+(defn- request-render []
+  (when-not animation-requested
+    (set! animation-requested true)
+    (request-animation-frame render-fn)))
+
+(defn- render-fn [frame-ms]
+  (binding [*animating* true]
+    (set! animation-requested false)
+    (reset! frame-time frame-ms)
+    (when enable-fps-instrumentation
+      (if (identical? instrumentation-i 14)
+        (do
+          (reset! fps (* 1000 (/ 15 (- frame-ms last-instrumentation-time))))
+          (set! instrumentation-i 0))
+        (set! instrumentation-i (inc instrumentation-i)))
+      (when (identical? 0 instrumentation-i)
+        (set! last-instrumentation-time frame-ms)))
+    (let [queue render-queue
+          n (alength queue)]
+      (when (> n 0)
+        (set! render-queue #js [])
+        (loop [i 0]
+          (when (< i n)
+            ((aget queue i))
+            (recur (inc i)))))))
+  (when (or enable-fps-instrumentation (> (.-watchers frame-time) 0))
+    (request-render)))
 
 (defn queue-animation [f]
   (if *animating*
     (f)
-    (.push render-queue f)))
+    (do
+      (.push render-queue f)
+      (request-render))))
 
 ;; ## Attributes, Styles & Events
 

            (when last-child
              (ui/velem-remove (as-velem (get-velem-state last-child)))
              (recur))))
        (let [vroot (wrap-unmanaged-node root-node nil)]
          (configure-root! vroot vdom))))
    root-node)) 


          (create-or-find-root-node mount-point))]
    (if-let [vroot (get-element-state root-node)]
      (do
        ;; (assert (.-root vroot) "Can only remount at a previous mount point")
        (do-unmount! vroot)
        (configure-root! vroot vdom))
      (do
