 
 
 (subs/register
-  :undo-explantions
+  :undo-explanations
   (fn handler
-    ; "returns a vector of string explnations
+    ; "return a vector of string explanations ordered oldest to most recent"
     [_ _]
-    (reaction (deref undo-explain-list))))
+    (reaction (conj @undo-explain-list @app-explain))))
 
 (subs/register
-  :redo-explantions
+  :redo-explanations
   (fn handler
-    ; "returns a vector of string explnations
+    ; "returns a vector of string explanations ordered from most recent undo onward"
     [_ _]
     (reaction (deref redo-explain-list))))
 
 ;; -- event handlers  ----------------------------------------------------------------------------
 
 
-(defn undo
+(defn- undo
   [undos cur redos]
   (let [u @undos
         r (cons @cur @redos)]

    (reset! redos (rest r))
    (reset! undos u)))



(handlers/register-base     ;; not a pure handler
  :redo                     ;; usage:  (dispatch [:redo])
  (fn handler
    [_ _]
    (if-not (redos?)
      (warn "re-frame: you did a (dispatch [:redo]), but there is nothing to redo.")
      (do
        (redo undo-list app-db redo-list)
        (redo undo-explain-list app-explain redo-explain-list)))))


    (reset! redos r)
    (reset! undos (pop u))))

(defn- undo-count
  "undo until we reach count or run out of undos"
  [count]
  (when (and (pos? count) (undos?))
    (undo undo-list app-db redo-list)
    (undo undo-explain-list app-explain redo-explain-list)
    (recur (dec count))))

(handlers/register-base     ;; not a pure handler
  :undo                     ;; usage:  (dispatch [:undo n])
  (fn handler
    [_ event-v]
    (if-not (undos?)
      (warn "re-frame: you did a (dispatch [:undo]), but there is nothing to undo.")
      (undo-count (if (second event-v) (second event-v) 1)))))


(defn- redo
