 
             ;; 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)]

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


;;


;; A map from event metadata keys to the corresponding "run later" functions
(def later-fns
  {:flush-dom do-later              ;; after next annimation frame
   :yield     goog.async.nextTick}) ;; almost immediately

(defprotocol IEventQueue
  (enqueue [this event])

