     (init-state [_]
       {:elapsed-hours 0})
     IRenderState
-    (render-state [_ {x :x y :y r :r hr :elapsed-hours}]
-      (pie x y (/ r 1.4) "#cccccc" (* 30 10 hr)))))
+    (render-state [owner {hr :elapsed-hours}]
+      (let [{x :x y :y r :r} (:dimensions data)]
+        (pie x y (/ r 1.4) "#cccccc" (* 30 10 hr))))))
 
 (defn timer-seconds [data owner]
   (reify
+    IDisplayName
+    (display-name [_]
+      "Seconds on the timer")
     IWillMount
     (will-mount [_]
       (go-loop []

    IWillMount
    (will-mount [_]
      (go-loop []
        (let [start (om/get-state owner :start)
              interval-seconds (/ (time/in-millis (time/interval start (time/now))) 1000)]
          (om/update-state! owner :elapsed-minutes #(mod (/ interval-seconds 60) 60))
          (om/update-state! owner :elapsed-hours #(mod (/ interval-seconds 60 60) 24)))
        (<! (async/timeout 1000))
        (recur)))
    IRenderState
    (render-state [_ {x :x y :y sec :elapsed-seconds min :elapsed-minutes hr :elapsed-hours}]
      (let [min-only (= 0 (int hr))]
        (dom/text #js {:x (if min-only
                            (- x 50)
                            (- x 130))

    IDisplayName
    (display-name [_]
      "The timer")
    IRender
    (render [_]
      (let [cursors (select-keys data [:dimensions :timer])
            {w :width h :height x :x y :y r :r} (:dimensions cursors)]
        (dom/svg #js {:width w
                      :height h}
                 (circle x y (+ r 20) "green")
                 (circle x y r "white")
                 (om/build timer-minutes cursors)
                 (om/build timer-hours cursors)
                 (om/build timer-seconds cursors)
                 (om/build timer-text cursors))))))

(defn menu-view [data owner]
  (reify
