public void set(E o) {
			if (lastReturned == head) {
				throw new IllegalStateException();
			}
			checkForComodification();
			
			if(o.getDoublyLinkedListFinger().getFinger(DoublyLinkedList.this) != null) {
				throw new IllegalStateException("Cannot replace the current entry with an entry that is already in the list. This exception occured while iterating over the list.");
			}
			DoublyLinkedListEntry.Finger f = o.getDoublyLinkedListFinger().getNewFinger(DoublyLinkedList.this, o);
			f.next = lastReturned.next;
			f.previous = lastReturned.previous;
			if(lastReturned.next != null) {
				lastReturned.next.previous = f;
			}
			lastReturned.previous.next = f; // there's always a previous
			// release the finger of the old entry
			lastReturned.object.getDoublyLinkedListFinger().releaseFinger(lastReturned, keepFinger);
			if(lastReturned == next) { // restore the pointers
				lastReturned = next = f;
			} else {
				lastReturned = f;
			}
		}