      (^void removed [this #^"[Lorg.eclipse.core.runtime.IExtension;" extensions]
        (doseq [^IExtension ex extensions] (trace :support/hover (str "IRegistryEventListener removed extension with id: " (.getLabel ex))))
        (trace :support/hover "Resetting hovers...")
-       (swap! (state-atom) set-state-dirty)
+       (swap! (force state-atom) set-state-dirty)
        (descriptors-update!)
        ;; I need some protection because here i might not have active editor
        (some-> (CCWPlugin/getClojureEditor) reset-default-hover-on-editor!))

                      (println "*** Dirty: " dirty)))))

(defonce ^:private ^{:doc "Atom containing the state."}
  state-atom (memoize (fn [] (atom (->State nil
                                          (WritableList. (ArrayList.) HoverDescriptor)
                                          nil
                                          true)))))

(defn- swap-observable-descriptors
  "Updates the observable-hovers part of the state. Returns new state."

    ;; ensure non nil descriptor arrives here
    (let [state-mask (selected-descriptor :state-mask)]
      (do-if-no-value descriptors state-mask
                      (swap! (force state-atom) swap-hover-instance-in-state state-mask __a_value)
                      ((selected-descriptor :create-hover))))))

(defn hover-instance
