diff --git a/p/service/mupfel/getkill.c b/p/service/mupfel/getkill.c
new file mode 100644
index 0000000..685b1ed
--- /dev/null
+++ b/p/service/mupfel/getkill.c
@@ -0,0 +1,95 @@
+// /p/service/mupfel/getkill.c
+// Ermittelt, wenn in 'die' aufgerufen, den Killer, auch wenn
+// mit Bumerang, Kampfdaemon o.ae. Hilfsmitteln getoetet wurde
+// 22-07-1996  - Mupfel@MorgenGrauen -
+// Jetzt wird auch ein Beistand (Schutzengel, Phoenix, etc) erkannt
+// 06-07-1997  - Mupfel@MorgenGrauen -
+// Args der Pflanzenkrieger hat ja auch die id "Beistand" ;(
+// 09-01-2001  - Mupfel@MorgenGrauen -
+// Immer neue Retrowaffen... jetzt wird auch Tsunamis Toga erkannt
+// 04-01-2005  - Mupfel@MorgenGrauen -
+// 21.11.2006 - Zesstra
+// Der Bumerang ist umgezogen. Pfad aktualisiert
+// 13.10.2013 - Zesstra
+// Einmal auf Basis von P_KILLER neugebaut.
+// 16.10.2013 - Zesstra
+// Man muss es jetzt nicht mehr erben, sondern kann auch per Callother
+// abfragen. Dann wird der Killer vom previous_object() ermittelt.
+// 12.06.2016 - Mupfel
+// Zesstra war fleissig und hat diese Kruecke ueberfluessig gemacht.
+// Siehe Manpage zu "get_killing_player"
+
+#define NEED_PROTOTYPES
+#include <thing/properties.h>
+#undef NEED_PROTOTYPES
+
+#include <thing/language.h>
+#include <properties.h>
+
+public mixed get_killer_data(int extern)
+{
+  object killer;
+  // wenn von ausser gerufen und ein PO existiert, fragen wir P_KILLER darin
+  // ab. Dann muss man dieses Ding hier nicht unbedingt erben.
+  if ((extern || extern_call()) && previous_object())
+      killer=previous_object()->QueryProp(P_KILLER);
+  else
+      killer=QueryProp(P_KILLER);
+
+  // Eigentlich tritt dieser Fall nur bei Vergiftungen auf.
+  if (!objectp(killer))
+    return ({0,"<unbekannt>"});
+
+  // Spieler selber? Ist ja einfach.
+  if (query_once_interactive(killer))
+    return ({killer,killer->Name(WER)});
+
+  // Helfer-NPC?
+  mixed helperdata = killer->QueryProp(P_HELPER_NPC);
+  if (pointerp(helperdata) && objectp(helperdata[0]))
+    return ({helperdata[0], helperdata[0]->Name(WER) + " mit Helfer-NPC"});
+  // Einige Gilden-NPC verweisen auf ihren Spieler. Diese wird natuerlich nur
+  // abgefragt, wenn die Gilde noch keinen Helfer-NPC registrieren.
+  else if (killer->id("\nchaos_gilden_daemon"))
+  {
+    killer=find_player(killer->QueryProp("chaos_daem_beschwoerer"));
+    return ({killer, killer->Name(WER)+" (mit Kampfdaemon)"});
+  }
+  else if (killer->id("Beistand") && !killer->id("P-KRIEGER"))
+  {
+    killer = killer->QueryProp("klerus_owner");
+    return ({killer, killer->Name(WER)+" (mit Beistand)"});
+  }
+
+  // Einige toetende Objekte gesondert behandeln und Spieler als Killer
+  // liefern.
+  switch(object_name(blueprint(killer)))
+  {
+    case "/d/ebene/obj/gring":
+      killer = killer->QueryProp(P_WORN);
+      return ({killer, killer->name(RAW)+" (mit Goblinring)"});
+    case "/d/unterwelt/wurzel/dorf/shabz":
+      killer = killer->QueryProp(P_WORN);
+      return ({killer, killer->name(RAW)+" (mit Abzeichen)"});
+    case "/d/wueste/tsunami/schule/rue/hex_toga2":
+      killer = killer->QueryProp(P_WORN);
+      return ({killer, killer->name(RAW)+" (mit Toga)"});
+    case "/p/seher/laden/obj/bumerang":
+      killer = killer->query_werfer();
+      return ({killer, killer->name(RAW)+" (mit Bumerang)"});
+  }
+  // killer ist jedenfalls kein Spieler hier.
+  return ({killer, killer->name(RAW)});
+}
+
+// Name des Killers
+public string get_killer()
+{
+  return get_killer_data(extern_call())[1];
+}
+// Objekt des Killers
+public object get_killer_object()
+{
+  return get_killer_data(extern_call())[0];
+}
+
