Index: /libmpc/trunk/libmpcdec/mpc_decoder.c
===================================================================
--- /libmpc/trunk/libmpcdec/mpc_decoder.c	(revision 300)
+++ /libmpc/trunk/libmpcdec/mpc_decoder.c	(revision 301)
@@ -169,9 +169,11 @@
 
     // reconstruct exact filelength
-	if (d->decoded_samples == d->samples && d->stream_version == 7) {
+	if (d->decoded_samples - d->samples < MPC_FRAME_LENGTH && d->stream_version == 7) {
 		int last_frame_samples = mpc_bits_read(r, 11);
-		if (last_frame_samples == 0) last_frame_samples = MPC_FRAME_LENGTH;
-		d->samples += last_frame_samples - MPC_FRAME_LENGTH;
-		samples_left += last_frame_samples - MPC_FRAME_LENGTH;
+		if (d->decoded_samples == d->samples) {
+			if (last_frame_samples == 0) last_frame_samples = MPC_FRAME_LENGTH;
+			d->samples += last_frame_samples - MPC_FRAME_LENGTH;
+			samples_left += last_frame_samples - MPC_FRAME_LENGTH;
+		}
 	}
 
Index: /libmpc/trunk/libmpcdec/mpc_demux.c
===================================================================
--- /libmpc/trunk/libmpcdec/mpc_demux.c	(revision 300)
+++ /libmpc/trunk/libmpcdec/mpc_demux.c	(revision 301)
@@ -409,5 +409,5 @@
 		mpc_demux_fill(d, MAX_FRAME_SIZE, MPC_BUFFER_FULL | MPC_BUFFER_SWAP);
 		d->block_bits = (mpc_int_t) mpc_bits_read(&d->bits_reader, 20); // read frame size
-		if (d->d->decoded_samples + MPC_FRAME_LENGTH == d->d->samples) d->block_bits += 11; // we will read last frame size
+		if (MPC_FRAME_LENGTH > d->d->samples - d->d->decoded_samples - 1) d->block_bits += 11; // we will read last frame size
 		r = d->bits_reader;
 		mpc_decoder_decode_frame(d->d, &d->bits_reader, i);
