     )))
 
 (defn coerce-structure-path-direct [this]
-  (let [pimpl (find-protocol-impl! StructurePath this)
+  (let [pimpl (structure-path-impl this)
         selector (:select* pimpl)
         updater (:update* pimpl)]
     (->TransformFunctions


  Object
  (coerce-path [this]
    (cond (obj-extends? StructurePath this) (coerce-structure-path this)
          (obj-extends? Collector this) (coerce-collector this)
          (obj-extends? StructureValsPath this) (coerce-structure-vals-path this)
          :else (throw-illegal (no-prot-error-str this))

              )]
    (->TransformFunctions StructureValsPathExecutor afn afn)))


(defn structure-path-impl [this]
  (if (fn? this) 
    (-> StructurePath :impls (get clojure.lang.AFn))
    (find-protocol-impl! StructurePath this)))

(defn coerce-structure-path [this]
  (let [pimpl (structure-path-impl this)
        selector (:select* pimpl)
        updater (:update* pimpl)]
    (->TransformFunctions
