   ([element state]
     (let [cur-state (get-data-state element)
           state (name state)]
-      (when-not (= cur-state state)
+      (when-not (identical? cur-state state)
         (do-set-data-state! element state)
         (let [leave-transition (get-transition element (keyword (str "after-" cur-state)))]
           (if leave-transition

        [_ tag id class] (re-matches re-tag (name kw))
        node (if tag-ns
               (let [resolved-ns
                     (if (= tag-ns "svg")
                       "http://www.w3.org/2000/svg"
                       (get-xml-namespace tag-ns))]
                 (.createElementNS js/document resolved-ns tag))

(defn bind-attr! [element attr-name attr-value node-state]
  (let [attr-name (name attr-name)]
    (cond
      (identical? "style" attr-name)
      (do
        (assert (map? attr-value))
        (doseq [[p v] attr-value]
          (bind-style-prop! element p v node-state)))

      (identical? "data-state" attr-name)
      (bind-prop-attr! set-data-state! element attr-name attr-value node-state)

      (identical? 0 (.indexOf attr-name "on-"))
      (listen! element (.substring attr-name 3) attr-value)

      :default
