code: public synchronized boolean unregisterListener(final Object pHandler) {
  
  		boolean found = false;
  
  		final List<Integer> toRemove = new ArrayList<Integer>();
  
  		for (final List<ReceiverDescriptor> listenerList : this.receiverMap.values()) {
  
  			toRemove.clear();
  
  			for (int index = 0; index < listenerList.size(); index++) {
  
  				final ReceiverDescriptor receiverDescriptor = listenerList.get(index);
  				final boolean isNull = receiverDescriptor.receiverReference == null
  						|| receiverDescriptor.receiverReference.get() == null;
  
  				if (isNull) {
  					// nope
  					continue;
  				}
  
  				if (receiverDescriptor.receiverReference.get() == pHandler) {
  					toRemove.add(index);
  				}
  			}
  
  			if (toRemove.size() > 0) {
  				found = true;
  			}
  
  			// reverse order (we want remove from higher to lower index)
  			Collections.reverse(toRemove);
  
  			for (final Integer indexToRemove : toRemove) {
  				listenerList.remove(indexToRemove.intValue());
  			}
  		}
  
  		return found;
  	}
docs: Unregisters a handler from all events it has been registered in this
  event scope. <strong>Caution!</strong>
  <p>
  this is an expensive operation! Since we have no idea where to search, we
  must scan all listeners registered to this scope. Only remove listeners
  explicitely if design demands! Avoid creating designs that incorporate
  explicit untyped unregistering! Remember that listeners are stored as
  soft reference anyway, getting garbage collected if there is a demand for
  memory.
  </p>
  
  @param pHandler
  The handler to be unregistered from this EventScope.
  @return <code>true</code> if the handler has been found and unregistered.