diff --git a/secure/master.c b/secure/master.c
index 306f0a7..b4b79d1 100644
--- a/secure/master.c
+++ b/secure/master.c
@@ -431,9 +431,9 @@
   // path_array nach strs
   // TODO: was ist mit clones?
   if(objectp(str))
-    strs=path_array(object_name(str), 0, 0);
+    strs=path_array(object_name(str));
   else if(stringp(str))
-    strs=path_array(str, 0, 0);
+    strs=path_array(str);
   else return NOBODY;
 
   // absolute Pfade interessieren hier gerade nicht.
diff --git a/secure/master.h b/secure/master.h
index f97b0d0..51f579b 100644
--- a/secure/master.h
+++ b/secure/master.h
@@ -26,7 +26,6 @@
 #include "/secure/config.h"
 
 #include "/sys/userinfo.h"
-#include "/sys/shells.h"
 #include "/sys/player/base.h"
 #include "/sys/moving.h"
 #include "/sys/defines.h"
diff --git a/secure/master/file_access.c b/secure/master/file_access.c
index 93738ab..8b1bbd5 100644
--- a/secure/master/file_access.c
+++ b/secure/master/file_access.c
@@ -24,48 +24,11 @@
 // Normalisiert den Pfad und liefert ein Array mit Pfadelementen.
 // expand bestimmt, ob im Pfad +, ~ oder P_CURRENTDIR expandiert werden oder
 // nicht.
-string *path_array(string path, string user, int expand) {
-  string cwd;
+string *path_array(string path) {
 
   if (!sizeof(path))
     return ({"",""}); // additional "" to yield "/" later.
 
-  // expand gibt es nur wenn angefordert
-  if (expand)
-  {
-    switch(path[0])
-    {
-      // expand nur fuer nicht-absolute Pfade
-      case '/':
-        break;
-      case '+':
-        if(sizeof(path)==1)
-          return ({"",DOMAINDIR});
-        path="/"DOMAINDIR"/" + path[1..];
-        break;
-      case '~':
-        if (sizeof(path)==1)
-        {
-          if(user)
-            return ({"",WIZARDDIR,user});
-          else
-            return ({"",WIZARDDIR});
-        }
-        else
-        {
-          if(user && sizeof(path)>1 && path[1]=='/') // "~/"
-            path="/"WIZARDDIR"/" + user + "/" + path[2..];
-          else
-            path="/"WIZARDDIR"/" + path[1..];
-        }
-        break;
-      default:
-        if(user && TP && getuid(TP) == user
-            && (cwd=(string)TP->QueryProp(P_CURRENTDIR)))
-          path=cwd + "/" + path;
-    }
-  }
-
   // remove multiple '/'erstn gv
   path = regreplace(path, "/+", "/", 1);
 
@@ -109,23 +72,13 @@
 // Pfadnormalisierung OHNE Ersetzungen von +, ~ und P_CURRENTDIR (war mal mit)
 // Eigentlich hier ziemlich unnuetz, aber nen Haufen Objekte im Mud ruft das.
 string _get_path(string path, string user) {
-  return implode(path_array(path, user, 0),"/");
-}
-
-// Besser benamste Version von _get_path().
-// Normalisiert den Pfad, expandiert Platzhalter auf Wunsch, benutzt ggf. TI
-// oder TP als User, wenn nicht angegeben.
-varargs string normalize_path(string path, string user, int expand) {
-  if (!user && (TI || TP))
-    user = getuid(TI || TP);
-  return implode(path_array(path, user, expand), "/");
+  return implode(path_array(path),"/");
 }
 
 // Diese Funktion wird vom Driver nur fuer den Editor ed gerufen, aber der
-// Rest vom MG ruft es teilweise auch. Hier erfolgt eine Expansion von
-// Platzhaltern im Pfad.
+// Rest vom MG ruft es teilweise auch.
 string make_path_absolute(string path) {
-  return normalize_path(path, getuid(TI || TP), 1);
+  return implode(path_array(path),"/");
 }
 
 static int project_access(string user, string project)
@@ -222,23 +175,23 @@
 
   switch(fun) {
     case "log_file":
-      strs=path_array("/"+path, 0, 0);
+      strs=path_array("/"+path);
       path = implode(strs, "/");
       strs -= ({""}); // remove trailing and leading "/".
       if (sizeof(strs)>1 && strs[0]=="log") return path;
       return 0;
     case "save_object":
       if (!sizeof(path)) return 0;
-      strs=path_array("/"+path, 0, 0);
+      strs=path_array("/"+path);
       break;
     case "ed_start":
       if (sizeof(path))
-        strs=path_array(path, euid, 1);
+        strs=path_array(path);
       else
         strs=({"players",euid,".err"});
       break;
     default:
-      strs=path_array(path, euid, 0);
+      strs=path_array(path);
   }
 
   if (!euid || euid=="NOBODY" || euid=="ftp" || euid=="anonymous") return 0;
@@ -439,7 +392,7 @@
 
   if (!euid) euid="-";
 
-  strs=path_array(path, euid, 0);
+  strs=path_array(path);
   // Pfade sind ab jetzt auf jeden Fall absolut.
   path=implode(strs, "/");
 
