code: @Override
  	public Iterator<C> iterator() {
  		final List<Sequence<C>> localSequences = sequences;
  		return new Iterator<C>() {
  
  			private Iterator<C> currentSequenceIterator = null;
  			private int currentPosition = 0;
  
  
  			@Override
  			public boolean hasNext() {
  				//If the current iterator is null then see if the Sequences object has anything
  				if (currentSequenceIterator == null) {
  					return !localSequences.isEmpty();
  				}
  
  				//See if we had any compounds
  				boolean hasNext = currentSequenceIterator.hasNext();
  				if (!hasNext) {
  					hasNext = currentPosition < sequences.size();
  				}
  				return hasNext;
  			}
  
  
  			@Override
  			public C next() {
  				if (currentSequenceIterator == null) {
  					if (localSequences.isEmpty()) {
  						throw new NoSuchElementException("No sequences to iterate over; make sure you call hasNext() before next()");
  					}
  					currentSequenceIterator = localSequences.get(currentPosition).iterator();
  					currentPosition++;
  				}
  				if (!currentSequenceIterator.hasNext()) {
  					currentSequenceIterator = localSequences.get(currentPosition).iterator();
  					currentPosition++;
  				}
  				return currentSequenceIterator.next();
  			}
  
  
  			@Override
  			public void remove() throws UnsupportedOperationException {
  				throw new UnsupportedOperationException("Cannot remove from this Sequence");
  			}
  		};
  	}
docs: Iterator implementation which attempts to move through the 2D structure
  attempting to skip onto the next sequence as & when it is asked to