Index: libmpc/branches/r2d/mppenc/mppenc.c
===================================================================
--- libmpc/branches/r2d/mppenc/mppenc.c	(revision 147)
+++ libmpc/branches/r2d/mppenc/mppenc.c	(revision 149)
@@ -1631,16 +1631,16 @@
 
 	e.MS_Channelmode = m.MS_Channelmode;
+	e.seek_ref = ftell(e.outputFile);
 	writeMagic(&e);
 	writeStreamInfo ( &e, m.Max_Band, m.MS_Channelmode > 0, SamplesInWAVE,
 					   m.SampleFreq, Wave.Channels > 2 ? 2 : Wave.Channels);
 	writeBlock(&e, "SI", TRUE);
-	writeGainInfo(&e);
-	writeBlock(&e, "RG", FALSE);
 	writeEncoderInfo(&e, m.MainQual, m.PNS > 0, MPPENC_MAJOR, MPPENC_MINOR,
 					  MPPENC_IMPLEMENT, MPPENC_BUILD);
 	writeBlock(&e, "EI", FALSE);
-	e.seek_ref = ftell(e.outputFile);
-	writeBits (&e, 0, 32); // jump 32 bits for seek table pointer
-	writeBlock(&e, "ST", FALSE); // reserve space for pointer
+	e.seek_ptr = ftell(e.outputFile);
+	writeBits (&e, 0, 8);
+	writeBits (&e, 0, 32); // jump 40 bits for seek table pointer
+	writeBlock(&e, "SP", FALSE); // reserve space for seek pointer
 
 
@@ -1743,6 +1743,8 @@
 
     // write the last incomplete block
-	e.seek_table[e.seek_pos] = ftell(e.outputFile);
-	e.seek_pos++;
+	if ((e.block_cnt & ((1 << e.seek_pwr) - 1)) == 0) {
+		e.seek_table[e.seek_pos] = ftell(e.outputFile);
+		e.seek_pos++;
+	}
 	writeBlock(&e, "AD", FALSE);
 	writeSeekTable(&e);
Index: libmpc/branches/r2d/mppenc/mppenc.h
===================================================================
--- libmpc/branches/r2d/mppenc/mppenc.h	(revision 147)
+++ libmpc/branches/r2d/mppenc/mppenc.h	(revision 149)
@@ -119,5 +119,4 @@
 						const int version_implement,
 						const int version_build );
-void writeGainInfo ( mpc_encoder_t * e );
 void writeBlock ( mpc_encoder_t * e, const char * key, const mpc_bool_t addCRC);
 void writeMagic (mpc_encoder_t * e);
