Index: libmpcdec/branches/zorg/src/internal.h
===================================================================
--- libmpcdec/branches/zorg/src/internal.h	(revision 69)
+++ libmpcdec/branches/zorg/src/internal.h	(revision 70)
@@ -45,10 +45,4 @@
 #include <mpcdec/mpcdec.h>
 
-enum {
-    MPC_FRAME_LENGTH          = (36 * 32),              ///< Samples per mpc frame
-    MPC_DECODER_BUFFER_LENGTH = (MPC_FRAME_LENGTH * 4), ///< Required buffer size for decoder
-    MPC_DECODER_SYNTH_DELAY   = 481
-};
-
 /// Big/little endian 32 bit byte swapping routine.
 static mpc_inline
Index: libmpcdec/branches/zorg/src/mpc_decoder.c
===================================================================
--- libmpcdec/branches/zorg/src/mpc_decoder.c	(revision 69)
+++ libmpcdec/branches/zorg/src/mpc_decoder.c	(revision 70)
@@ -79,10 +79,10 @@
 static mpc_int32_t f_read(mpc_decoder *d, void *ptr, mpc_int32_t size) 
 { 
-    return d->r->read(d->r->data, ptr, size); 
+    return d->r->read(d->r, ptr, size); 
 }
 
 static mpc_bool_t f_seek(mpc_decoder *d, mpc_int32_t offset) 
 { 
-    return d->r->seek(d->r->data, offset); 
+    return d->r->seek(d->r, offset); 
 }
 
@@ -861,8 +861,4 @@
   mpc_decoder_reset_bitstream_decode(d);
   mpc_decoder_initialisiere_quantisierungstabellen(d, 1.0f);
-#if 0
-  mpc_decoder_init_huffman_sv6(d);
-  mpc_decoder_init_huffman_sv7(d);
-#endif
 }
 
@@ -896,18 +892,30 @@
 }
 
-mpc_bool_t mpc_decoder_initialize(mpc_decoder *d, mpc_streaminfo *si) 
-{
-    mpc_decoder_set_streaminfo(d, si);
+mpc_status mpc_decoder_init(mpc_decoder **d, mpc_reader *r, mpc_streaminfo *si) 
+{
+    mpc_decoder* p_tmp;
+    
+    p_tmp = malloc(sizeof *p_tmp);
+    memset(p_tmp, 0, sizeof *p_tmp);
+    mpc_decoder_setup(p_tmp, r);
+
+    mpc_decoder_set_streaminfo(p_tmp, si);
 
     // AB: setting position to the beginning of the data-bitstream
-    mpc_decoder_seek(d, get_initial_fpos(d));
-
-    d->seeking_pwr = 0;
-    while (d->OverallFrames > (SEEKING_TABLE_SIZE << d->seeking_pwr))
-        d->seeking_pwr++;
-    d->seeking_table_frames = 0;
-    d->seeking_table[0] = get_initial_fpos(d);
-
-    return TRUE;
+    mpc_decoder_seek(p_tmp, get_initial_fpos(p_tmp));
+
+    p_tmp->seeking_pwr = 0;
+    while (p_tmp->OverallFrames > (SEEKING_TABLE_SIZE << p_tmp->seeking_pwr))
+        p_tmp->seeking_pwr++;
+    p_tmp->seeking_table_frames = 0;
+    p_tmp->seeking_table[0] = get_initial_fpos(p_tmp);
+
+    *d = p_tmp;
+    return MPC_STATUS_OK;
+}
+
+void mpc_decoder_exit(mpc_decoder *d)
+{
+    free(d);
 }
 
Index: libmpcdec/branches/zorg/src/mpc_reader.c
===================================================================
--- libmpcdec/branches/zorg/src/mpc_reader.c	(revision 69)
+++ libmpcdec/branches/zorg/src/mpc_reader.c	(revision 70)
@@ -88,5 +88,5 @@
 
 mpc_status
-mpc_reader_setup_file_reader(mpc_reader *p_reader, char *filename)
+mpc_reader_init_stdio(mpc_reader *p_reader, char *filename)
 {
     mpc_reader tmp_reader; mpc_reader_stdio *p_stdio; int err;
@@ -127,5 +127,5 @@
 
 void
-mpc_exit_stdio_reader(mpc_reader *p_reader)
+mpc_reader_exit_stdio(mpc_reader *p_reader)
 {
     mpc_reader_stdio *p_stdio = (mpc_reader_stdio*) p_reader->data;
Index: libmpcdec/branches/zorg/src/streaminfo.c
===================================================================
--- libmpcdec/branches/zorg/src/streaminfo.c	(revision 69)
+++ libmpcdec/branches/zorg/src/streaminfo.c	(revision 70)
@@ -51,10 +51,4 @@
 {
     return profile >= sizeof versionNames / sizeof *versionNames ? na : versionNames[profile];
-}
-
-void
-mpc_streaminfo_init(mpc_streaminfo* si)
-{
-    memset(si, 0, sizeof *si);
 }
 
@@ -115,8 +109,9 @@
 // reads file header and tags
 mpc_status
-mpc_streaminfo_read(mpc_streaminfo * si, mpc_reader *p_reader)
+mpc_streaminfo_init(mpc_streaminfo * si, mpc_reader *p_reader)
 {
     mpc_uint32_t headerData[8]; int err;
 
+    memset(si, 0, sizeof *si);
     // get header position
     err = si->header_position = mpc_skip_id3v2(p_reader);
@@ -136,5 +131,5 @@
 
     err = memcmp(headerData, "MP+", 3);
-    if(!err) return MPC_STATUS_INVALIDSV;
+    if(err) return MPC_STATUS_INVALIDSV;
 
 #ifndef MPC_LITTLE_ENDIAN
