diff --git a/lib/master.pike.in b/lib/master.pike.in
index a5d56724bd08f72704f614c6288261f71ba8941f..6583a7ccafdec7ab437dd3f1dee4854aadce1bba 100644
--- a/lib/master.pike.in
+++ b/lib/master.pike.in
@@ -1,4 +1,4 @@
-/* $Id: master.pike.in,v 1.19 1998/04/24 18:18:49 hubbe Exp $
+/* $Id: master.pike.in,v 1.20 1998/04/29 00:18:38 hubbe Exp $
  * 
  * Master-file for Pike.
  *
@@ -539,15 +539,16 @@ void _main(string *orig_argv, string *env)
       ({"version",tmp->NO_ARG,({"-v","--version"})}),
 	({"help",tmp->NO_ARG,({"-h","--help"})}),
 	  ({"execute",tmp->HAS_ARG,({"-e","--execute"})}),
-	    ({"modpath",tmp->HAS_ARG,({"-M","--module-path"})}),
-	      ({"ipath",tmp->HAS_ARG,({"-I","--include-path"})}),
-		({"ppath",tmp->HAS_ARG,({"-P","--program-path"})}),
-		  ({"warnings",tmp->NO_ARG,({"-w","--warnings"})}),
-		    ({"ignore",tmp->HAS_ARG,"-ms"}),
-		      ({"debug",tmp->MAY_HAVE_ARG,"--debug",0,1}),
-			({"trace",tmp->MAY_HAVE_ARG,"--trace",0,1}),
-			  ({"ignore",tmp->MAY_HAVE_ARG,"-Dqdatpl",0,1})
-			}), 1);
+	    ({"preprocess",tmp->HAS_ARG,({"-E","--preprocess"})}),
+	      ({"modpath",tmp->HAS_ARG,({"-M","--module-path"})}),
+		({"ipath",tmp->HAS_ARG,({"-I","--include-path"})}),
+		  ({"ppath",tmp->HAS_ARG,({"-P","--program-path"})}),
+		    ({"warnings",tmp->NO_ARG,({"-w","--warnings"})}),
+		      ({"ignore",tmp->HAS_ARG,"-ms"}),
+			({"debug",tmp->MAY_HAVE_ARG,"--debug",0,1}),
+			  ({"trace",tmp->MAY_HAVE_ARG,"--trace",0,1}),
+			    ({"ignore",tmp->MAY_HAVE_ARG,"-Dqdatpl",0,1})
+			      }), 1);
     
     /* Parse -M and -I backwards */
     for(i=sizeof(q)-1;i>=0;i--)
@@ -610,6 +611,10 @@ void _main(string *orig_argv, string *env)
       case "execute":
 	compile_string("#include <simulate.h>\nmixed create(){"+opts[1]+";}")();
 	exit(0);
+
+	case "preprocess":
+	  _static_modules.files()->_stdout->write(cpp(_static_modules.files()->Fd(opts[1],"r")->read(),opts[1]));
+	  exit(0);
       }
     }
 
@@ -649,14 +654,15 @@ void _main(string *orig_argv, string *env)
 #if constant(_debug)
   if(debug) _debug(debug);
 #endif
-  if(trace) predef::trace(trace);
   if(!script->main)
   {
     werror("Error: "+argv[0]+" has no main().\n");
     exit(1);
   }
 
+  if(trace) predef::trace(trace);
   i=script->main(sizeof(argv),argv,env);
+  predef::trace(0);
   if(i >=0) exit(i);
 }