docs: 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;
  	}