 
   ISonarDispose
   (-dispose [_this]
-    (destroy-sonar source))
+    (destroy-sonar! source))
 
   ISonarFilter
   (-handle-change [_this _sender oldval newval]

  IHash
  (-hash [this] (goog/getUid this))

  ISonarGet
  (-get [_this path]
    (binding [ratom/*ratom-context* nil]

    sonar))

(defn get-or-create-sonar! [source]
  {:post [(satisfies? ISonar %)]}
  (or (get sonars source) (create-sonar! source)))

(defn destroy-sonar! [source]
  {:pre [(get sonars source)]}
  (log "destroyed " (get sonars source))
  (set! sonars (dissoc sonars source)))