@Override
    public synchronized void fire(Event event) {
        for (EventListener<? extends Event> listener : listeners) {
            if (listener.canHandle(event)) {
                listener.handleGeneric(event);
            }
        }
    }