diff --git a/secure/PlayerDeleter.c b/secure/PlayerDeleter.c
new file mode 100644
index 0000000..1b1ce2e
--- /dev/null
+++ b/secure/PlayerDeleter.c
@@ -0,0 +1,87 @@
+// MorgenGrauen MUDlib
+//
+// master.c -- master object
+//
+// $Id: master.c 7336 2009-11-19 20:37:31Z Zesstra $
+#pragma strong_types
+#pragma no_clone
+#pragma no_shadow
+#pragma no_inherit
+#pragma verbose_errors
+#pragma combine_strings
+#pragma pedantic
+#pragma range_check
+#pragma warn_deprecated
+
+#include <files.h>
+#include <wizlevels.h>
+#include <events.h>
+#include <config.h>
+#include <properties.h>
+
+protected void create() {
+  seteuid(getuid(this_object()));
+}
+
+public varargs int Delete(string plname, int nobanish, int noclone) {
+  // definitiv nur fuer EM+ und nur Objekt mit Level 66+ in der Callchain.
+  if (!ARCH_SECURITY || process_call())
+    return -1;
+
+  // existiert der Spieler?
+  if (!stringp(plname)
+      || !master()->find_userinfo(plname))
+    return -2;
+  // gibt es das Spielerobjekt?
+  object plob = find_player(plname) || find_netdead(plname);
+  // wenn kein Objekt: Dummyobjekt erzeugen
+  if (!objectp(plob) && !noclone) {
+    catch(plob = __create_player_dummy(plname));
+  }
+
+  int wlevel = query_wiz_level(plname);
+  string part_filename="/"+plname[0..0]+"/"+plname+".o";
+
+  // ggf. banishen
+  if (!nobanish && wlevel >= LEARNER_LVL)
+    master()->BanishName(plname, "So hiess mal ein Magier hier", 1);
+  else if (!nobanish && wlevel >= SEER_LVL)
+    master()->BanishName(plname, "So hiess mal ein Seher hier", 1);
+
+  // Spielpausen aufheben
+  master()->TBanishName(plname, 0);
+
+  // loggen
+  log_file("ARCH/ADMIN_USERDELETE",
+      sprintf("%s: %s geloescht durch %s (%s)\n",
+             strftime("%y%m%d-%H%M%S"),
+             plname,
+             secure_euid(),
+             to_string(query_ip_number(this_interactive())) ));
+
+
+  // Loesch-Event ausloesen
+  if (plob) {
+    EVENTD->TriggerEvent(EVT_LIB_PLAYER_DELETION, ([
+            E_PLNAME: plname,
+            E_ENVIRONMENT: environment(plob),
+            E_GUILDNAME: plob->QueryProp(P_GUILD) ]) );
+
+    // Spielerobjekt zerstoeren
+    plob->move("/room/void", M_NOCHECK);
+    plob->remove(1);
+  }
+
+  // Files loeschen
+  if (file_size("/"SECUREDIR"/save"+part_filename) > FSIZE_NOFILE)
+    rm("/"SECUREDIR"/save"+part_filename);
+  if (file_size("/"LIBSAVEDIR + part_filename) > FSIZE_NOFILE)
+    rm("/"LIBSAVEDIR + part_filename);
+  if (file_size("/"MAILDIR + part_filename) > FSIZE_NOFILE)
+    rm("/"MAILDIR + part_filename);
+
+  master()->RemoveFromCache(plname);
+
+  return 1;
+}
+
