docs: public synchronized <T extends EventListener> void remove(Class<T> type, T listener) {
  		assert listener != null;
  		// Is l on the list?
  		int index = -1;
  		for (int i = this.listeners.length - 2; i >= 0; i -= 2) {
  			if ((this.listeners[i] == type) && (this.listeners[i + 1].equals(listener))) {
  				index = i;
  				break;
  			}
  		}
  
  		// If so,  remove it
  		if (index != -1) {
  			final Object[] tmp = new Object[this.listeners.length - 2];
  			// Copy the list up to index
  			System.arraycopy(this.listeners, 0, tmp, 0, index);
  			// Copy from two past the index, up to
  			// the end of tmp (which is two elements
  			// shorter than the old list)
  			if (index < tmp.length) {
  				System.arraycopy(this.listeners, index + 2, tmp, index,
  						tmp.length - index);
  			}
  			// set the listener array to the new array or null
  			this.listeners = (tmp.length == 0) ? NULL : tmp;
  		}
  	}