diff --git a/doc/lfun/give_notify b/doc/lfun/give_notify
index 010d68e..ef316cb 100644
--- a/doc/lfun/give_notify
+++ b/doc/lfun/give_notify
@@ -1,59 +1,87 @@
+
 give_notify()
-FUNKTION:
-     void give_notify(object obj);
+*************
 
-DEFINIERT IN:
-     /std/npc/put_and_get.c
 
-ARGUMENTE:
-     obj
-       an den NPC uebergebenes Objekt
-RUeCKGABEWERT:
-     keiner
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Diese Funktion wird automatisch immer dann aufgerufen, wenn ein
-     Lebewesen (welches kein Spielercharakter ist) ein Objekt uebergeben
-     bekommt. Dies muss jedoch ueber die Funktionalitaet von
-     put_and_get.c geschehen sein, innerhalb von move() wird die Funktion
-     nicht aufgerufen!
+   void give_notify(object obj);
 
-BEISPIEL:
-     Oftmals will man in Quests erreichen, dass einem NPC ein bestimmtes
-     Item als Beweis der Erfuellung einer bestimmten Aufgabe ueberbracht
-     wird. Folgendermasse kann dies realisiert werden:
-     void create() {
-       ::create();
-       ...
-       SetProp(P_REJECT,({REJECT_GIVE,
-         Name(WER)+" sagt: Das brauche ich nicht!\n"}));
-       ...
-     }
 
-     void quest_ok(object obj) { ...
-       // Vernichtung des Questobjektes und Questtexte
-       // Questbelohnung und Questanerkennung
-     }
+DEFINIERT IN
+============
 
-     void give_notify(object obj) {
-       if(obj->id("\nquestitem")) // Questitem bekommen?
-         quest_ok(obj);
-       else
-         ::give_notify(obj);  // P_REJECT soll sonst greifen
-     }
-     Der Aufruf von ::give_notify() stellt sicher, dass ein Objekt
-     zurueckgegeben wird, sofern es nicht das gesuchte ist. Erreicht wird
-     dies ueber P_REJECT (siehe Bemerkungen).
+   /std/npc/put_and_get.c
 
-BEMERKUNGEN:
-     Speziell in NPCs ist diese Funktion normalerweise dafuer
-     verantwortlich, dass mittels der Property P_REJECT die Annahme von
-     Objekten verweigert werden kann. Ueberschreibt man sie, so sollte
-     man gegebenenfalls darauf achten, dass diese Standardfunktion
-     ebenfalls aufgerufen wird.
 
-SIEHE AUCH:
-     P_REJECT, show_notify(), 
-     /std/npc/put_and_get.c, /std/living/put_and_get.c
+ARGUMENTE
+=========
+
+   obj
+     an den NPC uebergebenes Objekt
+
+
+RUeCKGABEWERT
+=============
+
+   keiner
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion wird automatisch immer dann aufgerufen, wenn ein
+   Lebewesen (welches kein Spielercharakter ist) ein Objekt uebergeben
+   bekommt. Dies muss jedoch ueber die Funktionalitaet von
+   put_and_get.c geschehen sein, innerhalb von move() wird die Funktion
+   nicht aufgerufen!
+
+
+BEISPIEL
+========
+
+   Oftmals will man in Quests erreichen, dass einem NPC ein bestimmtes
+   Item als Beweis der Erfuellung einer bestimmten Aufgabe ueberbracht
+   wird. Folgendermasse kann dies realisiert werden:
+   void create() {
+     ::create();
+     ...
+     SetProp(P_REJECT,({REJECT_GIVE,
+       Name(WER)+" sagt: Das brauche ich nicht!\n"}));
+     ...
+   }
+
+   void quest_ok(object obj) { ...
+     // Vernichtung des Questobjektes und Questtexte
+     // Questbelohnung und Questanerkennung
+   }
+
+   void give_notify(object obj) {
+     if(obj->id("\nquestitem")) // Questitem bekommen?
+       quest_ok(obj);
+     else
+       ::give_notify(obj);  // P_REJECT soll sonst greifen
+   }
+   Der Aufruf von ::give_notify() stellt sicher, dass ein Objekt
+   zurueckgegeben wird, sofern es nicht das gesuchte ist. Erreicht wird
+   dies ueber P_REJECT (siehe Bemerkungen).
+
+
+BEMERKUNGEN
+===========
+
+   Speziell in NPCs ist diese Funktion normalerweise dafuer
+   verantwortlich, dass mittels der Property P_REJECT die Annahme von
+   Objekten verweigert werden kann. Ueberschreibt man sie, so sollte
+   man gegebenenfalls darauf achten, dass diese Standardfunktion
+   ebenfalls aufgerufen wird.
+
+
+SIEHE AUCH
+==========
+
+   P_REJECT, show_notify(),
+   /std/npc/put_and_get.c, /std/living/put_and_get.c
 
 22. Oktober 2013, Arathorn.
