     (alter sync-event-handlers* dissoc event-type))
   nil)
 
+(defn- run-handler-with-known-arity [[f arity] & args]
+  (try
+    (apply f (take arity args))
+    (catch Exception e
+      (log/debug "Handler Exception - got args:" args"\n"
+                 (with-out-str (.printStackTrace e))))))
+
 (defn- handle-event
   "Runs the event handlers for the given event, and removes any handler that returns :done."
   [handlers* event]

  (log/debug "adding-handler for " event-type)
  (dosync
    (let [handlers (get @handler-ref* event-type {})]
      (alter handler-ref* assoc event-type (assoc handlers key handler))
      true)))

(defn on-event

        _ (log/debug "handlers: " handlers)
        drop-keys (doall (map first
                              (filter (fn [[k handler]]
                                        (= :done (run-handler-with-known-arity handler event)))
                                      handlers)))]
    (dosync
      (alter handlers* assoc event-type
