code: public void post(final Object event) {
  		Set<Class> eventTypes = flattenHierarchy(event.getClass());
  		boolean handled = false;
  		for (Class c : eventTypes) {
  			for (EventHandler h : this.handlersByEventType.get(c)) {
  				try {
  					h.handle(event);
  					handled = true;
  				} catch (EventException e) {
  					if (event instanceof EventException) continue;
  					this.post(e); // If an exception is thrown, post the exception as an event, so that exception-handlers can deal with it
  				}
  			}
  		}
  		if (!handled && !(event instanceof DeadEvent)) {
  			this.post(new DeadEvent(event));
  		}
  	}
docs: Posts an event to all event-handlers registered to handle it.
  If a event is not handled, it will be resent as a {@link DeadEvent}.
  If an exception is thrown in the handler, the exception will be post as an {@link EventException}.
  If handling that EventException more are thrown, they will be ignored.
  
  @param event The event to post