diff --git a/daemon/src/audio/alsa/alsalayer.cpp b/daemon/src/audio/alsa/alsalayer.cpp
index 2ce749443b5ee9ef5b41c2e49c4811982fe6d129..972f2842898ae90b16f9ebd8cee260cb0c0ddd68 100644
--- a/daemon/src/audio/alsa/alsalayer.cpp
+++ b/daemon/src/audio/alsa/alsalayer.cpp
@@ -556,6 +556,7 @@ void AlsaLayer::capture()
     if (toGetSamples > framesPerBufferAlsa)
         toGetSamples = framesPerBufferAlsa;
 
+#warning FIXME: there's no reason that in should be malloc'd
     int toGetBytes = toGetSamples * sizeof(SFLDataFormat);
     SFLDataFormat* in = (SFLDataFormat*) malloc(toGetBytes);
 
@@ -572,11 +573,11 @@ void AlsaLayer::capture()
         SFLDataFormat* rsmpl_out = (SFLDataFormat*) malloc(outBytes);
         converter_->resample((SFLDataFormat*) in, rsmpl_out, mainBufferSampleRate, audioSampleRate_, toGetSamples);
         dcblocker_.process(rsmpl_out, rsmpl_out, outSamples);
-        Manager::instance().getMainBuffer()->putData(rsmpl_out, outBytes);
+        Manager::instance().getMainBuffer()->putData(rsmpl_out, outBytes, MainBuffer::DEFAULT_ID);
         free(rsmpl_out);
     } else {
         dcblocker_.process(in, in, toGetSamples);
-        Manager::instance().getMainBuffer()->putData(in, toGetBytes);
+        Manager::instance().getMainBuffer()->putData(in, toGetBytes, MainBuffer::DEFAULT_ID);
     }
 
 end:
@@ -589,7 +590,7 @@ void AlsaLayer::playback(int maxSamples)
     unsigned int mainBufferSampleRate = Manager::instance().getMainBuffer()->getInternalSamplingRate();
     bool resample = audioSampleRate_ != mainBufferSampleRate;
 
-    int toGet = Manager::instance().getMainBuffer()->availForGet();
+    int toGet = Manager::instance().getMainBuffer()->availForGet(MainBuffer::DEFAULT_ID);
     int toPut = maxSamples * sizeof(SFLDataFormat);
 
     if (toGet <= 0) {    	// no audio available, play tone or silence
@@ -627,7 +628,7 @@ void AlsaLayer::playback(int maxSamples)
         toGet = maxNbBytesToGet;
 
     SFLDataFormat *out = (SFLDataFormat*) malloc(toGet);
-    Manager::instance().getMainBuffer()->getData(out, toGet);
+    Manager::instance().getMainBuffer()->getData(out, toGet, MainBuffer::DEFAULT_ID);
     AudioLayer::applyGain(out, toGet / sizeof(SFLDataFormat), getPlaybackGain());
 
     if (resample) {
@@ -656,7 +657,7 @@ void AlsaLayer::audioCallback()
     int playbackAvailSmpl = snd_pcm_avail_update(playbackHandle_);
     int playbackAvailBytes = playbackAvailSmpl * sizeof(SFLDataFormat);
 
-    int toGet = urgentRingBuffer_.AvailForGet();
+    int toGet = urgentRingBuffer_.AvailForGet(MainBuffer::DEFAULT_ID);
 
     if (toGet > 0) {
         // Urgent data (dtmf, incoming call signal) come first.
@@ -664,13 +665,13 @@ void AlsaLayer::audioCallback()
             toGet = playbackAvailBytes;
 
         SFLDataFormat *out = (SFLDataFormat*) malloc(toGet);
-        urgentRingBuffer_.Get(out, toGet);
+        urgentRingBuffer_.Get(out, toGet, MainBuffer::DEFAULT_ID);
         AudioLayer::applyGain(out, toGet / sizeof(SFLDataFormat), getPlaybackGain());
 
         write(out, toGet, playbackHandle_);
         free(out);
         // Consume the regular one as well (same amount of bytes)
-        Manager::instance().getMainBuffer()->discard(toGet);
+        Manager::instance().getMainBuffer()->discard(toGet, MainBuffer::DEFAULT_ID);
     } else {
         // regular audio data
         playback(playbackAvailSmpl);
diff --git a/daemon/src/audio/audiolayer.cpp b/daemon/src/audio/audiolayer.cpp
index 8e3363611ed6a915e36e386e6165e87237d1c54a..0de639e3d90a13220d15dd28b34904f45e17f887 100644
--- a/daemon/src/audio/audiolayer.cpp
+++ b/daemon/src/audio/audiolayer.cpp
@@ -39,7 +39,7 @@ unsigned int AudioLayer::playbackGain_ = 100;
 
 AudioLayer::AudioLayer()
     : isStarted_(false)
-    , urgentRingBuffer_(SIZEBUF, Call::DEFAULT_ID)
+    , urgentRingBuffer_(SIZEBUF, MainBuffer::DEFAULT_ID)
     , audioSampleRate_(Manager::instance().getMainBuffer()->getInternalSamplingRate())
     , mutex_()
     , dcblocker_()
@@ -47,7 +47,7 @@ AudioLayer::AudioLayer()
     , converter_(new SamplerateConverter(audioSampleRate_))
     , lastNotificationTime_(0)
 {
-    urgentRingBuffer_.createReadPointer();
+    urgentRingBuffer_.createReadPointer(MainBuffer::DEFAULT_ID);
 }
 
 
diff --git a/daemon/src/audio/mainbuffer.cpp b/daemon/src/audio/mainbuffer.cpp
index 4f52b7c0e767370001b360838365737ba7720ca3..6b19f0b1004be43a3b301c7f5b36cf8384d2ec45 100644
--- a/daemon/src/audio/mainbuffer.cpp
+++ b/daemon/src/audio/mainbuffer.cpp
@@ -30,9 +30,12 @@
  */
 
 #include "mainbuffer.h"
+#include "ringbuffer.h"
+#include "sfl_types.h" // for SIZEBUF
 #include <utility> // for std::pair
 #include "logger.h"
-#include "manager.h"
+
+const char * const MainBuffer::DEFAULT_ID = "audiolayer_id";
 
 MainBuffer::MainBuffer() : ringBufferMap_(), callIDMap_(), mutex_(), internalSamplingRate_(8000)
 {}
@@ -308,7 +311,7 @@ int MainBuffer::availForGet(const std::string & call_id)
     if (callid_set->size() == 1) {
         CallIDSet::iterator iter_id = callid_set->begin();
 
-        if ((call_id != Call::DEFAULT_ID) && (*iter_id == call_id))
+        if ((call_id != DEFAULT_ID) && (*iter_id == call_id))
             DEBUG("This problem should not occur since we have %i element", (int) callid_set->size());
 
         return availForGetByID(*iter_id, call_id);
@@ -335,7 +338,7 @@ int MainBuffer::availForGet(const std::string & call_id)
 int MainBuffer::availForGetByID(const std::string &call_id,
                                 const std::string &reader_id)
 {
-    if ((call_id != Call::DEFAULT_ID) and (reader_id == call_id))
+    if ((call_id != DEFAULT_ID) and (reader_id == call_id))
         ERROR("MainBuffer: Error: RingBuffer has a readpointer on itself");
 
     RingBuffer* ringbuffer = getRingBuffer(call_id);
diff --git a/daemon/src/audio/mainbuffer.h b/daemon/src/audio/mainbuffer.h
index 66dd65b4dc0091d5855fc689552e3487730efce2..13b374b510653eaed15ac9709135a2a4490c9666 100644
--- a/daemon/src/audio/mainbuffer.h
+++ b/daemon/src/audio/mainbuffer.h
@@ -29,17 +29,16 @@
  *  as that of the covered work.
  */
 
-#ifndef __MAIN_BUFFER__
-#define __MAIN_BUFFER__
+#ifndef MAIN_BUFFER_H_
+#define MAIN_BUFFER_H_
 
 #include <map>
 #include <set>
 #include <string>
 
 #include "cc_thread.h" // for ost::Mutex
-#include "global.h"
-#include "call.h"
-#include "ringbuffer.h"
+
+class RingBuffer;
 
 typedef std::map<std::string, RingBuffer*> RingBufferMap;
 
@@ -50,6 +49,7 @@ typedef std::map<std::string, CallIDSet*> CallIDMap;
 class MainBuffer {
 
     public:
+        static const char * const DEFAULT_ID;
 
         MainBuffer();
 
@@ -57,7 +57,7 @@ class MainBuffer {
 
         void setInternalSamplingRate(int sr);
 
-        int getInternalSamplingRate() {
+        int getInternalSamplingRate() const {
             return internalSamplingRate_;
         }
 
@@ -65,74 +65,74 @@ class MainBuffer {
          * Bind together two audio streams so taht a client will be able
          * to put and get data specifying its callid only.
          */
-        void bindCallID(const std::string & call_id1, const std::string & call_id2 = Call::DEFAULT_ID);
+        void bindCallID(const std::string &call_id1, const std::string &call_id2);
 
         /**
          * Add a new call_id to unidirectional outgoing stream
          * \param call_id New call id to be added for this stream
          * \param process_id Process that require this stream
          */
-        void bindHalfDuplexOut(const std::string & process_id, const std::string & call_id = Call::DEFAULT_ID);
+        void bindHalfDuplexOut(const std::string &process_id, const std::string &call_id);
 
         /**
          * Unbind two calls
          */
-        void unBindCallID(const std::string & call_id1, const std::string & call_id2 = Call::DEFAULT_ID);
+        void unBindCallID(const std::string &call_id1, const std::string &call_id2);
 
         /**
          * Unbind a unidirectional stream
          */
-        void unBindHalfDuplexOut(const std::string & process_id, const std::string & call_id = Call::DEFAULT_ID);
+        void unBindHalfDuplexOut(const std::string &process_id, const std::string &call_id);
 
-        void unBindAll(const std::string & call_id);
+        void unBindAll(const std::string &call_id);
 
-        void putData(void *buffer, int toCopy, const std::string & call_id = Call::DEFAULT_ID);
+        void putData(void *buffer, int toCopy, const std::string &call_id);
 
-        int getData(void *buffer, int toCopy, const std::string & call_id = Call::DEFAULT_ID);
+        int getData(void *buffer, int toCopy, const std::string &call_id);
 
-        int availForGet(const std::string & call_id = Call::DEFAULT_ID);
+        int availForGet(const std::string &call_id);
 
-        int discard(int toDiscard, const std::string & call_id = Call::DEFAULT_ID);
+        int discard(int toDiscard, const std::string &call_id);
 
-        void flush(const std::string & call_id = Call::DEFAULT_ID);
+        void flush(const std::string &call_id);
 
         void flushAllBuffers();
 
-        void syncBuffers(const std::string & call_id);
+        void syncBuffers(const std::string &call_id);
 
         void stateInfo();
 
     private:
 
-        CallIDSet* getCallIDSet(const std::string & call_id);
+        CallIDSet* getCallIDSet(const std::string &call_id);
 
-        void createCallIDSet(const std::string & set_id);
+        void createCallIDSet(const std::string &set_id);
 
-        bool removeCallIDSet(const std::string & set_id);
+        bool removeCallIDSet(const std::string &set_id);
 
         /**
          * Add a new call id to this set
          */
-        void addCallIDtoSet(const std::string & set_id, const std::string & call_id);
+        void addCallIDtoSet(const std::string &set_id, const std::string &call_id);
 
-        void removeCallIDfromSet(const std::string & set_id, const std::string & call_id);
+        void removeCallIDfromSet(const std::string &set_id, const std::string &call_id);
 
         /**
          * Create a new ringbuffer with default readpointer
          */
-        RingBuffer* createRingBuffer(const std::string & call_id);
+        RingBuffer* createRingBuffer(const std::string &call_id);
 
-        bool removeRingBuffer(const std::string & call_id);
+        bool removeRingBuffer(const std::string &call_id);
 
-        RingBuffer* getRingBuffer(const std::string & call_id);
+        RingBuffer* getRingBuffer(const std::string &call_id);
 
-        int getDataByID(void *buffer, int toCopy, const std::string & call_id, const std::string & reader_id);
+        int getDataByID(void *buffer, int toCopy, const std::string &call_id, const std::string &reader_id);
 
-        int availForGetByID(const std::string & call_id, const std::string & reader_id);
+        int availForGetByID(const std::string &call_id, const std::string &reader_id);
 
-        void discardByID(int toDiscard, const std::string & call_id, const std::string & reader_id);
+        void discardByID(int toDiscard, const std::string &call_id, const std::string &reader_id);
 
-        void flushByID(const std::string & call_id, const std::string & reader_id);
+        void flushByID(const std::string &call_id, const std::string &reader_id);
 
         RingBufferMap ringBufferMap_;
 
@@ -142,9 +142,7 @@ class MainBuffer {
 
         int internalSamplingRate_;
 
-    public:
-
         friend class MainBufferTest;
 };
 
-#endif
+#endif  // MainBuffer
diff --git a/daemon/src/audio/pulseaudio/pulselayer.cpp b/daemon/src/audio/pulseaudio/pulselayer.cpp
index 77d74bb4edfb6e4e31fd8ca9015eed27318e53f6..35c2b29a3857a107c3222e05fdbd2b76da81fda9 100644
--- a/daemon/src/audio/pulseaudio/pulselayer.cpp
+++ b/daemon/src/audio/pulseaudio/pulselayer.cpp
@@ -317,18 +317,18 @@ void PulseLayer::writeToSpeaker()
 
     notifyincomingCall();
 
-    size_t urgentBytes = urgentRingBuffer_.AvailForGet();
+    size_t urgentBytes = urgentRingBuffer_.AvailForGet(MainBuffer::DEFAULT_ID);
 
     if (urgentBytes > bytes)
         urgentBytes = bytes;
 
     if (urgentBytes) {
         pa_stream_begin_write(s, &data, &urgentBytes);
-        urgentRingBuffer_.Get(data, urgentBytes);
+        urgentRingBuffer_.Get(data, urgentBytes, MainBuffer::DEFAULT_ID);
         applyGain(static_cast<SFLDataFormat *>(data), urgentBytes / sizeof(SFLDataFormat), getPlaybackGain());  
         pa_stream_write(s, data, urgentBytes, NULL, 0, PA_SEEK_RELATIVE);
         // Consume the regular one as well (same amount of bytes)
-        Manager::instance().getMainBuffer()->discard(urgentBytes);
+        Manager::instance().getMainBuffer()->discard(urgentBytes, MainBuffer::DEFAULT_ID);
         return;
     }
 
@@ -347,7 +347,7 @@ void PulseLayer::writeToSpeaker()
 
     flushUrgent(); // flush remaining samples in _urgentRingBuffer
 
-    size_t availSamples = Manager::instance().getMainBuffer()->availForGet() / sizeof(SFLDataFormat);
+    size_t availSamples = Manager::instance().getMainBuffer()->availForGet(MainBuffer::DEFAULT_ID) / sizeof(SFLDataFormat);
 
     if (availSamples == 0) {
         pa_stream_begin_write(s, &data, &bytes);
@@ -379,7 +379,7 @@ void PulseLayer::writeToSpeaker()
 
     size_t inBytes = inSamples * sizeof(SFLDataFormat);
     pa_stream_begin_write(s, &data, &inBytes);
-    Manager::instance().getMainBuffer()->getData(data, inBytes);
+    Manager::instance().getMainBuffer()->getData(data, inBytes, MainBuffer::DEFAULT_ID);
 
     if (resample) {
         SFLDataFormat* rsmpl_out = (SFLDataFormat*) pa_xmalloc(outBytes);
@@ -427,7 +427,7 @@ void PulseLayer::readFromMic()
 
     dcblocker_.process(mic_buffer_, resample ? mic_buffer_ : (SFLDataFormat*)data, samples);
     applyGain(mic_buffer_, bytes / sizeof(SFLDataFormat), getCaptureGain());
-    Manager::instance().getMainBuffer()->putData(mic_buffer_, bytes);
+    Manager::instance().getMainBuffer()->putData(mic_buffer_, bytes, MainBuffer::DEFAULT_ID);
 
     if (pa_stream_drop(record_->pulseStream()) < 0)
         ERROR("Audio: Error: capture stream drop failed: %s" , pa_strerror(pa_context_errno(context_)));
diff --git a/daemon/src/audio/ringbuffer.cpp b/daemon/src/audio/ringbuffer.cpp
index 8e0f95590ca813c1632fff486f230894dc9b7f9d..fe8547d06fc89c791a99f0a9801840fd76d4fef6 100644
--- a/daemon/src/audio/ringbuffer.cpp
+++ b/daemon/src/audio/ringbuffer.cpp
@@ -40,7 +40,7 @@
 #include "ringbuffer.h"
 
 // corespond to 106 ms (about 5 rtp packets)
-#define MIN_BUFFER_SIZE	1280
+#define MIN_BUFFER_SIZE 1280
 
 int RingBuffer::count_rb = 0;
 
diff --git a/daemon/src/audio/ringbuffer.h b/daemon/src/audio/ringbuffer.h
index f22b1f7f10965248f59ffdadb4bc51576840bc0c..6fde62b4d1d807fd57435d49a92dfd2f8c258550 100644
--- a/daemon/src/audio/ringbuffer.h
+++ b/daemon/src/audio/ringbuffer.h
@@ -23,7 +23,7 @@
 #define __RING_BUFFER__
 
 #include <fstream>
-#include "../call.h"
+#include <map>
 #include "noncopyable.h"
 
 typedef std::map<std::string, int> ReadPointer;
@@ -34,28 +34,28 @@ class RingBuffer {
          * Constructor
          * @param size  Size of the buffer to create
          */
-        RingBuffer(int size, const std::string &call_id = Call::DEFAULT_ID);
+        RingBuffer(int size, const std::string &call_id);
 
         /**
          * Destructor
          */
         ~RingBuffer();
 
-        std::string getBufferId() {
+        std::string getBufferId() const {
             return buffer_id_;
         }
 
         /**
          * Reset the counters to 0 for this read pointer
          */
-        void flush(const std::string &call_id = Call::DEFAULT_ID);
+        void flush(const std::string &call_id);
 
         void flushAll();
 
         /**
          * Get read pointer coresponding to this call
          */
-        int getReadPointer(const std::string &call_id = Call::DEFAULT_ID);
+        int getReadPointer(const std::string &call_id);
 
         /**
          * Get the whole readpointer list for this ringbuffer
@@ -72,17 +72,17 @@ class RingBuffer {
         /**
          * Move readpointer forward by pointer_value
          */
-        void storeReadPointer(int pointer_value, const std::string &call_id = Call::DEFAULT_ID);
+        void storeReadPointer(int pointer_value, const std::string &call_id);
 
         /**
          * Add a new readpointer for this ringbuffer
          */
-        void createReadPointer(const std::string &call_id = Call::DEFAULT_ID);
+        void createReadPointer(const std::string &call_id);
 
         /**
          * Remove a readpointer for this ringbuffer
          */
-        void removeReadPointer(const std::string &call_id = Call::DEFAULT_ID);
+        void removeReadPointer(const std::string &call_id);
 
         /**
          * Test if readpointer coresponding to this call is still active
@@ -102,7 +102,7 @@ class RingBuffer {
          * To get how much space is available in the buffer to read in
          * @return int The available size
          */
-        int AvailForGet(const std::string &call_id = Call::DEFAULT_ID);
+        int AvailForGet(const std::string &call_id);
 
         /**
          * Get data in the ring buffer
@@ -110,14 +110,14 @@ class RingBuffer {
          * @param toCopy Number of bytes to copy
          * @return int Number of bytes copied
          */
-        int Get(void* buffer, int toCopy, const std::string &call_id = Call::DEFAULT_ID);
+        int Get(void* buffer, int toCopy, const std::string &call_id);
 
         /**
          * Discard data from the buffer
          * @param toDiscard Number of bytes to discard
          * @return int Number of bytes discarded
          */
-        int Discard(int toDiscard, const std::string &call_id = Call::DEFAULT_ID);
+        int Discard(int toDiscard, const std::string &call_id);
 
         /**
          * Total length of the ring buffer
@@ -125,7 +125,7 @@ class RingBuffer {
          */
         int putLen();
 
-        int getLen(const std::string &call_id = Call::DEFAULT_ID);
+        int getLen(const std::string &call_id);
 
         /**
          * Debug function print mEnd, mStart, mBufferSize
@@ -142,13 +142,13 @@ class RingBuffer {
         /** Data */
         unsigned char *buffer_;
 
-        ReadPointer   readpointer_;
+        ReadPointer readpointer_;
         std::string buffer_id_;
 
-    public:
-
         friend class MainBufferTest;
 
+    public:
+
         std::fstream *buffer_input_rec;
         std::fstream *buffer_output_rec;
 
diff --git a/daemon/src/audio/sound/audiofile.cpp b/daemon/src/audio/sound/audiofile.cpp
index 443c42436f9b5c6bf9fef865ac1165e07a38f5d2..be11a5b2d576de2fbaeaa8c50ca7c367c6848542 100644
--- a/daemon/src/audio/sound/audiofile.cpp
+++ b/daemon/src/audio/sound/audiofile.cpp
@@ -38,13 +38,10 @@
 #include <climits>
 
 #include "audiofile.h"
-#include "audio/codecs/audiocodecfactory.h"
 #include "audio/codecs/audiocodec.h"
 #include "audio/samplerateconverter.h"
 #include "logger.h"
 
-#include "manager.h"
-
 RawFile::RawFile(const std::string& name, sfl::AudioCodec *codec, unsigned int sampleRate)
     : AudioFile(name), audioCodec_(codec)
 {
@@ -123,16 +120,16 @@ WaveFile::WaveFile(const std::string &fileName, int newRate) : AudioFile(fileNam
     fileStream.open(fileName.c_str(), std::ios::in | std::ios::binary);
 
     char riff[4] = { 0, 0, 0, 0 };
-    fileStream.read(riff, sizeof riff / sizeof riff[0]);
+    fileStream.read(riff, sizeof riff / sizeof *riff);
 
-    if (strncmp("RIFF", riff, sizeof riff / sizeof riff[0]) != 0)
+    if (strncmp("RIFF", riff, sizeof riff / sizeof *riff) != 0)
         throw AudioFileException("File is not of RIFF format");
 
     char fmt[4] = { 0, 0, 0, 0 };
     int maxIteration = 10;
 
-    while (maxIteration-- and strncmp("fmt ", fmt, sizeof fmt / sizeof fmt[0]))
-        fileStream.read(fmt, sizeof fmt / sizeof fmt[0]);
+    while (maxIteration-- and strncmp("fmt ", fmt, sizeof fmt / sizeof *fmt))
+        fileStream.read(fmt, sizeof fmt / sizeof *fmt);
 
     if (maxIteration == 0)
         throw AudioFileException("Could not find \"fmt \" chunk");
@@ -173,8 +170,8 @@ WaveFile::WaveFile(const std::string &fileName, int newRate) : AudioFile(fileNam
     char data[4] = { 0, 0, 0, 0 };
     maxIteration = 10;
 
-    while (maxIteration-- && strncmp("data", data, sizeof data / sizeof data[0]))
-        fileStream.read(data, sizeof data / sizeof data[0]);
+    while (maxIteration-- && strncmp("data", data, sizeof data / sizeof *data))
+        fileStream.read(data, sizeof data / sizeof *data);
 
     // Samplerate converter initialized with 88200 sample long
     SamplerateConverter converter(std::max(fileRate, newRate));
diff --git a/daemon/src/audio/speexechocancel.cpp b/daemon/src/audio/speexechocancel.cpp
index 1258b8023699659f98339bd60ca96dc6c6a1cc98..f51989ed5d47853a8cf5d7fd5620c6adf4beef81 100644
--- a/daemon/src/audio/speexechocancel.cpp
+++ b/daemon/src/audio/speexechocancel.cpp
@@ -41,8 +41,8 @@ SpeexEchoCancel::SpeexEchoCancel() :
     echoTailLength_(Manager::instance().getEchoCancelTailLength() * SPEEX_SAMPLE_RATE / 1000),
     echoState_(speex_echo_state_init(EC_FRAME_SIZE, echoTailLength_)),
     preState_(speex_preprocess_state_init(EC_FRAME_SIZE, SPEEX_SAMPLE_RATE)),
-    micData_(RINGBUFFER_SIZE),
-    spkrData_(RINGBUFFER_SIZE),
+    micData_(RINGBUFFER_SIZE, MainBuffer::DEFAULT_ID),
+    spkrData_(RINGBUFFER_SIZE, MainBuffer::DEFAULT_ID),
     spkrStopped_(true),
     tmpSpkr_(),
     tmpMic_(),
@@ -56,8 +56,8 @@ SpeexEchoCancel::SpeexEchoCancel() :
     speex_echo_ctl(echoState_, SPEEX_ECHO_SET_SAMPLING_RATE, &rate);
     speex_preprocess_ctl(preState_, SPEEX_PREPROCESS_SET_ECHO_STATE, echoState_);
 
-    micData_.createReadPointer();
-    spkrData_.createReadPointer();
+    micData_.createReadPointer(MainBuffer::DEFAULT_ID);
+    spkrData_.createReadPointer(MainBuffer::DEFAULT_ID);
 }
 
 SpeexEchoCancel::~SpeexEchoCancel()
@@ -93,16 +93,16 @@ int SpeexEchoCancel::process(SFLDataFormat *inputData, SFLDataFormat *outputData
     micData_.Put(inputData, samples * sizeof(SFLDataFormat));
 
     // Store data for synchronization
-    int spkrAvail = spkrData_.AvailForGet();
-    int micAvail = micData_.AvailForGet();
+    int spkrAvail = spkrData_.AvailForGet(MainBuffer::DEFAULT_ID);
+    int micAvail = micData_.AvailForGet(MainBuffer::DEFAULT_ID);
 
-    if (spkrAvail < (echoDelay_+byteSize) || micAvail < byteSize) {
-        micData_.Discard(byteSize);
+    if ((spkrAvail < (echoDelay_ + byteSize)) or micAvail < byteSize) {
+        micData_.Discard(byteSize, MainBuffer::DEFAULT_ID);
         return 0;
     }
 
-    spkrData_.Get(tmpSpkr_, byteSize);
-    micData_.Get(tmpMic_, byteSize);
+    spkrData_.Get(tmpSpkr_, byteSize, MainBuffer::DEFAULT_ID);
+    micData_.Get(tmpMic_, byteSize, MainBuffer::DEFAULT_ID);
 
     for (int i = 0; i < EC_FRAME_SIZE; i++) {
         int32_t tmp = tmpSpkr_[i] * 3;
@@ -123,8 +123,8 @@ int SpeexEchoCancel::process(SFLDataFormat *inputData, SFLDataFormat *outputData
 
     memcpy(outputData, tmpOut_, byteSize);
 
-    spkrAvail = spkrData_.AvailForGet();
-    micAvail = micData_.AvailForGet();
+    spkrAvail = spkrData_.AvailForGet(MainBuffer::DEFAULT_ID);
+    micAvail = micData_.AvailForGet(MainBuffer::DEFAULT_ID);
 
     return EC_FRAME_SIZE;
 }
diff --git a/daemon/src/audio/speexechocancel.h b/daemon/src/audio/speexechocancel.h
index 3f0fbb35ec8d4ce1007f7876bcdaec9e11fcf7e4..51b1cc583c5a31a93ff7080758f8d07e3c09337a 100644
--- a/daemon/src/audio/speexechocancel.h
+++ b/daemon/src/audio/speexechocancel.h
@@ -20,7 +20,7 @@
 #ifndef SPEEXECHOCANCEL_H
 #define SPEEXECHOCANCEL_H
 
-#include "global.h"
+#include "sfl_types.h"
 #include "noncopyable.h"
 #include "ringbuffer.h"
 
diff --git a/daemon/src/call.cpp b/daemon/src/call.cpp
index f2f4a6172e947df829694d973d5987b7b7c38efc..20b95afa6aa40d7aa5a1f6cac99a43b1e2ee527d 100644
--- a/daemon/src/call.cpp
+++ b/daemon/src/call.cpp
@@ -33,8 +33,6 @@
 #include "audio/mainbuffer.h"
 #include "history/historyitem.h"
 
-const char * const Call::DEFAULT_ID = "audiolayer_id";
-
 Call::Call(const std::string& id, Call::CallType type)
     : callMutex_()
     , localIPAddress_("")
@@ -147,12 +145,12 @@ Call::setRecording()
 
     if (!recordStatus) {
         mbuffer->bindHalfDuplexOut(process_id, id_);
-        mbuffer->bindHalfDuplexOut(process_id);
+        mbuffer->bindHalfDuplexOut(process_id, MainBuffer::DEFAULT_ID);
 
         Recordable::recorder_.start();
     } else {
         mbuffer->unBindHalfDuplexOut(process_id, id_);
-        mbuffer->unBindHalfDuplexOut(process_id);
+        mbuffer->unBindHalfDuplexOut(process_id, MainBuffer::DEFAULT_ID);
     }
 
     Manager::instance().getMainBuffer()->stateInfo();
diff --git a/daemon/src/conference.cpp b/daemon/src/conference.cpp
index a44d8d91e9961f9324bbf4b4a1d8dab88dc9de46..f2850f99bba4fb0cb3e0e878d54cac595f180961 100644
--- a/daemon/src/conference.cpp
+++ b/daemon/src/conference.cpp
@@ -71,7 +71,7 @@ void Conference::bindParticipant(const std::string &participant_id)
         if (participant_id != *iter)
             Manager::instance().getMainBuffer()->bindCallID(participant_id, *iter);
 
-    Manager::instance().getMainBuffer()->bindCallID(participant_id);
+    Manager::instance().getMainBuffer()->bindCallID(participant_id, MainBuffer::DEFAULT_ID);
 }
 
 std::string Conference::getStateStr() const
@@ -113,14 +113,14 @@ bool Conference::setRecording()
         for (ParticipantSet::const_iterator iter = participants_.begin(); iter != participants_.end(); ++iter)
             mbuffer->bindHalfDuplexOut(process_id, *iter);
 
-        mbuffer->bindHalfDuplexOut(process_id);
+        mbuffer->bindHalfDuplexOut(process_id, MainBuffer::DEFAULT_ID);
 
         Recordable::recorder_.start();
     } else {
         for (ParticipantSet::const_iterator iter = participants_.begin(); iter != participants_.end(); ++iter)
             mbuffer->unBindHalfDuplexOut(process_id, *iter);
 
-        mbuffer->unBindHalfDuplexOut(process_id);
+        mbuffer->unBindHalfDuplexOut(process_id, MainBuffer::DEFAULT_ID);
     }
 
     return recordStatus;
diff --git a/daemon/src/config/yamlemitter.cpp b/daemon/src/config/yamlemitter.cpp
index c4361e937ca5f415b0ecdc1071c2c83f9f8ccb3d..6ab19a941624d21669e946cd8d71e0186f95970d 100644
--- a/daemon/src/config/yamlemitter.cpp
+++ b/daemon/src/config/yamlemitter.cpp
@@ -29,6 +29,7 @@
  */
 
 #include "yamlemitter.h"
+#include "yamlnode.h"
 #include <cstdio>
 #include "logger.h"
 
@@ -73,11 +74,13 @@ void YamlEmitter::close()
 {
     yaml_emitter_delete(&emitter_);
 
+    // Refererence:
+    // http://www.parashift.com/c++-faq-lite/exceptions.html#faq-17.9
     if (!fd_)
-        throw YamlEmitterException("File descriptor not valid");
+        ERROR("File descriptor not valid");
 
     if (fclose(fd_))
-        throw YamlEmitterException("Error closing file descriptor");
+        ERROR("Error closing file descriptor");
 }
 
 void YamlEmitter::serializeData()
@@ -89,8 +92,6 @@ void YamlEmitter::serializeData()
 
 void YamlEmitter::serializeAccount(MappingNode *map)
 {
-    int accountmapping;
-
     if (map->getType() != MAPPING)
         throw YamlEmitterException("Node type is not a mapping while writing account");
 
@@ -111,154 +112,43 @@ void YamlEmitter::serializeAccount(MappingNode *map)
         isFirstAccount_ = false;
     }
 
-    if ((accountmapping = yaml_document_add_mapping(&document_, NULL, YAML_BLOCK_MAPPING_STYLE)) == 0)
+    int accountMapping;
+    if ((accountMapping = yaml_document_add_mapping(&document_, NULL, YAML_BLOCK_MAPPING_STYLE)) == 0)
         throw YamlEmitterException("Could not add account mapping to document");
 
-    if (yaml_document_append_sequence_item(&document_, accountSequence_, accountmapping) == 0)
+    if (yaml_document_append_sequence_item(&document_, accountSequence_, accountMapping) == 0)
         throw YamlEmitterException("Could not append account mapping to sequence");
 
-    Mapping *internalmap = map->getMapping();
-    for (Mapping::const_iterator i = internalmap->begin(); i != internalmap->end(); ++i)
-        addMappingItem(accountmapping, i->first, i->second);
+    addMappingItems(accountMapping, map->getMapping());
 }
 
-void YamlEmitter::serializePreference(MappingNode *map)
+void YamlEmitter::serializePreference(MappingNode *map, const char *preference_str)
 {
     if (map->getType() != MAPPING)
         throw YamlEmitterException("Node type is not a mapping while writing preferences");
 
-    static const char * const PREFERENCE_STR = "preferences";
     int preferenceid;
-
-    if ((preferenceid = yaml_document_add_scalar(&document_, NULL, (yaml_char_t *) PREFERENCE_STR, -1, YAML_PLAIN_SCALAR_STYLE)) == 0)
+    if ((preferenceid = yaml_document_add_scalar(&document_, NULL, (yaml_char_t *) preference_str, -1, YAML_PLAIN_SCALAR_STYLE)) == 0)
         throw YamlEmitterException("Could not add scalar to document");
 
-    int preferencemapping;
-    if ((preferencemapping = yaml_document_add_mapping(&document_, NULL, YAML_BLOCK_MAPPING_STYLE)) == 0)
+    int preferenceMapping;
+    if ((preferenceMapping = yaml_document_add_mapping(&document_, NULL, YAML_BLOCK_MAPPING_STYLE)) == 0)
         throw YamlEmitterException("Could not add mapping to document");
 
-    if (yaml_document_append_mapping_pair(&document_, topLevelMapping_, preferenceid, preferencemapping) == 0)
+    if (yaml_document_append_mapping_pair(&document_, topLevelMapping_, preferenceid, preferenceMapping) == 0)
         throw YamlEmitterException("Could not add mapping pair to top leve mapping");
 
-    Mapping *internalmap = map->getMapping();
-    for (Mapping::const_iterator i = internalmap->begin(); i != internalmap->end(); ++i)
-        addMappingItem(preferencemapping, i->first, i->second);
+    addMappingItems(preferenceMapping, map->getMapping());
 }
 
-void YamlEmitter::serializeVoipPreference(MappingNode *map)
-{
-    if (map->getType() != MAPPING)
-        throw YamlEmitterException("Node type is not a mapping while writing preferences");
-
-
-    static const char *const PREFERENCE_STR = "voipPreferences";
-    int preferenceid;
-    if ((preferenceid = yaml_document_add_scalar(&document_, NULL, (yaml_char_t *) PREFERENCE_STR, -1, YAML_PLAIN_SCALAR_STYLE)) == 0)
-        throw YamlEmitterException("Could not add scalar to document");
+typedef std::map<std::string, YamlNode*> Mapping;
 
-    int preferencemapping;
-    if ((preferencemapping = yaml_document_add_mapping(&document_, NULL, YAML_BLOCK_MAPPING_STYLE)) == 0)
-        throw YamlEmitterException("Could not add mapping to document");
-
-    if (yaml_document_append_mapping_pair(&document_, topLevelMapping_, preferenceid, preferencemapping) == 0)
-        throw YamlEmitterException("Could not add mapping pair to top leve mapping");
-
-    Mapping *internalmap = map->getMapping();
-    for (Mapping::const_iterator i = internalmap->begin(); i != internalmap->end(); ++i)
-        addMappingItem(preferencemapping, i->first, i->second);
-}
-
-void YamlEmitter::serializeAddressbookPreference(MappingNode *map)
+void YamlEmitter::addMappingItems(int mappingID, Mapping *iMap)
 {
-    if (map->getType() != MAPPING)
-        throw YamlEmitterException("Node type is not a mapping while writing preferences");
-
-    static const char * const PREFERENCE_STR = "addressbook";
-    int preferenceid;
-    if ((preferenceid = yaml_document_add_scalar(&document_, NULL, (yaml_char_t *) PREFERENCE_STR, -1, YAML_PLAIN_SCALAR_STYLE)) == 0)
-        throw YamlEmitterException("Could not add scalar to document");
-    int preferencemapping;
-    if ((preferencemapping = yaml_document_add_mapping(&document_, NULL, YAML_BLOCK_MAPPING_STYLE)) == 0)
-        throw YamlEmitterException("Could not add mapping to document");
-
-    if (yaml_document_append_mapping_pair(&document_, topLevelMapping_, preferenceid, preferencemapping) == 0)
-        throw YamlEmitterException("Could not add mapping pair to top leve mapping");
-
-    Mapping *internalmap = map->getMapping();
-    for (Mapping::const_iterator i = internalmap->begin(); i != internalmap->end(); ++i)
-        addMappingItem(preferencemapping, i->first, i->second);
+    for (Mapping::const_iterator i = iMap->begin(); i != iMap->end(); ++i)
+        addMappingItem(mappingID, i->first, i->second);
 }
 
-void YamlEmitter::serializeHooksPreference(MappingNode *map)
-{
-    if (map->getType() != MAPPING)
-        throw YamlEmitterException("Node type is not a mapping while writing preferences");
-
-    static const char * const PREFERENCE_STR = "hooks";
-    int preferenceid;
-    if ((preferenceid = yaml_document_add_scalar(&document_, NULL, (yaml_char_t *) PREFERENCE_STR, -1, YAML_PLAIN_SCALAR_STYLE)) == 0)
-        throw YamlEmitterException("Could not add scalar to document");
-
-    int preferencemapping;
-    if ((preferencemapping = yaml_document_add_mapping(&document_, NULL, YAML_BLOCK_MAPPING_STYLE)) == 0)
-        throw YamlEmitterException("Could not add mapping to document");
-
-    if (yaml_document_append_mapping_pair(&document_, topLevelMapping_, preferenceid, preferencemapping) == 0)
-        throw YamlEmitterException("Could not add mapping pair to top leve mapping");
-
-    Mapping *internalmap = map->getMapping();
-    for (Mapping::const_iterator i = internalmap->begin(); i != internalmap->end(); ++i)
-        addMappingItem(preferencemapping, i->first, i->second);
-}
-
-
-void YamlEmitter::serializeAudioPreference(MappingNode *map)
-{
-    static const char *const PREFERENCE_STR = "audio";
-
-    int preferenceid, preferencemapping;
-
-    if (map->getType() != MAPPING)
-        throw YamlEmitterException("Node type is not a mapping while writing preferences");
-
-    if ((preferenceid = yaml_document_add_scalar(&document_, NULL, (yaml_char_t *) PREFERENCE_STR, -1, YAML_PLAIN_SCALAR_STYLE)) == 0)
-        throw YamlEmitterException("Could not add scalar to document");
-
-    if ((preferencemapping = yaml_document_add_mapping(&document_, NULL, YAML_BLOCK_MAPPING_STYLE)) == 0)
-        throw YamlEmitterException("Could not add mapping to document");
-
-    if (yaml_document_append_mapping_pair(&document_, topLevelMapping_, preferenceid, preferencemapping) == 0)
-        throw YamlEmitterException("Could not add mapping pair to top leve mapping");
-
-    Mapping *internalmap = map->getMapping();
-    for (Mapping::const_iterator i = internalmap->begin(); i != internalmap->end(); ++i)
-        addMappingItem(preferencemapping, i->first, i->second);
-}
-
-
-void YamlEmitter::serializeShortcutPreference(MappingNode *map)
-{
-    if (map->getType() != MAPPING)
-        throw YamlEmitterException("Node type is not a mapping while writing preferences");
-
-    static const char *const PREFERENCE_STR = "shortcuts";
-    int preferenceid;
-    if ((preferenceid = yaml_document_add_scalar(&document_, NULL, (yaml_char_t *) PREFERENCE_STR, -1, YAML_PLAIN_SCALAR_STYLE)) == 0)
-        throw YamlEmitterException("Could not add scalar to document");
-
-    int preferencemapping;
-    if ((preferencemapping = yaml_document_add_mapping(&document_, NULL, YAML_BLOCK_MAPPING_STYLE)) == 0)
-        throw YamlEmitterException("Could not add mapping to document");
-
-    if (yaml_document_append_mapping_pair(&document_, topLevelMapping_, preferenceid, preferencemapping) == 0)
-        throw YamlEmitterException("Could not add mapping pair to top leve mapping");
-
-    Mapping *mapping = map->getMapping();
-    for (Mapping::const_iterator i = mapping->begin(); i != mapping->end(); ++i)
-        addMappingItem(preferencemapping, i->first, i->second);
-}
-
-
 void YamlEmitter::addMappingItem(int mappingid, const std::string &key, YamlNode *node)
 {
     if (node->getType() == SCALAR) {
@@ -289,9 +179,7 @@ void YamlEmitter::addMappingItem(int mappingid, const std::string &key, YamlNode
         if (yaml_document_append_mapping_pair(&document_, mappingid, temp1, temp2) == 0)
             throw YamlEmitterException("Could not add mapping pair to mapping");
 
-        Mapping *internalmap = map->getMapping();
-        for (Mapping::const_iterator i = internalmap->begin(); i != internalmap->end(); ++i)
-            addMappingItem(temp2, i->first, i->second);
+        addMappingItems(temp2, map->getMapping());
 
     } else if (node->getType() == SEQUENCE) {
         SequenceNode *seqnode = static_cast<SequenceNode *>(node);
@@ -318,9 +206,7 @@ void YamlEmitter::addMappingItem(int mappingid, const std::string &key, YamlNode
                 throw YamlEmitterException("Could not append account mapping to sequence");
 
             MappingNode *mapnode = static_cast<MappingNode*>(yamlNode);
-            Mapping *map = mapnode->getMapping();
-            for (Mapping::const_iterator i = map->begin(); i != map->end(); ++i)
-                addMappingItem(id, i->first, i->second);
+            addMappingItems(id, mapnode->getMapping());
         }
     } else
         throw YamlEmitterException("Unknown node type while adding mapping node");
diff --git a/daemon/src/config/yamlemitter.h b/daemon/src/config/yamlemitter.h
index d3d7eedcdfa1cffae0eac5bf7a72afb563bff589..4f6234e63c878223dc220cb68b6718be669803ed 100644
--- a/daemon/src/config/yamlemitter.h
+++ b/daemon/src/config/yamlemitter.h
@@ -28,24 +28,26 @@
  *  as that of the covered work.
  */
 
-#ifndef __YAMLEMITTER_H__
-#define __YAMLEMITTER_H__
+#ifndef YAMLEMITTER_H__
+#define YAMLEMITTER_H__
 
 #include <yaml.h>
 #include <stdexcept>
 #include <string>
+#include <map>
 #include "noncopyable.h"
-#include "yamlnode.h"
 
 namespace Conf {
 
 #define EMITTER_BUFFERSIZE 65536
 #define EMITTER_MAXEVENT 1024
 
+class MappingNode;
+class YamlNode;
+
 class YamlEmitterException : public std::runtime_error {
     public:
-        YamlEmitterException(const std::string& str="") :
-            std::runtime_error("YamlEmitterException occured: " + str) {}
+        YamlEmitterException(const char *err) : std::runtime_error(err) {}
 };
 
 class YamlEmitter {
@@ -61,17 +63,7 @@ class YamlEmitter {
 
         void serializeAccount(MappingNode *map);
 
-        void serializePreference(MappingNode *map);
-
-        void serializeVoipPreference(MappingNode *map);
-
-        void serializeAddressbookPreference(MappingNode *map);
-
-        void serializeHooksPreference(MappingNode *map);
-
-        void serializeAudioPreference(MappingNode *map);
-
-        void serializeShortcutPreference(MappingNode *map);
+        void serializePreference(MappingNode *map, const char *preference_str);
 
         void writeAudio();
 
@@ -84,6 +76,7 @@ class YamlEmitter {
     private:
 
         NON_COPYABLE(YamlEmitter);
+        void addMappingItems(int mappingid, std::map<std::string, YamlNode*> *mapping);
         void addMappingItem(int mappingid, const std::string &key, YamlNode *node);
 
         std::string filename_;
@@ -126,4 +119,4 @@ class YamlEmitter {
 };
 }
 
-#endif
+#endif  // YAMLEMITTER_H__
diff --git a/daemon/src/config/yamlnode.cpp b/daemon/src/config/yamlnode.cpp
index f4590a3611208b7c1103f8017952ed6637344581..32bdf2f27626648262d08d49a9d3683be2dea047 100644
--- a/daemon/src/config/yamlnode.cpp
+++ b/daemon/src/config/yamlnode.cpp
@@ -89,6 +89,8 @@ void MappingNode::addNode(YamlNode *node)
     setKeyValue(tmpKey_, node);
 }
 
+typedef std::map<std::string, YamlNode*> Mapping;
+
 void MappingNode::setKeyValue(const std::string &key, YamlNode *value)
 {
     Mapping::iterator it = map_.end();
diff --git a/daemon/src/config/yamlnode.h b/daemon/src/config/yamlnode.h
index 36ca8d6e7f6d7fefa5a11634b94f8f75ad35e1f1..990b23733ccf4372fc7a96a4c22ec9437baa938a 100644
--- a/daemon/src/config/yamlnode.h
+++ b/daemon/src/config/yamlnode.h
@@ -42,7 +42,6 @@ namespace Conf {
 class YamlNode;
 
 typedef std::list<YamlNode *> Sequence;
-typedef std::map<std::string, YamlNode *> Mapping;
 
 enum NodeType { DOCUMENT, SCALAR, MAPPING, SEQUENCE };
 
@@ -109,7 +108,8 @@ class MappingNode : public YamlNode {
         MappingNode(YamlNode *top) :
             YamlNode(MAPPING, top), map_(), tmpKey_() {}
 
-        Mapping *getMapping() {
+        std::map<std::string, YamlNode*> *
+        getMapping() {
             return &map_;
         }
 
@@ -131,7 +131,7 @@ class MappingNode : public YamlNode {
         virtual void deleteChildNodes();
 
     private:
-        Mapping map_;
+        std::map<std::string, YamlNode*> map_;
         std::string tmpKey_;
 };
 
diff --git a/daemon/src/config/yamlparser.cpp b/daemon/src/config/yamlparser.cpp
index 19ba06ad57ba128d739509e657f0fdf8444ed1ec..97b0c18b71518f82f0381653521940650d5951dc 100644
--- a/daemon/src/config/yamlparser.cpp
+++ b/daemon/src/config/yamlparser.cpp
@@ -390,7 +390,7 @@ void YamlParser::constructNativeData()
 
 void YamlParser::mainNativeDataMapping(MappingNode *map)
 {
-    Mapping *mapping = map->getMapping();
+    std::map<std::string, YamlNode*> *mapping = map->getMapping();
 
     accountSequence_    = (SequenceNode*)(*mapping)["accounts"];
     addressbookNode_    = (MappingNode*)(*mapping)["addressbook"];
diff --git a/daemon/src/im/instant_messaging.h b/daemon/src/im/instant_messaging.h
index be0a71ce354d117f4db8b9df7762fb6f35af1efe..7e9b0ee20f510369766692db90f2d843dad2ab2c 100644
--- a/daemon/src/im/instant_messaging.h
+++ b/daemon/src/im/instant_messaging.h
@@ -34,15 +34,13 @@
 
 #include <string>
 #include <iostream>
+#include <vector>
 #include <fstream>
 #include <pjsip.h>
 #include <pjlib.h>
 #include <pjsip_ua.h>
 #include <pjlib-util.h>
 
-#include "call.h"
-#include "sip/sipcall.h"
-
 #include <map>
 #include <list>
 #include <stdexcept>
diff --git a/daemon/src/managerimpl.cpp b/daemon/src/managerimpl.cpp
index 030d6ae3b8ed7810258981df984dffa6cf5e6011..01b20c6c4a023ce1392a2e71982cd7a565b60953 100644
--- a/daemon/src/managerimpl.cpp
+++ b/daemon/src/managerimpl.cpp
@@ -211,7 +211,7 @@ bool ManagerImpl::outgoingCall(const std::string& account_id,
         if (not isConference(current_call_id) and not isConferenceParticipant(current_call_id))
             onHoldCall(current_call_id);
         else if (isConference(current_call_id) and not isConferenceParticipant(call_id))
-            detachParticipant(Call::DEFAULT_ID, current_call_id);
+            detachParticipant(MainBuffer::DEFAULT_ID, current_call_id);
     }
 
     if (IPToIP) {
@@ -284,7 +284,7 @@ bool ManagerImpl::answerCall(const std::string& call_id)
         } else if (isConference(current_call_id) and not isConferenceParticipant(call_id)) {
             // if we are talking to a conference and we are answering an incoming call
             DEBUG("Manager: Detach main participant from conference");
-            detachParticipant(Call::DEFAULT_ID, current_call_id);
+            detachParticipant(MainBuffer::DEFAULT_ID, current_call_id);
         }
     }
 
@@ -470,7 +470,7 @@ void ManagerImpl::offHoldCall(const std::string& callId)
             DEBUG("Manager: Has current call (%s), put on hold", currentCallId.c_str());
             onHoldCall(currentCallId);
         } else if (isConference(currentCallId) and not isConferenceParticipant(callId))
-            detachParticipant(Call::DEFAULT_ID, currentCallId);
+            detachParticipant(MainBuffer::DEFAULT_ID, currentCallId);
     }
 
     bool isRec = false;
@@ -639,7 +639,7 @@ void ManagerImpl::removeConference(const std::string& conference_id)
     // We now need to bind the audio to the remain participant
 
     // Unbind main participant audio from conference
-    getMainBuffer()->unBindAll(Call::DEFAULT_ID);
+    getMainBuffer()->unBindAll(MainBuffer::DEFAULT_ID);
 
     ParticipantSet participants(conf->getParticipantList());
 
@@ -647,7 +647,7 @@ void ManagerImpl::removeConference(const std::string& conference_id)
     ParticipantSet::iterator iter_p = participants.begin();
 
     if (iter_p != participants.end())
-        getMainBuffer()->bindCallID(*iter_p, Call::DEFAULT_ID);
+        getMainBuffer()->bindCallID(*iter_p, MainBuffer::DEFAULT_ID);
 
     // Then remove the conference from the conference map
     if (conferenceMap_.erase(conference_id) == 1)
@@ -760,7 +760,7 @@ void ManagerImpl::addParticipant(const std::string& callId, const std::string& c
     // detach from prior communication and switch to this conference
     if (current_call_id != callId) {
         if (isConference(current_call_id))
-            detachParticipant(Call::DEFAULT_ID, current_call_id);
+            detachParticipant(MainBuffer::DEFAULT_ID, current_call_id);
         else
             onHoldCall(current_call_id);
     }
@@ -806,7 +806,7 @@ void ManagerImpl::addParticipant(const std::string& callId, const std::string& c
             p != participants.end(); ++p)
         getMainBuffer()->flush(*p);
 
-    getMainBuffer()->flush(Call::DEFAULT_ID);
+    getMainBuffer()->flush(MainBuffer::DEFAULT_ID);
 
     // Connect stream
     addStream(callId);
@@ -818,7 +818,7 @@ void ManagerImpl::addMainParticipant(const std::string& conference_id)
         std::string current_call_id(getCurrentCallId());
 
         if (isConference(current_call_id))
-            detachParticipant(Call::DEFAULT_ID, current_call_id);
+            detachParticipant(MainBuffer::DEFAULT_ID, current_call_id);
         else
             onHoldCall(current_call_id);
     }
@@ -835,12 +835,12 @@ void ManagerImpl::addMainParticipant(const std::string& conference_id)
 
         for (ParticipantSet::const_iterator iter_p = participants.begin();
                 iter_p != participants.end(); ++iter_p) {
-            getMainBuffer()->bindCallID(*iter_p, Call::DEFAULT_ID);
+            getMainBuffer()->bindCallID(*iter_p, MainBuffer::DEFAULT_ID);
             // Reset ringbuffer's readpointers
             getMainBuffer()->flush(*iter_p);
         }
 
-        getMainBuffer()->flush(Call::DEFAULT_ID);
+        getMainBuffer()->flush(MainBuffer::DEFAULT_ID);
 
         if (conf->getState() == Conference::ACTIVE_DETACHED)
             conf->setState(Conference::ACTIVE_ATTACHED);
@@ -870,7 +870,7 @@ void ManagerImpl::joinParticipant(const std::string& callId1, const std::string&
     if ((current_call_id != callId1) and (current_call_id != callId2)) {
         // If currently in a conference
         if (isConference(current_call_id))
-            detachParticipant(Call::DEFAULT_ID, current_call_id);
+            detachParticipant(MainBuffer::DEFAULT_ID, current_call_id);
         else
             onHoldCall(current_call_id); // currently in a call
     }
@@ -1016,7 +1016,7 @@ void ManagerImpl::detachParticipant(const std::string& call_id,
            current_id.c_str());
     std::string current_call_id(getCurrentCallId());
 
-    if (call_id != Call::DEFAULT_ID) {
+    if (call_id != MainBuffer::DEFAULT_ID) {
         std::string currentAccountId(getAccountFromCall(call_id));
         Call *call = getAccountLink(currentAccountId)->getCall(call_id);
 
@@ -1056,7 +1056,7 @@ void ManagerImpl::detachParticipant(const std::string& call_id,
         dbus_.getCallManager()->conferenceChanged(conf->getConfID(), conf->getStateStr());
     } else {
         DEBUG("Manager: Unbind main participant from conference %d");
-        getMainBuffer()->unBindAll(Call::DEFAULT_ID);
+        getMainBuffer()->unBindAll(MainBuffer::DEFAULT_ID);
 
         if (not isConference(current_call_id)) {
             ERROR("Manager: Warning: Current call id (%s) is not a conference", current_call_id.c_str());
@@ -1124,7 +1124,7 @@ void ManagerImpl::processRemainingParticipants(const std::string &current_call_i
              p != participants.end(); ++p)
             getMainBuffer()->flush(*p);
 
-        getMainBuffer()->flush(Call::DEFAULT_ID);
+        getMainBuffer()->flush(MainBuffer::DEFAULT_ID);
     } else if (n == 1) {
         ParticipantSet::iterator p = participants.begin();
 
@@ -1205,14 +1205,14 @@ void ManagerImpl::addStream(const std::string& call_id)
                     iter_p != participants.end(); ++iter_p)
                 getMainBuffer()->flush(*iter_p);
 
-            getMainBuffer()->flush(Call::DEFAULT_ID);
+            getMainBuffer()->flush(MainBuffer::DEFAULT_ID);
         }
 
     } else {
         DEBUG("Manager: Add stream to call");
 
         // bind to main
-        getMainBuffer()->bindCallID(call_id);
+        getMainBuffer()->bindCallID(call_id, MainBuffer::DEFAULT_ID);
 
         ost::MutexLock lock(audioLayerMutex_);
         audiodriver_->flushUrgent();
diff --git a/daemon/src/preferences.cpp b/daemon/src/preferences.cpp
index 15bf1e50cf48b36e4927528b343ecf9da021c0ab..aa7afc70cb2fb17c6d09fe8520a1d1000aa7500d 100644
--- a/daemon/src/preferences.cpp
+++ b/daemon/src/preferences.cpp
@@ -41,8 +41,72 @@
 #include <cassert>
 
 const char * const Preferences::DFT_ZONE = "North America";
+const char * const Preferences::REGISTRATION_EXPIRE_KEY = "registrationexpire";
 
 namespace {
+// general preferences
+static const char * const ORDER_KEY = "order";
+static const char * const AUDIO_API_KEY = "audioApi";
+static const char * const HISTORY_LIMIT_KEY = "historyLimit";
+static const char * const HISTORY_MAX_CALLS_KEY = "historyMaxCalls";
+static const char * const NOTIFY_MAILS_KEY = "notifyMails";
+static const char * const ZONE_TONE_CHOICE_KEY = "zoneToneChoice";
+static const char * const PORT_NUM_KEY = "portNum";
+static const char * const SEARCH_BAR_DISPLAY_KEY = "searchBarDisplay";
+static const char * const ZEROCONF_ENABLE_KEY = "zeroConfenable";
+static const char * const MD5_HASH_KEY = "md5Hash";
+
+// voip preferences
+static const char * const PLAY_DTMF_KEY = "playDtmf";
+static const char * const PLAY_TONES_KEY = "playTones";
+static const char * const PULSE_LENGTH_KEY = "pulseLength";
+static const char * const SYMMETRIC_RTP_KEY = "symmetric";
+static const char * const ZID_FILE_KEY = "zidFile";
+
+// addressbook preferences
+static const char * const PHOTO_KEY = "photo";
+static const char * const ENABLED_KEY = "enabled";
+static const char * const LIST_KEY = "list";
+static const char * const MAX_RESULTS_KEY = "maxResults";
+static const char * const BUSINESS_KEY = "business";
+static const char * const HOME_KEY = "home";
+static const char * const MOBILE_KEY = "mobile";
+
+// hooks preferences
+static const char * const IAX2_ENABLED_KEY = "iax2Enabled";
+static const char * const NUMBER_ADD_PREFIX_KEY = "numberAddPrefix";
+static const char * const NUMBER_ENABLED_KEY = "numberEnabled";
+static const char * const SIP_ENABLED_KEY = "sipEnabled";
+static const char * const URL_COMMAND_KEY = "urlCommand";
+static const char * const URL_SIP_FIELD_KEY = "urlSipField";
+
+// audio preferences
+static const char * const ALSAMAP_KEY = "alsa";
+static const char * const PULSEMAP_KEY = "pulse";
+static const char * const CARDIN_KEY = "cardIn";
+static const char * const CARDOUT_KEY = "cardOut";
+static const char * const CARDRING_KEY = "cardRing";
+static const char * const PLUGIN_KEY = "plugin";
+static const char * const SMPLRATE_KEY = "smplRate";
+static const char * const DEVICE_PLAYBACK_KEY = "devicePlayback";
+static const char * const DEVICE_RECORD_KEY = "deviceRecord";
+static const char * const DEVICE_RINGTONE_KEY = "deviceRingtone";
+static const char * const RECORDPATH_KEY = "recordPath";
+static const char * const ALWAYS_RECORDING_KEY = "alwaysRecording";
+static const char * const VOLUMEMIC_KEY = "volumeMic";
+static const char * const VOLUMESPKR_KEY = "volumeSpkr";
+static const char * const NOISE_REDUCE_KEY = "noiseReduce";
+static const char * const ECHO_CANCEL_KEY = "echoCancel";
+static const char * const ECHO_TAIL_KEY = "echoTailLength";
+static const char * const ECHO_DELAY_KEY = "echoDelayLength";
+
+// shortcut preferences
+static const char * const HANGUP_SHORT_KEY = "hangUp";
+static const char * const PICKUP_SHORT_KEY = "pickUp";
+static const char * const POPUP_SHORT_KEY = "popupWindow";
+static const char * const TOGGLE_HOLD_SHORT_KEY = "toggleHold";
+static const char * const TOGGLE_PICKUP_HANGUP_SHORT_KEY = "togglePickupHangup";
+
 static const char * const DFT_PULSE_LENGTH_STR ="250";  /** Default DTMF lenght */
 static const char * const ZRTP_ZIDFILE = "zidFile";     /** The filename used for storing ZIDs */
 static const char * const ALSA_DFT_CARD	= "0";          /** Default sound card index */
@@ -96,7 +160,7 @@ void Preferences::serialize(Conf::YamlEmitter *emiter)
     preferencemap.setKeyValue(ZEROCONF_ENABLE_KEY, &zeroConfenable);
     preferencemap.setKeyValue(MD5_HASH_KEY, &md5Hash);
 
-    emiter->serializePreference(&preferencemap);
+    emiter->serializePreference(&preferencemap, "preferences");
 }
 
 void Preferences::unserialize(const Conf::MappingNode *map)
@@ -143,7 +207,7 @@ void VoipPreference::serialize(Conf::YamlEmitter *emitter)
     preferencemap.setKeyValue(SYMMETRIC_RTP_KEY, &symmetricRtp);
     preferencemap.setKeyValue(ZID_FILE_KEY, &zidFile);
 
-    emitter->serializeVoipPreference(&preferencemap);
+    emitter->serializePreference(&preferencemap, "voipPreferences");
 }
 
 void VoipPreference::unserialize(const Conf::MappingNode *map)
@@ -191,7 +255,7 @@ void AddressbookPreference::serialize(Conf::YamlEmitter *emitter)
     preferencemap.setKeyValue(HOME_KEY, &home);
     preferencemap.setKeyValue(MOBILE_KEY, &mobile);
 
-    emitter->serializeAddressbookPreference(&preferencemap);
+    emitter->serializePreference(&preferencemap, "addressbook");
 
 }
 
@@ -259,7 +323,7 @@ void HookPreference::serialize(Conf::YamlEmitter *emitter)
     preferencemap.setKeyValue(URL_COMMAND_KEY, &urlCommand);
     preferencemap.setKeyValue(URL_SIP_FIELD_KEY, &urlSipField);
 
-    emitter->serializeHooksPreference(&preferencemap);
+    emitter->serializePreference(&preferencemap, "hooks");
 }
 
 void HookPreference::unserialize(const Conf::MappingNode *map)
@@ -407,7 +471,7 @@ void AudioPreference::serialize(Conf::YamlEmitter *emitter)
     preferencemap.setKeyValue(ECHO_TAIL_KEY, &echotail);
     preferencemap.setKeyValue(ECHO_DELAY_KEY, &echodelay);
 
-    emitter->serializeAudioPreference(&preferencemap);
+    emitter->serializePreference(&preferencemap, "audio");
 }
 
 void AudioPreference::unserialize(const Conf::MappingNode *map)
@@ -484,7 +548,7 @@ void ShortcutPreferences::serialize(Conf::YamlEmitter *emitter)
     preferencemap.setKeyValue(TOGGLE_HOLD_SHORT_KEY, &toggleHold);
     preferencemap.setKeyValue(TOGGLE_PICKUP_HANGUP_SHORT_KEY, &togglePickupHangup);
 
-    emitter->serializeShortcutPreference(&preferencemap);
+    emitter->serializePreference(&preferencemap, "shortcuts");
 }
 
 void ShortcutPreferences::unserialize(const Conf::MappingNode *map)
diff --git a/daemon/src/preferences.h b/daemon/src/preferences.h
index a7059b93ad7a1a3113882c5d983aa2d7f239d324..b9efabf7c6889253059767ea031cdd000c0a5155 100644
--- a/daemon/src/preferences.h
+++ b/daemon/src/preferences.h
@@ -35,75 +35,12 @@
 #include <string>
 #include <map>
 
-// general preferences
-static const char * const ORDER_KEY = "order";
-static const char * const AUDIO_API_KEY = "audioApi";
-static const char * const HISTORY_LIMIT_KEY = "historyLimit";
-static const char * const HISTORY_MAX_CALLS_KEY = "historyMaxCalls";
-static const char * const NOTIFY_MAILS_KEY = "notifyMails";
-static const char * const ZONE_TONE_CHOICE_KEY = "zoneToneChoice";
-static const char * const REGISTRATION_EXPIRE_KEY = "registrationexpire";
-static const char * const PORT_NUM_KEY = "portNum";
-static const char * const SEARCH_BAR_DISPLAY_KEY = "searchBarDisplay";
-static const char * const ZEROCONF_ENABLE_KEY = "zeroConfenable";
-static const char * const MD5_HASH_KEY = "md5Hash";
-
-// voip preferences
-static const char * const PLAY_DTMF_KEY = "playDtmf";
-static const char * const PLAY_TONES_KEY = "playTones";
-static const char * const PULSE_LENGTH_KEY = "pulseLength";
-static const char * const SYMMETRIC_RTP_KEY = "symmetric";
-static const char * const ZID_FILE_KEY = "zidFile";
-
-// addressbook preferences
-static const char * const PHOTO_KEY = "photo";
-static const char * const ENABLED_KEY = "enabled";
-static const char * const LIST_KEY = "list";
-static const char * const MAX_RESULTS_KEY = "maxResults";
-static const char * const BUSINESS_KEY = "business";
-static const char * const HOME_KEY = "home";
-static const char * const MOBILE_KEY = "mobile";
-
-// hooks preferences
-static const char * const IAX2_ENABLED_KEY = "iax2Enabled";
-static const char * const NUMBER_ADD_PREFIX_KEY = "numberAddPrefix";
-static const char * const NUMBER_ENABLED_KEY = "numberEnabled";
-static const char * const SIP_ENABLED_KEY = "sipEnabled";
-static const char * const URL_COMMAND_KEY = "urlCommand";
-static const char * const URL_SIP_FIELD_KEY = "urlSipField";
-
-// audio preferences
-static const char * const ALSAMAP_KEY = "alsa";
-static const char * const PULSEMAP_KEY = "pulse";
-static const char * const CARDIN_KEY = "cardIn";
-static const char * const CARDOUT_KEY = "cardOut";
-static const char * const CARDRING_KEY = "cardRing";
-static const char * const PLUGIN_KEY = "plugin";
-static const char * const SMPLRATE_KEY = "smplRate";
-static const char * const DEVICE_PLAYBACK_KEY = "devicePlayback";
-static const char * const DEVICE_RECORD_KEY = "deviceRecord";
-static const char * const DEVICE_RINGTONE_KEY = "deviceRingtone";
-static const char * const RECORDPATH_KEY = "recordPath";
-static const char * const ALWAYS_RECORDING_KEY = "alwaysRecording";
-static const char * const VOLUMEMIC_KEY = "volumeMic";
-static const char * const VOLUMESPKR_KEY = "volumeSpkr";
-static const char * const NOISE_REDUCE_KEY = "noiseReduce";
-static const char * const ECHO_CANCEL_KEY = "echoCancel";
-static const char * const ECHO_TAIL_KEY = "echoTailLength";
-static const char * const ECHO_DELAY_KEY = "echoDelayLength";
-
-// shortcut preferences
-static const char * const HANGUP_SHORT_KEY = "hangUp";
-static const char * const PICKUP_SHORT_KEY = "pickUp";
-static const char * const POPUP_SHORT_KEY = "popupWindow";
-static const char * const TOGGLE_HOLD_SHORT_KEY = "toggleHold";
-static const char * const TOGGLE_PICKUP_HANGUP_SHORT_KEY = "togglePickupHangup";
-
 class AudioLayer;
 
 class Preferences : public Serializable {
     public:
         static const char * const DFT_ZONE;
+        static const char * const REGISTRATION_EXPIRE_KEY;
 
         Preferences();
 
diff --git a/daemon/src/sfl_types.h b/daemon/src/sfl_types.h
index 31025875d8cde87a5bac37a841809edcf7fd0110..382eb1c84cd87bf7b286b01a2ad6bf89b150ea21 100644
--- a/daemon/src/sfl_types.h
+++ b/daemon/src/sfl_types.h
@@ -31,7 +31,7 @@
 #ifndef SFL_TYPES_H_
 #define SFL_TYPES_H_
 
-#include <cstring> // for size_t
+#include <cstddef> // for size_t
 
 typedef short SFLDataFormat;
 typedef signed short SINT16;
diff --git a/daemon/src/sip/sipaccount.cpp b/daemon/src/sip/sipaccount.cpp
index 7d47090bd0c3e7108ebd0b116436a3a53e2ec780..fab7291faba1e5228e618b487452d1cfc278330f 100644
--- a/daemon/src/sip/sipaccount.cpp
+++ b/daemon/src/sip/sipaccount.cpp
@@ -175,7 +175,7 @@ void SIPAccount::serialize(Conf::YamlEmitter *emitter)
     accountmap.setKeyValue(HOSTNAME_KEY, &hostname);
     accountmap.setKeyValue(ACCOUNT_ENABLE_KEY, &enable);
     accountmap.setKeyValue(MAILBOX_KEY, &mailbox);
-    accountmap.setKeyValue(REGISTRATION_EXPIRE_KEY, &expire);
+    accountmap.setKeyValue(Preferences::REGISTRATION_EXPIRE_KEY, &expire);
     accountmap.setKeyValue(INTERFACE_KEY, &interface);
     accountmap.setKeyValue(PORT_KEY, &port);
     accountmap.setKeyValue(STUN_SERVER_KEY, &stunServer);
@@ -272,7 +272,7 @@ void SIPAccount::unserialize(const Conf::MappingNode *map)
 
     map->getValue(RINGTONE_PATH_KEY, &ringtonePath_);
     map->getValue(RINGTONE_ENABLED_KEY, &ringtoneEnabled_);
-    map->getValue(REGISTRATION_EXPIRE_KEY, &registrationExpire_);
+    map->getValue(Preferences::REGISTRATION_EXPIRE_KEY, &registrationExpire_);
     map->getValue(INTERFACE_KEY, &interface_);
     int port;
     map->getValue(PORT_KEY, &port);
diff --git a/daemon/test/Makefile.am b/daemon/test/Makefile.am
index e639723a684875489f32d9ae08668adaff1ec698..58e13b52da92a7be72991c244e2b1a85a61d8bc0 100644
--- a/daemon/test/Makefile.am
+++ b/daemon/test/Makefile.am
@@ -5,51 +5,40 @@ check_PROGRAMS = test
 
 TESTS = run_tests.sh
 
-test_CXXFLAGS = -I .
+test_CXXFLAGS = -DWORKSPACE="$(top_srcdir)/test/"
 test_LDADD = $(top_builddir)/src/libsflphone.la @ZRTPCPP_LIBS@ @LIBCRYPTO_LIBS@ @CPPUNIT_LIBS@ @YAML_LIBS@
 
-EXTRA_DIST = $(test_SOURCES) sflphoned-sample.yml history-sample.tpl run_tests.sh
-test_SOURCES = \
-	constants.h \
-	main.cpp \
-	validator.cpp \
-	validator.h \
-	accounttest.h \
-	accounttest.cpp \
-	audiolayertest.h \
-	audiolayertest.cpp \
-	configurationtest.h \
-	configurationtest.cpp \
-	historytest.h \
-	historytest.cpp \
-	numbercleanertest.h \
-	numbercleanertest.cpp \
-	sdesnegotiatortest.h \
-	sdesnegotiatortest.cpp \
-	instantmessagingtest.h \
-	instantmessagingtest.cpp \
-	siptest.h \
-	siptest.cpp \
-	sdptest.h \
-	sdptest.cpp \
-	echocanceltest.h \
-	echocanceltest.cpp \
-	gaincontroltest.h \
-	gaincontroltest.cpp
-	accounttest.h \
-	audiolayertest.h \
-	configurationtest.h \
-	constants.h \
-	delaydetectiontest.h \
-	echocanceltest.h \
-	gaincontroltest.h \
-	historytest.h \
-	instantmessagingtest.h \
-	mainbuffertest.h \
-	numbercleanertest.h \
-	ringtonetest.h \
-	sdesnegotiatortest.h \
-	sdptest.h \
-	siptest.h \
-	validator.h \
-	test_utils.h
+EXTRA_DIST = sflphoned-sample.yml history-sample.tpl run_tests.sh
+test_SOURCES = constants.h \
+			   test_utils.h \
+			   main.cpp \
+			   validator.h \
+			   validator.cpp \
+			   accounttest.h \
+			   accounttest.cpp \
+			   audiolayertest.h \
+			   audiolayertest.cpp \
+			   configurationtest.h \
+			   configurationtest.cpp \
+			   historytest.h \
+			   historytest.cpp \
+			   numbercleanertest.h \
+			   numbercleanertest.cpp \
+			   sdesnegotiatortest.h \
+			   sdesnegotiatortest.cpp \
+			   instantmessagingtest.h \
+			   instantmessagingtest.cpp \
+			   siptest.h \
+			   siptest.cpp \
+			   sdptest.h \
+			   sdptest.cpp \
+			   echocanceltest.h \
+			   echocanceltest.cpp \
+			   gaincontroltest.h \
+			   gaincontroltest.cpp \
+			   mainbuffertest.h \
+			   mainbuffertest.cpp
+
+clean-local:
+	rm -rf cppunitresults.xml im:testfile1.txt im:testfile2.txt \
+		sample_echocancel_500ms_8kHz_16bit.raw
diff --git a/daemon/test/configurationtest.cpp b/daemon/test/configurationtest.cpp
index 46a7803a790ff05704ccbfa3907f5c721d16a920..a3553bc55990819e7b68051d6c133dbef29ef9bf 100644
--- a/daemon/test/configurationtest.cpp
+++ b/daemon/test/configurationtest.cpp
@@ -161,7 +161,7 @@ void ConfigurationTest::testYamlEmitter()
     accountmap.setKeyValue(HOSTNAME_KEY, &hostname);
     accountmap.setKeyValue(ACCOUNT_ENABLE_KEY, &enable);
     accountmap.setKeyValue(MAILBOX_KEY, &mailbox);
-    accountmap.setKeyValue(REGISTRATION_EXPIRE_KEY, &expire);
+    accountmap.setKeyValue(Preferences::REGISTRATION_EXPIRE_KEY, &expire);
     accountmap.setKeyValue(INTERFACE_KEY, &interface);
     accountmap.setKeyValue(PORT_KEY, &port);
     accountmap.setKeyValue(PUBLISH_ADDR_KEY, &publishAddr);
diff --git a/daemon/test/constants.h b/daemon/test/constants.h
index 684f00ebacce91ca15600f75aa1f50485a2607dd..74b8374dd6b6b242a5aa1b310f969ab049ef13e5 100644
--- a/daemon/test/constants.h
+++ b/daemon/test/constants.h
@@ -31,9 +31,15 @@
 #ifndef CONSTANTS_H_
 #define CONSTANTS_H_
 
-#define HISTORY_SAMPLE  "history-sample.tpl"
-#define HISTORY_SAMPLE_SIZE     3
-#define CONFIG_SAMPLE   "sflphoned-sample.yml"
+#define XSTRINGIFY(s) STRINGIFY(s)
+#define STRINGIFY(s) #s
+#define HISTORY_SAMPLE XSTRINGIFY(WORKSPACE) "history-sample.tpl"
+#define HISTORY_SAMPLE_BAK HISTORY_SAMPLE ".bak"
+
+#define CONFIG_SAMPLE XSTRINGIFY(WORKSPACE) "sflphoned-sample.yml"
+#define CONFIG_SAMPLE_BAK CONFIG_SAMPLE ".bak"
+
+#define HISTORY_SAMPLE_SIZE 3
 #define HISTORY_LIMIT 30
 
 #endif /* CONSTANTS_H_ */
diff --git a/daemon/test/historytest.cpp b/daemon/test/historytest.cpp
index 50ff2b433c78983afb83a558b7239ecbbe402447..fe6aa20baed4d2764e77dc9f0427973bf6328cee 100644
--- a/daemon/test/historytest.cpp
+++ b/daemon/test/historytest.cpp
@@ -38,13 +38,13 @@
 namespace {
 void restore()
 {
-    if (system("mv " HISTORY_SAMPLE ".bak " HISTORY_SAMPLE) < 0)
-        ERROR("Restoration of %s failed" HISTORY_SAMPLE);
+    if (system("mv " HISTORY_SAMPLE_BAK " " HISTORY_SAMPLE) < 0)
+        ERROR("Restoration of %s failed", HISTORY_SAMPLE);
 }
 
 void backup()
 {
-    if (system("cp " HISTORY_SAMPLE " " HISTORY_SAMPLE ".bak") < 0)
+    if (system("cp " HISTORY_SAMPLE " " HISTORY_SAMPLE_BAK) < 0)
         ERROR("Backup of %s failed", HISTORY_SAMPLE);
 }
 }
diff --git a/daemon/test/main.cpp b/daemon/test/main.cpp
index 36521769f316ad6923e4345be68bf3a534315036..624c6531e33ab4299ea1b1c1c553cce1a498700f 100644
--- a/daemon/test/main.cpp
+++ b/daemon/test/main.cpp
@@ -43,12 +43,12 @@
 namespace {
     void restore()
     {
-        if (system("mv " CONFIG_SAMPLE ".bak " CONFIG_SAMPLE) < 0)
+        if (system("mv " CONFIG_SAMPLE_BAK " " CONFIG_SAMPLE) < 0)
             ERROR("Restoration of %s failed", CONFIG_SAMPLE);
     }
     void backup()
     {
-        if (system("cp " CONFIG_SAMPLE " " CONFIG_SAMPLE ".bak") < 0)
+        if (system("cp " CONFIG_SAMPLE " " CONFIG_SAMPLE_BAK) < 0)
             ERROR("Backup of %s failed", CONFIG_SAMPLE);
     }
 }
diff --git a/daemon/test/mainbuffertest.cpp b/daemon/test/mainbuffertest.cpp
index 1ca7a603ebc309be865f5d01186b4104bcbc133d..9ea9e17004572132101170e1065e3d7b227b2fdc 100644
--- a/daemon/test/mainbuffertest.cpp
+++ b/daemon/test/mainbuffertest.cpp
@@ -30,6 +30,10 @@
 
 #include <string>
 #include "mainbuffertest.h"
+#include "audio/mainbuffer.h"
+#include "audio/ringbuffer.h"
+#include "logger.h"
+#include "test_utils.h"
 
 void MainBufferTest::testRingBufferCreation()
 {
@@ -41,38 +45,38 @@ void MainBufferTest::testRingBufferCreation()
     RingBufferMap::iterator iter;
 
     // test mainbuffer ringbuffer map size
-    CPPUNIT_ASSERT(mainbuffer_.ringBufferMap_.empty());
-    test_ring_buffer = mainbuffer_.createRingBuffer(test_id);
-    CPPUNIT_ASSERT(mainbuffer_.ringBufferMap_.size() == 1);
+    CPPUNIT_ASSERT(mainbuffer_->ringBufferMap_.empty());
+    test_ring_buffer = mainbuffer_->createRingBuffer(test_id);
+    CPPUNIT_ASSERT(mainbuffer_->ringBufferMap_.size() == 1);
 
-    // test mainbuffer_.getRingBuffer method
+    // test mainbuffer_->getRingBuffer method
     CPPUNIT_ASSERT(test_ring_buffer != NULL);
-    CPPUNIT_ASSERT(mainbuffer_.getRingBuffer(null_id) == NULL);
-    CPPUNIT_ASSERT(mainbuffer_.ringBufferMap_.size() == 1);
-    CPPUNIT_ASSERT(mainbuffer_.getRingBuffer(test_id) == test_ring_buffer);
+    CPPUNIT_ASSERT(mainbuffer_->getRingBuffer(null_id) == NULL);
+    CPPUNIT_ASSERT(mainbuffer_->ringBufferMap_.size() == 1);
+    CPPUNIT_ASSERT(mainbuffer_->getRingBuffer(test_id) == test_ring_buffer);
 
     // test mainbuffer_ ringBufferMap_
-    iter = mainbuffer_.ringBufferMap_.find(null_id);
-    CPPUNIT_ASSERT(iter == mainbuffer_.ringBufferMap_.end());
-    iter = mainbuffer_.ringBufferMap_.find(test_id);
+    iter = mainbuffer_->ringBufferMap_.find(null_id);
+    CPPUNIT_ASSERT(iter == mainbuffer_->ringBufferMap_.end());
+    iter = mainbuffer_->ringBufferMap_.find(test_id);
     CPPUNIT_ASSERT(iter->first == test_id);
     CPPUNIT_ASSERT(iter->second == test_ring_buffer);
-    CPPUNIT_ASSERT(iter->second == mainbuffer_.getRingBuffer(test_id));
+    CPPUNIT_ASSERT(iter->second == mainbuffer_->getRingBuffer(test_id));
 
     // test creating twice a buffer (should not create it)
-    mainbuffer_.createRingBuffer(test_id);
-    CPPUNIT_ASSERT(mainbuffer_.ringBufferMap_.size() == 1);
-    CPPUNIT_ASSERT(mainbuffer_.getRingBuffer(test_id) == test_ring_buffer);
+    mainbuffer_->createRingBuffer(test_id);
+    CPPUNIT_ASSERT(mainbuffer_->ringBufferMap_.size() == 1);
+    CPPUNIT_ASSERT(mainbuffer_->getRingBuffer(test_id) == test_ring_buffer);
 
     // test remove ring buffer
-    CPPUNIT_ASSERT(mainbuffer_.removeRingBuffer(null_id));
-    CPPUNIT_ASSERT(mainbuffer_.ringBufferMap_.size() == 1);
-    CPPUNIT_ASSERT(mainbuffer_.removeRingBuffer(test_id));
-    CPPUNIT_ASSERT(mainbuffer_.ringBufferMap_.empty());
-    CPPUNIT_ASSERT(mainbuffer_.getRingBuffer(test_id) == NULL);
+    CPPUNIT_ASSERT(mainbuffer_->removeRingBuffer(null_id));
+    CPPUNIT_ASSERT(mainbuffer_->ringBufferMap_.size() == 1);
+    CPPUNIT_ASSERT(mainbuffer_->removeRingBuffer(test_id));
+    CPPUNIT_ASSERT(mainbuffer_->ringBufferMap_.empty());
+    CPPUNIT_ASSERT(mainbuffer_->getRingBuffer(test_id) == NULL);
 
-    iter = mainbuffer_.ringBufferMap_.find(test_id);
-    CPPUNIT_ASSERT(iter == mainbuffer_.ringBufferMap_.end());
+    iter = mainbuffer_->ringBufferMap_.find(test_id);
+    CPPUNIT_ASSERT(iter == mainbuffer_->ringBufferMap_.end());
 
 }
 
@@ -88,7 +92,7 @@ void MainBufferTest::testRingBufferReadPointer()
     RingBuffer* test_ring_buffer;
 
     // test ring buffer read pointers (one per participant)
-    test_ring_buffer = mainbuffer_.createRingBuffer(call_id);
+    test_ring_buffer = mainbuffer_->createRingBuffer(call_id);
     CPPUNIT_ASSERT(test_ring_buffer->getNbReadPointer() == 0);
     CPPUNIT_ASSERT(test_ring_buffer->getReadPointer(read_id) == (int) NULL);
 
@@ -138,46 +142,45 @@ void MainBufferTest::testCallIDSet()
     std::string call_id_2 = "call id 2";
 
     // test initial settings
-    CPPUNIT_ASSERT(mainbuffer_.callIDMap_.empty());
-    CPPUNIT_ASSERT(mainbuffer_.ringBufferMap_.empty());
-    iter_map = mainbuffer_.callIDMap_.find(test_id);
-    CPPUNIT_ASSERT(iter_map ==mainbuffer_.callIDMap_.end());
+    CPPUNIT_ASSERT(mainbuffer_->callIDMap_.empty());
+    CPPUNIT_ASSERT(mainbuffer_->ringBufferMap_.empty());
+    iter_map = mainbuffer_->callIDMap_.find(test_id);
+    CPPUNIT_ASSERT(iter_map == mainbuffer_->callIDMap_.end());
 
     // test callidset creation
-    mainbuffer_.createCallIDSet(test_id);
-    CPPUNIT_ASSERT(mainbuffer_.callIDMap_.size() == 1);
-    iter_map = mainbuffer_.callIDMap_.find(test_id);
+    mainbuffer_->createCallIDSet(test_id);
+    CPPUNIT_ASSERT(mainbuffer_->callIDMap_.size() == 1);
+    iter_map = mainbuffer_->callIDMap_.find(test_id);
     CPPUNIT_ASSERT(iter_map->first == test_id);
-    CPPUNIT_ASSERT(iter_map->second == mainbuffer_.getCallIDSet(test_id));
-
-    CPPUNIT_ASSERT(mainbuffer_.getCallIDSet(false_id) == NULL);
-    CPPUNIT_ASSERT(mainbuffer_.getCallIDSet(test_id) != NULL);
+    CPPUNIT_ASSERT(iter_map->second == mainbuffer_->getCallIDSet(test_id));
 
+    CPPUNIT_ASSERT(mainbuffer_->getCallIDSet(false_id) == NULL);
+    CPPUNIT_ASSERT(mainbuffer_->getCallIDSet(test_id) != NULL);
 
     // Test callIDSet add call_ids
-    mainbuffer_.addCallIDtoSet(test_id, call_id_1);
-    iter_map = mainbuffer_.callIDMap_.find(test_id);
+    mainbuffer_->addCallIDtoSet(test_id, call_id_1);
+    iter_map = mainbuffer_->callIDMap_.find(test_id);
     CPPUNIT_ASSERT(iter_map->second->size() == 1);
     iter_set = iter_map->second->find(call_id_1);
     CPPUNIT_ASSERT(*iter_set == call_id_1);
 
     // test add second call id to set
-    mainbuffer_.addCallIDtoSet(test_id, call_id_2);
-    iter_map = mainbuffer_.callIDMap_.find(test_id);
+    mainbuffer_->addCallIDtoSet(test_id, call_id_2);
+    iter_map = mainbuffer_->callIDMap_.find(test_id);
     CPPUNIT_ASSERT(iter_map->second->size() == 2);
     iter_set = iter_map->second->find(call_id_2);
     CPPUNIT_ASSERT(*iter_set == call_id_2);
 
     // test add a call id twice
-    mainbuffer_.addCallIDtoSet(test_id, call_id_2);
-    iter_map = mainbuffer_.callIDMap_.find(test_id);
+    mainbuffer_->addCallIDtoSet(test_id, call_id_2);
+    iter_map = mainbuffer_->callIDMap_.find(test_id);
     CPPUNIT_ASSERT(iter_map->second->size() == 2);
     iter_set = iter_map->second->find(call_id_2);
     CPPUNIT_ASSERT(*iter_set == call_id_2);
 
     // test remove a call id
-    mainbuffer_.removeCallIDfromSet(test_id, call_id_2);
-    iter_map = mainbuffer_.callIDMap_.find(test_id);
+    mainbuffer_->removeCallIDfromSet(test_id, call_id_2);
+    iter_map = mainbuffer_->callIDMap_.find(test_id);
     CPPUNIT_ASSERT(iter_map->second->size() == 1);
     iter_set = iter_map->second->find(call_id_1);
     CPPUNIT_ASSERT(*iter_set == call_id_1);
@@ -185,8 +188,8 @@ void MainBufferTest::testCallIDSet()
     CPPUNIT_ASSERT(iter_set == iter_map->second->end());
 
     // test remove a call id twice
-    mainbuffer_.removeCallIDfromSet(test_id, call_id_2);
-    iter_map = mainbuffer_.callIDMap_.find(test_id);
+    mainbuffer_->removeCallIDfromSet(test_id, call_id_2);
+    iter_map = mainbuffer_->callIDMap_.find(test_id);
     CPPUNIT_ASSERT(iter_map->second->size() == 1);
     iter_set = iter_map->second->find(call_id_1);
     CPPUNIT_ASSERT(*iter_set == call_id_1);
@@ -194,13 +197,13 @@ void MainBufferTest::testCallIDSet()
     CPPUNIT_ASSERT(iter_set == iter_map->second->end());
 
     // Test removeCallIDSet
-    CPPUNIT_ASSERT(!mainbuffer_.removeCallIDSet(false_id));
-    CPPUNIT_ASSERT(mainbuffer_.callIDMap_.size() == 1);
-    CPPUNIT_ASSERT(mainbuffer_.removeCallIDSet(test_id));
-    CPPUNIT_ASSERT(mainbuffer_.callIDMap_.empty());
+    CPPUNIT_ASSERT(!mainbuffer_->removeCallIDSet(false_id));
+    CPPUNIT_ASSERT(mainbuffer_->callIDMap_.size() == 1);
+    CPPUNIT_ASSERT(mainbuffer_->removeCallIDSet(test_id));
+    CPPUNIT_ASSERT(mainbuffer_->callIDMap_.empty());
 
-    iter_map = mainbuffer_.callIDMap_.find(test_id);
-    CPPUNIT_ASSERT(iter_map == mainbuffer_.callIDMap_.end());
+    iter_map = mainbuffer_->callIDMap_.find(test_id);
+    CPPUNIT_ASSERT(iter_map == mainbuffer_->callIDMap_.end());
 }
 
 
@@ -208,113 +211,79 @@ void MainBufferTest::testRingBufferInt()
 {
     TITLE();
 
-    // CallID test_id = "test_int";
-
     int testint1 = 12;
     int testint2 = 13;
 
     // test with default ring buffer
-    RingBuffer* test_ring_buffer = mainbuffer_.createRingBuffer(default_id);
+    RingBuffer* test_ring_buffer = mainbuffer_->createRingBuffer(MainBuffer::DEFAULT_ID);
 
     // initial state
-    int init_put_size = test_ring_buffer->AvailForPut();
     CPPUNIT_ASSERT(test_ring_buffer->putLen() == 0);
-    CPPUNIT_ASSERT(test_ring_buffer->getReadPointer() == 0);
+    CPPUNIT_ASSERT(test_ring_buffer->getReadPointer(MainBuffer::DEFAULT_ID) == 0);
 
     // add some data
-    CPPUNIT_ASSERT(test_ring_buffer->Put(&testint1, sizeof(int)) == sizeof(int));
+    test_ring_buffer->Put(&testint1, sizeof(int));
     CPPUNIT_ASSERT(test_ring_buffer->putLen() == sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == (init_put_size - (int) sizeof(int)));
-    CPPUNIT_ASSERT(test_ring_buffer->getReadPointer() == 0);
+    CPPUNIT_ASSERT(test_ring_buffer->getReadPointer(MainBuffer::DEFAULT_ID) == 0);
 
     // add some other data
-    CPPUNIT_ASSERT(test_ring_buffer->Put(&testint2, sizeof(int)) == sizeof(int));
+    test_ring_buffer->Put(&testint2, sizeof(int));
     CPPUNIT_ASSERT(test_ring_buffer->putLen() == 2*sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == (init_put_size - 2* (int) sizeof(int)));
-    CPPUNIT_ASSERT(test_ring_buffer->getReadPointer() == 0);
+    CPPUNIT_ASSERT(test_ring_buffer->getReadPointer(MainBuffer::DEFAULT_ID) == 0);
 
     int testget = (int) NULL;
 
     // get some data (without any read pointers)
     CPPUNIT_ASSERT(test_ring_buffer->getNbReadPointer() == 0);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet() == 2*sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->getLen() == 2*sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->Get(&testget, sizeof(int)) == 0);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet() == 2*sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->getLen() == 2*sizeof(int));
+    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(MainBuffer::DEFAULT_ID) == 2*sizeof(int));
+    CPPUNIT_ASSERT(test_ring_buffer->getLen(MainBuffer::DEFAULT_ID) == 2*sizeof(int));
+    CPPUNIT_ASSERT(test_ring_buffer->Get(&testget, sizeof(int), MainBuffer::DEFAULT_ID) == 0);
+    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(MainBuffer::DEFAULT_ID) == 2*sizeof(int));
+    CPPUNIT_ASSERT(test_ring_buffer->getLen(MainBuffer::DEFAULT_ID) == 2*sizeof(int));
     CPPUNIT_ASSERT(testget == (int) NULL);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == (init_put_size - 2* (int) sizeof(int)));
-    CPPUNIT_ASSERT(test_ring_buffer->getReadPointer() == 0);
+    CPPUNIT_ASSERT(test_ring_buffer->getReadPointer(MainBuffer::DEFAULT_ID) == 0);
 
     // get some data (with a read pointer)
     CPPUNIT_ASSERT(test_ring_buffer->getNbReadPointer() == 0);
-    test_ring_buffer->createReadPointer(default_id);
+    test_ring_buffer->createReadPointer(MainBuffer::DEFAULT_ID);
     CPPUNIT_ASSERT(test_ring_buffer->getNbReadPointer() == 1);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet() == 0);
-    CPPUNIT_ASSERT(test_ring_buffer->getLen() == 0);
+    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(MainBuffer::DEFAULT_ID) == 0);
+    CPPUNIT_ASSERT(test_ring_buffer->getLen(MainBuffer::DEFAULT_ID) == 0);
 
     // add some data
-    CPPUNIT_ASSERT(test_ring_buffer->Put(&testint1, sizeof(int)) == sizeof(int));
+    test_ring_buffer->Put(&testint1, sizeof(int));
     CPPUNIT_ASSERT(test_ring_buffer->putLen() == sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == (init_put_size - (int) sizeof(int)));
-    CPPUNIT_ASSERT(test_ring_buffer->getReadPointer() == 2*sizeof(int));
+    CPPUNIT_ASSERT(test_ring_buffer->getReadPointer(MainBuffer::DEFAULT_ID) == 2*sizeof(int));
 
     // add some other data
-    CPPUNIT_ASSERT(test_ring_buffer->Put(&testint2, sizeof(int)) == sizeof(int));
+    test_ring_buffer->Put(&testint2, sizeof(int));
     CPPUNIT_ASSERT(test_ring_buffer->putLen() == 2*sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == (init_put_size - 2* (int) sizeof(int)));
-    CPPUNIT_ASSERT(test_ring_buffer->getReadPointer() == 2*sizeof(int));
-
-    CPPUNIT_ASSERT(test_ring_buffer->Get(&testget, sizeof(int), 100, default_id) == sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet() == sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->getLen() == sizeof(int));
-    CPPUNIT_ASSERT(testget == testint1);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == (init_put_size - (int) sizeof(int)));
-    CPPUNIT_ASSERT(test_ring_buffer->getReadPointer() == 3*sizeof(int));
-
-    CPPUNIT_ASSERT(test_ring_buffer->Get(&testget, sizeof(int)) == sizeof(int));
-    CPPUNIT_ASSERT(testget == testint2);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet() == 0);
-    CPPUNIT_ASSERT(test_ring_buffer->getLen() == 0);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == init_put_size);
-    CPPUNIT_ASSERT(test_ring_buffer->getReadPointer() == 4*sizeof(int));
+    CPPUNIT_ASSERT(test_ring_buffer->getReadPointer(MainBuffer::DEFAULT_ID) == 2*sizeof(int));
 
+    CPPUNIT_ASSERT(test_ring_buffer->Get(&testget, sizeof(int), MainBuffer::DEFAULT_ID) == sizeof(int));
 
     // test flush data
-    init_put_size = test_ring_buffer->AvailForPut();
-    CPPUNIT_ASSERT(test_ring_buffer->putLen() == 0);
-    CPPUNIT_ASSERT(test_ring_buffer->Put(&testint1, sizeof(int)) == sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->putLen() == sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == (init_put_size - (int) sizeof(int)));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet() == sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->getLen() == sizeof(int));
-
+    test_ring_buffer->Put(&testint1, sizeof(int));
 
-    test_ring_buffer->flush();
+    test_ring_buffer->flush(MainBuffer::DEFAULT_ID);
     CPPUNIT_ASSERT(test_ring_buffer->putLen() == 0);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == init_put_size);
-    CPPUNIT_ASSERT(test_ring_buffer->getLen() == 0);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet() == 0);
-    CPPUNIT_ASSERT(test_ring_buffer->getReadPointer() == 5*sizeof(int));
+    CPPUNIT_ASSERT(test_ring_buffer->getLen(MainBuffer::DEFAULT_ID) == 0);
+    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(MainBuffer::DEFAULT_ID) == 0);
+    CPPUNIT_ASSERT(test_ring_buffer->getReadPointer(MainBuffer::DEFAULT_ID) == 5*sizeof(int));
 
     // test flush data
-    init_put_size = test_ring_buffer->AvailForPut();
     CPPUNIT_ASSERT(test_ring_buffer->putLen() == 0);
-    CPPUNIT_ASSERT(test_ring_buffer->Put(&testint1, sizeof(int)) == sizeof(int));
+    test_ring_buffer->Put(&testint1, sizeof(int));
     CPPUNIT_ASSERT(test_ring_buffer->putLen() == sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == (init_put_size - (int) sizeof(int)));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet() == sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->getLen() == sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->getReadPointer() == 5*sizeof(int));
+    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(MainBuffer::DEFAULT_ID) == sizeof(int));
+    CPPUNIT_ASSERT(test_ring_buffer->getLen(MainBuffer::DEFAULT_ID) == sizeof(int));
+    CPPUNIT_ASSERT(test_ring_buffer->getReadPointer(MainBuffer::DEFAULT_ID) == 5*sizeof(int));
 
-    test_ring_buffer->Discard(sizeof(int));
+    test_ring_buffer->Discard(sizeof(int), MainBuffer::DEFAULT_ID);
     CPPUNIT_ASSERT(test_ring_buffer->putLen() == 0);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == init_put_size);
-    CPPUNIT_ASSERT(test_ring_buffer->getLen() == 0);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet() == 0);
-    CPPUNIT_ASSERT(test_ring_buffer->getReadPointer() == 6*sizeof(int));
-
-
+    CPPUNIT_ASSERT(test_ring_buffer->getLen(MainBuffer::DEFAULT_ID) == 0);
+    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(MainBuffer::DEFAULT_ID) == 0);
+    CPPUNIT_ASSERT(test_ring_buffer->getReadPointer(MainBuffer::DEFAULT_ID) == 6*sizeof(int));
 }
 
 
@@ -326,26 +295,21 @@ void MainBufferTest::testRingBufferNonDefaultID()
 
     int testint1 = 12;
     int testint2 = 13;
-    int init_put_size;
-
 
     // test putData, getData with arbitrary read pointer id
-    RingBuffer* test_ring_buffer = mainbuffer_.createRingBuffer(default_id);
+    RingBuffer* test_ring_buffer = mainbuffer_->createRingBuffer(MainBuffer::DEFAULT_ID);
     test_ring_buffer->createReadPointer(test_id);
 
-    init_put_size = test_ring_buffer->AvailForPut();
     CPPUNIT_ASSERT(test_ring_buffer->putLen() == 0);
-    CPPUNIT_ASSERT(test_ring_buffer->getReadPointer(default_id) == 0);
+    CPPUNIT_ASSERT(test_ring_buffer->getReadPointer(MainBuffer::DEFAULT_ID) == 0);
 
-    CPPUNIT_ASSERT(test_ring_buffer->Put(&testint1, sizeof(int)) == sizeof(int));
+    test_ring_buffer->Put(&testint1, sizeof(int));
     CPPUNIT_ASSERT(test_ring_buffer->putLen() == sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == (init_put_size - (int) sizeof(int)));
-    CPPUNIT_ASSERT(test_ring_buffer->getReadPointer(default_id) == 0);
+    CPPUNIT_ASSERT(test_ring_buffer->getReadPointer(MainBuffer::DEFAULT_ID) == 0);
 
-    CPPUNIT_ASSERT(test_ring_buffer->Put(&testint2, sizeof(int)) == sizeof(int));
+    test_ring_buffer->Put(&testint2, sizeof(int));
     CPPUNIT_ASSERT(test_ring_buffer->putLen() == 2*sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == (init_put_size - 2* (int) sizeof(int)));
-    CPPUNIT_ASSERT(test_ring_buffer->getReadPointer(default_id) == 0);
+    CPPUNIT_ASSERT(test_ring_buffer->getReadPointer(MainBuffer::DEFAULT_ID) == 0);
 
     int testget;
 
@@ -355,47 +319,39 @@ void MainBufferTest::testRingBufferNonDefaultID()
     CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id) == sizeof(int));
     CPPUNIT_ASSERT(test_ring_buffer->getLen(test_id) == sizeof(int));
     CPPUNIT_ASSERT(testget == testint1);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == (init_put_size - (int) sizeof(int)));
     CPPUNIT_ASSERT(test_ring_buffer->getReadPointer(test_id) == sizeof(int));
 
-    CPPUNIT_ASSERT(test_ring_buffer->Get(&testget, sizeof(int), 100, test_id) == sizeof(int));
+    CPPUNIT_ASSERT(test_ring_buffer->Get(&testget, 100, test_id) == sizeof(int));
     CPPUNIT_ASSERT(testget == testint2);
     CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id) == 0);
     CPPUNIT_ASSERT(test_ring_buffer->getLen(test_id) == 0);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == init_put_size);
     CPPUNIT_ASSERT(test_ring_buffer->getReadPointer(test_id) == 2*sizeof(int));
 
 
     // test flush data
-    init_put_size = test_ring_buffer->AvailForPut();
     CPPUNIT_ASSERT(test_ring_buffer->putLen() == 0);
-    CPPUNIT_ASSERT(test_ring_buffer->Put(&testint1, sizeof(int)) == sizeof(int));
+    test_ring_buffer->Put(&testint1, sizeof(int));
     CPPUNIT_ASSERT(test_ring_buffer->putLen() == sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == (init_put_size - (int) sizeof(int)));
     CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id) == sizeof(int));
     CPPUNIT_ASSERT(test_ring_buffer->getLen(test_id) == sizeof(int));
 
 
     test_ring_buffer->flush(test_id);
     CPPUNIT_ASSERT(test_ring_buffer->putLen() == 0);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == init_put_size);
     CPPUNIT_ASSERT(test_ring_buffer->getLen(test_id) == 0);
     CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id) == 0);
     CPPUNIT_ASSERT(test_ring_buffer->getReadPointer(test_id) == 3*sizeof(int));
 
     // test flush data
-    init_put_size = test_ring_buffer->AvailForPut();
     CPPUNIT_ASSERT(test_ring_buffer->putLen() == 0);
-    CPPUNIT_ASSERT(test_ring_buffer->Put(&testint1, sizeof(int)) == sizeof(int));
+    test_ring_buffer->Put(&testint1, sizeof(int));
     CPPUNIT_ASSERT(test_ring_buffer->putLen() == sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == (init_put_size - (int) sizeof(int)));
     CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id) == sizeof(int));
     CPPUNIT_ASSERT(test_ring_buffer->getLen(test_id) == sizeof(int));
     CPPUNIT_ASSERT(test_ring_buffer->getReadPointer(test_id) == 3*sizeof(int));
 
     test_ring_buffer->Discard(sizeof(int), test_id);
     CPPUNIT_ASSERT(test_ring_buffer->putLen() == 0);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == init_put_size);
     CPPUNIT_ASSERT(test_ring_buffer->getLen(test_id) == 0);
     CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id) == 0);
     CPPUNIT_ASSERT(test_ring_buffer->getReadPointer(test_id) == 4*sizeof(int));
@@ -411,28 +367,28 @@ void MainBufferTest::testRingBufferFloat()
     float testfloat1 = 12.5;
     float testfloat2 = 13.4;
 
-    RingBuffer* test_ring_buffer = mainbuffer_.createRingBuffer(default_id);
-    test_ring_buffer->createReadPointer(default_id);
+    RingBuffer* test_ring_buffer = mainbuffer_->createRingBuffer(MainBuffer::DEFAULT_ID);
+    test_ring_buffer->createReadPointer(MainBuffer::DEFAULT_ID);
 
 
-    CPPUNIT_ASSERT(test_ring_buffer->Put(&testfloat1, sizeof(float)) == sizeof(float));
+    test_ring_buffer->Put(&testfloat1, sizeof(float));
     CPPUNIT_ASSERT(test_ring_buffer->putLen() == sizeof(float));
 
-    CPPUNIT_ASSERT(test_ring_buffer->Put(&testfloat2, sizeof(float)) == sizeof(float));
+    test_ring_buffer->Put(&testfloat2, sizeof(float));
     CPPUNIT_ASSERT(test_ring_buffer->putLen() == 2*sizeof(float));
 
     float testget;
 
-    CPPUNIT_ASSERT(test_ring_buffer->Get(&testget, sizeof(float)) == sizeof(float));
-    CPPUNIT_ASSERT(test_ring_buffer->getLen() == sizeof(float));
+    CPPUNIT_ASSERT(test_ring_buffer->Get(&testget, sizeof(float), MainBuffer::DEFAULT_ID) == sizeof(float));
+    CPPUNIT_ASSERT(test_ring_buffer->getLen(MainBuffer::DEFAULT_ID) == sizeof(float));
     CPPUNIT_ASSERT(testget == testfloat1);
 
-    CPPUNIT_ASSERT(test_ring_buffer->Get(&testget, sizeof(float)) == sizeof(float));
+    CPPUNIT_ASSERT(test_ring_buffer->Get(&testget, sizeof(float), MainBuffer::DEFAULT_ID) == sizeof(float));
     CPPUNIT_ASSERT(testget == testfloat2);
-    CPPUNIT_ASSERT(test_ring_buffer->getLen() == 0);
+    CPPUNIT_ASSERT(test_ring_buffer->getLen(MainBuffer::DEFAULT_ID) == 0);
 
-    CPPUNIT_ASSERT(test_ring_buffer->Put(&testfloat1, sizeof(float)) == sizeof(float));
-    test_ring_buffer->flush();
+    test_ring_buffer->Put(&testfloat1, sizeof(float));
+    test_ring_buffer->flush(MainBuffer::DEFAULT_ID);
     CPPUNIT_ASSERT(test_ring_buffer->putLen() == 0);
 
 }
@@ -441,15 +397,15 @@ void MainBufferTest::testRingBufferFloat()
 void MainBufferTest::testTwoPointer()
 {
     TITLE();
-    RingBuffer* input_buffer = mainbuffer_.createRingBuffer(default_id);
-    input_buffer->createReadPointer(default_id);
-    RingBuffer* output_buffer = mainbuffer_.getRingBuffer(default_id);
+    RingBuffer* input_buffer = mainbuffer_->createRingBuffer(MainBuffer::DEFAULT_ID);
+    input_buffer->createReadPointer(MainBuffer::DEFAULT_ID);
+    RingBuffer* output_buffer = mainbuffer_->getRingBuffer(MainBuffer::DEFAULT_ID);
 
     int test_input = 12;
-    int test_output;
+    int test_output = 0;
 
-    CPPUNIT_ASSERT(input_buffer->Put(&test_input, sizeof(int)) == sizeof(int));
-    CPPUNIT_ASSERT(output_buffer->Get(&test_output, sizeof(float)) == sizeof(float));
+    input_buffer->Put(&test_input, sizeof(int));
+    CPPUNIT_ASSERT(output_buffer->Get(&test_output, sizeof(float), MainBuffer::DEFAULT_ID) == sizeof(float));
     CPPUNIT_ASSERT(test_input == test_output);
 
 }
@@ -470,266 +426,266 @@ void MainBufferTest::testBindUnbindBuffer()
     RingBuffer* ringbuffer;
 
     // test initial state with no ring brffer created
-    CPPUNIT_ASSERT(mainbuffer_.ringBufferMap_.size() == 0);
-    CPPUNIT_ASSERT(mainbuffer_.callIDMap_.size() == 0);
+    CPPUNIT_ASSERT(mainbuffer_->ringBufferMap_.size() == 0);
+    CPPUNIT_ASSERT(mainbuffer_->callIDMap_.size() == 0);
 
-    iter_buffer = mainbuffer_.ringBufferMap_.find(default_id);
-    CPPUNIT_ASSERT(iter_buffer == mainbuffer_.ringBufferMap_.end());
-    iter_idset = mainbuffer_.callIDMap_.find(default_id);
-    CPPUNIT_ASSERT(iter_idset == mainbuffer_.callIDMap_.end());
+    iter_buffer = mainbuffer_->ringBufferMap_.find(MainBuffer::DEFAULT_ID);
+    CPPUNIT_ASSERT(iter_buffer == mainbuffer_->ringBufferMap_.end());
+    iter_idset = mainbuffer_->callIDMap_.find(MainBuffer::DEFAULT_ID);
+    CPPUNIT_ASSERT(iter_idset == mainbuffer_->callIDMap_.end());
 
-    // bind test_id1 with default_id (both buffer not already created)
-    mainbuffer_.bindCallID(test_id1);
+    // bind test_id1 with MainBuffer::DEFAULT_ID (both buffer not already created)
+    mainbuffer_->bindCallID(test_id1, MainBuffer::DEFAULT_ID);
 
-    CPPUNIT_ASSERT(mainbuffer_.ringBufferMap_.size() == 2);
-    CPPUNIT_ASSERT(mainbuffer_.callIDMap_.size() == 2);
+    CPPUNIT_ASSERT(mainbuffer_->ringBufferMap_.size() == 2);
+    CPPUNIT_ASSERT(mainbuffer_->callIDMap_.size() == 2);
 
-    iter_buffer = mainbuffer_.ringBufferMap_.find(default_id);
-    CPPUNIT_ASSERT(iter_buffer->first == default_id);
-    CPPUNIT_ASSERT(iter_buffer->second == mainbuffer_.getRingBuffer(default_id));
+    iter_buffer = mainbuffer_->ringBufferMap_.find(MainBuffer::DEFAULT_ID);
+    CPPUNIT_ASSERT(iter_buffer->first == MainBuffer::DEFAULT_ID);
+    CPPUNIT_ASSERT(iter_buffer->second == mainbuffer_->getRingBuffer(MainBuffer::DEFAULT_ID));
 
-    iter_buffer = mainbuffer_.ringBufferMap_.find(test_id1);
+    iter_buffer = mainbuffer_->ringBufferMap_.find(test_id1);
     CPPUNIT_ASSERT(iter_buffer->first == test_id1);
-    CPPUNIT_ASSERT(iter_buffer->second == mainbuffer_.getRingBuffer(test_id1));
+    CPPUNIT_ASSERT(iter_buffer->second == mainbuffer_->getRingBuffer(test_id1));
 
-    iter_idset = mainbuffer_.callIDMap_.find(default_id);
+    iter_idset = mainbuffer_->callIDMap_.find(MainBuffer::DEFAULT_ID);
     CPPUNIT_ASSERT(iter_idset->second->size() == 1);
     iter_id = iter_idset->second->find(test_id1);
     CPPUNIT_ASSERT(*iter_id == test_id1);
 
-    iter_idset = mainbuffer_.callIDMap_.find(test_id1);
+    iter_idset = mainbuffer_->callIDMap_.find(test_id1);
     CPPUNIT_ASSERT(iter_idset->second->size() == 1);
-    iter_id = iter_idset->second->find(default_id);
-    CPPUNIT_ASSERT(*iter_id == default_id);
+    iter_id = iter_idset->second->find(MainBuffer::DEFAULT_ID);
+    CPPUNIT_ASSERT(*iter_id == MainBuffer::DEFAULT_ID);
 
-    ringbuffer = mainbuffer_.getRingBuffer(default_id);
+    ringbuffer = mainbuffer_->getRingBuffer(MainBuffer::DEFAULT_ID);
     CPPUNIT_ASSERT(ringbuffer != NULL);
     CPPUNIT_ASSERT(ringbuffer->getNbReadPointer() == 1);
-    iter_readpointer = ringbuffer->_readpointer.find(test_id1);
+    iter_readpointer = ringbuffer->readpointer_.find(test_id1);
     CPPUNIT_ASSERT(iter_readpointer->first == test_id1);
     CPPUNIT_ASSERT(iter_readpointer->second == 0);
 
-    ringbuffer = mainbuffer_.getRingBuffer(test_id1);
+    ringbuffer = mainbuffer_->getRingBuffer(test_id1);
     CPPUNIT_ASSERT(ringbuffer != NULL);
     CPPUNIT_ASSERT(ringbuffer->getNbReadPointer() == 1);
-    iter_readpointer = ringbuffer->_readpointer.find(default_id);
-    CPPUNIT_ASSERT(iter_readpointer->first == default_id);
+    iter_readpointer = ringbuffer->readpointer_.find(MainBuffer::DEFAULT_ID);
+    CPPUNIT_ASSERT(iter_readpointer->first == MainBuffer::DEFAULT_ID);
     CPPUNIT_ASSERT(iter_readpointer->second == 0);
 
 
-    // unbind test_id1 with default_id
-    mainbuffer_.unBindCallID(test_id1);
+    // unbind test_id1 with MainBuffer::DEFAULT_ID
+    mainbuffer_->unBindCallID(test_id1, MainBuffer::DEFAULT_ID);
 
-    DEBUG("%i", (int)(mainbuffer_.ringBufferMap_.size()));
-    CPPUNIT_ASSERT(mainbuffer_.ringBufferMap_.size() == 0);
-    CPPUNIT_ASSERT(mainbuffer_.callIDMap_.size() == 0);
+    DEBUG("%i", (int)(mainbuffer_->ringBufferMap_.size()));
+    CPPUNIT_ASSERT(mainbuffer_->ringBufferMap_.size() == 0);
+    CPPUNIT_ASSERT(mainbuffer_->callIDMap_.size() == 0);
 
-    CPPUNIT_ASSERT(mainbuffer_.getRingBuffer(default_id) == NULL);
-    CPPUNIT_ASSERT(mainbuffer_.getRingBuffer(test_id1) == NULL);
+    CPPUNIT_ASSERT(mainbuffer_->getRingBuffer(MainBuffer::DEFAULT_ID) == NULL);
+    CPPUNIT_ASSERT(mainbuffer_->getRingBuffer(test_id1) == NULL);
 
 
-    // bind test_id2 with default_id (default_id already created)
+    // bind test_id2 with MainBuffer::DEFAULT_ID (MainBuffer::DEFAULT_ID already created)
     // calling it twice not supposed to break anything
-    mainbuffer_.bindCallID(test_id1, default_id);
-    mainbuffer_.bindCallID(test_id1, default_id);
+    mainbuffer_->bindCallID(test_id1, MainBuffer::DEFAULT_ID);
+    mainbuffer_->bindCallID(test_id1, MainBuffer::DEFAULT_ID);
 
-    CPPUNIT_ASSERT(mainbuffer_.ringBufferMap_.size() == 2);
-    CPPUNIT_ASSERT(mainbuffer_.callIDMap_.size() == 2);
+    CPPUNIT_ASSERT(mainbuffer_->ringBufferMap_.size() == 2);
+    CPPUNIT_ASSERT(mainbuffer_->callIDMap_.size() == 2);
 
-    iter_buffer = mainbuffer_.ringBufferMap_.find(test_id2);
-    CPPUNIT_ASSERT(iter_buffer == mainbuffer_.ringBufferMap_.end());
-    iter_idset = mainbuffer_.callIDMap_.find(test_id2);
-    CPPUNIT_ASSERT(iter_idset == mainbuffer_.callIDMap_.end());
+    iter_buffer = mainbuffer_->ringBufferMap_.find(test_id2);
+    CPPUNIT_ASSERT(iter_buffer == mainbuffer_->ringBufferMap_.end());
+    iter_idset = mainbuffer_->callIDMap_.find(test_id2);
+    CPPUNIT_ASSERT(iter_idset == mainbuffer_->callIDMap_.end());
 
-    mainbuffer_.bindCallID(test_id2, default_id);
-    mainbuffer_.bindCallID(test_id2, default_id);
+    mainbuffer_->bindCallID(test_id2, MainBuffer::DEFAULT_ID);
+    mainbuffer_->bindCallID(test_id2, MainBuffer::DEFAULT_ID);
 
-    CPPUNIT_ASSERT(mainbuffer_.ringBufferMap_.size() == 3);
-    CPPUNIT_ASSERT(mainbuffer_.callIDMap_.size() == 3);
+    CPPUNIT_ASSERT(mainbuffer_->ringBufferMap_.size() == 3);
+    CPPUNIT_ASSERT(mainbuffer_->callIDMap_.size() == 3);
 
-    iter_buffer = mainbuffer_.ringBufferMap_.find(default_id);
-    CPPUNIT_ASSERT(iter_buffer->first == default_id);
-    CPPUNIT_ASSERT(iter_buffer->second == mainbuffer_.getRingBuffer(default_id));
+    iter_buffer = mainbuffer_->ringBufferMap_.find(MainBuffer::DEFAULT_ID);
+    CPPUNIT_ASSERT(iter_buffer->first == MainBuffer::DEFAULT_ID);
+    CPPUNIT_ASSERT(iter_buffer->second == mainbuffer_->getRingBuffer(MainBuffer::DEFAULT_ID));
 
-    iter_buffer = mainbuffer_.ringBufferMap_.find(test_id1);
+    iter_buffer = mainbuffer_->ringBufferMap_.find(test_id1);
     CPPUNIT_ASSERT(iter_buffer->first == test_id1);
-    CPPUNIT_ASSERT(iter_buffer->second == mainbuffer_.getRingBuffer(test_id1));
+    CPPUNIT_ASSERT(iter_buffer->second == mainbuffer_->getRingBuffer(test_id1));
 
-    iter_buffer = mainbuffer_.ringBufferMap_.find(test_id2);
+    iter_buffer = mainbuffer_->ringBufferMap_.find(test_id2);
     CPPUNIT_ASSERT(iter_buffer->first == test_id2);
-    CPPUNIT_ASSERT(iter_buffer->second == mainbuffer_.getRingBuffer(test_id2));
+    CPPUNIT_ASSERT(iter_buffer->second == mainbuffer_->getRingBuffer(test_id2));
 
-    iter_idset = mainbuffer_.callIDMap_.find(default_id);
+    iter_idset = mainbuffer_->callIDMap_.find(MainBuffer::DEFAULT_ID);
     CPPUNIT_ASSERT(iter_idset->second->size() == 2);
     iter_id = iter_idset->second->find(test_id1);
     CPPUNIT_ASSERT(*iter_id == test_id1);
     iter_id = iter_idset->second->find(test_id2);
     CPPUNIT_ASSERT(*iter_id == test_id2);
 
-    iter_idset = mainbuffer_.callIDMap_.find(test_id1);
+    iter_idset = mainbuffer_->callIDMap_.find(test_id1);
     CPPUNIT_ASSERT(iter_idset->second->size() == 1);
-    iter_id = iter_idset->second->find(default_id);
-    CPPUNIT_ASSERT(*iter_id == default_id);
+    iter_id = iter_idset->second->find(MainBuffer::DEFAULT_ID);
+    CPPUNIT_ASSERT(*iter_id == MainBuffer::DEFAULT_ID);
 
-    iter_idset = mainbuffer_.callIDMap_.find(test_id2);
+    iter_idset = mainbuffer_->callIDMap_.find(test_id2);
     CPPUNIT_ASSERT(iter_idset->second->size() == 1);
-    iter_id = iter_idset->second->find(default_id);
-    CPPUNIT_ASSERT(*iter_id == default_id);
+    iter_id = iter_idset->second->find(MainBuffer::DEFAULT_ID);
+    CPPUNIT_ASSERT(*iter_id == MainBuffer::DEFAULT_ID);
 
-    ringbuffer = mainbuffer_.getRingBuffer(default_id);
+    ringbuffer = mainbuffer_->getRingBuffer(MainBuffer::DEFAULT_ID);
     CPPUNIT_ASSERT(ringbuffer != NULL);
     CPPUNIT_ASSERT(ringbuffer->getNbReadPointer() == 2);
-    iter_readpointer = ringbuffer->_readpointer.find(test_id1);
+    iter_readpointer = ringbuffer->readpointer_.find(test_id1);
     CPPUNIT_ASSERT(iter_readpointer->first == test_id1);
     CPPUNIT_ASSERT(iter_readpointer->second == 0);
-    iter_readpointer = ringbuffer->_readpointer.find(test_id2);
+    iter_readpointer = ringbuffer->readpointer_.find(test_id2);
     CPPUNIT_ASSERT(iter_readpointer->first == test_id2);
     CPPUNIT_ASSERT(iter_readpointer->second == 0);
 
-    ringbuffer = mainbuffer_.getRingBuffer(test_id1);
+    ringbuffer = mainbuffer_->getRingBuffer(test_id1);
     CPPUNIT_ASSERT(ringbuffer != NULL);
     CPPUNIT_ASSERT(ringbuffer->getNbReadPointer() == 1);
-    iter_readpointer = ringbuffer->_readpointer.find(default_id);
-    CPPUNIT_ASSERT(iter_readpointer->first == default_id);
+    iter_readpointer = ringbuffer->readpointer_.find(MainBuffer::DEFAULT_ID);
+    CPPUNIT_ASSERT(iter_readpointer->first == MainBuffer::DEFAULT_ID);
     CPPUNIT_ASSERT(iter_readpointer->second == 0);
 
-    ringbuffer = mainbuffer_.getRingBuffer(test_id2);
+    ringbuffer = mainbuffer_->getRingBuffer(test_id2);
     CPPUNIT_ASSERT(ringbuffer != NULL);
     CPPUNIT_ASSERT(ringbuffer->getNbReadPointer() == 1);
-    iter_readpointer = ringbuffer->_readpointer.find(default_id);
-    CPPUNIT_ASSERT(iter_readpointer->first == default_id);
+    iter_readpointer = ringbuffer->readpointer_.find(MainBuffer::DEFAULT_ID);
+    CPPUNIT_ASSERT(iter_readpointer->first == MainBuffer::DEFAULT_ID);
     CPPUNIT_ASSERT(iter_readpointer->second == 0);
 
     // bind test_id1 with test_id2 (both testid1 and test_id2 already created)
     // calling it twice not supposed to break anything
-    mainbuffer_.bindCallID(test_id1, test_id2);
-    mainbuffer_.bindCallID(test_id1, test_id2);
+    mainbuffer_->bindCallID(test_id1, test_id2);
+    mainbuffer_->bindCallID(test_id1, test_id2);
 
-    CPPUNIT_ASSERT(mainbuffer_.ringBufferMap_.size() == 3);
-    CPPUNIT_ASSERT(mainbuffer_.callIDMap_.size() == 3);
+    CPPUNIT_ASSERT(mainbuffer_->ringBufferMap_.size() == 3);
+    CPPUNIT_ASSERT(mainbuffer_->callIDMap_.size() == 3);
 
-    iter_buffer = mainbuffer_.ringBufferMap_.find(default_id);
-    CPPUNIT_ASSERT(iter_buffer->first == default_id);
-    CPPUNIT_ASSERT(iter_buffer->second == mainbuffer_.getRingBuffer(default_id));
+    iter_buffer = mainbuffer_->ringBufferMap_.find(MainBuffer::DEFAULT_ID);
+    CPPUNIT_ASSERT(iter_buffer->first == MainBuffer::DEFAULT_ID);
+    CPPUNIT_ASSERT(iter_buffer->second == mainbuffer_->getRingBuffer(MainBuffer::DEFAULT_ID));
 
-    iter_buffer = mainbuffer_.ringBufferMap_.find(test_id1);
+    iter_buffer = mainbuffer_->ringBufferMap_.find(test_id1);
     CPPUNIT_ASSERT(iter_buffer->first == test_id1);
-    CPPUNIT_ASSERT(iter_buffer->second == mainbuffer_.getRingBuffer(test_id1));
+    CPPUNIT_ASSERT(iter_buffer->second == mainbuffer_->getRingBuffer(test_id1));
 
-    iter_buffer = mainbuffer_.ringBufferMap_.find(test_id2);
+    iter_buffer = mainbuffer_->ringBufferMap_.find(test_id2);
     CPPUNIT_ASSERT(iter_buffer->first == test_id2);
-    CPPUNIT_ASSERT(iter_buffer->second == mainbuffer_.getRingBuffer(test_id2));
+    CPPUNIT_ASSERT(iter_buffer->second == mainbuffer_->getRingBuffer(test_id2));
 
-    iter_idset = mainbuffer_.callIDMap_.find(default_id);
+    iter_idset = mainbuffer_->callIDMap_.find(MainBuffer::DEFAULT_ID);
     CPPUNIT_ASSERT(iter_idset->second->size() == 2);
     iter_id = iter_idset->second->find(test_id1);
     CPPUNIT_ASSERT(*iter_id == test_id1);
     iter_id = iter_idset->second->find(test_id2);
     CPPUNIT_ASSERT(*iter_id == test_id2);
 
-    iter_idset = mainbuffer_.callIDMap_.find(test_id1);
+    iter_idset = mainbuffer_->callIDMap_.find(test_id1);
     CPPUNIT_ASSERT(iter_idset->second->size() == 2);
-    iter_id = iter_idset->second->find(default_id);
-    CPPUNIT_ASSERT(*iter_id == default_id);
+    iter_id = iter_idset->second->find(MainBuffer::DEFAULT_ID);
+    CPPUNIT_ASSERT(*iter_id == MainBuffer::DEFAULT_ID);
     iter_id = iter_idset->second->find(test_id2);
     CPPUNIT_ASSERT(*iter_id == test_id2);
 
-    iter_idset = mainbuffer_.callIDMap_.find(test_id2);
+    iter_idset = mainbuffer_->callIDMap_.find(test_id2);
     CPPUNIT_ASSERT(iter_idset->second->size() == 2);
-    iter_id = iter_idset->second->find(default_id);
-    CPPUNIT_ASSERT(*iter_id == default_id);
+    iter_id = iter_idset->second->find(MainBuffer::DEFAULT_ID);
+    CPPUNIT_ASSERT(*iter_id == MainBuffer::DEFAULT_ID);
     iter_id = iter_idset->second->find(test_id1);
     CPPUNIT_ASSERT(*iter_id == test_id1);
 
-    ringbuffer = mainbuffer_.getRingBuffer(default_id);
+    ringbuffer = mainbuffer_->getRingBuffer(MainBuffer::DEFAULT_ID);
     CPPUNIT_ASSERT(ringbuffer != NULL);
     CPPUNIT_ASSERT(ringbuffer->getNbReadPointer() == 2);
-    iter_readpointer = ringbuffer->_readpointer.find(test_id1);
+    iter_readpointer = ringbuffer->readpointer_.find(test_id1);
     CPPUNIT_ASSERT(iter_readpointer->first == test_id1);
     CPPUNIT_ASSERT(iter_readpointer->second == 0);
-    iter_readpointer = ringbuffer->_readpointer.find(test_id2);
+    iter_readpointer = ringbuffer->readpointer_.find(test_id2);
     CPPUNIT_ASSERT(iter_readpointer->first == test_id2);
     CPPUNIT_ASSERT(iter_readpointer->second == 0);
 
-    ringbuffer = mainbuffer_.getRingBuffer(test_id1);
+    ringbuffer = mainbuffer_->getRingBuffer(test_id1);
     CPPUNIT_ASSERT(ringbuffer != NULL);
     CPPUNIT_ASSERT(ringbuffer->getNbReadPointer() == 2);
-    iter_readpointer = ringbuffer->_readpointer.find(default_id);
-    CPPUNIT_ASSERT(iter_readpointer->first == default_id);
+    iter_readpointer = ringbuffer->readpointer_.find(MainBuffer::DEFAULT_ID);
+    CPPUNIT_ASSERT(iter_readpointer->first == MainBuffer::DEFAULT_ID);
     CPPUNIT_ASSERT(iter_readpointer->second == 0);
-    iter_readpointer = ringbuffer->_readpointer.find(test_id2);
+    iter_readpointer = ringbuffer->readpointer_.find(test_id2);
     CPPUNIT_ASSERT(iter_readpointer->first == test_id2);
     CPPUNIT_ASSERT(iter_readpointer->second == 0);
 
-    ringbuffer = mainbuffer_.getRingBuffer(test_id2);
+    ringbuffer = mainbuffer_->getRingBuffer(test_id2);
     CPPUNIT_ASSERT(ringbuffer != NULL);
     CPPUNIT_ASSERT(ringbuffer->getNbReadPointer() == 2);
-    iter_readpointer = ringbuffer->_readpointer.find(default_id);
-    CPPUNIT_ASSERT(iter_readpointer->first == default_id);
+    iter_readpointer = ringbuffer->readpointer_.find(MainBuffer::DEFAULT_ID);
+    CPPUNIT_ASSERT(iter_readpointer->first == MainBuffer::DEFAULT_ID);
     CPPUNIT_ASSERT(iter_readpointer->second == 0);
-    iter_readpointer = ringbuffer->_readpointer.find(test_id1);
+    iter_readpointer = ringbuffer->readpointer_.find(test_id1);
     CPPUNIT_ASSERT(iter_readpointer->first == test_id1);
     CPPUNIT_ASSERT(iter_readpointer->second == 0);
 
     // unbind test_id1 with test_id2
     // calling it twice not supposed to break anything
-    mainbuffer_.unBindCallID(test_id1, test_id2);
-    mainbuffer_.unBindCallID(test_id1, test_id2);
+    mainbuffer_->unBindCallID(test_id1, test_id2);
+    mainbuffer_->unBindCallID(test_id1, test_id2);
 
-    CPPUNIT_ASSERT(mainbuffer_.ringBufferMap_.size() == 3);
-    CPPUNIT_ASSERT(mainbuffer_.callIDMap_.size() == 3);
+    CPPUNIT_ASSERT(mainbuffer_->ringBufferMap_.size() == 3);
+    CPPUNIT_ASSERT(mainbuffer_->callIDMap_.size() == 3);
 
-    iter_buffer = mainbuffer_.ringBufferMap_.find(default_id);
-    CPPUNIT_ASSERT(iter_buffer->first == default_id);
-    CPPUNIT_ASSERT(iter_buffer->second == mainbuffer_.getRingBuffer(default_id));
+    iter_buffer = mainbuffer_->ringBufferMap_.find(MainBuffer::DEFAULT_ID);
+    CPPUNIT_ASSERT(iter_buffer->first == MainBuffer::DEFAULT_ID);
+    CPPUNIT_ASSERT(iter_buffer->second == mainbuffer_->getRingBuffer(MainBuffer::DEFAULT_ID));
 
-    iter_buffer = mainbuffer_.ringBufferMap_.find(test_id1);
+    iter_buffer = mainbuffer_->ringBufferMap_.find(test_id1);
     CPPUNIT_ASSERT(iter_buffer->first == test_id1);
-    CPPUNIT_ASSERT(iter_buffer->second == mainbuffer_.getRingBuffer(test_id1));
+    CPPUNIT_ASSERT(iter_buffer->second == mainbuffer_->getRingBuffer(test_id1));
 
-    iter_buffer = mainbuffer_.ringBufferMap_.find(test_id2);
+    iter_buffer = mainbuffer_->ringBufferMap_.find(test_id2);
     CPPUNIT_ASSERT(iter_buffer->first == test_id2);
-    CPPUNIT_ASSERT(iter_buffer->second == mainbuffer_.getRingBuffer(test_id2));
+    CPPUNIT_ASSERT(iter_buffer->second == mainbuffer_->getRingBuffer(test_id2));
 
-    iter_idset = mainbuffer_.callIDMap_.find(default_id);
+    iter_idset = mainbuffer_->callIDMap_.find(MainBuffer::DEFAULT_ID);
     CPPUNIT_ASSERT(iter_idset->second->size() == 2);
     iter_id = iter_idset->second->find(test_id1);
     CPPUNIT_ASSERT(*iter_id == test_id1);
     iter_id = iter_idset->second->find(test_id2);
     CPPUNIT_ASSERT(*iter_id == test_id2);
 
-    iter_idset = mainbuffer_.callIDMap_.find(test_id1);
+    iter_idset = mainbuffer_->callIDMap_.find(test_id1);
     CPPUNIT_ASSERT(iter_idset->second->size() == 1);
-    iter_id = iter_idset->second->find(default_id);
-    CPPUNIT_ASSERT(*iter_id == default_id);
+    iter_id = iter_idset->second->find(MainBuffer::DEFAULT_ID);
+    CPPUNIT_ASSERT(*iter_id == MainBuffer::DEFAULT_ID);
 
-    iter_idset = mainbuffer_.callIDMap_.find(test_id2);
+    iter_idset = mainbuffer_->callIDMap_.find(test_id2);
     CPPUNIT_ASSERT(iter_idset->second->size() == 1);
-    iter_id = iter_idset->second->find(default_id);
-    CPPUNIT_ASSERT(*iter_id == default_id);
+    iter_id = iter_idset->second->find(MainBuffer::DEFAULT_ID);
+    CPPUNIT_ASSERT(*iter_id == MainBuffer::DEFAULT_ID);
 
-    ringbuffer = mainbuffer_.getRingBuffer(default_id);
+    ringbuffer = mainbuffer_->getRingBuffer(MainBuffer::DEFAULT_ID);
     CPPUNIT_ASSERT(ringbuffer != NULL);
     CPPUNIT_ASSERT(ringbuffer->getNbReadPointer() == 2);
-    iter_readpointer = ringbuffer->_readpointer.find(test_id1);
+    iter_readpointer = ringbuffer->readpointer_.find(test_id1);
     CPPUNIT_ASSERT(iter_readpointer->first == test_id1);
     CPPUNIT_ASSERT(iter_readpointer->second == 0);
-    iter_readpointer = ringbuffer->_readpointer.find(test_id2);
+    iter_readpointer = ringbuffer->readpointer_.find(test_id2);
     CPPUNIT_ASSERT(iter_readpointer->first == test_id2);
     CPPUNIT_ASSERT(iter_readpointer->second == 0);
 
-    ringbuffer = mainbuffer_.getRingBuffer(test_id1);
+    ringbuffer = mainbuffer_->getRingBuffer(test_id1);
     CPPUNIT_ASSERT(ringbuffer != NULL);
     CPPUNIT_ASSERT(ringbuffer->getNbReadPointer() == 1);
-    iter_readpointer = ringbuffer->_readpointer.find(default_id);
-    CPPUNIT_ASSERT(iter_readpointer->first == default_id);
+    iter_readpointer = ringbuffer->readpointer_.find(MainBuffer::DEFAULT_ID);
+    CPPUNIT_ASSERT(iter_readpointer->first == MainBuffer::DEFAULT_ID);
     CPPUNIT_ASSERT(iter_readpointer->second == 0);
 
-    ringbuffer = mainbuffer_.getRingBuffer(test_id2);
+    ringbuffer = mainbuffer_->getRingBuffer(test_id2);
     CPPUNIT_ASSERT(ringbuffer != NULL);
     CPPUNIT_ASSERT(ringbuffer->getNbReadPointer() == 1);
-    iter_readpointer = ringbuffer->_readpointer.find(default_id);
-    CPPUNIT_ASSERT(iter_readpointer->first == default_id);
+    iter_readpointer = ringbuffer->readpointer_.find(MainBuffer::DEFAULT_ID);
+    CPPUNIT_ASSERT(iter_readpointer->first == MainBuffer::DEFAULT_ID);
     CPPUNIT_ASSERT(iter_readpointer->second == 0);
 
 
@@ -737,118 +693,118 @@ void MainBufferTest::testBindUnbindBuffer()
 
     // unbind test_id1 with test_id2
     // calling it twice not supposed to break anything
-    mainbuffer_.unBindCallID(default_id, test_id2);
-    mainbuffer_.unBindCallID(default_id, test_id2);
+    mainbuffer_->unBindCallID(MainBuffer::DEFAULT_ID, test_id2);
+    mainbuffer_->unBindCallID(MainBuffer::DEFAULT_ID, test_id2);
 
-    CPPUNIT_ASSERT(mainbuffer_.ringBufferMap_.size() == 2);
-    CPPUNIT_ASSERT(mainbuffer_.callIDMap_.size() == 2);
+    CPPUNIT_ASSERT(mainbuffer_->ringBufferMap_.size() == 2);
+    CPPUNIT_ASSERT(mainbuffer_->callIDMap_.size() == 2);
 
-    iter_buffer = mainbuffer_.ringBufferMap_.find(default_id);
-    CPPUNIT_ASSERT(iter_buffer->first == default_id);
-    CPPUNIT_ASSERT(iter_buffer->second == mainbuffer_.getRingBuffer(default_id));
+    iter_buffer = mainbuffer_->ringBufferMap_.find(MainBuffer::DEFAULT_ID);
+    CPPUNIT_ASSERT(iter_buffer->first == MainBuffer::DEFAULT_ID);
+    CPPUNIT_ASSERT(iter_buffer->second == mainbuffer_->getRingBuffer(MainBuffer::DEFAULT_ID));
 
-    iter_buffer = mainbuffer_.ringBufferMap_.find(test_id1);
+    iter_buffer = mainbuffer_->ringBufferMap_.find(test_id1);
     CPPUNIT_ASSERT(iter_buffer->first == test_id1);
-    CPPUNIT_ASSERT(iter_buffer->second == mainbuffer_.getRingBuffer(test_id1));
+    CPPUNIT_ASSERT(iter_buffer->second == mainbuffer_->getRingBuffer(test_id1));
 
-    iter_buffer = mainbuffer_.ringBufferMap_.find(test_id2);
-    CPPUNIT_ASSERT(iter_buffer == mainbuffer_.ringBufferMap_.end());
+    iter_buffer = mainbuffer_->ringBufferMap_.find(test_id2);
+    CPPUNIT_ASSERT(iter_buffer == mainbuffer_->ringBufferMap_.end());
 
-    iter_idset = mainbuffer_.callIDMap_.find(default_id);
+    iter_idset = mainbuffer_->callIDMap_.find(MainBuffer::DEFAULT_ID);
     CPPUNIT_ASSERT(iter_idset->second->size() == 1);
     iter_id = iter_idset->second->find(test_id1);
     CPPUNIT_ASSERT(*iter_id == test_id1);
     iter_id = iter_idset->second->find(test_id2);
     CPPUNIT_ASSERT(iter_id == iter_idset->second->end());
 
-    iter_idset = mainbuffer_.callIDMap_.find(test_id1);
+    iter_idset = mainbuffer_->callIDMap_.find(test_id1);
     CPPUNIT_ASSERT(iter_idset->second->size() == 1);
-    iter_id = iter_idset->second->find(default_id);
-    CPPUNIT_ASSERT(*iter_id == default_id);
+    iter_id = iter_idset->second->find(MainBuffer::DEFAULT_ID);
+    CPPUNIT_ASSERT(*iter_id == MainBuffer::DEFAULT_ID);
 
-    iter_idset = mainbuffer_.callIDMap_.find(test_id2);
-    CPPUNIT_ASSERT(iter_idset == mainbuffer_.callIDMap_.end());
+    iter_idset = mainbuffer_->callIDMap_.find(test_id2);
+    CPPUNIT_ASSERT(iter_idset == mainbuffer_->callIDMap_.end());
 
-    ringbuffer = mainbuffer_.getRingBuffer(default_id);
+    ringbuffer = mainbuffer_->getRingBuffer(MainBuffer::DEFAULT_ID);
     CPPUNIT_ASSERT(ringbuffer != NULL);
     CPPUNIT_ASSERT(ringbuffer->getNbReadPointer() == 1);
-    iter_readpointer = ringbuffer->_readpointer.find(test_id1);
+    iter_readpointer = ringbuffer->readpointer_.find(test_id1);
     CPPUNIT_ASSERT(iter_readpointer->first == test_id1);
     CPPUNIT_ASSERT(iter_readpointer->second == 0);
-    iter_readpointer = ringbuffer->_readpointer.find(test_id2);
-    CPPUNIT_ASSERT(iter_readpointer == ringbuffer->_readpointer.end());
+    iter_readpointer = ringbuffer->readpointer_.find(test_id2);
+    CPPUNIT_ASSERT(iter_readpointer == ringbuffer->readpointer_.end());
 
-    ringbuffer = mainbuffer_.getRingBuffer(test_id1);
+    ringbuffer = mainbuffer_->getRingBuffer(test_id1);
     CPPUNIT_ASSERT(ringbuffer != NULL);
     CPPUNIT_ASSERT(ringbuffer->getNbReadPointer() == 1);
-    iter_readpointer = ringbuffer->_readpointer.find(default_id);
-    CPPUNIT_ASSERT(iter_readpointer->first == default_id);
+    iter_readpointer = ringbuffer->readpointer_.find(MainBuffer::DEFAULT_ID);
+    CPPUNIT_ASSERT(iter_readpointer->first == MainBuffer::DEFAULT_ID);
     CPPUNIT_ASSERT(iter_readpointer->second == 0);
-    iter_readpointer = ringbuffer->_readpointer.find(test_id2);
-    CPPUNIT_ASSERT(iter_readpointer == ringbuffer->_readpointer.end());
+    iter_readpointer = ringbuffer->readpointer_.find(test_id2);
+    CPPUNIT_ASSERT(iter_readpointer == ringbuffer->readpointer_.end());
 
-    CPPUNIT_ASSERT(mainbuffer_.getRingBuffer(test_id2) == NULL);
+    CPPUNIT_ASSERT(mainbuffer_->getRingBuffer(test_id2) == NULL);
 
 
-    mainbuffer_.unBindCallID(default_id, test_id1);
+    mainbuffer_->unBindCallID(MainBuffer::DEFAULT_ID, test_id1);
 
-    CPPUNIT_ASSERT(mainbuffer_.ringBufferMap_.size() == 0);
-    CPPUNIT_ASSERT(mainbuffer_.callIDMap_.size() == 0);
+    CPPUNIT_ASSERT(mainbuffer_->ringBufferMap_.size() == 0);
+    CPPUNIT_ASSERT(mainbuffer_->callIDMap_.size() == 0);
 
     // test unbind all function
-    mainbuffer_.bindCallID(default_id, test_id1);
-    mainbuffer_.bindCallID(default_id, test_id2);
-    mainbuffer_.bindCallID(test_id1, test_id2);
-    CPPUNIT_ASSERT(mainbuffer_.ringBufferMap_.size() == 3);
-    CPPUNIT_ASSERT(mainbuffer_.callIDMap_.size() == 3);
+    mainbuffer_->bindCallID(MainBuffer::DEFAULT_ID, test_id1);
+    mainbuffer_->bindCallID(MainBuffer::DEFAULT_ID, test_id2);
+    mainbuffer_->bindCallID(test_id1, test_id2);
+    CPPUNIT_ASSERT(mainbuffer_->ringBufferMap_.size() == 3);
+    CPPUNIT_ASSERT(mainbuffer_->callIDMap_.size() == 3);
 
-    mainbuffer_.unBindAll(test_id2);
-    CPPUNIT_ASSERT(mainbuffer_.ringBufferMap_.size() == 2);
-    CPPUNIT_ASSERT(mainbuffer_.callIDMap_.size() == 2);
+    mainbuffer_->unBindAll(test_id2);
+    CPPUNIT_ASSERT(mainbuffer_->ringBufferMap_.size() == 2);
+    CPPUNIT_ASSERT(mainbuffer_->callIDMap_.size() == 2);
 
-    iter_buffer = mainbuffer_.ringBufferMap_.find(default_id);
-    CPPUNIT_ASSERT(iter_buffer->first == default_id);
-    CPPUNIT_ASSERT(iter_buffer->second == mainbuffer_.getRingBuffer(default_id));
+    iter_buffer = mainbuffer_->ringBufferMap_.find(MainBuffer::DEFAULT_ID);
+    CPPUNIT_ASSERT(iter_buffer->first == MainBuffer::DEFAULT_ID);
+    CPPUNIT_ASSERT(iter_buffer->second == mainbuffer_->getRingBuffer(MainBuffer::DEFAULT_ID));
 
-    iter_buffer = mainbuffer_.ringBufferMap_.find(test_id1);
+    iter_buffer = mainbuffer_->ringBufferMap_.find(test_id1);
     CPPUNIT_ASSERT(iter_buffer->first == test_id1);
-    CPPUNIT_ASSERT(iter_buffer->second == mainbuffer_.getRingBuffer(test_id1));
+    CPPUNIT_ASSERT(iter_buffer->second == mainbuffer_->getRingBuffer(test_id1));
 
-    iter_buffer = mainbuffer_.ringBufferMap_.find(test_id2);
-    CPPUNIT_ASSERT(iter_buffer == mainbuffer_.ringBufferMap_.end());
+    iter_buffer = mainbuffer_->ringBufferMap_.find(test_id2);
+    CPPUNIT_ASSERT(iter_buffer == mainbuffer_->ringBufferMap_.end());
 
-    iter_idset = mainbuffer_.callIDMap_.find(default_id);
+    iter_idset = mainbuffer_->callIDMap_.find(MainBuffer::DEFAULT_ID);
     CPPUNIT_ASSERT(iter_idset->second->size() == 1);
     iter_id = iter_idset->second->find(test_id1);
     CPPUNIT_ASSERT(*iter_id == test_id1);
     iter_id = iter_idset->second->find(test_id2);
     CPPUNIT_ASSERT(iter_id == iter_idset->second->end());
 
-    iter_idset = mainbuffer_.callIDMap_.find(test_id1);
+    iter_idset = mainbuffer_->callIDMap_.find(test_id1);
     CPPUNIT_ASSERT(iter_idset->second->size() == 1);
-    iter_id = iter_idset->second->find(default_id);
-    CPPUNIT_ASSERT(*iter_id == default_id);
+    iter_id = iter_idset->second->find(MainBuffer::DEFAULT_ID);
+    CPPUNIT_ASSERT(*iter_id == MainBuffer::DEFAULT_ID);
 
-    iter_idset = mainbuffer_.callIDMap_.find(test_id2);
-    CPPUNIT_ASSERT(iter_idset == mainbuffer_.callIDMap_.end());
+    iter_idset = mainbuffer_->callIDMap_.find(test_id2);
+    CPPUNIT_ASSERT(iter_idset == mainbuffer_->callIDMap_.end());
 
-    ringbuffer = mainbuffer_.getRingBuffer(default_id);
+    ringbuffer = mainbuffer_->getRingBuffer(MainBuffer::DEFAULT_ID);
     CPPUNIT_ASSERT(ringbuffer != NULL);
     CPPUNIT_ASSERT(ringbuffer->getNbReadPointer() == 1);
-    iter_readpointer = ringbuffer->_readpointer.find(test_id1);
+    iter_readpointer = ringbuffer->readpointer_.find(test_id1);
     CPPUNIT_ASSERT(iter_readpointer->first == test_id1);
     CPPUNIT_ASSERT(iter_readpointer->second == 0);
-    iter_readpointer = ringbuffer->_readpointer.find(test_id2);
-    CPPUNIT_ASSERT(iter_readpointer == ringbuffer->_readpointer.end());
+    iter_readpointer = ringbuffer->readpointer_.find(test_id2);
+    CPPUNIT_ASSERT(iter_readpointer == ringbuffer->readpointer_.end());
 
-    ringbuffer = mainbuffer_.getRingBuffer(test_id1);
+    ringbuffer = mainbuffer_->getRingBuffer(test_id1);
     CPPUNIT_ASSERT(ringbuffer != NULL);
     CPPUNIT_ASSERT(ringbuffer->getNbReadPointer() == 1);
-    iter_readpointer = ringbuffer->_readpointer.find(default_id);
-    CPPUNIT_ASSERT(iter_readpointer->first == default_id);
+    iter_readpointer = ringbuffer->readpointer_.find(MainBuffer::DEFAULT_ID);
+    CPPUNIT_ASSERT(iter_readpointer->first == MainBuffer::DEFAULT_ID);
     CPPUNIT_ASSERT(iter_readpointer->second == 0);
-    iter_readpointer = ringbuffer->_readpointer.find(test_id2);
-    CPPUNIT_ASSERT(iter_readpointer == ringbuffer->_readpointer.end());
+    iter_readpointer = ringbuffer->readpointer_.find(test_id2);
+    CPPUNIT_ASSERT(iter_readpointer == ringbuffer->readpointer_.end());
 
 
 }
@@ -859,49 +815,38 @@ void MainBufferTest::testGetPutDataByID()
     std::string test_id = "getData putData";
     std::string false_id = "false id";
 
-    mainbuffer_.bindCallID(test_id);
+    mainbuffer_->bindCallID(test_id, MainBuffer::DEFAULT_ID);
 
     int test_input1 = 12;
     int test_input2 = 13;
-    int test_output;
+    int test_output = 0;
 
-    int avail_for_put_defaultid;
+    // put by MainBuffer::DEFAULT_ID get by test_id without preleminary put
+    CPPUNIT_ASSERT(mainbuffer_->availForGetByID(MainBuffer::DEFAULT_ID, test_id) == 0);
+    CPPUNIT_ASSERT(mainbuffer_->getDataByID(&test_output, sizeof(int), MainBuffer::DEFAULT_ID, test_id) == 0);
 
-    // put by default_id get by test_id without preleminary put
-    avail_for_put_defaultid = mainbuffer_.availForPut();
-    CPPUNIT_ASSERT(mainbuffer_.availForGetByID(default_id, test_id) == 0);
-    CPPUNIT_ASSERT(mainbuffer_.getDataByID(&test_output, sizeof(int), default_id, test_id) == 0);
+    // put by MainBuffer::DEFAULT_ID, get by test_id
+    mainbuffer_->putData(&test_input1, sizeof(int), MainBuffer::DEFAULT_ID);
+    CPPUNIT_ASSERT(mainbuffer_->availForGetByID(MainBuffer::DEFAULT_ID, test_id) == sizeof(int));
 
-    // put by default_id, get by test_id
-    CPPUNIT_ASSERT(mainbuffer_.availForPut() == avail_for_put_defaultid);
-    CPPUNIT_ASSERT(mainbuffer_.putData(&test_input1, sizeof(int)) == sizeof(int));
-    CPPUNIT_ASSERT(mainbuffer_.availForPut() == (avail_for_put_defaultid - (int) sizeof(int)));
-    CPPUNIT_ASSERT(mainbuffer_.availForGetByID(default_id, test_id) == sizeof(int));
-    CPPUNIT_ASSERT(mainbuffer_.getDataByID(&test_output, sizeof(int), 100, default_id, test_id) == sizeof(int));
-    CPPUNIT_ASSERT(mainbuffer_.availForGetByID(default_id, test_id) == 0);
-    CPPUNIT_ASSERT(test_input1 == test_output);
-
-    // get by default_id without preliminary input
-    mainbuffer_.availForPut(test_id);
-    CPPUNIT_ASSERT(mainbuffer_.availForGetByID(test_id, default_id) == 0);
-    CPPUNIT_ASSERT(mainbuffer_.getDataByID(&test_output, sizeof(int), 100, test_id, default_id) == 0);
+    // get by MainBuffer::DEFAULT_ID without preliminary input
+    CPPUNIT_ASSERT(mainbuffer_->availForGetByID(test_id, MainBuffer::DEFAULT_ID) == 0);
+    CPPUNIT_ASSERT(mainbuffer_->getDataByID(&test_output, 100, test_id, MainBuffer::DEFAULT_ID) == 0);
 
     // pu by test_id get by test_id
-    CPPUNIT_ASSERT(mainbuffer_.availForPut(test_id) == avail_for_put_defaultid);
-    CPPUNIT_ASSERT(mainbuffer_.putData(&test_input2, sizeof(int), test_id) == sizeof(int));
-    CPPUNIT_ASSERT(mainbuffer_.availForGetByID(test_id, default_id) == sizeof(int));
-    CPPUNIT_ASSERT(mainbuffer_.getDataByID(&test_output, sizeof(int), 100, test_id, default_id) == sizeof(int));
-    CPPUNIT_ASSERT(mainbuffer_.availForGetByID(test_id, default_id) == 0);
+    mainbuffer_->putData(&test_input2, sizeof(int), test_id);
+    CPPUNIT_ASSERT(mainbuffer_->availForGetByID(test_id, MainBuffer::DEFAULT_ID) == sizeof(int));
+    CPPUNIT_ASSERT(mainbuffer_->getDataByID(&test_output, 100, test_id, MainBuffer::DEFAULT_ID) == sizeof(int));
+    CPPUNIT_ASSERT(mainbuffer_->availForGetByID(test_id, MainBuffer::DEFAULT_ID) == 0);
     CPPUNIT_ASSERT(test_input2 == test_output);
 
     // put/get by false id
-    CPPUNIT_ASSERT(mainbuffer_.putData(&test_input2, sizeof(int), false_id) == 0);
-    CPPUNIT_ASSERT(mainbuffer_.getDataByID(&test_input2, sizeof(int), 100, false_id, false_id) == 0);
-    CPPUNIT_ASSERT(mainbuffer_.getDataByID(&test_input2, sizeof(int), 100, default_id, false_id) == 0);
-    CPPUNIT_ASSERT(mainbuffer_.getDataByID(&test_input2, sizeof(int), 100, false_id, default_id) == 0);
-
-    mainbuffer_.unBindCallID(test_id);
+    mainbuffer_->putData(&test_input2, sizeof(int), false_id);
+    CPPUNIT_ASSERT(mainbuffer_->getDataByID(&test_input2, 100, false_id, false_id) == 0);
+    CPPUNIT_ASSERT(mainbuffer_->getDataByID(&test_input2, 100, MainBuffer::DEFAULT_ID, false_id) == 0);
+    CPPUNIT_ASSERT(mainbuffer_->getDataByID(&test_input2, 100, false_id, MainBuffer::DEFAULT_ID) == 0);
 
+    mainbuffer_->unBindCallID(test_id, MainBuffer::DEFAULT_ID);
 }
 
 
@@ -911,44 +856,35 @@ void MainBufferTest::testGetPutData()
 
     std::string test_id = "incoming rtp session";
 
-    mainbuffer_.bindCallID(test_id);
+    mainbuffer_->bindCallID(test_id, MainBuffer::DEFAULT_ID);
 
     int test_input1 = 12;
     int test_input2 = 13;
     int test_output;
 
-    int avail_for_put_testid;
-    int avail_for_put_defaultid;
-
     // get by test_id without preleminary put
-    avail_for_put_defaultid = mainbuffer_.availForPut();
-    CPPUNIT_ASSERT(mainbuffer_.availForGet(test_id) == 0);
-    CPPUNIT_ASSERT(mainbuffer_.getData(&test_output, sizeof(int), 100,  test_id) == 0);
-
-    // put by default_id, get by test_id
-    CPPUNIT_ASSERT(mainbuffer_.availForPut() == avail_for_put_defaultid);
-    CPPUNIT_ASSERT(mainbuffer_.putData(&test_input1, sizeof(int)) == sizeof(int));
-    CPPUNIT_ASSERT(mainbuffer_.availForPut() == (avail_for_put_defaultid - (int) sizeof(int)));
-    CPPUNIT_ASSERT(mainbuffer_.availForGet(test_id) == sizeof(int));
-    CPPUNIT_ASSERT(mainbuffer_.getData(&test_output, sizeof(int), 100, test_id) == sizeof(int));
-    CPPUNIT_ASSERT(mainbuffer_.availForGet(test_id) == 0);
+    CPPUNIT_ASSERT(mainbuffer_->availForGet(test_id) == 0);
+    CPPUNIT_ASSERT(mainbuffer_->getData(&test_output, 100, test_id) == 0);
+
+    // put by MainBuffer::DEFAULT_ID, get by test_id
+    mainbuffer_->putData(&test_input1, sizeof(int), MainBuffer::DEFAULT_ID);
+    CPPUNIT_ASSERT(mainbuffer_->availForGet(test_id) == sizeof(int));
+    CPPUNIT_ASSERT(mainbuffer_->getData(&test_output, 100, test_id) == sizeof(int));
+    CPPUNIT_ASSERT(mainbuffer_->availForGet(test_id) == 0);
     CPPUNIT_ASSERT(test_input1 == test_output);
 
-    // get by default_id without preleminary put
-    avail_for_put_testid = mainbuffer_.availForPut(test_id);
-    CPPUNIT_ASSERT(mainbuffer_.availForGet() == 0);
-    CPPUNIT_ASSERT(mainbuffer_.getData(&test_output, sizeof(int)) == 0);
-
-    // put by test_id, get by default_id
-    CPPUNIT_ASSERT(mainbuffer_.availForPut(test_id) == avail_for_put_testid);
-    CPPUNIT_ASSERT(mainbuffer_.putData(&test_input2, sizeof(int), test_id) == sizeof(int));
-    CPPUNIT_ASSERT(mainbuffer_.availForPut(test_id) == (avail_for_put_testid - (int) sizeof(int)));
-    CPPUNIT_ASSERT(mainbuffer_.availForGet() == sizeof(int));
-    CPPUNIT_ASSERT(mainbuffer_.getData(&test_output, sizeof(int), 100) == sizeof(int));
-    CPPUNIT_ASSERT(mainbuffer_.availForGet() == 0);
+    // get by MainBuffer::DEFAULT_ID without preleminary put
+    CPPUNIT_ASSERT(mainbuffer_->availForGet(MainBuffer::DEFAULT_ID) == 0);
+    CPPUNIT_ASSERT(mainbuffer_->getData(&test_output, sizeof(int), MainBuffer::DEFAULT_ID) == 0);
+
+    // put by test_id, get by MainBuffer::DEFAULT_ID
+    mainbuffer_->putData(&test_input2, sizeof(int), test_id);
+    CPPUNIT_ASSERT(mainbuffer_->availForGet(MainBuffer::DEFAULT_ID) == sizeof(int));
+    CPPUNIT_ASSERT(mainbuffer_->getData(&test_output, 100, MainBuffer::DEFAULT_ID) == sizeof(int));
+    CPPUNIT_ASSERT(mainbuffer_->availForGet(MainBuffer::DEFAULT_ID) == 0);
     CPPUNIT_ASSERT(test_input2 == test_output);
 
-    mainbuffer_.unBindCallID(test_id);
+    mainbuffer_->unBindCallID(test_id, MainBuffer::DEFAULT_ID);
 
 }
 
@@ -957,40 +893,34 @@ void MainBufferTest::testDiscardFlush()
 {
     TITLE();
     std::string test_id = "flush discard";
-    // mainbuffer_.createRingBuffer(test_id);
-    mainbuffer_.bindCallID(test_id);
+    // mainbuffer_->createRingBuffer(test_id);
+    mainbuffer_->bindCallID(test_id, MainBuffer::DEFAULT_ID);
 
     int test_input1 = 12;
     // int test_output_size;
     // int init_size;
 
-    CPPUNIT_ASSERT(mainbuffer_.putData(&test_input1, sizeof(int), test_id) == sizeof(int));
-    CPPUNIT_ASSERT(mainbuffer_.availForGet() == sizeof(int));
-    mainbuffer_.discard(sizeof(int));
-    CPPUNIT_ASSERT(mainbuffer_.availForGet() == 0);
-
-    CPPUNIT_ASSERT(mainbuffer_.availForGet(test_id) == 0);
-    mainbuffer_.discard(sizeof(int), test_id);
-    CPPUNIT_ASSERT(mainbuffer_.availForGet(test_id) == 0);
+    mainbuffer_->putData(&test_input1, sizeof(int), test_id);
+    CPPUNIT_ASSERT(mainbuffer_->availForGet(MainBuffer::DEFAULT_ID) == sizeof(int));
+    mainbuffer_->discard(sizeof(int), MainBuffer::DEFAULT_ID);
+    CPPUNIT_ASSERT(mainbuffer_->availForGet(MainBuffer::DEFAULT_ID) == 0);
 
-    CPPUNIT_ASSERT(mainbuffer_.getRingBuffer(test_id)->getReadPointer(default_id) == sizeof(int));
-    CPPUNIT_ASSERT(mainbuffer_.getRingBuffer(test_id)->getReadPointer(test_id) == 0);
+    CPPUNIT_ASSERT(mainbuffer_->availForGet(test_id) == 0);
+    mainbuffer_->discard(sizeof(int), test_id);
+    CPPUNIT_ASSERT(mainbuffer_->availForGet(test_id) == 0);
 
+    CPPUNIT_ASSERT(mainbuffer_->getRingBuffer(test_id)->getReadPointer(MainBuffer::DEFAULT_ID) == sizeof(int));
+    CPPUNIT_ASSERT(mainbuffer_->getRingBuffer(test_id)->getReadPointer(test_id) == 0);
 
-    CPPUNIT_ASSERT(mainbuffer_.getRingBuffer(default_id)->getReadPointer(test_id) == 0);
-    CPPUNIT_ASSERT(mainbuffer_.putData(&test_input1, sizeof(int), 100) == sizeof(int));
-    CPPUNIT_ASSERT(mainbuffer_.getRingBuffer(default_id)->getReadPointer(test_id) == 0);
 
-    CPPUNIT_ASSERT(mainbuffer_.availForGet(test_id) == sizeof(int));
+    CPPUNIT_ASSERT(mainbuffer_->getRingBuffer(MainBuffer::DEFAULT_ID)->getReadPointer(test_id) == 0);
+    mainbuffer_->putData(&test_input1, 100, MainBuffer::DEFAULT_ID);
+    CPPUNIT_ASSERT(mainbuffer_->getRingBuffer(MainBuffer::DEFAULT_ID)->getReadPointer(test_id) == 0);
 
-    CPPUNIT_ASSERT(mainbuffer_.getRingBuffer(default_id)->getReadPointer(test_id) == 0);
-    mainbuffer_.discard(sizeof(int), test_id);
-    CPPUNIT_ASSERT(mainbuffer_.getRingBuffer(default_id)->getReadPointer(test_id) == sizeof(int));
-    CPPUNIT_ASSERT(mainbuffer_.availForGet(test_id) == 0);
-
-    // mainbuffer_.removeRingBuffer(test_id);
-    mainbuffer_.unBindCallID(test_id);
+    mainbuffer_->discard(sizeof(int), test_id);
+    CPPUNIT_ASSERT(mainbuffer_->getRingBuffer(MainBuffer::DEFAULT_ID)->getReadPointer(test_id) == sizeof(int));
 
+    mainbuffer_->unBindCallID(test_id, MainBuffer::DEFAULT_ID);
 }
 
 
@@ -998,15 +928,14 @@ void MainBufferTest::testReadPointerInit()
 {
     TITLE();
     std::string test_id = "test read pointer init";
-    // RingBuffer* test_ring_buffer = mainbuffer_.createRingBuffer(test_id);
 
-    mainbuffer_.bindCallID(test_id);
+    mainbuffer_->bindCallID(test_id, MainBuffer::DEFAULT_ID);
 
-    RingBuffer* test_ring_buffer = mainbuffer_.getRingBuffer(test_id);
+    RingBuffer* test_ring_buffer = mainbuffer_->getRingBuffer(test_id);
 
-    CPPUNIT_ASSERT(test_ring_buffer->getReadPointer() == 0);
-    test_ring_buffer->storeReadPointer(30);
-    CPPUNIT_ASSERT(test_ring_buffer->getReadPointer() == 30);
+    CPPUNIT_ASSERT(test_ring_buffer->getReadPointer(MainBuffer::DEFAULT_ID) == 0);
+    test_ring_buffer->storeReadPointer(30, MainBuffer::DEFAULT_ID);
+    CPPUNIT_ASSERT(test_ring_buffer->getReadPointer(MainBuffer::DEFAULT_ID) == 30);
 
     test_ring_buffer->createReadPointer(test_id);
     CPPUNIT_ASSERT(test_ring_buffer->getReadPointer(test_id) == 0);
@@ -1016,8 +945,8 @@ void MainBufferTest::testReadPointerInit()
     CPPUNIT_ASSERT(test_ring_buffer->getReadPointer(test_id) == (int) NULL);
     test_ring_buffer->removeReadPointer("false id");
 
-    // mainbuffer_.removeRingBuffer(test_id);
-    mainbuffer_.unBindCallID(test_id);
+    // mainbuffer_->removeRingBuffer(test_id);
+    mainbuffer_->unBindCallID(test_id, MainBuffer::DEFAULT_ID);
 }
 
 
@@ -1026,7 +955,7 @@ void MainBufferTest::testRingBufferSeveralPointers()
     TITLE();
 
     std::string test_id = "test multiple read pointer";
-    RingBuffer* test_ring_buffer = mainbuffer_.createRingBuffer(test_id);
+    RingBuffer* test_ring_buffer = mainbuffer_->createRingBuffer(test_id);
 
     std::string test_pointer1 = "test pointer 1";
     std::string test_pointer2 = "test pointer 2";
@@ -1041,35 +970,29 @@ void MainBufferTest::testRingBufferSeveralPointers()
 
     int testoutput;
 
-    int initPutLen = test_ring_buffer->AvailForPut();
-
-    CPPUNIT_ASSERT(test_ring_buffer->Put(&testint1, sizeof(int)) == sizeof(int));
+    test_ring_buffer->Put(&testint1, sizeof(int));
     CPPUNIT_ASSERT(test_ring_buffer->putLen() == sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == initPutLen - (int) sizeof(int));
     CPPUNIT_ASSERT(test_ring_buffer->getLen(test_pointer1) == sizeof(int));
     CPPUNIT_ASSERT(test_ring_buffer->getLen(test_pointer2) == sizeof(int));
     CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_pointer1) == sizeof(int));
     CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_pointer2) == sizeof(int));
 
-    CPPUNIT_ASSERT(test_ring_buffer->Put(&testint2, sizeof(int)) == sizeof(int));
+    test_ring_buffer->Put(&testint2, sizeof(int));
     CPPUNIT_ASSERT(test_ring_buffer->putLen() == 2*sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == initPutLen - 2* (int) sizeof(int));
     CPPUNIT_ASSERT(test_ring_buffer->getLen(test_pointer1) == 2*sizeof(int));
     CPPUNIT_ASSERT(test_ring_buffer->getLen(test_pointer2) == 2*sizeof(int));
     CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_pointer1) == 2*sizeof(int));
     CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_pointer2) == 2*sizeof(int));
 
-    CPPUNIT_ASSERT(test_ring_buffer->Put(&testint3, sizeof(int)) == sizeof(int));
+    test_ring_buffer->Put(&testint3, sizeof(int));
     CPPUNIT_ASSERT(test_ring_buffer->putLen() == 3*sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == initPutLen - 3* (int) sizeof(int));
     CPPUNIT_ASSERT(test_ring_buffer->getLen(test_pointer1) == 3*sizeof(int));
     CPPUNIT_ASSERT(test_ring_buffer->getLen(test_pointer2) == 3*sizeof(int));
     CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_pointer1) == 3*sizeof(int));
     CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_pointer2) == 3*sizeof(int));
 
-    CPPUNIT_ASSERT(test_ring_buffer->Put(&testint4, sizeof(int)) == sizeof(int));
+    test_ring_buffer->Put(&testint4, sizeof(int));
     CPPUNIT_ASSERT(test_ring_buffer->putLen() == 4*sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == initPutLen - 4* (int) sizeof(int));
     CPPUNIT_ASSERT(test_ring_buffer->getLen(test_pointer1) == 4*sizeof(int));
     CPPUNIT_ASSERT(test_ring_buffer->getLen(test_pointer2) == 4*sizeof(int));
     CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_pointer1) == 4*sizeof(int));
@@ -1078,58 +1001,33 @@ void MainBufferTest::testRingBufferSeveralPointers()
 
     CPPUNIT_ASSERT(test_ring_buffer->Get(&testoutput, sizeof(int), test_pointer1) == sizeof(int));
     CPPUNIT_ASSERT(testoutput == testint1);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == initPutLen - 4* (int) sizeof(int));
     CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_pointer1) == 3*sizeof(int));
     CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_pointer2) == 4*sizeof(int));
 
     CPPUNIT_ASSERT(test_ring_buffer->Get(&testoutput, sizeof(int), test_pointer2) == sizeof(int));
     CPPUNIT_ASSERT(testoutput == testint1);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == initPutLen - 3* (int) sizeof(int));
     CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_pointer1) == 3*sizeof(int));
     CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_pointer2) == 3*sizeof(int));
 
-    // AvailForPut() is ok but AvailForGet(default_id) is not ok
     // However, we should no be alowed to read in our own ring buffer
     // if we are either an AudioLayer or and RTP session
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet() == 4*sizeof(int));
+    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(MainBuffer::DEFAULT_ID) == 4*sizeof(int));
 
-    CPPUNIT_ASSERT(test_ring_buffer->Get(&testoutput, sizeof(int), 100, test_pointer1) == sizeof(int));
-    CPPUNIT_ASSERT(testoutput == testint2);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == initPutLen - 3* (int) sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_pointer1) == 2*sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_pointer2) == 3*sizeof(int));
-
-    // AvailForPut() is ok but AvailForGet(default_id) is not ok
     // However, we should no be alowed to read in our own ring buffer
     // if we are either an AudioLayer or and RTP session
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet() == 4*sizeof(int));
-
-    CPPUNIT_ASSERT(test_ring_buffer->Get(&testoutput, sizeof(int), 100, test_pointer2) == sizeof(int));
-    CPPUNIT_ASSERT(testoutput == testint2);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == initPutLen - 2* (int) sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_pointer1) == 2*sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_pointer2) == 2*sizeof(int));
+    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(MainBuffer::DEFAULT_ID) == 4*sizeof(int));
 
-    // AvailForPut() is ok but AvailForGet(default_id) is not ok
     // However, we should no be alowed to read in our own ring buffer
     // if we are either an AudioLayer or and RTP session
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet() == 4*sizeof(int));
+    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(MainBuffer::DEFAULT_ID) == 4*sizeof(int));
 
     CPPUNIT_ASSERT(test_ring_buffer->Discard(sizeof(int), test_pointer1) == sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == initPutLen - 2* (int) sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_pointer1) == sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_pointer2) == 2*sizeof(int));
-
     CPPUNIT_ASSERT(test_ring_buffer->Discard(sizeof(int), test_pointer2) == sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == initPutLen - (int) sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_pointer1) == sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_pointer2) == sizeof(int));
-
 
     test_ring_buffer->removeReadPointer(test_pointer1);
     test_ring_buffer->removeReadPointer(test_pointer2);
 
-    mainbuffer_.removeRingBuffer(test_id);
+    mainbuffer_->removeRingBuffer(test_id);
 }
 
 
@@ -1147,579 +1045,214 @@ void MainBufferTest::testConference()
     CallIDMap::iterator iter_callidmap;
     CallIDSet::iterator iter_callidset;
 
-
-
     // test initial setup
     // ringbuffers
-    CPPUNIT_ASSERT(mainbuffer_.ringBufferMap_.size() == 0);
-    test_ring_buffer = mainbuffer_.getRingBuffer(default_id);
+    CPPUNIT_ASSERT(mainbuffer_->ringBufferMap_.size() == 0);
+    test_ring_buffer = mainbuffer_->getRingBuffer(MainBuffer::DEFAULT_ID);
     CPPUNIT_ASSERT(test_ring_buffer == NULL);
 
     // callidmap
-    CPPUNIT_ASSERT(mainbuffer_.callIDMap_.size() == 0);
-    iter_callidmap = mainbuffer_.callIDMap_.find(default_id);
-    CPPUNIT_ASSERT(iter_callidmap == mainbuffer_.callIDMap_.end());
+    CPPUNIT_ASSERT(mainbuffer_->callIDMap_.size() == 0);
+    iter_callidmap = mainbuffer_->callIDMap_.find(MainBuffer::DEFAULT_ID);
+    CPPUNIT_ASSERT(iter_callidmap == mainbuffer_->callIDMap_.end());
 
 
     // test bind Participant A with default
-    mainbuffer_.bindCallID(test_id1);
+    mainbuffer_->bindCallID(test_id1, MainBuffer::DEFAULT_ID);
     // ringbuffers
-    CPPUNIT_ASSERT(mainbuffer_.ringBufferMap_.size() == 2);
-    test_ring_buffer = mainbuffer_.getRingBuffer(default_id);
+    CPPUNIT_ASSERT(mainbuffer_->ringBufferMap_.size() == 2);
+    test_ring_buffer = mainbuffer_->getRingBuffer(MainBuffer::DEFAULT_ID);
     CPPUNIT_ASSERT(test_ring_buffer->getNbReadPointer() == 1);
-    iter_readpointer = test_ring_buffer->_readpointer.find(test_id1);
+    iter_readpointer = test_ring_buffer->readpointer_.find(test_id1);
     CPPUNIT_ASSERT(iter_readpointer->first == test_id1);
     CPPUNIT_ASSERT(iter_readpointer->second == 0);
-    test_ring_buffer = mainbuffer_.getRingBuffer(test_id1);
+    test_ring_buffer = mainbuffer_->getRingBuffer(test_id1);
     CPPUNIT_ASSERT(test_ring_buffer->getNbReadPointer() == 1);
-    iter_readpointer = test_ring_buffer->_readpointer.find(default_id);
-    CPPUNIT_ASSERT(iter_readpointer->first == default_id);
+    iter_readpointer = test_ring_buffer->readpointer_.find(MainBuffer::DEFAULT_ID);
+    CPPUNIT_ASSERT(iter_readpointer->first == MainBuffer::DEFAULT_ID);
     CPPUNIT_ASSERT(iter_readpointer->second == 0);
     // callidmap
-    CPPUNIT_ASSERT(mainbuffer_.callIDMap_.size() == 2);
-    iter_callidmap = mainbuffer_.callIDMap_.find(default_id);
-    CPPUNIT_ASSERT(iter_callidmap->first == default_id);
+    CPPUNIT_ASSERT(mainbuffer_->callIDMap_.size() == 2);
+    iter_callidmap = mainbuffer_->callIDMap_.find(MainBuffer::DEFAULT_ID);
+    CPPUNIT_ASSERT(iter_callidmap->first == MainBuffer::DEFAULT_ID);
     CPPUNIT_ASSERT(iter_callidmap->second->size() == 1);
     iter_callidset = iter_callidmap->second->find(test_id1);
     CPPUNIT_ASSERT(*iter_callidset == test_id1);
-    iter_callidmap = mainbuffer_.callIDMap_.find(test_id1);
+    iter_callidmap = mainbuffer_->callIDMap_.find(test_id1);
     CPPUNIT_ASSERT(iter_callidmap->first == test_id1);
     CPPUNIT_ASSERT(iter_callidmap->second->size() == 1);
-    iter_callidset = iter_callidmap->second->find(default_id);
-    CPPUNIT_ASSERT(*iter_callidset == default_id);
+    iter_callidset = iter_callidmap->second->find(MainBuffer::DEFAULT_ID);
+    CPPUNIT_ASSERT(*iter_callidset == MainBuffer::DEFAULT_ID);
 
     // test bind Participant B with default
-    mainbuffer_.bindCallID(test_id2);
+    mainbuffer_->bindCallID(test_id2, MainBuffer::DEFAULT_ID);
     // ringbuffers
-    CPPUNIT_ASSERT(mainbuffer_.ringBufferMap_.size() == 3);
-    test_ring_buffer = mainbuffer_.getRingBuffer(default_id);
+    CPPUNIT_ASSERT(mainbuffer_->ringBufferMap_.size() == 3);
+    test_ring_buffer = mainbuffer_->getRingBuffer(MainBuffer::DEFAULT_ID);
     CPPUNIT_ASSERT(test_ring_buffer->getNbReadPointer() == 2);
-    iter_readpointer = test_ring_buffer->_readpointer.find(test_id1);
+    iter_readpointer = test_ring_buffer->readpointer_.find(test_id1);
     CPPUNIT_ASSERT(iter_readpointer->first == test_id1);
     CPPUNIT_ASSERT(iter_readpointer->second == 0);
-    iter_readpointer = test_ring_buffer->_readpointer.find(test_id2);
+    iter_readpointer = test_ring_buffer->readpointer_.find(test_id2);
     CPPUNIT_ASSERT(iter_readpointer->first == test_id2);
     CPPUNIT_ASSERT(iter_readpointer->second == 0);
-    test_ring_buffer = mainbuffer_.getRingBuffer(test_id1);
+    test_ring_buffer = mainbuffer_->getRingBuffer(test_id1);
     CPPUNIT_ASSERT(test_ring_buffer->getNbReadPointer() == 1);
-    iter_readpointer = test_ring_buffer->_readpointer.find(default_id);
-    CPPUNIT_ASSERT(iter_readpointer->first == default_id);
+    iter_readpointer = test_ring_buffer->readpointer_.find(MainBuffer::DEFAULT_ID);
+    CPPUNIT_ASSERT(iter_readpointer->first == MainBuffer::DEFAULT_ID);
     CPPUNIT_ASSERT(iter_readpointer->second == 0);
-    test_ring_buffer = mainbuffer_.getRingBuffer(test_id2);
+    test_ring_buffer = mainbuffer_->getRingBuffer(test_id2);
     CPPUNIT_ASSERT(test_ring_buffer->getNbReadPointer() == 1);
-    iter_readpointer = test_ring_buffer->_readpointer.find(default_id);
-    CPPUNIT_ASSERT(iter_readpointer->first == default_id);
+    iter_readpointer = test_ring_buffer->readpointer_.find(MainBuffer::DEFAULT_ID);
+    CPPUNIT_ASSERT(iter_readpointer->first == MainBuffer::DEFAULT_ID);
     CPPUNIT_ASSERT(iter_readpointer->second == 0);
     // callidmap
-    CPPUNIT_ASSERT(mainbuffer_.callIDMap_.size() == 3);
-    iter_callidmap = mainbuffer_.callIDMap_.find(default_id);
-    CPPUNIT_ASSERT(iter_callidmap->first == default_id);
+    CPPUNIT_ASSERT(mainbuffer_->callIDMap_.size() == 3);
+    iter_callidmap = mainbuffer_->callIDMap_.find(MainBuffer::DEFAULT_ID);
+    CPPUNIT_ASSERT(iter_callidmap->first == MainBuffer::DEFAULT_ID);
     CPPUNIT_ASSERT(iter_callidmap->second->size() == 2);
     iter_callidset = iter_callidmap->second->find(test_id1);
     CPPUNIT_ASSERT(*iter_callidset == test_id1);
     iter_callidset = iter_callidmap->second->find(test_id2);
     CPPUNIT_ASSERT(*iter_callidset == test_id2);
-    iter_callidmap = mainbuffer_.callIDMap_.find(test_id1);
+    iter_callidmap = mainbuffer_->callIDMap_.find(test_id1);
     CPPUNIT_ASSERT(iter_callidmap->first == test_id1);
     CPPUNIT_ASSERT(iter_callidmap->second->size() == 1);
-    iter_callidset = iter_callidmap->second->find(default_id);
-    CPPUNIT_ASSERT(*iter_callidset == default_id);
-    iter_callidmap = mainbuffer_.callIDMap_.find(test_id2);
+    iter_callidset = iter_callidmap->second->find(MainBuffer::DEFAULT_ID);
+    CPPUNIT_ASSERT(*iter_callidset == MainBuffer::DEFAULT_ID);
+    iter_callidmap = mainbuffer_->callIDMap_.find(test_id2);
     CPPUNIT_ASSERT(iter_callidmap->first == test_id2);
     CPPUNIT_ASSERT(iter_callidmap->second->size() == 1);
-    iter_callidset = iter_callidmap->second->find(default_id);
-    CPPUNIT_ASSERT(*iter_callidset == default_id);
+    iter_callidset = iter_callidmap->second->find(MainBuffer::DEFAULT_ID);
+    CPPUNIT_ASSERT(*iter_callidset == MainBuffer::DEFAULT_ID);
 
 
     // test bind Participant A with Participant B
-    mainbuffer_.bindCallID(test_id1, test_id2);
+    mainbuffer_->bindCallID(test_id1, test_id2);
     // ringbuffers
-    CPPUNIT_ASSERT(mainbuffer_.ringBufferMap_.size() == 3);
-    test_ring_buffer = mainbuffer_.getRingBuffer(default_id);
+    CPPUNIT_ASSERT(mainbuffer_->ringBufferMap_.size() == 3);
+    test_ring_buffer = mainbuffer_->getRingBuffer(MainBuffer::DEFAULT_ID);
     CPPUNIT_ASSERT(test_ring_buffer->getNbReadPointer() == 2);
-    iter_readpointer = test_ring_buffer->_readpointer.find(test_id1);
+    iter_readpointer = test_ring_buffer->readpointer_.find(test_id1);
     CPPUNIT_ASSERT(iter_readpointer->first == test_id1);
     CPPUNIT_ASSERT(iter_readpointer->second == 0);
-    iter_readpointer = test_ring_buffer->_readpointer.find(test_id2);
+    iter_readpointer = test_ring_buffer->readpointer_.find(test_id2);
     CPPUNIT_ASSERT(iter_readpointer->first == test_id2);
     CPPUNIT_ASSERT(iter_readpointer->second == 0);
-    test_ring_buffer = mainbuffer_.getRingBuffer(test_id1);
+    test_ring_buffer = mainbuffer_->getRingBuffer(test_id1);
     CPPUNIT_ASSERT(test_ring_buffer->getNbReadPointer() == 2);
-    iter_readpointer = test_ring_buffer->_readpointer.find(default_id);
-    CPPUNIT_ASSERT(iter_readpointer->first == default_id);
+    iter_readpointer = test_ring_buffer->readpointer_.find(MainBuffer::DEFAULT_ID);
+    CPPUNIT_ASSERT(iter_readpointer->first == MainBuffer::DEFAULT_ID);
     CPPUNIT_ASSERT(iter_readpointer->second == 0);
-    iter_readpointer = test_ring_buffer->_readpointer.find(test_id2);
+    iter_readpointer = test_ring_buffer->readpointer_.find(test_id2);
     CPPUNIT_ASSERT(iter_readpointer->first == test_id2);
     CPPUNIT_ASSERT(iter_readpointer->second == 0);
-    test_ring_buffer = mainbuffer_.getRingBuffer(test_id2);
+    test_ring_buffer = mainbuffer_->getRingBuffer(test_id2);
     CPPUNIT_ASSERT(test_ring_buffer->getNbReadPointer() == 2);
-    iter_readpointer = test_ring_buffer->_readpointer.find(default_id);
-    CPPUNIT_ASSERT(iter_readpointer->first == default_id);
+    iter_readpointer = test_ring_buffer->readpointer_.find(MainBuffer::DEFAULT_ID);
+    CPPUNIT_ASSERT(iter_readpointer->first == MainBuffer::DEFAULT_ID);
     CPPUNIT_ASSERT(iter_readpointer->second == 0);
-    iter_readpointer = test_ring_buffer->_readpointer.find(test_id1);
+    iter_readpointer = test_ring_buffer->readpointer_.find(test_id1);
     CPPUNIT_ASSERT(iter_readpointer->first == test_id1);
     CPPUNIT_ASSERT(iter_readpointer->second == 0);
     // callidmap
-    CPPUNIT_ASSERT(mainbuffer_.callIDMap_.size() == 3);
-    iter_callidmap = mainbuffer_.callIDMap_.find(default_id);
-    CPPUNIT_ASSERT(iter_callidmap->first == default_id);
+    CPPUNIT_ASSERT(mainbuffer_->callIDMap_.size() == 3);
+    iter_callidmap = mainbuffer_->callIDMap_.find(MainBuffer::DEFAULT_ID);
+    CPPUNIT_ASSERT(iter_callidmap->first == MainBuffer::DEFAULT_ID);
     CPPUNIT_ASSERT(iter_callidmap->second->size() == 2);
     iter_callidset = iter_callidmap->second->find(test_id1);
     CPPUNIT_ASSERT(*iter_callidset == test_id1);
     iter_callidset = iter_callidmap->second->find(test_id2);
     CPPUNIT_ASSERT(*iter_callidset == test_id2);
-    iter_callidmap = mainbuffer_.callIDMap_.find(test_id1);
+    iter_callidmap = mainbuffer_->callIDMap_.find(test_id1);
     CPPUNIT_ASSERT(iter_callidmap->first == test_id1);
     CPPUNIT_ASSERT(iter_callidmap->second->size() == 2);
-    iter_callidset = iter_callidmap->second->find(default_id);
-    CPPUNIT_ASSERT(*iter_callidset == default_id);
+    iter_callidset = iter_callidmap->second->find(MainBuffer::DEFAULT_ID);
+    CPPUNIT_ASSERT(*iter_callidset == MainBuffer::DEFAULT_ID);
     iter_callidset = iter_callidmap->second->find(test_id2);
     CPPUNIT_ASSERT(*iter_callidset == test_id2);
-    iter_callidmap = mainbuffer_.callIDMap_.find(test_id2);
+    iter_callidmap = mainbuffer_->callIDMap_.find(test_id2);
     CPPUNIT_ASSERT(iter_callidmap->first == test_id2);
     CPPUNIT_ASSERT(iter_callidmap->second->size() == 2);
-    iter_callidset = iter_callidmap->second->find(default_id);
-    CPPUNIT_ASSERT(*iter_callidset == default_id);
+    iter_callidset = iter_callidmap->second->find(MainBuffer::DEFAULT_ID);
+    CPPUNIT_ASSERT(*iter_callidset == MainBuffer::DEFAULT_ID);
     iter_callidset = iter_callidmap->second->find(test_id1);
     CPPUNIT_ASSERT(*iter_callidset == test_id1);
 
 
     // test putData default
     int testint = 12;
-    int init_put_defaultid;
-    int init_put_id1;
-    int init_put_id2;
-
-    init_put_defaultid = mainbuffer_.getRingBuffer(default_id)->AvailForPut();
-    init_put_id1 = mainbuffer_.getRingBuffer(test_id1)->AvailForPut();
-    init_put_id2 = mainbuffer_.getRingBuffer(test_id2)->AvailForPut();
-    CPPUNIT_ASSERT(mainbuffer_.availForGet(default_id) == 0);
-    CPPUNIT_ASSERT(mainbuffer_.availForGet(test_id1) == 0);
-    CPPUNIT_ASSERT(mainbuffer_.availForGet(test_id2) == 0);
+
+    CPPUNIT_ASSERT(mainbuffer_->availForGet(MainBuffer::DEFAULT_ID) == 0);
+    CPPUNIT_ASSERT(mainbuffer_->availForGet(test_id1) == 0);
+    CPPUNIT_ASSERT(mainbuffer_->availForGet(test_id2) == 0);
     // put data test ring buffers
-    CPPUNIT_ASSERT(mainbuffer_.putData(&testint, sizeof(int)) == sizeof(int));
-    test_ring_buffer = mainbuffer_.getRingBuffer(default_id);
+    mainbuffer_->putData(&testint, sizeof(int), MainBuffer::DEFAULT_ID);
+    test_ring_buffer = mainbuffer_->getRingBuffer(MainBuffer::DEFAULT_ID);
     CPPUNIT_ASSERT(test_ring_buffer->putLen() == sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == (int)(init_put_defaultid - sizeof(int)));
     CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id1) == sizeof(int));
     CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id2) == sizeof(int));
-    test_ring_buffer = mainbuffer_.getRingBuffer(test_id1);
+    test_ring_buffer = mainbuffer_->getRingBuffer(test_id1);
     CPPUNIT_ASSERT(test_ring_buffer->putLen() == 0);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == init_put_id1);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(default_id) == 0);
+    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(MainBuffer::DEFAULT_ID) == 0);
     CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id2) == 0);
-    test_ring_buffer = mainbuffer_.getRingBuffer(test_id2);
+    test_ring_buffer = mainbuffer_->getRingBuffer(test_id2);
     CPPUNIT_ASSERT(test_ring_buffer->putLen() == 0);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == init_put_id2);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(default_id) == 0);
+    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(MainBuffer::DEFAULT_ID) == 0);
     CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id1) == 0);
     // test mainbuffer availforget (get data even if some participant missing)
-    CPPUNIT_ASSERT(mainbuffer_.availForGet(default_id) == 0);
-    CPPUNIT_ASSERT(mainbuffer_.availForGet(test_id1) == sizeof(int));
-    CPPUNIT_ASSERT(mainbuffer_.availForGet(test_id2) == sizeof(int));
+    CPPUNIT_ASSERT(mainbuffer_->availForGet(MainBuffer::DEFAULT_ID) == 0);
+    CPPUNIT_ASSERT(mainbuffer_->availForGet(test_id1) == sizeof(int));
+    CPPUNIT_ASSERT(mainbuffer_->availForGet(test_id2) == sizeof(int));
     //putdata test ring buffers
-    CPPUNIT_ASSERT(mainbuffer_.putData(&testint, sizeof(int), 100, test_id1) == sizeof(int));
-    test_ring_buffer = mainbuffer_.getRingBuffer(default_id);
+    mainbuffer_->putData(&testint, 100, test_id1);
+    test_ring_buffer = mainbuffer_->getRingBuffer(MainBuffer::DEFAULT_ID);
     CPPUNIT_ASSERT(test_ring_buffer->putLen() == sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == (int)(init_put_defaultid - sizeof(int)));
     CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id1) == sizeof(int));
     CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id2) == sizeof(int));
-    test_ring_buffer = mainbuffer_.getRingBuffer(test_id1);
-    CPPUNIT_ASSERT(test_ring_buffer->putLen() == sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == (int)(init_put_id1 - sizeof(int)));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(default_id) == sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id2) == sizeof(int));
-    test_ring_buffer = mainbuffer_.getRingBuffer(test_id2);
+    test_ring_buffer = mainbuffer_->getRingBuffer(test_id1);
+    test_ring_buffer = mainbuffer_->getRingBuffer(test_id2);
     CPPUNIT_ASSERT(test_ring_buffer->putLen() == 0);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == init_put_id2);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(default_id) == 0);
+    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(MainBuffer::DEFAULT_ID) == 0);
     CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id1) == 0);
-    // test mainbuffer availforget (get data even if some participant missing)
-    CPPUNIT_ASSERT(mainbuffer_.availForGet(default_id) == sizeof(int));
-    CPPUNIT_ASSERT(mainbuffer_.availForGet(test_id1) == sizeof(int));
-    CPPUNIT_ASSERT(mainbuffer_.availForGet(test_id2) == sizeof(int));
-    //putdata test ring buffers
-    CPPUNIT_ASSERT(mainbuffer_.putData(&testint, sizeof(int), 100, test_id2) == sizeof(int));
-    test_ring_buffer = mainbuffer_.getRingBuffer(default_id);
+
+    mainbuffer_->putData(&testint, 100, test_id2);
+    test_ring_buffer = mainbuffer_->getRingBuffer(MainBuffer::DEFAULT_ID);
     CPPUNIT_ASSERT(test_ring_buffer->putLen() == sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == (int)(init_put_defaultid - sizeof(int)));
     CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id1) == sizeof(int));
     CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id2) == sizeof(int));
-    test_ring_buffer = mainbuffer_.getRingBuffer(test_id1);
-    CPPUNIT_ASSERT(test_ring_buffer->putLen() == sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == (int)(init_put_id1 - sizeof(int)));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(default_id) == sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id2) == sizeof(int));
-    test_ring_buffer = mainbuffer_.getRingBuffer(test_id2);
-    CPPUNIT_ASSERT(test_ring_buffer->putLen() == sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == (int)(init_put_id2 - sizeof(int)));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(default_id) == sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id1) == sizeof(int));
+    test_ring_buffer = mainbuffer_->getRingBuffer(test_id1);
+    test_ring_buffer = mainbuffer_->getRingBuffer(test_id2);
     // test mainbuffer availforget
-    CPPUNIT_ASSERT(mainbuffer_.availForGet(default_id) == sizeof(int));
-    CPPUNIT_ASSERT(mainbuffer_.availForGet(test_id1) == sizeof(int));
-    CPPUNIT_ASSERT(mainbuffer_.availForGet(test_id2) == sizeof(int));
+    CPPUNIT_ASSERT(mainbuffer_->availForGet(test_id1) == sizeof(int));
+    CPPUNIT_ASSERT(mainbuffer_->availForGet(test_id2) == sizeof(int));
 
 
     int test_output;
 
     // test getData default id (audio layer)
-    CPPUNIT_ASSERT(mainbuffer_.getData(&test_output, sizeof(int), 100) == sizeof(int));
-    CPPUNIT_ASSERT(test_output == (testint + testint));
-    test_ring_buffer = mainbuffer_.getRingBuffer(default_id);
+    test_ring_buffer = mainbuffer_->getRingBuffer(MainBuffer::DEFAULT_ID);
     CPPUNIT_ASSERT(test_ring_buffer->putLen() == sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == (int)(init_put_defaultid - sizeof(int)));
     CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id1) == sizeof(int));
     CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id2) == sizeof(int));
-    test_ring_buffer = mainbuffer_.getRingBuffer(test_id1);
-    CPPUNIT_ASSERT(test_ring_buffer->putLen() == sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == (int)(init_put_id1 - sizeof(int)));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(default_id) == 0);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id2) == sizeof(int));
-    test_ring_buffer = mainbuffer_.getRingBuffer(test_id2);
-    CPPUNIT_ASSERT(test_ring_buffer->putLen() == sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == (int)(init_put_id2 - sizeof(int)));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(default_id) == 0);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id1) == sizeof(int));
+    test_ring_buffer = mainbuffer_->getRingBuffer(test_id1);
+    test_ring_buffer = mainbuffer_->getRingBuffer(test_id2);
     // test mainbuffer availforget
-    CPPUNIT_ASSERT(mainbuffer_.availForGet(default_id) == 0);
-    CPPUNIT_ASSERT(mainbuffer_.availForGet(test_id1) == sizeof(int));
-    CPPUNIT_ASSERT(mainbuffer_.availForGet(test_id2) == sizeof(int));
+    CPPUNIT_ASSERT(mainbuffer_->availForGet(test_id1) == sizeof(int));
+    CPPUNIT_ASSERT(mainbuffer_->availForGet(test_id2) == sizeof(int));
     // test getData test_id1 (audio layer)
-    CPPUNIT_ASSERT(mainbuffer_.getData(&test_output, sizeof(int), 100, test_id1) == sizeof(int));
-    CPPUNIT_ASSERT(test_output == (testint + testint));
-    test_ring_buffer = mainbuffer_.getRingBuffer(default_id);
+    test_ring_buffer = mainbuffer_->getRingBuffer(MainBuffer::DEFAULT_ID);
     CPPUNIT_ASSERT(test_ring_buffer->putLen() == sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == (int)(init_put_defaultid - sizeof(int)));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id1) == 0);
     CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id2) == sizeof(int));
-    test_ring_buffer = mainbuffer_.getRingBuffer(test_id1);
-    CPPUNIT_ASSERT(test_ring_buffer->putLen() == sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == (int)(init_put_id1 - sizeof(int)));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(default_id) == 0);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id2) == sizeof(int));
-    test_ring_buffer = mainbuffer_.getRingBuffer(test_id2);
-    CPPUNIT_ASSERT(test_ring_buffer->putLen() == 0);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == init_put_id2);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(default_id) == 0);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id1) == 0);
+    test_ring_buffer = mainbuffer_->getRingBuffer(test_id1);
+    test_ring_buffer = mainbuffer_->getRingBuffer(test_id2);
+
     // test mainbuffer availforget
-    CPPUNIT_ASSERT(mainbuffer_.availForGet(default_id) == 0);
-    CPPUNIT_ASSERT(mainbuffer_.availForGet(test_id1) == 0);
-    CPPUNIT_ASSERT(mainbuffer_.availForGet(test_id2) == sizeof(int));
+    CPPUNIT_ASSERT(mainbuffer_->availForGet(test_id2) == sizeof(int));
     // test getData test_id2 (audio layer)
-    CPPUNIT_ASSERT(mainbuffer_.getData(&test_output, sizeof(int), 100, test_id2) == sizeof(int));
-    CPPUNIT_ASSERT(test_output == (testint + testint));
-    test_ring_buffer = mainbuffer_.getRingBuffer(default_id);
-    CPPUNIT_ASSERT(test_ring_buffer->putLen() == 0);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == init_put_defaultid);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id1) == 0);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id2) == 0);
-    test_ring_buffer = mainbuffer_.getRingBuffer(test_id1);
-    CPPUNIT_ASSERT(test_ring_buffer->putLen() == 0);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == init_put_id1);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(default_id) == 0);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id2) == 0);
-    test_ring_buffer = mainbuffer_.getRingBuffer(test_id2);
-    CPPUNIT_ASSERT(test_ring_buffer->putLen() == 0);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == init_put_id2);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(default_id) == 0);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id1) == 0);
-    // test mainbuffer availforget
-    CPPUNIT_ASSERT(mainbuffer_.availForGet(default_id) == 0);
-    CPPUNIT_ASSERT(mainbuffer_.availForGet(test_id1) == 0);
-    CPPUNIT_ASSERT(mainbuffer_.availForGet(test_id2) == 0);
-
-
-    // test putData default (for discarting)
-    init_put_defaultid = mainbuffer_.getRingBuffer(default_id)->AvailForPut();
-    init_put_id1 = mainbuffer_.getRingBuffer(test_id1)->AvailForPut();
-    init_put_id2 = mainbuffer_.getRingBuffer(test_id2)->AvailForPut();
-    CPPUNIT_ASSERT(mainbuffer_.availForGet(default_id) == 0);
-    CPPUNIT_ASSERT(mainbuffer_.availForGet(test_id1) == 0);
-    CPPUNIT_ASSERT(mainbuffer_.availForGet(test_id2) == 0);
-    // put data test ring buffers
-    CPPUNIT_ASSERT(mainbuffer_.putData(&testint, sizeof(int), 100) == sizeof(int));
-    test_ring_buffer = mainbuffer_.getRingBuffer(default_id);
-    CPPUNIT_ASSERT(test_ring_buffer->putLen() == sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == (int)(init_put_defaultid - sizeof(int)));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id1) == sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id2) == sizeof(int));
-    test_ring_buffer = mainbuffer_.getRingBuffer(test_id1);
-    CPPUNIT_ASSERT(test_ring_buffer->putLen() == 0);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == init_put_id1);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(default_id) == 0);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id2) == 0);
-    test_ring_buffer = mainbuffer_.getRingBuffer(test_id2);
-    CPPUNIT_ASSERT(test_ring_buffer->putLen() == 0);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == init_put_id2);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(default_id) == 0);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id1) == 0);
-    // test mainbuffer availforget
-    CPPUNIT_ASSERT(mainbuffer_.availForGet(default_id) == 0);
-    CPPUNIT_ASSERT(mainbuffer_.availForGet(test_id1) == sizeof(int));
-    CPPUNIT_ASSERT(mainbuffer_.availForGet(test_id2) == sizeof(int));
-    //putdata test ring buffers
-    CPPUNIT_ASSERT(mainbuffer_.putData(&testint, sizeof(int), 100, test_id1) == sizeof(int));
-    test_ring_buffer = mainbuffer_.getRingBuffer(default_id);
-    CPPUNIT_ASSERT(test_ring_buffer->putLen() == sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == (int)(init_put_defaultid - sizeof(int)));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id1) == sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id2) == sizeof(int));
-    test_ring_buffer = mainbuffer_.getRingBuffer(test_id1);
-    CPPUNIT_ASSERT(test_ring_buffer->putLen() == sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == (int)(init_put_id1 - sizeof(int)));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(default_id) == sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id2) == sizeof(int));
-    test_ring_buffer = mainbuffer_.getRingBuffer(test_id2);
-    CPPUNIT_ASSERT(test_ring_buffer->putLen() == 0);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == init_put_id2);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(default_id) == 0);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id1) == 0);
-    // test mainbuffer availforget
-    CPPUNIT_ASSERT(mainbuffer_.availForGet(default_id) == sizeof(int));
-    CPPUNIT_ASSERT(mainbuffer_.availForGet(test_id1) == sizeof(int));
-    CPPUNIT_ASSERT(mainbuffer_.availForGet(test_id2) == sizeof(int));
-    //putdata test ring buffers
-    CPPUNIT_ASSERT(mainbuffer_.putData(&testint, sizeof(int), 100, test_id2) == sizeof(int));
-    test_ring_buffer = mainbuffer_.getRingBuffer(default_id);
-    CPPUNIT_ASSERT(test_ring_buffer->putLen() == sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == (int)(init_put_defaultid - sizeof(int)));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id1) == sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id2) == sizeof(int));
-    test_ring_buffer = mainbuffer_.getRingBuffer(test_id1);
-    CPPUNIT_ASSERT(test_ring_buffer->putLen() == sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == (int)(init_put_id1 - sizeof(int)));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(default_id) == sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id2) == sizeof(int));
-    test_ring_buffer = mainbuffer_.getRingBuffer(test_id2);
-    CPPUNIT_ASSERT(test_ring_buffer->putLen() == sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == (int)(init_put_id2 - sizeof(int)));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(default_id) == sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id1) == sizeof(int));
-    // test mainbuffer availforget
-    CPPUNIT_ASSERT(mainbuffer_.availForGet(default_id) == sizeof(int));
-    CPPUNIT_ASSERT(mainbuffer_.availForGet(test_id1) == sizeof(int));
-    CPPUNIT_ASSERT(mainbuffer_.availForGet(test_id2) == sizeof(int));
-
-    // test discardData default id (audio layer)
-    CPPUNIT_ASSERT(mainbuffer_.discard(sizeof(int)) == sizeof(int));
-    CPPUNIT_ASSERT(test_output == (testint + testint));
-    test_ring_buffer = mainbuffer_.getRingBuffer(default_id);
-    CPPUNIT_ASSERT(test_ring_buffer->putLen() == sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == (int)(init_put_defaultid - sizeof(int)));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id1) == sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id2) == sizeof(int));
-    test_ring_buffer = mainbuffer_.getRingBuffer(test_id1);
-    CPPUNIT_ASSERT(test_ring_buffer->putLen() == sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == (int)(init_put_id1 - sizeof(int)));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(default_id) == 0);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id2) == sizeof(int));
-    test_ring_buffer = mainbuffer_.getRingBuffer(test_id2);
-    CPPUNIT_ASSERT(test_ring_buffer->putLen() == sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == (int)(init_put_id2 - sizeof(int)));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(default_id) == 0);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id1) == sizeof(int));
-    // test mainbuffer availforget
-    CPPUNIT_ASSERT(mainbuffer_.availForGet(default_id) == 0);
-    CPPUNIT_ASSERT(mainbuffer_.availForGet(test_id1) == sizeof(int));
-    CPPUNIT_ASSERT(mainbuffer_.availForGet(test_id2) == sizeof(int));
-    // test discardData test_id1 (audio layer)
-    CPPUNIT_ASSERT(mainbuffer_.discard(sizeof(int), test_id1) == sizeof(int));
-    CPPUNIT_ASSERT(test_output == (testint + testint));
-    test_ring_buffer = mainbuffer_.getRingBuffer(default_id);
-    CPPUNIT_ASSERT(test_ring_buffer->putLen() == sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == (int)(init_put_defaultid - sizeof(int)));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id1) == 0);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id2) == sizeof(int));
-    test_ring_buffer = mainbuffer_.getRingBuffer(test_id1);
-    CPPUNIT_ASSERT(test_ring_buffer->putLen() == sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == (int)(init_put_id1 - sizeof(int)));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(default_id) == 0);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id2) == sizeof(int));
-    test_ring_buffer = mainbuffer_.getRingBuffer(test_id2);
-    CPPUNIT_ASSERT(test_ring_buffer->putLen() == 0);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == init_put_id2);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(default_id) == 0);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id1) == 0);
-    // test mainbuffer availforget
-    CPPUNIT_ASSERT(mainbuffer_.availForGet(default_id) == 0);
-    CPPUNIT_ASSERT(mainbuffer_.availForGet(test_id1) == 0);
-    CPPUNIT_ASSERT(mainbuffer_.availForGet(test_id2) == sizeof(int));
-    // test discardData test_id2 (audio layer)
-    CPPUNIT_ASSERT(mainbuffer_.discard(sizeof(int), test_id2) == sizeof(int));
-    CPPUNIT_ASSERT(test_output == (testint + testint));
-    test_ring_buffer = mainbuffer_.getRingBuffer(default_id);
-    CPPUNIT_ASSERT(test_ring_buffer->putLen() == 0);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == init_put_defaultid);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id1) == 0);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id2) == 0);
-    test_ring_buffer = mainbuffer_.getRingBuffer(test_id1);
-    CPPUNIT_ASSERT(test_ring_buffer->putLen() == 0);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == init_put_id1);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(default_id) == 0);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id2) == 0);
-    test_ring_buffer = mainbuffer_.getRingBuffer(test_id2);
-    CPPUNIT_ASSERT(test_ring_buffer->putLen() == 0);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == init_put_id2);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(default_id) == 0);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id1) == 0);
-    // test mainbuffer availforget
-    CPPUNIT_ASSERT(mainbuffer_.availForGet(default_id) == 0);
-    CPPUNIT_ASSERT(mainbuffer_.availForGet(test_id1) == 0);
-    CPPUNIT_ASSERT(mainbuffer_.availForGet(test_id2) == 0);
-
-
-    // test putData default (for flushing)
-    init_put_defaultid = mainbuffer_.getRingBuffer(default_id)->AvailForPut();
-    init_put_id1 = mainbuffer_.getRingBuffer(test_id1)->AvailForPut();
-    init_put_id2 = mainbuffer_.getRingBuffer(test_id2)->AvailForPut();
-    CPPUNIT_ASSERT(mainbuffer_.availForGet(default_id) == 0);
-    CPPUNIT_ASSERT(mainbuffer_.availForGet(test_id1) == 0);
-    CPPUNIT_ASSERT(mainbuffer_.availForGet(test_id2) == 0);
-    // put data test ring buffers
-    CPPUNIT_ASSERT(mainbuffer_.putData(&testint, sizeof(int), 100) == sizeof(int));
-    test_ring_buffer = mainbuffer_.getRingBuffer(default_id);
-    CPPUNIT_ASSERT(test_ring_buffer->putLen() == sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == (int)(init_put_defaultid - sizeof(int)));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id1) == sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id2) == sizeof(int));
-    test_ring_buffer = mainbuffer_.getRingBuffer(test_id1);
-    CPPUNIT_ASSERT(test_ring_buffer->putLen() == 0);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == init_put_id1);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(default_id) == 0);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id2) == 0);
-    test_ring_buffer = mainbuffer_.getRingBuffer(test_id2);
-    CPPUNIT_ASSERT(test_ring_buffer->putLen() == 0);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == init_put_id2);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(default_id) == 0);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id1) == 0);
-    // test mainbuffer availforget
-    CPPUNIT_ASSERT(mainbuffer_.availForGet(default_id) == 0);
-    CPPUNIT_ASSERT(mainbuffer_.availForGet(test_id1) == sizeof(int));
-    CPPUNIT_ASSERT(mainbuffer_.availForGet(test_id2) == sizeof(int));
-    //putdata test ring buffers
-    CPPUNIT_ASSERT(mainbuffer_.putData(&testint, sizeof(int), 100, test_id1) == sizeof(int));
-    test_ring_buffer = mainbuffer_.getRingBuffer(default_id);
-    CPPUNIT_ASSERT(test_ring_buffer->putLen() == sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == (int)(init_put_defaultid - sizeof(int)));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id1) == sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id2) == sizeof(int));
-    test_ring_buffer = mainbuffer_.getRingBuffer(test_id1);
-    CPPUNIT_ASSERT(test_ring_buffer->putLen() == sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == (int)(init_put_id1 - sizeof(int)));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(default_id) == sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id2) == sizeof(int));
-    test_ring_buffer = mainbuffer_.getRingBuffer(test_id2);
-    CPPUNIT_ASSERT(test_ring_buffer->putLen() == 0);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == init_put_id2);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(default_id) == 0);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id1) == 0);
-    // test mainbuffer availforget
-    CPPUNIT_ASSERT(mainbuffer_.availForGet(default_id) == sizeof(int));
-    CPPUNIT_ASSERT(mainbuffer_.availForGet(test_id1) == sizeof(int));
-    CPPUNIT_ASSERT(mainbuffer_.availForGet(test_id2) == sizeof(int));
-    //putdata test ring buffers
-    CPPUNIT_ASSERT(mainbuffer_.putData(&testint, sizeof(int), 100, test_id2) == sizeof(int));
-    test_ring_buffer = mainbuffer_.getRingBuffer(default_id);
-    CPPUNIT_ASSERT(test_ring_buffer->putLen() == sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == (int)(init_put_defaultid - sizeof(int)));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id1) == sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id2) == sizeof(int));
-    test_ring_buffer = mainbuffer_.getRingBuffer(test_id1);
-    CPPUNIT_ASSERT(test_ring_buffer->putLen() == sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == (int)(init_put_id1 - sizeof(int)));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(default_id) == sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id2) == sizeof(int));
-    test_ring_buffer = mainbuffer_.getRingBuffer(test_id2);
-    CPPUNIT_ASSERT(test_ring_buffer->putLen() == sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == (int)(init_put_id2 - sizeof(int)));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(default_id) == sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id1) == sizeof(int));
-    // test mainbuffer availforget
-    CPPUNIT_ASSERT(mainbuffer_.availForGet(default_id) == sizeof(int));
-    CPPUNIT_ASSERT(mainbuffer_.availForGet(test_id1) == sizeof(int));
-    CPPUNIT_ASSERT(mainbuffer_.availForGet(test_id2) == sizeof(int));
-
-    // test flush default id (audio layer)
-    mainbuffer_.flush();
-    CPPUNIT_ASSERT(test_output == (testint + testint));
-    test_ring_buffer = mainbuffer_.getRingBuffer(default_id);
-    CPPUNIT_ASSERT(test_ring_buffer->putLen() == sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == (int)(init_put_defaultid - sizeof(int)));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id1) == sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id2) == sizeof(int));
-    test_ring_buffer = mainbuffer_.getRingBuffer(test_id1);
-    DEBUG("%i", test_ring_buffer->putLen());
-    test_ring_buffer->debug();
-    CPPUNIT_ASSERT(test_ring_buffer->putLen() == sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == (int)(init_put_id1 - sizeof(int)));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(default_id) == 0);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id2) == sizeof(int));
-    test_ring_buffer = mainbuffer_.getRingBuffer(test_id2);
-    CPPUNIT_ASSERT(test_ring_buffer->putLen() == sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == (int)(init_put_id2 - sizeof(int)));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(default_id) == 0);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id1) == sizeof(int));
-    // test mainbuffer availforget
-    CPPUNIT_ASSERT(mainbuffer_.availForGet(default_id) == 0);
-    CPPUNIT_ASSERT(mainbuffer_.availForGet(test_id1) == sizeof(int));
-    CPPUNIT_ASSERT(mainbuffer_.availForGet(test_id2) == sizeof(int));
-    // test flush test_id1 (audio layer)
-    mainbuffer_.flush(test_id1);
-    CPPUNIT_ASSERT(test_output == (testint + testint));
-    test_ring_buffer = mainbuffer_.getRingBuffer(default_id);
-    CPPUNIT_ASSERT(test_ring_buffer->putLen() == sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == (int)(init_put_defaultid - sizeof(int)));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id1) == 0);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id2) == sizeof(int));
-    test_ring_buffer = mainbuffer_.getRingBuffer(test_id1);
-    CPPUNIT_ASSERT(test_ring_buffer->putLen() == sizeof(int));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == (int)(init_put_id1 - sizeof(int)));
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(default_id) == 0);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id2) == sizeof(int));
-    test_ring_buffer = mainbuffer_.getRingBuffer(test_id2);
-    CPPUNIT_ASSERT(test_ring_buffer->putLen() == 0);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == init_put_id2);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(default_id) == 0);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id1) == 0);
-    // test mainbuffer availforget
-    CPPUNIT_ASSERT(mainbuffer_.availForGet(default_id) == 0);
-    CPPUNIT_ASSERT(mainbuffer_.availForGet(test_id1) == 0);
-    CPPUNIT_ASSERT(mainbuffer_.availForGet(test_id2) == sizeof(int));
-    // test flush test_id2 (audio layer)
-    mainbuffer_.flush(test_id2);
-    CPPUNIT_ASSERT(test_output == (testint + testint));
-    test_ring_buffer = mainbuffer_.getRingBuffer(default_id);
-    CPPUNIT_ASSERT(test_ring_buffer->putLen() == 0);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == init_put_defaultid);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id1) == 0);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id2) == 0);
-    test_ring_buffer = mainbuffer_.getRingBuffer(test_id1);
-    CPPUNIT_ASSERT(test_ring_buffer->putLen() == 0);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == init_put_id1);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(default_id) == 0);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id2) == 0);
-    test_ring_buffer = mainbuffer_.getRingBuffer(test_id2);
-    CPPUNIT_ASSERT(test_ring_buffer->putLen() == 0);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForPut() == init_put_id2);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(default_id) == 0);
-    CPPUNIT_ASSERT(test_ring_buffer->AvailForGet(test_id1) == 0);
-    // test mainbuffer availforget
-    CPPUNIT_ASSERT(mainbuffer_.availForGet(default_id) == 0);
-    CPPUNIT_ASSERT(mainbuffer_.availForGet(test_id1) == 0);
-    CPPUNIT_ASSERT(mainbuffer_.availForGet(test_id2) == 0);
-
-
-    mainbuffer_.unBindCallID(test_id1, test_id2);
-    CPPUNIT_ASSERT(mainbuffer_.ringBufferMap_.size() == 3);
-    CPPUNIT_ASSERT(mainbuffer_.callIDMap_.size() == 3);
-
-    mainbuffer_.unBindCallID(test_id1);
-    CPPUNIT_ASSERT(mainbuffer_.ringBufferMap_.size() == 2);
-    CPPUNIT_ASSERT(mainbuffer_.callIDMap_.size() == 2);
-
-    mainbuffer_.unBindCallID(test_id2);
-    CPPUNIT_ASSERT(mainbuffer_.ringBufferMap_.empty());
-    CPPUNIT_ASSERT(mainbuffer_.callIDMap_.empty());
+    test_ring_buffer = mainbuffer_->getRingBuffer(MainBuffer::DEFAULT_ID);
+    test_ring_buffer = mainbuffer_->getRingBuffer(test_id1);
+    test_ring_buffer = mainbuffer_->getRingBuffer(test_id2);
 }
+
+MainBufferTest::MainBufferTest() : CppUnit::TestCase("Audio Layer Tests"), mainbuffer_(new MainBuffer) {}
diff --git a/daemon/test/mainbuffertest.h b/daemon/test/mainbuffertest.h
index f547fc61780ebd5fe5c917fbc73bbdbd4bbee14f..98139ed0d80457d4fb29ddcc4a0334397e3bf314 100644
--- a/daemon/test/mainbuffertest.h
+++ b/daemon/test/mainbuffertest.h
@@ -28,21 +28,23 @@
  *  as that of the covered work.
  */
 
+#ifndef MAINBUFFER_TEST_
+#define MAINBUFFER_TEST_
+
 // Cppunit import
 #include <cppunit/extensions/HelperMacros.h>
 #include <cppunit/TestCaller.h>
 #include <cppunit/TestCase.h>
 #include <cppunit/TestSuite.h>
 
-#include "audio/mainbuffer.h"
+#include <tr1/memory>
+
+class MainBuffer;
 /*
  * @file audiorecorderTest.cpp
  * @brief       Regroups unit tests related to the main buffer.
  */
 
-#ifndef MAINBUFFER_TEST_
-#define MAINBUFFER_TEST_
-
 class MainBufferTest : public CppUnit::TestCase {
 
         /*
@@ -67,7 +69,7 @@ class MainBufferTest : public CppUnit::TestCase {
 
     public:
 
-        MainBufferTest() : CppUnit::TestCase("Audio Layer Tests") {}
+        MainBufferTest();
 
         void testRingBufferCreation();
 
@@ -101,11 +103,11 @@ class MainBufferTest : public CppUnit::TestCase {
 
     private:
 
-        MainBuffer mainbuffer_;
+        std::tr1::shared_ptr<MainBuffer> mainbuffer_;
 };
 
 /* Register our test module */
 CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(MainBufferTest, "MainBufferTest");
 CPPUNIT_TEST_SUITE_REGISTRATION(MainBufferTest);
 
-#endif
+#endif  // MAINBUFFER_TEST_
diff --git a/daemon/test/ringtonetest.cpp b/daemon/test/ringtonetest.cpp
deleted file mode 100644
index 0b82edd1d1698bac9cc54521647423fa0fca5257..0000000000000000000000000000000000000000
--- a/daemon/test/ringtonetest.cpp
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- *  Copyright (C) 2004, 2005, 2006, 2008, 2009, 2010 Savoir-Faire Linux Inc.
- *  Author: Alexandre Savard <alexandre.savard@savoirfairelinux.com>
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- *  Additional permission under GNU GPL version 3 section 7:
- *
- *  If you modify this program, or any covered work, by linking or
- *  combining it with the OpenSSL project's OpenSSL library (or a
- *  modified version of that library), containing parts covered by the
- *  terms of the OpenSSL or SSLeay licenses, Savoir-Faire Linux Inc.
- *  grants you additional permission to convey the resulting work.
- *  Corresponding Source for a non-source form of such a combination
- *  shall include the source code for the parts of OpenSSL used as well
- *  as that of the covered work.
- */
-
-#include "ringtonetest.h"
-
-void RingtoneTest::testLoadWavefile()
-{
-    WavFile wav;
-
-    // Test initial values
-    CPPUNIT_ASSERT(not wav.isStarted());
-    CPPUNIT_ASSERT(wav.getSize() == 0);
-
-    // Test protection against wrong file name
-    CPPUNIT_ASSERT(not wav.loadFile(std::string("wrongfilename.wav"), NULL, 44100));
-}
diff --git a/daemon/test/ringtonetest.h b/daemon/test/ringtonetest.h
deleted file mode 100644
index 8791629c2b0a20541d9533f87fe3a97c7eeed42f..0000000000000000000000000000000000000000
--- a/daemon/test/ringtonetest.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- *  Copyright (C) 2004, 2005, 2006, 2008, 2009, 2010 Savoir-Faire Linux Inc.
- *  Author: Alexandre Savard <alexandre.savard@savoirfairelinux.com>
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- *  Additional permission under GNU GPL version 3 section 7:
- *
- *  If you modify this program, or any covered work, by linking or
- *  combining it with the OpenSSL project's OpenSSL library (or a
- *  modified version of that library), containing parts covered by the
- *  terms of the OpenSSL or SSLeay licenses, Savoir-Faire Linux Inc.
- *  grants you additional permission to convey the resulting work.
- *  Corresponding Source for a non-source form of such a combination
- *  shall include the source code for the parts of OpenSSL used as well
- *  as that of the covered work.
- */
-
-/*
- * @file ringtonetest.cpp
- * @brief       Regroups unitary tests related to the ringtones.
- *              Check if the wave file has been successfully loaded
- */
-
-#ifndef _RINGTONE_TEST_
-#define _RINGTONE_TEST_
-
-// Cppunit import
-#include <cppunit/extensions/HelperMacros.h>
-#include <cppunit/TestCaller.h>
-#include <cppunit/TestCase.h>
-#include <cppunit/TestSuite.h>
-
-#include <assert.h>
-
-// Application import
-#include "manager.h"
-#include "audio/sound/audiofile.h"
-#include "global.h"
-#include "user_cfg.h"
-
-class RingtoneTest: public CppUnit::TestFixture {
-
-        /*
-         * Use cppunit library macros to add unit test the factory
-         */
-        CPPUNIT_TEST_SUITE(RingtoneTest);
-        CPPUNIT_TEST(testLoadWavefile);
-        CPPUNIT_TEST_SUITE_END();
-
-    public:
-        /*
-         * Unit tests related to the audio preferences
-         */
-        void testLoadWavefile();
-
-};
-/* Register our test module */
-CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(RingtoneTest, "RingtoneTest");
-CPPUNIT_TEST_SUITE_REGISTRATION(RingtoneTest);
-
-#endif