diff --git a/lib/master.pike.in b/lib/master.pike.in
index 9c59103e5ed0e01033721a23592e092f1a08e21b..f896f13e4b55a00ace9f4e2e83af889bd24a12db 100644
--- a/lib/master.pike.in
+++ b/lib/master.pike.in
@@ -1,6 +1,6 @@
 /* -*- Pike -*-
  *	
- * $Id: master.pike.in,v 1.98 2000/02/04 16:35:46 grubba Exp $
+ * $Id: master.pike.in,v 1.99 2000/02/10 17:57:37 hubbe Exp $
  * 
  * Master-file for Pike.
  *
@@ -250,12 +250,21 @@ array(string) query_precompiled_names(string fname)
   return ({ fname + ".o" });
 }
 
+#if constant(_static_modules.Builtin.mutex)
+#define THREADED
+object compilation_mutex = _static_modules.Builtin()->mutex();
+#endif
+
 static program low_findprog(string pname, string ext, object|void handler)
 {
   program ret;
   array s;
   string fname=pname+ext;
 
+#ifdef THREADED
+  object key=compilation_mutex->lock(2);
+#endif
+
 #ifdef PIKE_AUTORELOAD
   if(!autoreload_on || load_time[fname]>=time())
 #endif
@@ -307,9 +316,11 @@ static program low_findprog(string pname, string ext, object|void handler)
 	}
       }
       
+//      werror("2.5: %O\n",fname);
       
       if ( mixed e=catch { ret=compile_file(fname); } )
       {
+//	werror("-3: %O\n",fname);
 	programs[fname]=0;
         if(arrayp(e) && sizeof(e) && e[0] == "Compilation failed.\n")
           e[1]=({});
@@ -328,6 +339,7 @@ static program low_findprog(string pname, string ext, object|void handler)
 
     AUTORELOAD_FINISH(ret,programs,fname);
 
+//    werror("3: %O\n",fname);
     return programs[fname]=ret;
   }
   return 0;