                     (dom/span nil "}"))
           :type (p (dom/span #js {:onClick #(transition {:state :init})} (str "{- " (:width state) " ... "))
                    (dom/span #js {:onClick #(transition {:state :sample :type "sample"})} " sample ")
-                   (dom/span #js {:onClick #(print "bonk")} " play ")
-                   (dom/span #js {:onClick #(print "bonk")} " synth ")
+                   (dom/span #js {:onClick #(transition {:state :grid :type "grid"})} " grid ")
                    (dom/span nil "}"))
           :sample (p (dom/span #js {:onClick #(transition {:state :init})} (str "{- " (:width state) " sample ... "))
                      (apply dom/select #js {:onChange #(transition {:state :commit :sample (-> % .-target .-value)})}
                             (map #(dom/option nil %) (om/observe owner (samples))))
                      (dom/span nil "}"))
+          :grid (p (dom/span #js {:onClick #(transition {:state :init})} (str "{- " (:width state) " grid ..."))
+                   (dom/input #js {:type "text" :value (:text state)
+                                   :onChange #(handle-change % owner state)})
+                   (dom/span #js {:onClick commit} " commit? ")
+                   (dom/span nil "}"))
           :commit (p (dom/span #js {:onClick #(transition {:state :init})}
                                (str "{- " (:width state) " sample " (:sample state) " ... "))
                      (dom/span #js {:onClick commit} " commit? ")

                                 (transition {:state :init})
                                 (om/update! cursor tracks)
                                 (go (>! set-state-ch id)))
                      :else (print "cannot commit"))]
        (condp = (:state state)
          :init (p (dom/span #js {:onClick #(transition {:state :width})} "{+}"))

                   (dom/div nil 
                            (dom/p #js {:onClick #(om/set-state! owner :grid-expanded true)
                                        :style #js {:color "#999"}}
                                   (str "[+] " id " (" (get cursor "bpc") ")")))
                   (dom/div nil 
                            (dom/p #js {:onClick #(om/set-state! owner :grid-expanded false)
                                        :style #js {:color "#999"}}
                                   (str "[-] " id " (" (get cursor "bpc") " )"))
                            (apply dom/table nil
                                   (let [cursors (map #(hash-map :cursor %1 :id %2)
                                                      (get cursor "tracks")
