diff --git a/android/src/org/rockbox/RockboxPCM.java b/android/src/org/rockbox/RockboxPCM.java
index 47bc42f..cd5832a 100644
--- a/android/src/org/rockbox/RockboxPCM.java
+++ b/android/src/org/rockbox/RockboxPCM.java
@@ -50,7 +50,7 @@ public class RockboxPCM extends AudioTrack
             AudioFormat.ENCODING_PCM_16BIT;
     /* 24k is plenty, but some devices may have a higher minimum */
     private static final int buf_len  = 
-            Math.max(24<<10, getMinBufferSize(samplerate, channels, encoding));
+        Math.max(48<<10, getMinBufferSize(samplerate, channels, encoding));
 
     private AudioManager audiomanager;
     private int maxstreamvolume;
@@ -185,11 +185,21 @@ public class RockboxPCM extends AudioTrack
     @Override
     public void stop() throws IllegalStateException 
     {
+        /* flush pending data, but turn the volume off so it cannot be heard.
+         * This is so that we don't hear old data if music is resumed very
+         * quickly after (e.g. when seeking).
+         */
+        int old_vol = audiomanager.getStreamVolume(streamtype);
         try {
+            audiomanager.setStreamVolume(streamtype, 0, 0);
+            flush();
             super.stop();
         } catch (IllegalStateException e) {
             throw new IllegalStateException(e);
+        } finally {
+            audiomanager.setStreamVolume(streamtype, old_vol, 0);
         }
+
         Intent widgetUpdate = new Intent("org.rockbox.UpdateState");
         widgetUpdate.putExtra("state", "stop");
         RockboxService.get_instance().sendBroadcast(widgetUpdate);
@@ -228,15 +238,14 @@ public class RockboxPCM extends AudioTrack
    
     private class PCMListener implements OnPlaybackPositionUpdateListener 
     {
-        private int max_len;
         private int refill_mark;
         private byte[] buf;
         public PCMListener(int len) 
         {
-            max_len = len;
-            /* refill to 100% when reached the 25% */
-            buf = new byte[max_len*3/4];
-            refill_mark = max_len - buf.length;
+            /* refill to 100% when reached the 50%,
+             * for a 48k buffer this means the worst caser latency is about ~130ms */
+            buf = new byte[len/2];
+            refill_mark = len - buf.length;
         }
 
         public void onMarkerReached(AudioTrack track) 
@@ -252,7 +261,7 @@ public class RockboxPCM extends AudioTrack
                 {
                     case AudioTrack.PLAYSTATE_PLAYING:
                     case AudioTrack.PLAYSTATE_PAUSED:
-                        /* refill at 25% no matter of how many 
+                        /* refill at 50% no matter of how many 
                          * bytes we've written */
                         if (setNotificationMarkerPosition(
                                 bytes2frames(refill_mark)) 
