Fixed cp so it works as God intended it to.
 -Erik
diff --git a/mv.c b/mv.c
index 2be3961..d0f3461 100644
--- a/mv.c
+++ b/mv.c
@@ -35,13 +35,25 @@
 
 static const char *srcName;
 static const char *destName;
-static const char *skipName;
 static int dirFlag = FALSE;
 
+static int fileAction(const char *fileName, struct stat* statbuf)
+{
+    char newdestName[NAME_MAX];
+
+    fprintf(stderr, "srcName='%s'  destName='%s'\n", srcName, destName);
+    strcpy(newdestName, destName);
+    strcat(newdestName, "/");
+    strcat(newdestName, strstr(fileName, fileName));
+    fprintf(stderr, "newdestName='%s'\n", newdestName); 
+    return (copyFile(fileName, newdestName, TRUE, TRUE));
+}
+
 
 extern int mv_main(int argc, char **argv)
 {
     char newdestName[NAME_MAX];
+    char *skipName;
 
     if (argc < 3) {
 	usage (mv_usage);
@@ -69,16 +81,26 @@
 		strcat(newdestName, strstr(srcName, skipName));
 	    else
 		strcat(newdestName, srcName);
-	    fprintf(stderr, "srcName='%s'\n", srcName);
-	    fprintf(stderr, "skipName='%s'\n", skipName);
-	    fprintf(stderr, "newdestName='%s'\n", newdestName);
 	}
-	if (copyFile(srcName, newdestName, FALSE, FALSE)  == FALSE) {
-	    exit( FALSE);
-	}
-	if (unlink (srcName) < 0) {
-	    perror (srcName);
-	    exit( FALSE);
+	if (isDirectory(srcName)==TRUE && newdestName[strlen(newdestName)] != '/') {
+		strcat(newdestName, "/");
+	    createPath(newdestName, 0777);
+	    fprintf(stderr, "srcName = '%s'\n", srcName);
+	    fprintf(stderr, "newdestName = '%s'\n", newdestName);
+	    if (recursiveAction(srcName, TRUE, TRUE, FALSE,
+				   fileAction, fileAction) == FALSE) 
+	    {
+		exit( FALSE);
+	    }
+	    exit( TRUE);
+	} else {
+	    if (copyFile(srcName, newdestName, FALSE, FALSE)  == FALSE) {
+		exit( FALSE);
+	    }
+	    if (unlink (srcName) < 0) {
+		perror (srcName);
+		exit( FALSE);
+	    }
 	}
     }
     exit( TRUE);