            (button-state (:shift control-buttons)
                          (if @(:shift-mode controller) :bright :dim)))
     
+    ;; Add any contributions from interface overlays, removing them
+    ;; if they report being finished.
+    (doseq [[k overlay] (reverse @(:overlays controller))]
+      (when-not (adjust-interface overlay controller)
+        (swap! (:overlays controller) dissoc k)))
+
     (update-text controller)
+    (update-top-pads controller)
     (update-text-buttons controller)
+
     (catch Throwable t
       (warn t "Problem updating Ableton Push Interface"))))
 

         :next-display (vec (for [_ (range 4)] (byte-array (take 68 (repeat 32)))))
         :last-text-buttons (atom {})
         :next-text-buttons (atom {})
         :metronome-mode (atom {:showing true})
         :shift-mode (atom false)
         :midi-handler (atom nil)
         :tap-tempo-handler (amidi/create-tempo-tap-handler (:metronome show))
         }]
    (reset! (:midi-handler controller) (partial midi-received controller))
    (clear-interface controller)
    (welcome-animation controller)

                 (button-state button state color-key))]
     (midi/midi-control (:port-out controller) (:control button) state))))

(defn top-pad-state
  "Calculate the numeric value that corresponds to a particular
  named state for the specified top-row pad, and (if supplied),
  named color."
  ([state]
   (top-pad-state state :amber))
  ([state color-key]
   (let [base-value ((keyword state) monochrome-button-states)
         color-shift (or (when-not (= state :off)
                           ((keyword color-key) color-button-colors))
                         0)]
     (+ base-value color-shift))))

(defn set-top-pad-state
  "Set one of the top-row pads to a particular state and color.
  If state is already a number, it is used as-is, otherwise it is
  calculated using top-pad-state."
  ([controller x state]
   (set-top-pad-state controller x state :amber))
  ([controller x state color-key]
   {:pre [(<= 0 x 7)]}
   (let [state (if (number? state)
                 state
                 (top-pad-state state color-key))]
     (midi/midi-control (:port-out controller) (+ x 20) state))))

(defn set-second-pad-color
  "Set the color of one of the 8 second-row touch pads (right above
  the 8x8 pad of larger, velocity sensitive, pads) to the closest
  approximation available for a desired color."
  [controller x color]
