diff --git a/std/util/path.c b/std/util/path.c
new file mode 100644
index 0000000..3ae07b8
--- /dev/null
+++ b/std/util/path.c
@@ -0,0 +1,59 @@
+#pragma strict_types, rtt_checks, pedantic, range_check, no_clone
+
+#include <config.h>
+#include <shells.h>
+#include <defines.h>
+
+// Ersetzt Platzhalter im Pfad und versorgt relative Pfade mit P_CURRENTDIR
+// Funktionalitaet war mal im master() in der Rechtepruefung, gehoert da aber
+// wirklich nicht hin.
+string expand_path(string path, string user)
+{
+  string cwd;
+  if (!sizeof(path))
+    return path;
+  switch(path[0])
+  {
+    // expand nur fuer nicht-absolute Pfade
+    case '/':
+      break;
+    case '+':
+      if(sizeof(path)==1)
+        path="/"DOMAINDIR;
+      path="/"DOMAINDIR"/" + path[1..];
+      break;
+    case '~':
+      if (sizeof(path)==1)
+      {
+        if(user)
+          path="/"WIZARDDIR"/"+user;
+        else
+          path="/"WIZARDDIR;
+      }
+      else
+      {
+        if(user && sizeof(path)>1 && path[1]=='/') // "~/"
+          path="/"WIZARDDIR"/" + user + "/" + path[2..];
+        else
+          path="/"WIZARDDIR"/" + path[1..];
+      }
+      break;
+    default:
+      if(user && PL && getuid(PL) == user
+          && (cwd=(string)PL->QueryProp(P_CURRENTDIR)))
+        path=cwd + "/" + path;
+  }
+  return path;
+}
+
+// Besser benamste Version von _get_path() aus master().
+// Normalisiert den Pfad, expandiert Platzhalter auf Wunsch, benutzt ggf. RPL
+// oder PL als User, wenn nicht angegeben.
+varargs string normalize_path(string path, string user, int expand) {
+  if (!user && (RPL || PL))
+    user = getuid(RPL || PL);
+  if (expand)
+    path=expand_path(path, user);
+  return implode(master()->path_array(path), "/");
+}
+
