   {"ago"
    {:beg (fn [vis actx args]
            (let [[child-actx] args]
-             (swap! vis #(assoc-in % [:actxs child-actx]
-                                   {:parent actx :want-chs {}}))))
+             (swap! vis #(assoc-in % (concat [:actxs] (rest child-actx))
+                                   {:children {} :want-chs {}}))
+             (swap! vis #(assoc-in % [:want-chs child-actx] {}))))
     :end (fn [vis actx args]
            (let [[child-actx result] args]
-             (swap! vis #(dissoc-in % [:actxs child-actx]))))}
+             (swap! vis #(dissoc-in % (concat [:actxs] (rest child-actx))))
+             (swap! vis #(dissoc-in % [:want-chs child-actx]))))}
    "aclose"
    {:beg (fn [vis actx args]
            (let [[ch] args] 1))

   "atake"
   {:beg (fn [vis actx args]
           (let [[ch] args]
             (swap! vis #(assoc-in % [:actxs actx :want-chs ch] :take))))
    :end (fn [vis actx args]
           (let [[ch result] args]
             (swap! vis #(dissoc-in % [:actxs actx :want-chs ch]))))}
   "aput"
   {:beg (fn [vis actx args]
           (let [[ch msg] args]
             (swap! vis #(assoc-in % [:actxs actx :want-chs ch] :put))))
    :end (fn [vis actx args]
           (let [[ch msg result] args]
             (swap! vis #(dissoc-in % [:actxs actx :want-chs ch]))))}
   "aalts"
   {:beg (fn [vis actx args]
           (let [[chs] args] 1))

      (let [[actx event] (<! event-ch)
            [verb step & args] event
            vis-event-handler (get (get vis-event-handlers verb) step)]
        (vis-event-handler vis actx args)
        (set-el-innerHTML "event" [num-events @vis])
        (set-el-innerHTML "vis"
                          (str "<circle cx='"
                               (mod num-events 500)
