Index: /libmpc/trunk/libmpcdec/mpc_demux.c
===================================================================
--- /libmpc/trunk/libmpcdec/mpc_demux.c	(revision 336)
+++ /libmpc/trunk/libmpcdec/mpc_demux.c	(revision 337)
@@ -70,4 +70,5 @@
 	mpc_uint32_t unread_bytes = d->bytes_total + d->buffer - d->bits_reader.buff
 			- ((8 - d->bits_reader.count) >> 3);
+	int offset = 0;
 
 	if (min_bytes == 0 || min_bytes > DEMUX_BUFFER_SIZE ||
@@ -79,6 +80,9 @@
 		mpc_uint32_t bytes_free = DEMUX_BUFFER_SIZE - d->bytes_total;
 
-		if (flags & MPC_BUFFER_SWAP)
+		if (flags & MPC_BUFFER_SWAP) {
 			bytes2read &= -1 << 2;
+			offset = (unread_bytes + 3) & ( -1 << 2);
+			offset -= unread_bytes;
+		}
 
 		if (bytes2read > bytes_free) {
@@ -87,7 +91,7 @@
 				d->bits_reader.buff++;
 			}
-			memmove(d->buffer, d->bits_reader.buff, unread_bytes);
-			d->bits_reader.buff = d->buffer;
-			d->bytes_total = unread_bytes;
+			memmove(d->buffer + offset, d->bits_reader.buff, unread_bytes);
+			d->bits_reader.buff = d->buffer + offset;
+			d->bytes_total = unread_bytes + offset;
 		}
 		bytes2read = d->r->read(d->r, d->buffer + d->bytes_total, bytes2read);
