             (apply dom/tr #js {:className (border-top y)}
               (vec (for [x board-length]
                 (om/build tile-view app
-                  {:state {:selected-unit (om/get-state owner :selected-unit) :move move :coords {:x x :y y}}})))))))
+                  {:state {:selected-unit (om/get-state owner :selected-unit) :actions actions :coords {:x x :y y}}})))))))
         (bench)))))
 
 (om/root board-view app-state

  (reify
    om/IInitState
    (init-state [_]
      {:move (chan)
       :selected-unit nil})

    om/IWillMount
    (will-mount [_]
     (let [move (om/get-state owner :move)]
       (go (loop []
          (let [selected (:coords (<! move))]
            (om/set-state! owner :selected-unit (first (filter #(= selected (:coords %)) ((:turn @app) (:cells @app)))))
            (let [target (:coords (<! move))]
            (if (or
                 (unit? (:turn @app) target)
                 (not (in-range? target selected)))
              (om/set-state! owner :selected-unit nil)
               (om/transact!
               app
               [:cells (:turn @app)]
               (fn [units]
                  (map
                   #(if (= (om/get-state owner :selected-unit) %)

(defn tile-view [cursor owner]
  (reify
    om/IRenderState
    (render-state [this {:keys [coords actions] :as unit}]
      (dom/td #js {:onClick #(put! actions unit)}
        (if-let [ball (unit? :balls coords)]
          (dom/div #js {:className "ball"}))
        (if-let [red-player (unit? :red-team coords)]
