diff --git a/doc/lfun/obsolete/AddInsertHook b/doc/lfun/obsolete/AddInsertHook
index 5e80272..9a372ba 100644
--- a/doc/lfun/obsolete/AddInsertHook
+++ b/doc/lfun/obsolete/AddInsertHook
@@ -1,59 +1,85 @@
-********************* OBSOLETE LFUN ***********************************
-* Diese Efun bitte nicht mehr benutzen, sondern stattdessen die       *
-* Hooks (s. /doc/std/hooks).                                          *
-***********************************************************************
+
 AddInsertHook()
+***************
 
-FUNKTION:
-     void AddInsertHook(object ob);
+********************* OBSOLETE LFUN
+*********************************** * Diese Efun bitte nicht mehr
+benutzen, sondern stattdessen die       * * Hooks (s. /doc/std/hooks).
+* *******************************************************************
+**** AddInsertHook()
 
-DEFINIERT IN:
-     /std/player/restrictions.c
 
-ARGUMENTE:
-     ob - Das Objekt, das informiert werden soll, wenn ein Objekt dem
-          Spielerinventar hinzugefuegt wurde.
+FUNKTION
+========
 
-BESCHREIBUNG:
-     (Diese Funktionalitaet wurde ersetzt durch den allgemeinen Hook
-      H_HOOK_INSERT und ist nur noch aus Gruenden der Kompatibilitaet
-      vorhanden.)
+   void AddInsertHook(object ob);
 
-     Diese Funktion wird im Spielerobjekt aufgerufen, um das Objekt ob als
-     Hook-Listener anzumelden. Auf diese Weise eingetragene Listener
-     werden informiert, wenn ein Objekt ins Spielerinventar bewegt wurde.
-     Technisch wird die Bewegung ueber NotifyInsert() im Spielerobjekt
-     detektiert, und im Listener-Objekt wird die Funktion InsertNotify()
-     gerufen, die als Parameter das neu ins Spielerinventar bewegte Objekt
-     uebergeben bekommt.
 
-RUeCKGABEWERT:
-     keiner
+DEFINIERT IN
+============
 
-BEMERKUNGEN:
-     Das Listener-Objekt muss sich ebenfalls im Spielerinventar befinden,
-     ansonsten wird der eingetragene Hook wieder geloescht.
+   /std/player/restrictions.c
 
-BEISPIEL:
-     
-     a) Objekt "ob" wird im Spieler als Listener angemeldet:
-        this_player()->AddInsertHook(ob);
 
-     b) Objekt "new" wird ins Spielerinventar bewegt, das Spielerobjekt
-        informiert "ob" darueber:
-        ob->InsertNotify(new);
+ARGUMENTE
+=========
 
-     c) Das Listener-Objekt "ob" reagiert darauf, z.B. indem es die Fackel
-        loescht, sofern sie vorher brannte:
-        void InsertNotify(object new) {
-          if ( objectp(new) && new->id("\nfackel") && 
-               new->QueryProp(P_LIGHTED) )
-            new->unlight();
-          return;
-        }
+   ob - Das Objekt, das informiert werden soll, wenn ein Objekt dem
+        Spielerinventar hinzugefuegt wurde.
 
-SIEHE AUCH:
-    NotifyInsert(), RemoveInsertHook(), QueryInsertHooks()
 
-----------------------------------------------------------------------------
+BESCHREIBUNG
+============
+
+   (Diese Funktionalitaet wurde ersetzt durch den allgemeinen Hook
+    H_HOOK_INSERT und ist nur noch aus Gruenden der Kompatibilitaet
+    vorhanden.)
+
+   Diese Funktion wird im Spielerobjekt aufgerufen, um das Objekt ob als
+   Hook-Listener anzumelden. Auf diese Weise eingetragene Listener
+   werden informiert, wenn ein Objekt ins Spielerinventar bewegt wurde.
+   Technisch wird die Bewegung ueber NotifyInsert() im Spielerobjekt
+   detektiert, und im Listener-Objekt wird die Funktion InsertNotify()
+   gerufen, die als Parameter das neu ins Spielerinventar bewegte Objekt
+   uebergeben bekommt.
+
+
+RUeCKGABEWERT
+=============
+
+   keiner
+
+
+BEMERKUNGEN
+===========
+
+   Das Listener-Objekt muss sich ebenfalls im Spielerinventar befinden,
+   ansonsten wird der eingetragene Hook wieder geloescht.
+
+
+BEISPIEL
+========
+
+   a) Objekt "ob" wird im Spieler als Listener angemeldet:
+      this_player()->AddInsertHook(ob);
+
+   b) Objekt "new" wird ins Spielerinventar bewegt, das Spielerobjekt
+      informiert "ob" darueber:
+      ob->InsertNotify(new);
+
+   c) Das Listener-Objekt "ob" reagiert darauf, z.B. indem es die Fackel
+      loescht, sofern sie vorher brannte:
+      void InsertNotify(object new) {
+        if ( objectp(new) && new->id("\nfackel") &&
+             new->QueryProp(P_LIGHTED) )
+          new->unlight();
+        return;
+      }
+
+
+SIEHE AUCH
+==========
+
+   NotifyInsert(), RemoveInsertHook(), QueryInsertHooks()
+
 Last modified: 14.04.2010, Arathorn
