code: @Override
  	@SuppressWarnings("unchecked")
  	public ExtendedIterator<T> descendingIterator() {
  		// used to compare items
  		Comparator<? super T> tmpComp = AbstractExtendedSet.this.comparator();
  		if (tmpComp == null)
  			tmpComp = new Comparator<T>() {
  				@Override
  				public int compare(T o1, T o2) {
  					return ((Comparable) o1).compareTo(o2);
  				}
  			};
  		final Comparator<? super T> comp = tmpComp;
  			
  		return new ExtendedIterator<T>() {
  			// iterator from last element
  			private final ListIterator<T> itr = new ArrayList<T>(AbstractExtendedSet.this)
  					.listIterator(AbstractExtendedSet.this.size());
  			
  			@Override
  			public boolean hasNext() {
  				return itr.hasPrevious();
  			}
  
  			@Override
  			public T next() {
  				return itr.previous();
  			}
  			
  			@Override
  			public void skipAllBefore(T element) {
  				// iterate until the element is found
  				while (itr.hasPrevious()) {
  					int res = comp.compare(itr.previous(), element);
  					
  					// the element has not been found, thus the next call to
  					// itr.previous() will provide the right value
  					if (res < 0)
  						return;
  
  					// the element has been found. Hence, we have to get back
  					// to make itr.previous() provide the right value
  					if (res == 0) {
  						itr.next();
  						return;
  					}
  				}
  			}
  
  			@Override
  			public void remove() {
  				throw new UnsupportedOperationException();
  			}
  		};
  	}
docs: {@inheritDoc}