 
             ;; processing one event after another
             [:running :add-event ]  [:running   #(-add-event this arg1)]
-            [:running :pause-run ]  [:paused    #(-pause-run this)]
             [:running :exception ]  [:quiescent #(-exception this arg1)]
             [:running :finish-run]  (if (empty? queue)       ;; FSM guard
                                       [:quiescent]
                                       [:scheduled  #(-run-next-tick this)])
+            [:running :pause-run ]  [:paused    #(-pause-run this arg1)]
 
             ;; event processing is paused - probably by :flush-dom metadata
             [:paused :add-event    ]  [:paused   #(-add-event this arg1)]

        (if (zero? n)
          (-fsm-trigger this :finish-run nil)
          (let [event-v (peek queue)]
            (if (some #{:flush-dom :yield} (keys (meta event-v)))
              (-fsm-trigger this :pause-run nil)
              (do (-process-1st-event this)
                  (recur (dec n)))))))))

  (-pause-run
    [this]
    (let [event-v (peek queue)
          m       (meta event-v)
          later   (cond
                    (:flush-dom m) do-later                ;; after next annimation frame
                    (:yield m)     goog.async.nextTick)]   ;; almost immediately
      (later #(-fsm-trigger this :begin-resume nil))))

  (-begin-resume
    [this]

  (-process-1st-event [this])
  (-run-next-tick [this])
  (-run-queue [this])
  (-pause-run [this later-fn])
  (-exception [this ex])
  (-begin-resume [this]))

