                       (println "*** Dirty: " dirty)))))
 
 (defonce ^:private ^{:doc "Atom containing the state."}
-  state-atom (memoize (fn [] (atom (->State nil
-                                          (WritableList. (ArrayList.) HoverDescriptor)
-                                          nil
-                                          true)))))
+  state-atom (delay (atom (->State nil
+                                   (WritableList. (ArrayList.) HoverDescriptor)
+                                   nil
+                                   true))))
 
 (defn- swap-observable-descriptors
   "Updates the observable-hovers part of the state. Returns new state."

(def ^:private contributed-descriptors
  "Var containing a function returning the contributed descriptors in
  the state."
  #(:contributed-descriptors @(state-atom)))

(def ^:private observable-descriptors
  "Var containing a function returning the state observable descriptors
  in the state, for the Eclipse data binding framework."
  #(:observable-descriptors @(state-atom)))

(defn- state-dirty?
  [state]

     (^void added [this #^"[Lorg.eclipse.core.runtime.IExtensionPoint;" extension-points]
       (doseq [^IExtensionPoint ep extension-points] (trace :support/hover (str "IRegistryEventListener added extension point with id: " (.getLabel ep))))
       (trace :support/hover "Resetting hovers...")
       (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!))
