diff --git a/sflphone-common/src/audio/alsa/alsalayer.cpp b/sflphone-common/src/audio/alsa/alsalayer.cpp
index 920ab666b3be0e2e0824f8130dc4943e722b0542..caa4d7f46cf1ae5710ac6e58f18b68fd29f07e33 100644
--- a/sflphone-common/src/audio/alsa/alsalayer.cpp
+++ b/sflphone-common/src/audio/alsa/alsalayer.cpp
@@ -135,7 +135,8 @@ AlsaLayer::openDevice (int indexIn, int indexOut, int sampleRate, int frameSize,
 
     std::string pcmc = buildDeviceTopo (plugin, indexIn, 0);
 
-    _converter = new SamplerateConverter (_audioSampleRate, _frameSize);
+    // use 1 sec buffer for resampling
+    _converter = new SamplerateConverter (_audioSampleRate, 1000);
 
     // open_device (pcmp, pcmc, stream);
     return true; // open_device (pcmp, pcmc, stream);
@@ -383,12 +384,12 @@ bool AlsaLayer::alsa_set_params (snd_pcm_t *pcm_handle, int type, int rate)
     int err;
     int format;
     int periods = 4;
-    int periodsize = 1024;
+    int periodsize = 2048;
 
     /* Allocate the snd_pcm_hw_params_t struct */
     snd_pcm_hw_params_malloc (&hwparams);
 
-    _periodSize = 940;
+    _periodSize = 2048;
     /* Full configuration space */
 
     if ( (err = snd_pcm_hw_params_any (pcm_handle, hwparams)) < 0) {
diff --git a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp
index 8da08d7c727107e7213ffc7d5f2d99cd5637cdb4..a9c03e2ed2ac90332252b4e8cb9229be95d7bd21 100644
--- a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp
+++ b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp
@@ -285,7 +285,8 @@ bool PulseLayer::openDevice (int indexIn UNUSED, int indexOut UNUSED, int sample
     // _urgentRingBuffer.flushAll();
     flushUrgent();
 
-    _converter = new SamplerateConverter (_audioSampleRate, _frameSize*4);
+    // use 1 sec buffer for resampling
+    _converter = new SamplerateConverter (_audioSampleRate, 1000);
 
     return true;
 }
diff --git a/sflphone-common/src/audio/samplerateconverter.cpp b/sflphone-common/src/audio/samplerateconverter.cpp
index 9a2ace32e8f5be682ed32f7ab6b367dc1dd626e9..ba68515756e811546ebd41777766320172289b71 100644
--- a/sflphone-common/src/audio/samplerateconverter.cpp
+++ b/sflphone-common/src/audio/samplerateconverter.cpp
@@ -77,8 +77,7 @@ void SamplerateConverter::init (void)
     _src_state_spkr = src_new (SRC_LINEAR, 1, &_src_err);
 
     int nbSamplesMax = (int) (getFrequence() * getFramesize() / 1000);
-    // TODO: fix this hack that make sure we have enought place in buffers to upsample
-    nbSamplesMax = nbSamplesMax*4;
+
     _floatBufferDownMic  = new float32[nbSamplesMax];
     _floatBufferUpMic = new float32[nbSamplesMax];
     _floatBufferDownSpkr  = new float32[nbSamplesMax];
@@ -104,9 +103,8 @@ int SamplerateConverter::upsampleData (SFLDataFormat* dataIn , SFLDataFormat* da
 {
 
     double upsampleFactor = (double) samplerate2 / samplerate1 ;
-    //_debug("factor = %f" , upsampleFactor);
+
     int nbSamplesMax = (int) (samplerate2 * getFramesize() / 1000);
-    nbSamplesMax = nbSamplesMax*4;
 
     if (upsampleFactor != 1 && dataIn != NULL) {
         SRC_DATA src_data;
@@ -136,10 +134,8 @@ int SamplerateConverter::downsampleData (SFLDataFormat* dataIn , SFLDataFormat*
 {
 
     double downsampleFactor = (double) samplerate1 / samplerate2;
-    //_debug("factor = %f" , downsampleFactor);
-    int nbSamplesMax = (int) (samplerate1 * getFramesize() / 1000);
 
-    nbSamplesMax = nbSamplesMax*4;
+    int nbSamplesMax = (int) (samplerate1 * getFramesize() / 1000);
 
     if (downsampleFactor != 1) {
         SRC_DATA src_data;