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

  (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

    (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]
