           (rf/dispatch [:re-form/input-removed form-name path]))
 
         update-binding
-        (fn [{new-form :form-name new-path :path validators :validators}]
-          (swap! state (fn [{val :value err :errors path :path form :form-name :as curr-state}]
-                         (if (not (and (= new-path path) (= new-form form)))
+        (fn [{new-soft-key :soft-key new-form :form-name new-path :path validators :validators :as new-state}]
+          (swap! state (fn [{soft-key :soft-key val :value err :errors path :path form :form-name :as curr-state}]
+                         (if (or (not= soft-key new-soft-key) (not= path new-path) (not= form new-form))
                            (do
                              (when (and form path)
                                (unbind-input form path))

        (update-binding (second new-props)))

      :reagent-render
      (fn [{:keys [on-change form-name path on-blur error-paths] :as props}]
        (let [flags @(rf/subscribe [:re-form/input-flags form-name path])
              is-form-submitting @(rf/subscribe [:re-form/is-form-submitting form-name])
              errors @(rf/subscribe [:re-form/input-errors form-name (into [path] error-paths)])]
          [:div.re-form-field {:class (->> flags
                                           (filter second)
                                           (map #(name (first %)))
                                           (str/join " "))}
           [(:input props)
            (merge (dissoc props :form-name :path :input :validators)
                   {:value @(:value @state)

                               ;; future validations
                               (add-watch new-val-subscr :binded-field run-validators)

                               {:soft-key new-soft-key
                                :form-name new-form
                                :path new-path
                                :value new-val-subscr
                                :validators validators}))
