Index: libmpc/branches/r2d/libmpcdec/internal.h
===================================================================
--- libmpc/branches/r2d/libmpcdec/internal.h	(revision 205)
+++ libmpc/branches/r2d/libmpcdec/internal.h	(revision 206)
@@ -74,6 +74,6 @@
 	mpc_size_t bytes_total;
 	mpc_bits_reader bits_reader;
-	mpc_uint32_t block_bits; /// bits remaining in current audio block
-	mpc_bool_t end; /// end of stream flag
+	mpc_int32_t block_bits; /// bits remaining in current audio block
+	mpc_uint_t block_frames; /// frames remaining in current audio block
 
 	// seeking
Index: libmpc/branches/r2d/libmpcdec/mpc_demux.c
===================================================================
--- libmpc/branches/r2d/libmpcdec/mpc_demux.c	(revision 205)
+++ libmpc/branches/r2d/libmpcdec/mpc_demux.c	(revision 206)
@@ -66,5 +66,5 @@
 	d->bits_reader.count = 8;
 	d->block_bits = 0;
-	d->end = MPC_FALSE;
+	d->block_frames = 0;
 }
 
@@ -361,5 +361,6 @@
 		mpc_bits_reader r;
 		i->is_key_frame = MPC_FALSE;
-		if (d->block_bits < 8 && d->end == MPC_FALSE) {
+
+		if (d->block_frames == 0) {
 			mpc_block b = {{0,0},0};
 			d->bits_reader.count &= -8;
@@ -372,6 +373,6 @@
 			while( memcmp(b.key, "AD", 2) != 0 ) { // scan all blocks until audio
 				if (memcmp(b.key, "SE", 2) == 0) { // end block
-					d->end = MPC_TRUE;
-					break;
+					i->bits = -1;
+					return;
 				}
 				mpc_demux_fill(d, 11 + (mpc_uint32_t) b.size, 0);
@@ -380,4 +381,5 @@
 			}
 			d->block_bits = (mpc_uint32_t) b.size * 8;
+			d->block_frames = 1 << d->si.block_pwr;
 			i->is_key_frame = MPC_TRUE;
 		}
@@ -387,4 +389,6 @@
 		mpc_decoder_decode_frame(d->d, &d->bits_reader, i);
 		d->block_bits -= ((d->bits_reader.buff - r.buff) << 3) + r.count - d->bits_reader.count;
+		d->block_frames--;
+		if (d->block_bits < 0) i->bits = -1;
 	} else {
 		mpc_bits_reader r;
