       :reference-z z
       :start-time (jvm-time-ms)
       :init-auto-shutter (core getAutoShutter)
-      :init-exposure (core getExposure)
+      :init-exposure exposure
+      :exposures {(core getCameraDevice) exposure}
       :default-z-drive default-z-drive
       :default-xy-stage default-xy-stage
       :init-z-position z

            #(set-property [d p v]))
          #(when-lets [exposure (:exposure event)
                       camera (core getCameraDevice)]
             (device-best-effort camera (core setExposure exposure)))
          #(when check-z-ref
             (recall-z-reference current-position))
          #(when-let [wait-time-ms (:wait-time-ms event)]


;; hardware control

(defn set-exposure [camera exp]
  (when (not= exp (get-in @state [camera :exposures]))
    (device-best-effort (core setExposure exp))
    (swap! state assoc-in [camera :exposures] exp)))

(defn wait-for-device [dev]
  (when-not (empty? dev)
    (try
