diff --git a/sflphone-common/src/audio/alsa/alsalayer.cpp b/sflphone-common/src/audio/alsa/alsalayer.cpp
index 4261eb4896e793f6e50b215e233b7eb5b846af78..ec30bad9ec8bdbdcf6a35b6429179d5ed8586ecf 100644
--- a/sflphone-common/src/audio/alsa/alsalayer.cpp
+++ b/sflphone-common/src/audio/alsa/alsalayer.cpp
@@ -924,8 +924,10 @@ void AlsaLayer::audioCallback (void)
             memset (out, 0, maxNbBytesToGet);
 
             if (normalAvailBytes) {
-
-                getMainBuffer()->getData (out, toGet, spkrVolume);
+                getMainBuffer()->getData (out, toGet);
+                if (spkrVolume!=100)
+                    for (int i=0; i<toGet / sizeof (SFLDataFormat); i++)
+                        out[i] = out[i] * spkrVolume / 100;
 
                 if (_mainBufferSampleRate && ( (int) _audioSampleRate != _mainBufferSampleRate)) {
 
diff --git a/sflphone-common/src/audio/audiorecorder.cpp b/sflphone-common/src/audio/audiorecorder.cpp
index e2f5b37aa7feff843d595d8f123e3fc65fb10d50..4b1ddfc7d9cd1ef1bf214db1c4aa644c29792561 100644
--- a/sflphone-common/src/audio/audiorecorder.cpp
+++ b/sflphone-common/src/audio/audiorecorder.cpp
@@ -71,7 +71,7 @@ void AudioRecorder::run (void)
 
         int toGet = (availBytes < bufferLength) ? availBytes : bufferLength;
 
-        mbuffer->getData (buffer, toGet, 100, recorderId);
+        mbuffer->getData (buffer, toGet, recorderId);
 
         if (availBytes > 0) {
 
diff --git a/sflphone-common/src/audio/audiortp/AudioRtpRecordHandler.cpp b/sflphone-common/src/audio/audiortp/AudioRtpRecordHandler.cpp
index cfc0aa51c9c2c7deaab2fb6ab4abf4a59528c43f..7b9b0c83dd27bd4bc6e08751305bde2d86bc53eb 100644
--- a/sflphone-common/src/audio/audiortp/AudioRtpRecordHandler.cpp
+++ b/sflphone-common/src/audio/audiortp/AudioRtpRecordHandler.cpp
@@ -280,7 +280,7 @@ int AudioRtpRecordHandler::processDataEncode (void)
         return 0;
 
     // Get bytes from micRingBuffer to data_from_mic
-    int nbSample = Manager::instance().getMainBuffer()->getData (micData, bytesToGet, 100, _id) / sizeof (SFLDataFormat);
+    int nbSample = Manager::instance().getMainBuffer()->getData (micData, bytesToGet, _id) / sizeof (SFLDataFormat);
 
     // process mic fade in
     if (!_audioRtpRecord._micFadeInComplete)
diff --git a/sflphone-common/src/audio/mainbuffer.cpp b/sflphone-common/src/audio/mainbuffer.cpp
index 5514c28ffa3a49553880f36cfafe89ee83b49861..d35f75fb8aa95459eddd17fe44b41395dc4b695f 100644
--- a/sflphone-common/src/audio/mainbuffer.cpp
+++ b/sflphone-common/src/audio/mainbuffer.cpp
@@ -338,7 +338,7 @@ int MainBuffer::availForPut (std::string call_id)
 }
 
 
-int MainBuffer::getData (void *buffer, int toCopy, unsigned short volume, std::string call_id)
+int MainBuffer::getData (void *buffer, int toCopy, std::string call_id)
 {
     ost::MutexLock guard (_mutex);
 
@@ -353,7 +353,7 @@ int MainBuffer::getData (void *buffer, int toCopy, unsigned short volume, std::s
         CallIDSet::iterator iter_id = callid_set->begin();
 
         if (iter_id != callid_set->end()) {
-            return getDataByID (buffer, toCopy, volume, *iter_id, call_id);
+            return getDataByID (buffer, toCopy, 100, *iter_id, call_id);
         } else
             return 0;
     } else {
@@ -367,7 +367,7 @@ int MainBuffer::getData (void *buffer, int toCopy, unsigned short volume, std::s
             int nbSmplToCopy = toCopy / sizeof (SFLDataFormat);
             SFLDataFormat mixBuffer[nbSmplToCopy];
             memset (mixBuffer, 0, toCopy);
-            size = getDataByID (mixBuffer, toCopy, volume, *iter_id, call_id);
+            size = getDataByID (mixBuffer, toCopy, 100, *iter_id, call_id);
 
             if (size > 0) {
                 for (int k = 0; k < nbSmplToCopy; k++) {
diff --git a/sflphone-common/src/audio/mainbuffer.h b/sflphone-common/src/audio/mainbuffer.h
index 8d74dc3deb532cbf1ec122d46b727f1b958bcc86..7eb3cb96354227f24d793d9d0a0821df302010e2 100644
--- a/sflphone-common/src/audio/mainbuffer.h
+++ b/sflphone-common/src/audio/mainbuffer.h
@@ -91,7 +91,7 @@ class MainBuffer
 
         int putData (void *buffer, int toCopy, std::string call_id = default_id);
 
-        int getData (void *buffer, int toCopy, unsigned short volume = 100, std::string call_id = default_id);
+        int getData (void *buffer, int toCopy, std::string call_id = default_id);
 
         int availForPut (std::string call_id = default_id);
 
diff --git a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp
index 03e3049d401b7ee886a3d653504a263908446f81..b4d38ba09eccaf25c432f7b1966bbc8c95015faa 100644
--- a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp
+++ b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp
@@ -744,7 +744,7 @@ void PulseLayer::writeToSpeaker (void)
         out = (SFLDataFormat*) pa_xmalloc (writeableSize);
         memset (out, 0, writeableSize);
 
-        _urgentRingBuffer.Get (out, writeableSize, 100);
+        _urgentRingBuffer.Get (out, writeableSize);
 
         pa_stream_write (playback->pulseStream(), out, writeableSize, NULL, 0, PA_SEEK_RELATIVE);
 
@@ -803,7 +803,7 @@ void PulseLayer::writeToSpeaker (void)
             out = (SFLDataFormat*) pa_xmalloc (maxNbBytesToGet);
             memset (out, 0, maxNbBytesToGet);
 
-            getMainBuffer()->getData (out, byteToGet, 100);
+            getMainBuffer()->getData (out, byteToGet);
 
             // test if resampling is required
             if (_mainBufferSampleRate && ( (int) _audioSampleRate != _mainBufferSampleRate)) {
diff --git a/sflphone-common/src/iax/iaxvoiplink.cpp b/sflphone-common/src/iax/iaxvoiplink.cpp
index 5a23dfdd35df029dc3f9e370e2973f299e9147d9..84838945edb0eb302819ce79d25dbd926984f1f3 100644
--- a/sflphone-common/src/iax/iaxvoiplink.cpp
+++ b/sflphone-common/src/iax/iaxvoiplink.cpp
@@ -310,7 +310,7 @@ IAXVoIPLink::sendAudioFromMic (void)
 			continue;
 
 		// Get bytes from micRingBuffer to data_from_mic
-        int bytes = audiolayer->getMainBuffer()->getData (micData, needed, 100, currentCall->getCallId()) / sizeof (SFLDataFormat);
+        int bytes = audiolayer->getMainBuffer()->getData (micData, needed, currentCall->getCallId()) / sizeof (SFLDataFormat);
 
 		int compSize;
 		if (audioCodec->getClockRate() && ((int) audioCodec->getClockRate() != _mainBufferSampleRate)) {