diff --git a/NT/tools/cp b/NT/tools/cp
index e0641cef88ea1b685f2eacfbd1798f9f42a9d906..ff2ec26424837d4b1bfdb3bb3d6f95ea92e92da4 100755
--- a/NT/tools/cp
+++ b/NT/tools/cp
@@ -5,8 +5,8 @@ dest=`eval echo '$'$#`
 case "x$dest" in
   x[a-zA-Z]:*)
     . $NTTOOLS
-    do_cmd "copy `fixpath $*`"
-    exit 0
+    do_cmd copy `fixpath $*`
+    exit $?
   ;;
 esac
 
diff --git a/NT/tools/install b/NT/tools/install
index 4374c8409d125093df8a83b0010e63a4aa123c8e..cef825764eac820a8bb9f412cd44eff5991f364d 100755
--- a/NT/tools/install
+++ b/NT/tools/install
@@ -15,8 +15,8 @@ case "x$dest" in
      set -- "$1.exe" "$2"
    fi
     
-    do_cmd "copy `fixpath $*`"
-    exit 0
+    do_cmd copy `fixpath $*`
+    exit $?
   ;;
 esac
 
diff --git a/NT/tools/lib b/NT/tools/lib
index ddcaf35a3636f5df18cab1e76f4106934123060c..005d50ef2ec4ea29dcc619f88340cf19ea65b120 100644
--- a/NT/tools/lib
+++ b/NT/tools/lib
@@ -24,7 +24,7 @@ s/
//g'
 
 silent_do_cmd() {
   if [ $USE_SPRSH = yes ]; then
-    sprsh "$*"
+    sprsh "$@"
   else
     BATFILE=TMP$$.bat
     PWD=`pwd`
@@ -36,7 +36,7 @@ silent_do_cmd() {
     fi
     echo >>$BATFILE "$NTDRIVE
"
     echo >>$BATFILE "cd $RPWD
"
-    echo >>$BATFILE "$*
"
+    echo >>$BATFILE "$@
"
     rsh $NTHOST $NTDRIVE$RPWD\\$BATFILE
     if [ x$CLEANUP = xyes ]; then
       rm $BATFILE || :
diff --git a/NT/tools/mkdir b/NT/tools/mkdir
index 3cb399cfd4a6c27f060fd7bbf9e3e37da2d447af..01df97c14da39e7c392910c6e73147392692bea4 100755
--- a/NT/tools/mkdir
+++ b/NT/tools/mkdir
@@ -4,7 +4,7 @@
 case "x$1" in
   x[a-zA-Z]:*)
     . $NTTOOLS
-    do_cmd "mkdir `fixpath $1`"
+    do_cmd mkdir `fixpath $1`
     exit 0
   ;;
 esac
diff --git a/NT/tools/rntcc b/NT/tools/rntcc
index 3bc8a062e3ceb8ecf812842e5fe06a20c21e8c53..0ae5085d5715d26f723e47024246a5e30fbcba70 100755
--- a/NT/tools/rntcc
+++ b/NT/tools/rntcc
@@ -77,8 +77,20 @@ while test "$#" != 0; do
     -R | -L) shift ;;
     -R* | -L* | -Wl*)  ;;
 
+    -W)
+      CFLAGS="$CFLAGS -w2"
+    ;;
+
+    -Wall)
+      CFLAGS="$CFLAGS -wx"
+    ;;
+
     -D*)
-      CFLAGS="$CFLAGS `echo $1 | sed -e 's/^-I/-d/g'`"
+      CFLAGS="$CFLAGS `echo $1 | sed -e 's/^-D/-d/g'`"
+    ;;
+
+    -U*)
+      CFLAGS="$CFLAGS `echo $1 | sed -e 's/^-U/-u/g'`"
     ;;
 
     -l*)
diff --git a/NT/tools/sprshd b/NT/tools/sprshd
index 6486a93cbd2ce2f71304972ff3d46db29685b1fb..82d2205814ecd4bcd196fd48fee351b4cf8c7279 100755
--- a/NT/tools/sprshd
+++ b/NT/tools/sprshd
@@ -20,8 +20,29 @@ void handle_incoming_connection(object(Stdio.File) io)
 
   write("Doing "+cmd*" "+"\n");
 
-  switch(cmd[0])
+  switch(lower_case(cmd[0]))
   {
+    case "mkdir":
+    {
+      io->write(sprintf("%4c",0));
+      mkdir(combine_path(combine_path(getcwd(),dir),cmd[1]));
+      io->write(sprintf("%4c",0));
+      break;
+    }
+
+    case "copy":
+    {
+      string from=combine_path(combine_path(getcwd(),dir),cmd[1]);
+      string to=combine_path(combine_path(getcwd(),dir),cmd[2]);
+
+      if(mixed stat=file_stat(to))
+	if(stat[1]==-2)
+	  to=combine_path(to,cmd[1]);
+
+      io->write(sprintf("%4c",0));
+      io->write(sprintf("%4c",!Stdio.cp(from,to)));
+      break;
+    }
     case "getenv":
     {
       string s=getenv(cmd[1])+"\n";
@@ -79,6 +100,7 @@ int main(int argc, string *argv)
 
   string *hosts=gethostbyname(argv[2])[1];
 
+  write("Ready.\n");
   while(1)
   {
     if(object io=accept())