   {"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))

           (let [[chs result] args] 2))}})

(defn vis-init [cmds cmd-handlers]
  (let [vis (atom {:actxs {} :chs {}})
        max-inflight (atom 10)
        event-delay (atom 0)
        event-ch (chan)

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