diff --git a/doc/props/P_MURDER_MSG b/doc/props/P_MURDER_MSG
index 63d594c..c565cfa 100644
--- a/doc/props/P_MURDER_MSG
+++ b/doc/props/P_MURDER_MSG
@@ -1,63 +1,83 @@
+
 P_MURDER_MSG
-
-NAME:
-     P_MURDER_MSG			"murder_msg"
-
-DEFINIERT IN:
-     /sys/properties.h
-
-BESCHREIBUNG:
-     In dieser Property kann man einen String oder eine Closure ablegen
-     dessen Wert bzw. deren Resultat beim Tod des NPCs auf dem
-     Moerder-Kanal erscheint.
-     Normalerweise ist die Property nicht gesetzt, woraufhin zufaellig
-     eine Meldung generiert wird.
-
-     Ob der Tod eines NPCs auf dem Moerder-Kanal erscheint, haengt davon ab,
-     wie oft und welche Art von NPCs in der letzten Zeit getoetet wurden. Zum
-     Beispiel ist es eher selten, dass ein schwacher NPC auf dem Kanal
-     erscheint, wenn kuerzlich viele starke NPCs getoetet wurden. Allerdings
-     kann man auf diese Regelung mittels der Property P_FORCE_MURDER_MSG
-     Einfluss nehmen.
-
-     Wird in einen String der Platzhalter %s eingefuegt, so erscheint an der
-     Stelle spaeter der Name des Moerders.
-
-BEISPIELE:
-     // Zum Beispiel koennte man ja bei einer Ratte, die getoetet wird,
-     // folgendes auf dem Moerder-Kanal ausgeben lassen:
-     SetProp(P_MURDER_MSG,
-       "Ratten aller MUDs, vereinigt euch gegen %s!");
+************
 
 
-     // Um auch mal eine Closure zu zeigen: die Ratte koennte auch ihre
-     // Meldung erst bei ihrem Tod erstellen lassen:
-     private string moerder_meldung() {
-       return ({"Achweh!", "Au!", "Weia!"})[random(3)];
-     }
+NAME
+====
 
-     SetProp(P_MURDER_MSG, #'moerder_meldung);
+   P_MURDER_MSG                       "murder_msg"
 
-BEMERKUNGEN:
-     - P_NOCORPSE:
-       Ist in dem NPC die Property P_NOCORPSE gesetzt, so wird die
-       Moerdermeldung nicht auf dem Kanal gesendet, da diese Ausgabe ueber
-       /std/corpse laeuft.
-       Will man dennoch eine Meldung, so sollte man /std/corpse im die()
-       selbst clonen, daran Identify(this_object()) rufen und das geclonte
-       Objekt wieder entsorgen.
 
-     - Closures:
-       Closures bieten sich an, wenn ein zentrales Objekt fuer mehrere NPCs
-       bestimmte Moerdermeldungen generieren soll. Dann muss nur noch bei
-       den NPCs die Closure, die auf die erstellende Methode zeigt gesetzt
-       werden.
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-     Tod:		die(L)
-     Verwandt:		P_FORCE_MURDER_MSG
-     Todesmeldungen:	P_KILL_NAME, P_KILL_MSG, P_DIE_MSG
-			P_ZAP_MSG, P_ENEMY_DEATH_SEQUENCE
-     Sonstiges:		P_CORPSE, P_NOCORPSE, /std/corpse.c
+   /sys/properties.h
+
+
+BESCHREIBUNG
+============
+
+   In dieser Property kann man einen String oder eine Closure ablegen
+   dessen Wert bzw. deren Resultat beim Tod des NPCs auf dem
+   Moerder-Kanal erscheint.
+   Normalerweise ist die Property nicht gesetzt, woraufhin zufaellig
+   eine Meldung generiert wird.
+
+   Ob der Tod eines NPCs auf dem Moerder-Kanal erscheint, haengt davon ab,
+   wie oft und welche Art von NPCs in der letzten Zeit getoetet wurden. Zum
+   Beispiel ist es eher selten, dass ein schwacher NPC auf dem Kanal
+   erscheint, wenn kuerzlich viele starke NPCs getoetet wurden. Allerdings
+   kann man auf diese Regelung mittels der Property P_FORCE_MURDER_MSG
+   Einfluss nehmen.
+
+   Wird in einen String der Platzhalter %s eingefuegt, so erscheint an der
+   Stelle spaeter der Name des Moerders.
+
+
+BEISPIELE
+=========
+
+   // Zum Beispiel koennte man ja bei einer Ratte, die getoetet wird,
+   // folgendes auf dem Moerder-Kanal ausgeben lassen:
+   SetProp(P_MURDER_MSG,
+     "Ratten aller MUDs, vereinigt euch gegen %s!");
+
+
+   // Um auch mal eine Closure zu zeigen: die Ratte koennte auch ihre
+   // Meldung erst bei ihrem Tod erstellen lassen:
+   private string moerder_meldung() {
+     return ({"Achweh!", "Au!", "Weia!"})[random(3)];
+   }
+
+   SetProp(P_MURDER_MSG, #'moerder_meldung);
+
+
+BEMERKUNGEN
+===========
+
+   - P_NOCORPSE:
+     Ist in dem NPC die Property P_NOCORPSE gesetzt, so wird die
+     Moerdermeldung nicht auf dem Kanal gesendet, da diese Ausgabe ueber
+     /std/corpse laeuft.
+     Will man dennoch eine Meldung, so sollte man /std/corpse im die()
+     selbst clonen, daran Identify(this_object()) rufen und das geclonte
+     Objekt wieder entsorgen.
+
+   - Closures:
+     Closures bieten sich an, wenn ein zentrales Objekt fuer mehrere NPCs
+     bestimmte Moerdermeldungen generieren soll. Dann muss nur noch bei
+     den NPCs die Closure, die auf die erstellende Methode zeigt gesetzt
+     werden.
+
+
+SIEHE AUCH
+==========
+
+   Tod:               die(L)
+   Verwandt:          P_FORCE_MURDER_MSG
+   Todesmeldungen:    P_KILL_NAME, P_KILL_MSG, P_DIE_MSG
+                      P_ZAP_MSG, P_ENEMY_DEATH_SEQUENCE
+   Sonstiges:         P_CORPSE, P_NOCORPSE, /std/corpse.c
 
 30. Mai 2006, Gloinson
