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;
Index: /libmpc/branches/r2d/mpc2sv8/mpc2sv8.c
===================================================================
--- /libmpc/branches/r2d/mpc2sv8/mpc2sv8.c	(revision 205)
+++ /libmpc/branches/r2d/mpc2sv8/mpc2sv8.c	(revision 206)
@@ -57,5 +57,5 @@
 		mpc_int32_t * q_d = d->Q[i].L, * q_e = e->Q[i].L, Res = d->Res_L[i];
 
-		if (Res != 0)
+		if (Res > 0)
 			for( j = 0; j < 36; j++)
 				q_e[j] = q_d[j] + offset[Res];
@@ -63,5 +63,5 @@
 		q_d = d->Q[i].R, q_e = e->Q[i].R, Res = d->Res_R[i];
 
-		if (Res != 0)
+		if (Res > 0)
 			for( j = 0; j < 36; j++)
 				q_e[j] = q_d[j] + offset[Res];
@@ -137,5 +137,4 @@
 
 		demux->d->samples_to_skip = MPC_FRAME_LENGTH + MPC_DECODER_SYNTH_DELAY;
-		frame.buffer = 0;
 		mpc_demux_decode(demux, &frame);
 
