diff --git a/secure/simul_efun/simul_efun.c b/secure/simul_efun/simul_efun.c
index e36d141..f5583db 100644
--- a/secure/simul_efun/simul_efun.c
+++ b/secure/simul_efun/simul_efun.c
@@ -392,22 +392,6 @@
   return(0); //sonst
 }
 
-// * Bei 50k Groesse Log-File rotieren
-varargs int log_file(string file, string txt, int size_to_break) {
-  mixed *st;
-
-  file="/log/"+file;
-  file=implode((efun::explode(file,"/")-({".."})),"/");
-//  tell_object(find_player("jof"),sprintf("LOG FILE: %O -> %O\n",previous_object(),file));
-  if (!funcall(bind_lambda(#'efun::call_other,PO),"secure/master",//')
-              "valid_write",file,geteuid(PO),"log_file",PO))
-      return 0;
-  if ( size_to_break >= 0 & (
-      sizeof(st = get_dir(file,2) ) && st[0] >= (size_to_break|MAX_LOG_SIZE)))
-      catch(rename(file, file + ".old");publish); /* No panic if failure */
-  return(write_file(file,txt));
-}
-
 // * Magier-Level abfragen
 int query_wiz_level(mixed player) {
   return (int)"/secure/master"->query_wiz_level(player);
@@ -931,12 +915,12 @@
   if (name[0] != '#')
   {
     // abs. Pfad erzeugen *seufz*
-    if (name[0] != '#' && name[0]!='/')
+    if (name[0]!='/')
       name = "/" + name;
 
     // wenn kein /data/ vorn steht, erstmal gucken, ob das Savefile unter
     // /data/ existiert. Wenn ja, wird das geladen.
-    if (name[0]!='#' && strstr(name,"/"LIBDATADIR"/") != 0)
+    if (strstr(name,"/"LIBDATADIR"/") != 0)
     {
       string path = "/"LIBDATADIR + name;
       if (file_size(path + ".o") >= 0)
@@ -1804,47 +1788,6 @@
 }
 
 
-#if !__EFUN_DEFINED__(copy_file)
-#define MAXLEN 50000
-nomask int copy_file(string source, string dest)
-{
-
-  int ptr;
-  string bytes;
-
-  set_this_object(previous_object());
-  if (!sizeof(source)||!sizeof(dest)||source==dest||(file_size(source)==-1)||
-      (!call_other(master(),"valid_read",source,
-                   getuid(this_interactive()||
-                 previous_object()),"read_file",previous_object()))||
-      (!call_other(master(),"valid_read",source,
-                   getuid(this_interactive()||
-                 previous_object()),"write_file",previous_object())))
-    return 1;
-  switch (file_size(dest))
-  {
-  case -1:
-    break;
-  case -2:
-    if (dest[<1]!='/') dest+="/";
-    dest+=efun::explode(source,"/")[<1];
-    if (file_size(dest)==-2) return 1;
-    if (file_size(dest)!=-1) break;
-  default:
-    if (!rm(dest)) return 1;
-    break;
-  }
-  do
-  {
-    bytes = read_bytes(source, ptr, MAXLEN); ptr += MAXLEN;
-    if (!bytes) bytes="";
-    write_file(dest, bytes);
-  }
-  while(sizeof(bytes) == MAXLEN);
-  return 0;
-}
-#endif //!__EFUN_DEFINED__(copy_file)
-
 
 // ### Ersatzaufloesung in Strings ###
 varargs string replace_personal(string str, mixed *obs, int caps) {
