diff --git a/.gitattributes b/.gitattributes
index 61f1c9fffc0f39be81eca7a4c8a7f878a47f66ea..eb36040b943e3bc03fa229c249874d1ab1adb883 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -5,6 +5,7 @@
 *.gz binary
 *.ppm binary
 *.rs binary
+init_nt -text -crlf
 lib -text -crlf
 testfont binary
 
diff --git a/NT/init_nt b/NT/init_nt
index 2e1c4998f0003722288b4955a6345c7aad0a9cb0..c247bd85cfc9bcd7a241160ced4b667b94de81e8 100755
--- a/NT/init_nt
+++ b/NT/init_nt
@@ -32,6 +32,8 @@ else
   MNTREPLACE="s@$NTMOUNT@@g
 "
 fi
+IFS=' 	
+
'
 
 export NTHOST NTDRIVE NTCC CC PATH NTTOOLS MNTREPLACE MNTREPLACE NTPORT USE_SPRSH
 
diff --git a/NT/tools/lib.pike b/NT/tools/lib.pike
index cab4d86a715fb4109bf9311f3dc5a41df7b0ec22..fa8bc901629e0f8726e6fd74d9f8fbe8e793aeae 100644
--- a/NT/tools/lib.pike
+++ b/NT/tools/lib.pike
@@ -60,6 +60,7 @@ int silent_do_cmd(string *cmd, mixed|void filter, int|void silent)
     sscanf(f->read(4),"%4c",int len);
     if(!len) break;
     s=f->read(len);
+    s=replace(s,"\r\n","\n");
     if(!silent) write(s);
     ret+=s;
   }
@@ -123,7 +124,7 @@ string find_next_in_path(string argv0,string cmd)
 	{
 	  if(argv0)
 	  {
-	    if(argv0==s)
+	    if(argv0==fname)
 	      argv0=0;
 	  }else{
 	    return fname;
diff --git a/NT/tools/rntcc b/NT/tools/rntcc
index 3e55f63e6c163af1e98d8a6b3768131400b8478f..3e89ca0241c7820bba23511e1eb49cd6e9444308 100755
--- a/NT/tools/rntcc
+++ b/NT/tools/rntcc
@@ -11,6 +11,15 @@ inherit "lib.pike";
 
 int verbose=1;
 
+// Temporary variable
+int linking_failed;
+
+string get_ext(string file)
+{
+  sscanf(file=lower_case(reverse(file)),"%s.",file);
+  return reverse(file);
+}
+
 int compile(string *sources,
 	     string dest,
 	     string errorfile,
@@ -28,13 +37,21 @@ int compile(string *sources,
   dest=fixpath(dest);
 
   sources=Array.map(sources,fixpath);
-  if(lower_case(sources[0][strlen(sources[0])-3..])==".s")
+  switch(get_ext(sources[0]))
   {
-    cmd=({ "wasm", "-fe"+errorfile, "-fo"+dest,})+ sources;
-  }else{
-    cmd=({ "wcc386" }) + cflags + ({"-fr"+errorfile, "-fo"+dest}) + sources;
-  }
+    case "c":
+      cmd=({ "wcc386" }) + cflags + ({"-fr"+errorfile, "-fo"+dest}) + sources;
+      break;
+
+    case "cpp":
+    case "cc":
+      cmd=({ "wpp386" }) + cflags + ({"-fr"+errorfile, "-fo"+dest}) + sources;
+      break;
 
+    case "s":
+      cmd=({ "wasm", "-fe"+errorfile, "-fo"+dest,})+ sources;
+  }
+      
   if(verbose)
     return do_cmd(cmd);
   else
@@ -65,7 +82,7 @@ int main(int argc, string *argv)
 {
   string target;
   string operation="link";
-  string *cflags=({});
+  string *cflags=({"-d__WIN32__","-d_WIN32"});
   string *ldopts=({"OPTION","STACK=8m"});
   string *libraries=({});
   string *objects=({});
@@ -196,22 +213,20 @@ int main(int argc, string *argv)
   argv=Getopt.get_args(argv);
   foreach(argv[1..], string tmp)
   {
-    string ext;
     if(tmp[0]=='-')
     {
       werror("Unrecognized option "+tmp+".\n");
       exit(1);
     }
-    sscanf(reverse(tmp),"%s.",ext);
 
     // Recognize which files need to be compiled
-    switch(ext)
+    switch(get_ext(tmp))
     {
-      case "bil":
       case "o":
-      case "jbo":
       case "a":
-      case "lld":
+      case "obj":
+      case "dll":
+      case "lib":
 	objects+=({tmp});
 	break;
 	
@@ -240,7 +255,18 @@ int main(int argc, string *argv)
 
     case "preprocess":
     {
-      int ret=silent_do_cmd( ({"wcc386","-p","-fr"+errorfile}) + cflags + Array.map(sources, fixpath));
+      switch(get_ext(sources[0]))
+      {
+	default:
+	case "c":
+	  int ret=silent_do_cmd( ({"wcc386","-p","-fr"+errorfile}) + cflags + Array.map(sources, fixpath));
+	  break;
+
+	case "cc":
+	case "cpp":
+	  int ret=silent_do_cmd( ({"wpp386","-p","-fr"+errorfile}) + cflags + Array.map(sources, fixpath));
+	  break;
+      }
       break;
     }
 
@@ -256,10 +282,12 @@ int main(int argc, string *argv)
 	  check_errorfile(errorfile);
 	}
 
+//      objects+=({"BINMODE.OBJ"});
       string ldfile="TMP"+getpid()+".lk";
       if(!output) output="a.out";
       rm(ldfile);
 
+
       target=output;
       if(!share) target+=".exe";
 
@@ -275,15 +303,18 @@ int main(int argc, string *argv)
       Process.system("cat "+ldfile);
       write("\n");
 #endif
+      linking_failed=0;
 
       silent_do_cmd( ({"wlink","@"+ldfile }), lambda(string data)
       {
 	if(search(data," W1008:")!=-1)
-	  exit(1);
+	  linking_failed++;
       });
 
       if(getenv("CLEANUP")!="no")
 	rm(ldfile);
+
+      if(linking_failed) exit(1);
   }
 
   check_errorfile(errorfile);