diff --git a/doc/props/P_NETDEAD_INFO b/doc/props/P_NETDEAD_INFO
index 83c36fd..fe96ac6 100644
--- a/doc/props/P_NETDEAD_INFO
+++ b/doc/props/P_NETDEAD_INFO
@@ -1,91 +1,120 @@
-NAME:
-    P_NETDEAD_INFO                "netdead_info"                
 
-DEFINIERT IN:
-    /sys/player.h
+P_NETDEAD_INFO
+**************
 
-BESCHREIBUNG:
-     Wird im Raum X gesetzt und wirkt nur, falls dieser Raum ein '#' im
-     object_name() hat (normale Clones, zB "/room/void#10153018").
-     
-     Bei Einschlafen eines Spielers in diesem Raum werden die Werte aus
-     der Property im Spieler gespeichert (Netztoteninformationen).
 
-     Ist beim Aufwachen des Spielers das Raumobjekt X zerstoert worden, dann
-     wird bei der Blueprint von X per SetProp() die gespeicherte Information
-     gesetzt. Der Rueckgabewert des SetProp wird als Pfad zu einem Ausweich-
-     Aufwach-Raum interpretiert und der Spieler wird in dem Fall dorthin
-     bewegt.
+NAME
+====
 
-BEMERKUNGEN:
-     Zum Clonen von Raeumen sollten Virtual Compiler benutzt werden:
-     Wird in den erzeugten Objektnamen KEIN '#' verwendet, dann ist diese
-     Property nicht sinnvoll und wird nicht verwendet. Ein ordentlicher
-     VC kann Bewegen eines Spielers in dessen alten, nicht mehr existierenden
-     Raum oder einen Ersatzraum beim Aufwachen selbst loesen.
+   P_NETDEAD_INFO                "netdead_info"
 
-BEISPIELE:
-     // #1: geclonter Raum mit Ausweich-Aufwachraum: Klerus-Gilde
-     #include <properties.h>
-     inherit "/std/room";
-     
-     void create() {
-       ::create();
 
-       SetProp(P_NETDEAD_INFO, "/gilden/klerus");
-       SetProp(P_LIGHT, 1);
-     }
-     
-     // #2: komplexerer Beispielraum fuer P_NETDEAD_INFO-Funktionalitaet
-     // Siehe auch: /doc/beispiele/testobjekte/netdead_info_testraum.c
-     #include <properties.h>
-     inherit "/std/room";
+DEFINIERT IN
+============
 
-     void create() {
-       ::create();
+   /sys/player.h
 
-       if (clonep(this_object()))
-         // setze Informationen, die im Netztoten gespeichert werden sollen
-         Set(P_NETDEAD_INFO, random(5));
-       else
-         // Blueprint: hier kann man zu einem Cloneraum gehen
-         AddExit("cloneraum", #'create_room);
 
-       // Set-Method, um die Informationen aus P_NETDEAD_INFO beim Aufwachen
-       // in der Blueprint auswerten zu koennen
-       Set(P_NETDEAD_INFO, #'create_destiny, F_SET_METHOD);
-       SetProp(P_LIGHT, 1);
-     }
-     
-     // Raum entfernen, normalerweise so KEINE GUTE IDEE!
-     void BecomesNetDead(object pl) {
-       call_out(#'remove, 30);
-     }
+BESCHREIBUNG
+============
 
-     // erzeuge einen Cloneraum und bewege den Spieler dahin
-     int create_room(string dir) {
-       object dest = clone_object(object_name(this_object()));
-       this_player()->move(dest, M_NOCHECK);
-       return 1;
-     }
-     
-     // Set-Method fuer P_NETDEAD_INFO: gibt Pfad zurueck
-     // benutze die Informationen aus dem jetzt aufwachenden Netztoten, um
-     // einen alternativen Aufwachraum zu ermitteln, da der Einschlafraum
-     // zerstoert ist
-     string create_destiny(mixed val) {
-       if (intp(val)) {
-         switch (val) {
-           case 0:
-             return "/d/ebene/room/PortVain/po_haf1";
-           case 1:
-             return "/gilden/klerus";
-           case 2:
-             return "/gilden/karate";
-           default:
-         }
-         return "/d/ebene/room/waldweg4";
+   Wird im Raum X gesetzt und wirkt nur, falls dieser Raum ein '#' im
+   object_name() hat (normale Clones, zB "/room/void#10153018").
+
+
+
+   Bei Einschlafen eines Spielers in diesem Raum werden die Werte aus
+   der Property im Spieler gespeichert (Netztoteninformationen).
+
+   Ist beim Aufwachen des Spielers das Raumobjekt X zerstoert worden, dann
+   wird bei der Blueprint von X per SetProp() die gespeicherte Information
+   gesetzt. Der Rueckgabewert des SetProp wird als Pfad zu einem Ausweich-
+   Aufwach-Raum interpretiert und der Spieler wird in dem Fall dorthin
+   bewegt.
+
+
+BEMERKUNGEN
+===========
+
+   Zum Clonen von Raeumen sollten Virtual Compiler benutzt werden:
+   Wird in den erzeugten Objektnamen KEIN '#' verwendet, dann ist diese
+   Property nicht sinnvoll und wird nicht verwendet. Ein ordentlicher
+   VC kann Bewegen eines Spielers in dessen alten, nicht mehr existierenden
+   Raum oder einen Ersatzraum beim Aufwachen selbst loesen.
+
+
+BEISPIELE
+=========
+
+   // #1: geclonter Raum mit Ausweich-Aufwachraum: Klerus-Gilde
+   #include <properties.h>
+   inherit "/std/room";
+
+
+
+   void create() {
+     ::create();
+
+     SetProp(P_NETDEAD_INFO, "/gilden/klerus");
+     SetProp(P_LIGHT, 1);
+   }
+
+
+
+   // #2: komplexerer Beispielraum fuer P_NETDEAD_INFO-Funktionalitaet
+   // Siehe auch: /doc/beispiele/testobjekte/netdead_info_testraum.c
+   #include <properties.h>
+   inherit "/std/room";
+
+   void create() {
+     ::create();
+
+     if (clonep(this_object()))
+       // setze Informationen, die im Netztoten gespeichert werden sollen
+       Set(P_NETDEAD_INFO, random(5));
+     else
+       // Blueprint: hier kann man zu einem Cloneraum gehen
+       AddExit("cloneraum", #'create_room);
+
+     // Set-Method, um die Informationen aus P_NETDEAD_INFO beim Aufwachen
+     // in der Blueprint auswerten zu koennen
+     Set(P_NETDEAD_INFO, #'create_destiny, F_SET_METHOD);
+     SetProp(P_LIGHT, 1);
+   }
+
+
+
+   // Raum entfernen, normalerweise so KEINE GUTE IDEE!
+   void BecomesNetDead(object pl) {
+     call_out(#'remove, 30);
+   }
+
+   // erzeuge einen Cloneraum und bewege den Spieler dahin
+   int create_room(string dir) {
+     object dest = clone_object(object_name(this_object()));
+     this_player()->move(dest, M_NOCHECK);
+     return 1;
+   }
+
+
+
+   // Set-Method fuer P_NETDEAD_INFO: gibt Pfad zurueck
+   // benutze die Informationen aus dem jetzt aufwachenden Netztoten, um
+   // einen alternativen Aufwachraum zu ermitteln, da der Einschlafraum
+   // zerstoert ist
+   string create_destiny(mixed val) {
+     if (intp(val)) {
+       switch (val) {
+         case 0:
+           return "/d/ebene/room/PortVain/po_haf1";
+         case 1:
+           return "/gilden/klerus";
+         case 2:
+           return "/gilden/karate";
+         default:
        }
+       return "/d/ebene/room/waldweg4";
      }
+   }
 
 2. Jan 2012 Gloinson
