         (if (nil? f)
           (not (and (identical? ostate nextstate)
                     (tmpl/equal-args a1 a2)))
-          (f a1 a2 ostate nextstate))))
+          ;; Call f with oldprops, newprops, oldstate, newstate
+          (f (props-in-args a1) (props-in-args a2)
+             ostate nextstate))))
 
     :componentWillUnmount
     (fn [C]

    (if (or (nil? p) (map? p)) 2 1)))

(defn- cljs-props [C]
  (-> (args-of C) props-in-args))

(defn- get-children [C]
  (let [args (args-of C)

(when-not -ToExtend
  (.log js/console "this should never happen to " -ToExtend))

;;; Accessors

;; We store the "args" (i.e a vector like [comp props child1])
;; in .-cljsArgs, with optional args, which makes access a bit
;; tricky. The upside is that we don't have to do any allocations.

(defn- args-of [C]
  (-> C .-props .-cljsArgs))
