     (fn control
       [model signal dispatch-signal dispatch-action]
       (letfn [(record-and-dispatch-to-app [signal]
-                (let [[signal-id _ :as signal-event] (-signal-event (-> @model ::debugger :next-signal-id) signal)]
+                (let [signal-event (-signal-event (-> @model ::debugger :next-signal-id) signal)]
                   (dispatch-action [::record-signal-event signal-event])
-                  (app-control model signal dispatch-signal #(dispatch-action [::app-action signal-id %]))))]
+                  (app-control model signal dispatch-signal #(dispatch-action [::app-action (:id signal-event) %]))))]
         (match signal
                :on-start
                (do

                                                                                   (dissoc m ::debugger))])
                   (update-in m [::debugger :next-action-id] inc))

             ; looks like originating signal could be already cleared -> create "unknown signal" to record this action
             (reconcile model a))

           ; for bare app actions (e.g. when originating signal was cleared) create an "unknown signal" event
           :else
           (let [[signal-id _ :as unknown-signal-event] (-signal-event (-> model ::debugger :next-signal-id) ::unknown-signal)]
             (-> model
                 (update-in [::debugger :signal-events] concat [unknown-signal-event])
                 (update-in [::debugger :next-signal-id] inc)
                 (reconcile [::app-action signal-id action]))))))

;;;;;;;;;;;;;;;;;;;;;;;; View model
(defn -view-model

  [signal-events action-events dispatch]
  [:div
   (doall
     (for [{:keys [id signal]} signal-events]
       ^{:key id}
       [:div
        [-signal-view id signal dispatch]
        [-actions-view action-events id dispatch]]))])

(defn -initial-model-view
  [initial-model]
