@SuppressWarnings("unchecked")
	private T advance()
	{
		boolean advance_left = true, advance_right = true;
		Comparable<T> lnext = null, rnext = null;
		while (true)				
		{
			if (advance_left)
				if (!left.hasNext())
					return null;
				else
					lnext = (Comparable<T>)left.next();
			if (advance_right)
				if (!right.hasNext())
					return null;
				else
					rnext = (Comparable<T>)right.next();
			int comp = lnext.compareTo((T)rnext);
			if (comp == 0)
				return (T)lnext;
			else if (comp < 0) // lnext < rnext
			{
				advance_left = true;
				advance_right = false;
			}
			else
			{
				advance_left = false;
				advance_right = true;
			}				
		}
	}