   (-reset! [this new-value]
     (let [oldstate state]
       (._set-state this oldstate new-value)
-      (setter path new-value)
+      (if (satisfies? IDeref ratom)
+        (if (= path [])
+          (reset! ratom new-value)
+          (swap! ratom assoc-in path new-value))
+        (ratom path new-value))
       new-value))
 
   ISwap

                   (not (vector? src))))
          (str "src must be a reactive atom or a function, not "
               (pr-str src)))
  (let [s (if (satisfies? IDeref src)
            (if (= path [])
              #(reset! src %2)
              #(swap! src assoc-in path %2))
            #(src path %2))]
    (RCursor. src path s nil nil nil)))




                     (let [f (if (satisfies? IDeref ratom)
                               #(get-in @ratom path)
                               #(ratom path))]
                       (cached-reaction f [::cursor ratom path] this)))]
      (._set-state this oldstate newstate)
      newstate))

