    be returned."
   [ & body]
   `(let [waiting# (promise)]
-     (do
-       (dosync (deliver waiting# (do ~@body)))
-       (deref waiting#))))
+     (dosync (deliver waiting# (do ~@body)))
+     (deref waiting#)))
 
 (defmacro do-map-tree
   "Returns a function that maps a named list tree using the given functions

   with the widget as first parameter and the given additional parameters"
  [map key & parameters]
  `(((~map :handler) ~key) ~map ~@parameters))

(defmacro map!
  "Just like map, but not lazy."
  [f & colls]
   `(seq (map ~f ~@colls)))


;;;

  [ & body ]
  `(fn [x#] (~@body x#)))

(defn *comp
  "Takes some functions and returns the covariant function composition
    of them"
  [& fns]
  (apply comp (reverse fns)))

(defmacro dosync-wait
  "Returns a dosync block that will block until the operation
