diff --git a/src/renderer.cpp b/src/renderer.cpp
index b5d87dd..8b63854 100644
--- a/src/renderer.cpp
+++ b/src/renderer.cpp
@@ -241,7 +241,8 @@ void Render::buildConsumer(const QString &profileName)
                 m_mltConsumer->set("terminate_on_pause", 0);
                 m_mltConsumer->set("deinterlace_method", KdenliveSettings::mltdeinterlacer().toUtf8().constData());
 		m_mltConsumer->set("rescale", KdenliveSettings::mltinterpolation().toUtf8().constData());
-		m_mltConsumer->set("buffer", "1");
+		m_mltConsumer->set("buffer", 25);
+		m_mltConsumer->set("prefill", 1);
                 m_mltConsumer->set("real_time", KdenliveSettings::mltthreads());
             }
             if (m_mltConsumer && m_mltConsumer->is_valid()) {
@@ -286,7 +287,6 @@ void Render::buildConsumer(const QString &profileName)
 		m_mltConsumer->set("audio_buffer", 512);
 		m_mltConsumer->set("preview_format", mlt_image_rgb24a);
 	    }
-	    m_mltConsumer->set("buffer", "1");
 	    m_showFrameEvent = m_mltConsumer->listen("consumer-frame-show", this, (mlt_listener) consumer_gl_frame_show);
 	}
     } else {
@@ -323,6 +323,8 @@ void Render::buildConsumer(const QString &profileName)
 
     m_mltConsumer->set("frequency", 48000);
     m_mltConsumer->set("real_time", KdenliveSettings::mltthreads());
+    m_mltConsumer->set("buffer", "25");
+    m_mltConsumer->set("prefill", "1");
 }
 
 Mlt::Producer *Render::invalidProducer(const QString &id)
@@ -1607,9 +1609,11 @@ void Render::pause()
         return;
     m_paused = true;
     m_mltProducer->set_speed(0.0);
+    if (m_mltConsumer)
+        m_mltConsumer->purge();
     /*m_mltConsumer->set("refresh", 0);
-    //if (!m_mltConsumer->is_stopped()) m_mltConsumer->stop();
-    m_mltProducer->seek(m_mltConsumer->position());*/
+    //if (!m_mltConsumer->is_stopped()) m_mltConsumer->stop();*/
+    m_mltProducer->seek(m_mltConsumer->position() + 1);
 }
 
 void Render::setActiveMonitor()
@@ -1637,6 +1641,8 @@ void Render::switchPlay(bool play)
 	if (m_winid == 0) {
 	    // OpenGL consumer
 	    m_mltProducer->set_speed(0.0);
+	    m_mltConsumer->purge();
+	    m_mltProducer->seek(m_mltConsumer->position() + 1);
 	}
 	else {
 	    // SDL consumer, hack to allow pausing near the end of the playlist
