diff --git a/lib/master.pike b/lib/master.pike
index dd11329e87f919df26cd466149af7c3043d4bb14..c739cd9d6ec38e1e7c3749e5b7a4808d804fe8b9 100644
--- a/lib/master.pike
+++ b/lib/master.pike
@@ -1,4 +1,4 @@
-/* $Id: master.pike,v 1.62 1998/01/17 17:32:55 mirar Exp $
+/* $Id: master.pike,v 1.63 1998/01/21 19:36:19 hubbe Exp $
  *
  * Master-file for Pike.
  */
@@ -121,7 +121,7 @@ mixed *master_file_stat(string x)
 mapping (string:string) environment=([]);
 
 
-varargs mixed getenv(string s)
+mixed getenv(string|void s)
 {
   if(!s) return environment;
   return environment[s];
@@ -433,7 +433,7 @@ object findmodule(string fullname)
   return fc[fullname]=UNDEFINED;
 }
 
-varargs mixed resolv(string identifier, string current_file)
+mixed resolv(string identifier, string|void current_file)
 {
   mixed ret;
   string *tmp,path;
diff --git a/lib/modules/Array.pmod b/lib/modules/Array.pmod
index f250f10f7640be9d8d456dcacef1a1bd56227692..4acd5211d65d383288034dfa0cd7be3dbe9b3090 100644
--- a/lib/modules/Array.pmod
+++ b/lib/modules/Array.pmod
@@ -94,7 +94,7 @@ mixed *sum_arrays(function foo, mixed * ... args)
   return ret;
 }
 
-varargs mixed *sort_array(array foo,function cmp, mixed ... args)
+mixed *sort_array(array foo,function|void cmp, mixed ... args)
 {
   array bar,tmp;
   int len,start;
diff --git a/lib/modules/Process.pmod b/lib/modules/Process.pmod
index adbb410779d31118b6e860fbdae5ac09414bf00e..dfa0417077655cefac0e6f229a0122d5a2b03ea0 100644
--- a/lib/modules/Process.pmod
+++ b/lib/modules/Process.pmod
@@ -4,7 +4,7 @@ import Stdio;
 
 program create_process = _static_modules.Builtin()->create_process;
 
-varargs int exec(string file,string ... foo)
+int exec(string file,string ... foo)
 {
   if (sizeof(file)) {
     string path;
@@ -65,8 +65,8 @@ string *split_quoted_string(string s)
   return ret;
 }
 
-varargs object spawn(string s,object stdin,object stdout,object stderr,
-		     function|void cleanup, mixed ... args)
+object spawn(string s,object|void stdin,object|void stdout,object|void stderr,
+	     function|void cleanup, mixed ... args)
 {
 #if 1
   mapping data=([]);
diff --git a/lib/modules/Simulate.pmod b/lib/modules/Simulate.pmod
index 6bb09681caecf8078ba36a322c9f3208ba9d38e7..14da44b5d15c7ae106068aa6ebe93931d14d5d60 100644
--- a/lib/modules/Simulate.pmod
+++ b/lib/modules/Simulate.pmod
@@ -5,7 +5,7 @@ inherit Process;
 
 #define error(X) throw( ({ (X), backtrace()[0..sizeof(backtrace())-2] }) )
 
-varargs int member_array(mixed needle,mixed *haystack,int start)
+int member_array(mixed needle,mixed *haystack,int|void start)
 {
   return search(haystack,needle,start);
 }
diff --git a/lib/modules/Stdio.pmod b/lib/modules/Stdio.pmod
index 8e3317accb43d2e27f62eea809e3b1b68920d37c..8b8d994dbe846941f41c854e881850b630a73f5c 100644
--- a/lib/modules/Stdio.pmod
+++ b/lib/modules/Stdio.pmod
@@ -259,3 +259,27 @@ mixed `[](string index)
   default: return ([])[0];
   }
 }
+
+#if constant(system.cp)
+constant cp=system.cp;
+#else
+#define BLOCK 65536
+int cp(string from, string to)
+{
+  string data;
+  object tmp=File();
+  if(tmp->open(from,"r")) return 0;
+  function r=tmp->read;
+  tmp=File();
+  if(tmp->open(to,"wct")) return 0;
+  function w=tmp->write;
+  do
+  {
+    data=r(BLOCK);
+    if(!data) return 0;
+    if(w(data)!=strlen(data)) return 0;
+  }while(strlen(data) == BLOCK);
+
+  return 1;
+}
+#endif
diff --git a/lib/modules/Thread.pmod b/lib/modules/Thread.pmod
index bd22fb0c600cb4dad917beb85bee33eddc8efd73..01bc30f215c78d589f8680697b45626bf80ba65f 100644
--- a/lib/modules/Thread.pmod
+++ b/lib/modules/Thread.pmod
@@ -32,7 +32,7 @@ class Fifo {
       r_cond::signal();
     }
   
-  varargs void create(int size)
+  void create(int|void size)
     {
       buffer=allocate(size || 128);
     }