   (concat
     (when-let [z-drive (:z-drive event)]
       (when-let [z (:z event)]
-        (list [z-drive #(set-stage-position z-drive z)])))
+        (when (and z (not= z (@state :last-z-position)))
+          (list [z-drive #(set-stage-position z-drive z)]))))
     (for [[axis pos] (get-in event [:position :axes])]
       [axis #(apply set-stage-position axis pos)])
     (for [prop (get-in event [:channel :properties])]


(defn run-pipeline [settings acq-eng]
  (create-device-agents)
	(let [out-queue (GentleLinkedBlockingQueue.)]
		(.start (Thread. #(run-acquisition (set-to-absolute-slices (convert-settings settings)) out-queue)))
		(.start (LiveAcqDisplay. mmc out-queue settings (.channels settings) (.save settings) acq-eng))))


  (if close-after
    (. mmc setShutterOpen false))
    (. mmc waitForDevice (. mmc getShutterDevice))
  (. mmc setAutoShutter (@state :init-auto-shutter)))

(defn init-burst [length]
  (. mmc setAutoShutter (@state :init-auto-shutter))
  (. mmc startSequenceAcquisition length 0 false))

(defn expose [event]
