diff --git a/doc/lfun/notify_player_change b/doc/lfun/notify_player_change
index 1765af6..34c4024 100644
--- a/doc/lfun/notify_player_change
+++ b/doc/lfun/notify_player_change
@@ -1,56 +1,82 @@
+
+notify_player_change()
+**********************
+
 void notify_player_change(string/object who, int rein [, int invis])
 
-FUNKTION:
-    void /notify_player_change(object who, int rein)
-    void /std/player/base::notify_player_change(string who, int rein,
-                                                int invis)
-  
-GERUFEN VON:
-    /std/player/base.c (d.h. alle Spielershells/-Objekte)
 
-ARGUMENTE:
-    string who
-      getuid() eines Spielers
-    object who
-      Spieler-Objekt
-    int rein
-      0 fuer das MUD verlassende, 1 fuer hereinkommende Spieler
-    int invis
-      1 fuer unsichtbare Spieler (Magier)
+FUNKTION
+========
 
-BESCHREIBUNG:
-    Diese Funktion wird von Lebewesen fuer hereinkommende und das Spiel
-    verlassende Spieler an verschiedenen Stellen aufgerufen:
-    
-    * in anderen Spielern mit notify_player_change() mit drei Parametern
-      - dies dient fuer die "erwarte"-Funktionalitaet
-    * in der Gilde des Spielern mit zwei Parameter
-      - damit koennen Gilden notwendige Anpassungen vornehmen
+   void /notify_player_change(object who, int rein)
+   void /std/player/base::notify_player_change(string who, int rein,
+                                               int invis)
 
-    Diese Funktionen werden auch gerufen, wenn Magier "invis -e" bzw.
-    "vis e" benutzen.
 
-BEISPIELE:
-    // in einer Gilde:
-    void notify_player_change(object pl, int rein) {
-      if (rein && objectp(pl)) {
-        // Checks, ob Spielerskills in Ordnung sind
-        mapping bete = pl->QuerySkill("bete");
-        
-        if (!mappingp(bete)) {
-          if (IS_LEARNER(pl) || pl->QueryProp(P_TESTPLAYER)) {
-            tell_object(pl, break_string(
-              "Du bist ein kaputter Test-Kleriker ...", 78,
-              "Arkshat teilt dir mit: "));
-            // notduerftige Reparaturen
-          } else
-            raise_error("Klerus: Kaputter oder gesetzer Kleriker!\n");
-        }
-      }
-    }
+GERUFEN VON
+===========
 
-SIEHE AUCH:
-    RegisterEvent mit (EVT_LIB_LOGIN, EVT_LIB_LOGOUT)
-    erwarte
+   /std/player/base.c (d.h. alle Spielershells/-Objekte)
+
+
+ARGUMENTE
+=========
+
+   string who
+     getuid() eines Spielers
+   object who
+     Spieler-Objekt
+   int rein
+     0 fuer das MUD verlassende, 1 fuer hereinkommende Spieler
+   int invis
+     1 fuer unsichtbare Spieler (Magier)
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion wird von Lebewesen fuer hereinkommende und das Spiel
+   verlassende Spieler an verschiedenen Stellen aufgerufen:
+
+
+
+   * in anderen Spielern mit notify_player_change() mit drei Parametern
+     - dies dient fuer die "erwarte"-Funktionalitaet
+   * in der Gilde des Spielern mit zwei Parameter
+     - damit koennen Gilden notwendige Anpassungen vornehmen
+
+   Diese Funktionen werden auch gerufen, wenn Magier "invis -e" bzw.
+   "vis e" benutzen.
+
+
+BEISPIELE
+=========
+
+   // in einer Gilde:
+   void notify_player_change(object pl, int rein) {
+     if (rein && objectp(pl)) {
+       // Checks, ob Spielerskills in Ordnung sind
+       mapping bete = pl->QuerySkill("bete");
+
+
+
+       if (!mappingp(bete)) {
+         if (IS_LEARNER(pl) || pl->QueryProp(P_TESTPLAYER)) {
+           tell_object(pl, break_string(
+             "Du bist ein kaputter Test-Kleriker ...", 78,
+             "Arkshat teilt dir mit: "));
+           // notduerftige Reparaturen
+         } else
+           raise_error("Klerus: Kaputter oder gesetzer Kleriker!\n");
+       }
+     }
+   }
+
+
+SIEHE AUCH
+==========
+
+   RegisterEvent mit (EVT_LIB_LOGIN, EVT_LIB_LOGOUT)
+   erwarte
 
 1. Sep 2011 Gloinson
