code: @Override
  	public void fireEvent(GwtEvent<?> event) {
  		// If it not live we should revive it.
  		if (!event.isLive()) {
  			event.revive();
  		}
  		Object oldSource = event.getSource();
  		event.overrideSource(this.source);
  		try {
  
  			// May throw an UmbrellaException.
  			this.eventBus.fireEvent(event);
  		} catch (com.google.web.bindery.event.shared.UmbrellaException e) {
  			throw new UmbrellaException(e.getCauses());
  		} finally {
  			if (oldSource == null) {
  				// This was my event, so I should kill it now that I'm done.
  				event.kill();
  			} else {
  				// Restoring the source for the next handler to use.
  				event.overrideSource(oldSource);
  			}
  		}
  	}
docs: Fires the given event to the handlers listening to the event's type.
  <p>
  Any exceptions thrown by handlers will be bundled into a {@link UmbrellaException} and then
  re-thrown after all handlers have completed. An exception thrown by a handler will not prevent
  other handlers from executing.
  <p>
  Note, any subclass should be very careful about overriding this method, as adds/removes of
  handlers will not be safe except within this implementation.
  
  @param event the event