Index: /libmpcdec/branches/zorg/include/mpcdec/streaminfo.h
===================================================================
--- /libmpcdec/branches/zorg/include/mpcdec/streaminfo.h	(revision 116)
+++ /libmpcdec/branches/zorg/include/mpcdec/streaminfo.h	(revision 117)
@@ -65,10 +65,7 @@
     mpc_int64_t          pcm_samples;        ///< Approximate number of pcm samples in stream
     mpc_uint32_t         max_band;           ///< Maximum band-index used in stream (0...31)
-    mpc_uint32_t         is;                 ///< Intensity stereo (0: off, 1: on)
     mpc_uint32_t         ms;                 ///< Mid/side stereo (0: off, 1: on)
-    mpc_uint32_t         block_size;         ///< Only needed for SV4...SV6 -> not supported
-    mpc_uint32_t         profile;            ///< Quality profile of stream
-    const char*          profile_name;       ///< Name of profile used by stream
-    mpc_uint32_t         fast_seek;          ///< True if stream supports fast-seeking
+	mpc_uint32_t         fast_seek;          ///< True if stream supports fast-seeking (sv7)
+	mpc_uint32_t         frames_per_block;   ///< Number of frames in a block (sv8)
     //@}
 
@@ -84,12 +81,18 @@
     //@{
     mpc_uint32_t         is_true_gapless;    ///< True gapless? (0: no, 1: yes)
-    mpc_uint32_t         last_frame_samples; ///< Number of valid samples within last frame
+	mpc_uint32_t         last_frame_samples; ///< Number of valid samples within last frame
+    //@}
 
+	/// @name Encoder informations
+    //@{
     mpc_uint32_t         encoder_version;    ///< Version of encoder used
     char                 encoder[256];       ///< Encoder name
+	mpc_bool_t           pns;                ///< pns used
+	mpc_uint32_t         profile;            ///< Quality profile of stream
+	const char*          profile_name;       ///< Name of profile used by stream
+	//@}
 
     mpc_streaminfo_off_t tag_offset;         ///< Offset to file tags
     mpc_streaminfo_off_t total_file_length;  ///< Total length of underlying file
-    //@}
 } mpc_streaminfo;
 
Index: /libmpcdec/branches/zorg/src/mpc_demux.c
===================================================================
--- /libmpcdec/branches/zorg/src/mpc_demux.c	(revision 116)
+++ /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 116)
+++ /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);
 }
 
