@Override
	protected void doStop() {
		for (Event event : this.events1) {
			event.release();
		}
		this.events1.clear();

		for (Event event : this.events2) {
			event.release();
		}
		this.events2.clear();
		
		int numListeners = 0;
		for (Bag<EventListener> listeners : this.listenerMap.values()) {
			numListeners += listeners.size();
		}
		
		if (numListeners != 0) {
			this.logger.logWarning(LOGGING_SOURCE, "num of listeners = " + numListeners);
		}
		if (numListeners > 0) {
			for (Bag<EventListener> listeners : this.listenerMap.values()) {
				for (listeners.reset(); listeners.hasNext();) {
					this.logger.logDebug(LOGGING_SOURCE, "listener " + listeners.next().getClass().getName() + " was not removed");					
				}
			}
		}
		
		this.listenerMap.clear();
		this.logger = null;
		super.doStop();
	}