diff -Naur a/toys/posix/cp.c b/toys/posix/cp.c
--- a/toys/posix/cp.c	2014-10-02 18:23:27.000000000 +0530
+++ b/toys/posix/cp.c	2014-10-06 17:51:04.133633756 +0530
@@ -119,7 +119,7 @@
   } else {
 
     // -d is only the same as -r for symlinks, not for directories
-    if (S_ISLNK(try->st.st_mode) & (flags & FLAG_d)) flags |= FLAG_r;
+    if (S_ISLNK(try->st.st_mode) && (flags & FLAG_d)) flags |= FLAG_r;
 
     // Detect recursive copies via repeated top node (cp -R .. .) or
     // identical source/target (fun with hardlinks).
@@ -312,7 +312,8 @@
     else TT.destname = destname;
 
     errno = EXDEV;
-    if (CFG_CP_MV && toys.which->name[0] == 'm') rc = rename(src, TT.destname);
+    if (CFG_CP_MV && toys.which->name[0] == 'm' && (toys.optflags & FLAG_f)) 
+      rc = rename(src, TT.destname);
 
     // Skip nonexistent sources
     if (rc) {
