                  children))))
 
 (defn record-trace-tree
-  [[log src-map]]
+  [[log src-map fn-meta]]
   (swap! (:children trace/*trace-log-parent*)
          conj
          (-> @log
-             (log->tree1 src-map)
+             (log->tree1 src-map fn-meta)
              (tree1->trace-tree trace/*trace-log-parent*
                                 src-map))))
 
- #_ (-> (xpand '(let [a 1
+;;TODO trace multi-arity works??
+(defn deep-tracer
+  [{:keys [workspace qual-sym meta' ns']} original-fn] ;; original-fn and workspace not used! IS THAT RIGHT??
+  (let [src (-> qual-sym
+                symbol
+                util/hunt-down-source)
+        xsrc (clojure.walk/macroexpand-all src)
+        get-fn (fn [[d s f & r]] (if (and (= d 'def)
+                                          (symbol? s)
+                                          (-> f nil? not)
+                                          (nil? r))
+                                   (throw (Exception. (format "Expected a defn form, but got this (%s %s ..."
+                                                              d s)))))
+        traced-form  (get-fn (xpand src meta'))]
+    (util/eval-in-ns (-> ns' str symbol)
+                     traced-form)))
+
+ #_ (-> #spy/d (xpand '(let [a 1
                          b 2]
                      (if false
                        a

                            :name (if (seq? form) (first form) form)
                            :form form
                            :path' path
                            :parent-name "outer-func" ;; TODO outer func name
                            :ns nil                   ;;TODO
                            :args []                  ;;TODO
                            :arg-map {}               ;;TODO
                                        ; :src-map src-map

(defn xpand-fn
  [head form path]
  (cons
   (list 'capture-fn path '$$ head)
   (rest form)))

(defn xpand-macro
