                :width width
                :height height
                :x-array x-array
-               :y-arrays (atom [y-a y-b])}
+               :y-arrays (atom [y-a y-b])
+               :update? (atom true)
+               :frames (atom [])}
 
         _ (reset-data-arrays scope)]
     (.addWindowListener frame

                                                        (ref-set scope-group* (group :tail ROOT-GROUP))
                                                        (satisfy-deps :scope-group-created)))

(defn- update-scope-data [s]
  (let [{:keys [buf size width height panel y-arrays x-array panel]} s
        frames    (buffer-data buf)
        step      (int (/ (buffer-size buf) width))
        y-scale   (- height (* 2 Y-PADDING))
        [y-a y-b] @y-arrays]

                      (aget ^floats frames (unchecked-multiply x step)))))))

    (reset! y-arrays [y-b y-a])
    (.repaint panel)

    (when (and (not (:bus-synth s))
               @(:update? s))
      (reset! (:frames s) frames)
      (reset! (:update? s) false))))

(defn- update-scopes []
  (dorun (map update-scope-data (vals @scopes*))))

(defn- paint-scope [^Graphics g id]
  (if-let [scope (get @scopes* id)]
