public int read()
	throws IOException {
	
	if( this.isClosed() )
	    throw new IOException( "Cannot read from a closed stream." );
	
	// No stop marks given?
	if( this.emptyStopMarkSet() )
	    return this.in.read();

	if( this.eoiReached() )
	    return -1;
	
	if( this.stopMarkReached() )
	    return -1;

	// First call?
	if( this.currentStreams[0] == null )
	    initStreamStack();

	// Try to read next byte
	int b = this.currentStreams[0].read();
	if( b == -1 ) {
	    // Find the stream that reached the stop mark
	    this.stopMarkReachedIndex = this.locateReachedStopMarkIndex();
	    
	    if( this.stopMarkReachedIndex == -1 ) {
		// EOI reached!
		this.eoiReached = true;
	    } 
	}

	return b;
    }