Index: libmpcdec/branches/zorg/src/mpc_demux.c
===================================================================
--- libmpcdec/branches/zorg/src/mpc_demux.c	(revision 108)
+++ libmpcdec/branches/zorg/src/mpc_demux.c	(revision 117)
@@ -45,4 +45,6 @@
 mpc_status streaminfo_read_header_sv8(mpc_streaminfo* si, const mpc_bits_reader * r_in);
 mpc_status streaminfo_read_header_sv7(mpc_streaminfo* si, mpc_bits_reader * r_in);
+void  streaminfo_encoder_info(mpc_streaminfo* si, const mpc_bits_reader * r_in);
+void  streaminfo_gain(mpc_streaminfo* si, const mpc_bits_reader * r_in);
 
 #define MAX_FRAME_SIZE 4352
@@ -133,4 +135,8 @@
 			if (memcmp(b.key, "SI", 2) == 0)
 				streaminfo_read_header_sv8(&d->si, &d->bits_reader);
+			else if (memcmp(b.key, "EI", 2) == 0)
+				streaminfo_encoder_info(&d->si, &d->bits_reader);
+			else if (memcmp(b.key, "RG", 2) == 0)
+				streaminfo_gain(&d->si, &d->bits_reader);
 			d->bits_reader.buff += b.size;
 			size = mpc_bits_get_block(&d->bits_reader, &b);
Index: libmpcdec/branches/zorg/src/streaminfo.c
===================================================================
--- libmpcdec/branches/zorg/src/streaminfo.c	(revision 108)
+++ libmpcdec/branches/zorg/src/streaminfo.c	(revision 117)
@@ -60,21 +60,35 @@
 mpc_get_encoder_string(mpc_streaminfo* si)
 {
-	if (si->encoder_version == 0) {
-		sprintf(si->encoder, "Buschmann 1.7.0...9, Klemm 0.90...1.05");
+	if (si->stream_version < 8) {
+		if (si->encoder_version == 0) {
+			sprintf(si->encoder, "Buschmann 1.7.0...9, Klemm 0.90...1.05");
+		} else {
+			switch (si->encoder_version % 10) {
+				case 0:
+					sprintf(si->encoder, "Release %u.%u", si->encoder_version / 100,
+							si->encoder_version / 10 % 10);
+					break;
+				case 2: case 4: case 6: case 8:
+					sprintf(si->encoder, "Beta %u.%02u", si->encoder_version / 100,
+							si->encoder_version % 100);
+					break;
+				default:
+					sprintf(si->encoder, "--Alpha-- %u.%02u",
+							si->encoder_version / 100, si->encoder_version % 100);
+					break;
+			}
+		}
 	} else {
-		switch (si->encoder_version % 10) {
-			case 0:
-				sprintf(si->encoder, "Release %u.%u", si->encoder_version / 100,
-						si->encoder_version / 10 % 10);
-				break;
-			case 2: case 4: case 6: case 8:
-				sprintf(si->encoder, "Beta %u.%02u", si->encoder_version / 100,
-						si->encoder_version % 100);
-				break;
-			default:
-				sprintf(si->encoder, "--Alpha-- %u.%02u",
-						si->encoder_version / 100, si->encoder_version % 100);
-				break;
-		}
+		int major = si->encoder_version >> 24;
+		int minor = (si->encoder_version >> 16) & 0xFF;
+		int impl = (si->encoder_version >> 8) & 0xFF;
+		int build = si->encoder_version & 0xFF;
+		char * tmp = "--Stable--";
+
+		if (minor & 1)
+			tmp = "--Unstable--";
+
+		sprintf(si->encoder, "%s %u.%u.%u build %u", tmp, major, minor, impl,
+				build);
 	}
 }
@@ -87,7 +101,6 @@
 
 	si->bitrate            = 0;
-	si->block_size         = 1;
 	si->frames             = mpc_bits_read(r, 32);
-	si->is                 = mpc_bits_read(r, 1); // should be 0
+	mpc_bits_read(r, 1); // intensity stereo : should be 0
 	si->ms                 = mpc_bits_read(r, 1);
 	si->max_band           = mpc_bits_read(r, 6);
@@ -138,10 +151,8 @@
 	si->channels = mpc_bits_read(&r, 4) + 1;
 	si->max_band = mpc_bits_read(&r, 5) + 1;
-	// FIXME : this flag will be removed, must be 0
-	si->is = mpc_bits_read(&r, 1);
 	si->ms = mpc_bits_read(&r, 1);
-
-	si->bitrate            = 0;
-	si->block_size         = 1;
+	si->frames_per_block = 1 << mpc_bits_read(&r, 4);
+
+	si->bitrate = 0;
 
 	si->pcm_samples     = sampleCount;
@@ -152,4 +163,34 @@
 
 	return MPC_STATUS_OK;
+}
+
+/// Reads encoder informations
+void  streaminfo_encoder_info(mpc_streaminfo* si, const mpc_bits_reader * r_in)
+{
+	mpc_bits_reader r = *r_in;
+
+	si->profile            = mpc_bits_read(&r, 4);
+	si->profile_name       = mpc_get_version_string(si->profile);
+	si->pns                = mpc_bits_read(&r, 1);
+	mpc_bits_read(&r, 3); // unused
+	si->encoder_version = mpc_bits_read(&r, 4) << 24; // major
+	si->encoder_version |= mpc_bits_read(&r, 8) << 16; // minor
+	si->encoder_version |= mpc_bits_read(&r, 4) << 8; // implementation
+	si->encoder_version |= mpc_bits_read(&r, 8); // build
+
+	mpc_get_encoder_string(si);
+}
+
+/// Reads replay gain datas
+void  streaminfo_gain(mpc_streaminfo* si, const mpc_bits_reader * r_in)
+{
+	mpc_bits_reader r = *r_in;
+
+	mpc_bits_read(&r, 8); // gain version
+	// FIXME : add gain conversion
+	si->gain_title         = (mpc_uint16_t) mpc_bits_read(&r, 16);
+	si->peak_title         = (mpc_uint16_t) mpc_bits_read(&r, 16);
+	si->gain_album         = (mpc_uint16_t) mpc_bits_read(&r, 16);
+	si->peak_album         = (mpc_uint16_t) mpc_bits_read(&r, 16);
 }
 
