public boolean equals(Object obj)
	{
		if(obj == this) return true;
		
		// empty list is equal to no description (both best effort)
		if(obj == null) return isBestEffort();
		
		if(obj instanceof Description) {			
			Description descr = (Description) obj;
			Iterator<Property> tIterator = iterator();
			Iterator<Property> tNewIterator = descr.iterator();
			
			while(tIterator.hasNext() && tNewIterator.hasNext()) {
				Property tReq    = tIterator.next();
				Property tNewReq = tNewIterator.next();
				
				if(tReq != null) {
					if(!tReq.equals(tNewReq)) {
						return false;
					}
				}
			}
			
			// both lists ended?
			if(tIterator.hasNext() || tNewIterator.hasNext()) {
				return false;
			}
			
			return true;
		} else {
			// not a description object
			return false;
		}
	}