             (close-window (@settings-window :frame))
             (.setVisible frame false)))))
     (persist-window-shape prefs "browser-shape" frame)
+    (add-watch current-data "updater" (fn [_ _ old new]
+                                        (when (not= old new)
+                                          (awt-event (update-browser-table)))))
     (gen-map frame table scroll-pane settings-button search-field
              collection-menu refresh-button)))
 

  (awt-event (update-browser-status)))

(defn find-data-sets [root-dir]
  (map #(.getParent %)
    (->> (File. root-dir)
      file-seq
      (filter #(= (.getName %) "metadata.txt")))))

(defn get-frame-index [file-name]
  (try (Integer/parseInt (second (.split file-name "_")))

        selected-paths (set (map row-index-to-path selected-rows))]
    (.. table getModel fireTableDataChanged)
    (doseq [selected-row selected-rows]
      (.addRowSelectionInterval table selected-row selected-row))))

(defn add-data [new-row]
  (let [row-vec (vec new-row)
        location (row-vec (.indexOf tags "Location"))]
    (dosync
      (if (or (contains? @current-locations location) (= location ""))
        (alter current-data refresh-row row-vec)))))
    
(defn remove-location [loc]
  (dosync
