Index: apps/lang/english.lang
===================================================================
--- apps/lang/english.lang	(revision 12176)
+++ apps/lang/english.lang	(working copy)
@@ -10488,2 +10488,34 @@
   </voice>
 </phrase>
+
+
+
+#onplay patch
+<phrase>
+  id: LANG_COPYING_FILE
+  desc: "Copying..." syncsplash when copying
+  user:
+  <source>
+    *: "Copying..."
+  </source>
+  <dest>
+    *: "Copying..."
+  </dest>
+  <voice>
+    *: "Copying..."
+  </voice>
+</phrase>
+<phrase>
+  id: LANG_MOVING_FILE
+  desc: "Moving..." syncsplash when moving
+  user:
+  <source>
+    *: "Moving..."
+  </source>
+  <dest>
+    *: "Moving..."
+  </dest>
+  <voice>
+    *: "Moving..."
+  </voice>
+</phrase>
Index: apps/onplay.c
===================================================================
--- apps/onplay.c	(revision 12176)
+++ apps/onplay.c	(working copy)
@@ -616,73 +616,42 @@
 /* Paste a file to a new directory. Will overwrite always. */
 static bool clipboard_pastefile(const char *src, const char *target, bool copy)
 {
-    int src_fd, target_fd, buffersize, size, bytesread, byteswritten;
+    int src_fd, target_fd, bufsize, bytesread;
     char *buffer;
     bool result = false;
 
     if (copy) {
-        /* See if we can get the plugin buffer for the file copy buffer */
-        buffer = (char *) plugin_get_buffer(&buffersize);
-        if (buffer == NULL || buffersize < 512) {
-            /* Not large enough, try for a disk sector worth of stack instead */
-            buffersize = 512;
-            buffer = (char *) __builtin_alloca(buffersize);
-        }
+        /* if the plugin buffer rejects us, or we get less than the size of a
+         * physical block on the disk */
+        if ((buffer = plugin_get_buffer(&bufsize)) == NULL
+                || bufsize < 4096) {
+            bufsize = 512;
+            /* ... try to get 512 bytes for our buffer off the stack instead */
+            if ((buffer = (char *) __builtin_alloca(bufsize)) == NULL)
+                return false;
+        } else bufsize = 4096;
 
-        if (buffer == NULL) {
-            return false;
-        }
-
-        buffersize &= ~0x1ff;  /* Round buffer size to multiple of sector size */
-
-        src_fd = open(src, O_RDONLY);
-
-        if (src_fd >= 0) {
-            target_fd = creat(target);
-
-            if (target_fd >= 0) {
+        if ((src_fd = open(src, O_RDONLY)) >= 0) {
+            if ((target_fd = creat(target)) >= 0) {
+                gui_syncsplash(0, true, str(LANG_COPYING_FILE));
                 result = true;
-
-                size = filesize(src_fd);
-
-                if (size == -1) {
-                    result = false;
-                }
-
-                while(size > 0) {
-                    bytesread = read(src_fd, buffer, buffersize);
-
-                    if (bytesread == -1) {
+                
+                while ((bytesread = read(src_fd, buffer, bufsize)) > 0) {
+                   if (write(target_fd, buffer, bytesread) != bytesread) {
                         result = false;
                         break;
                     }
-
-                    size -= bytesread;
-
-                    while(bytesread > 0) {
-                        byteswritten = write(target_fd, buffer, bytesread);
-
-                        if (byteswritten == -1) {
-                            result = false;
-                            size = 0;
-                            break;
-                        }
-
-                        bytesread -= byteswritten;
-                    }
                 }
-
+                if (bytesread == -1) result = false;
                 close(target_fd);
-
-                /* Copy failed. Cleanup. */
-                if (!result) {
+                
+                if (!result)
                     remove(target);
-                }
             }
-
-            close(src_fd);
         }
+        close(src_fd);
     } else {
+        gui_syncsplash(0, true, str(LANG_MOVING_FILE));
         result = rename(src, target) == 0;
 #ifdef HAVE_MULTIVOLUME
         if (!result) {
@@ -697,7 +666,6 @@
         }
 #endif
     }
-
     return result;
 }
 
