diff --git a/src/audio/audiolayer.cpp b/src/audio/audiolayer.cpp
index e36640f54cf45bd1514811ee76d289b1c6df1673..a674938fd44ce394ed3c38e9b5a36a3e604052b3 100644
--- a/src/audio/audiolayer.cpp
+++ b/src/audio/audiolayer.cpp
@@ -86,10 +86,11 @@ AudioLayer::openDevice (int index)
 	     2, portaudio::INT16, true, 
 	     portaudio::System::instance().deviceByIndex(index).defaultLowInputLatency(), 
 	     NULL);
+
 	
   // we could put 0 instead of FRAME_PER_BUFFER to be variable
   portaudio::StreamParameters const params(inParams, outParams, 
-					   SAMPLING_RATE, FRAME_PER_BUFFER, paNoFlag);
+					   SAMPLING_RATE, paFramesPerBufferUnspecified, paPrimeOutputBuffersUsingStreamCallback | paNeverDropInput /*paNoFlag*/);
 		  
   // Create (and open) a new Stream, using the AudioLayer::audioCallback
   _stream = new portaudio::MemFunCallbackStream<AudioLayer>(params, 
diff --git a/src/audio/tonegenerator.cpp b/src/audio/tonegenerator.cpp
index b22283d3c526fec4de6325960f7d21700ddace91..af84b27c2b9b0117dbd2f3bbba48a5c95f9c2a54 100644
--- a/src/audio/tonegenerator.cpp
+++ b/src/audio/tonegenerator.cpp
@@ -60,7 +60,7 @@ ToneThread::run (void) {
 
 	// How long do 'size' samples play ?
   // let's play it a bit smaller that it should to put more inside the buffer
-	unsigned int play_time = _size / (SAMPLING_RATE/1000);
+	unsigned int play_time = _size / (SAMPLING_RATE/1000) - 20;
 
   ManagerImpl& manager = Manager::instance();
   manager.getAudioDriver()->flushMain();