   `(fn [s#]
      (binding [service (renew-session s#)]
        (try 
-         (deliver ~p ~body) service) 
-       (catch Throwable e# (deliver ~p e#) service))))
+         (deliver ~p ~body) 
+         (catch ExceptionInfo e# 
+           (deliver ~p (.getData e#)))
+         (catch Throwable e# 
+           (deliver ~p e#)))
+       service 
+       )))
 
 (def robin (atom 0N))
 

    [celestial.model :refer [hypervisor]]
    [slingshot.slingshot :refer  [throw+ try+]]
    [clojure.core.strint :refer  (<<)]
    [celestial.common :refer (import-logging)])
  (:import 
    java.net.URL

     (trace "using session " (hash a#) " robin is " @robin)
     (send a# (execute ~body p#)) 
     (let [res# @p#]
       (cond
         (and (map? res#) (res# :object)) (throw (ExceptionInfo. "" (dissoc-in* res# [:object :environment])))
         (instance? Throwable res#) (throw res#)
         :else res#
         ))))

(defn navigator 
  ([] (navigator (.getRootFolder service)))
