diff --git a/lib/master.pike.in b/lib/master.pike.in
index de31126430b6d2f12098639926a7f9772355a1fe..8cf5e5922b4c065ddd7fdd45d3ac5b8a2f5b6f4b 100644
--- a/lib/master.pike.in
+++ b/lib/master.pike.in
@@ -6,7 +6,7 @@
 // Pike is distributed under GPL, LGPL and MPL. See the file COPYING
 // for more information.
 //
-// $Id: master.pike.in,v 1.269 2003/04/10 00:31:07 nilsson Exp $
+// $Id: master.pike.in,v 1.270 2003/04/10 02:02:33 nilsson Exp $
 
 #pike __REAL_VERSION__
 
@@ -1979,7 +1979,7 @@ void _main(array(string) orig_argv, array(string) env)
 #endif /* __AUTO_BIGNUM__ */
 
 	program prog;
-	if(currentversion <= Version(7,4))
+	if(Version(compat_major,compat_minor) <= Version(7,4))
 	  prog = compile_string(
 	    "mixed create(int argc, array(string) argv,array(string) env){"+
 	    opts[1]+";}");
@@ -2116,7 +2116,13 @@ void _main(array(string) orig_argv, array(string) env)
       // The main reason for this catch is actually to get a new call
       // to eval_instruction in interpret.c so that the debug and
       // trace levels set above take effect in the bytecode evaluator.
-      object script=prog(argv);
+      object script;
+      if(Version(compat_major,compat_minor) <= Version(7,4)) {
+	script=prog();
+      }
+      else {
+	script=prog(argv);
+      }
       if(!script->main)
 	_error("Error: %s has no main().\n", argv[0]);
       ret=script->main(sizeof(argv),argv,env);
@@ -3096,6 +3102,8 @@ class Version
   //! Set the version in the object.
   void create(int maj, int min)
   {
+    if(maj==-1) maj = __REAL_MAJOR__;
+    if(min==-1) min = __REAL_MINOR__;
     major = maj;
     minor = min;
   }