diff --git a/doc/lfun/AddSpecialExit b/doc/lfun/AddSpecialExit
index b6b54bb..2f16c17 100644
--- a/doc/lfun/AddSpecialExit
+++ b/doc/lfun/AddSpecialExit
@@ -1,58 +1,82 @@
+
 AddSpecialExit()
-FUNKTION:
-     void AddSpecialExit(string|string* cmd, string|closure func);
+****************
 
-DEFINIERT IN:
-     /std/room/exits
 
-ARGUMENTE:
-     string/string* cmd
-          die Richtung(en), in die der Ausgang fuehrt
-     string/closure func
-          der Name der aufzurufenden Funktion/Closure
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Es wird ein Ausgang in die Richtung(en) cmd eingefuegt. Wird der
-     Ausgang benutzt, so wird die Closure bzw. Funktion func ausgefuehrt.
+   void AddSpecialExit(string|string* cmd, string|closure func);
 
-     AddSpecialExit(cmd, "func") entspricht:
-     - AddExit(keys, #'func)
 
-BEMERKUNGEN:
-     In func muss man den Spieler selbst in den Zielraum bewegen. Im
-     Erfolgsfall sollte man einen Wert >0 zurueckgeben, im Fehlerfall einen
-     Wert <=0.
+DEFINIERT IN
+============
 
-     func bekommt als Parameter einen String mit der gewaehlten
-     Bewegungsrichtung uebergeben.
+   /std/room/exits
 
-BEISPIELE:
-     // ein Ausgang soll nur von Froeschen benutzbar sein:
 
-     AddSpecialExit("loch", "lochfkt");
-     // der gleiche Aufruf, nur anders:
-     // static int lochfkt(string dir);		// Prototyp
-     // ...
-     // AddSpecialExit("loch", #'lochfkt);
-     // auch identisch zu:
-     // AddExit("loch", #'lochfkt);
+ARGUMENTE
+=========
 
-     static int lochfkt(string dir) {
-       if (!(this_player()->QueryProp(P_FROG))) {
-         // Kein Frosch => passt nicht!
-         notify_fail("Du bist zu gross!\n");
-         return 0;
-       }
-       // Meldungen werden im move() gleich mitgegeben
-       return this_player()->move("/room/loch", M_GO, 0,
-                    "huepft ins Loch", "huepft herein");
+   string/string* cmd
+        die Richtung(en), in die der Ausgang fuehrt
+   string/closure func
+        der Name der aufzurufenden Funktion/Closure
+
+
+BESCHREIBUNG
+============
+
+   Es wird ein Ausgang in die Richtung(en) cmd eingefuegt. Wird der
+   Ausgang benutzt, so wird die Closure bzw. Funktion func ausgefuehrt.
+
+   AddSpecialExit(cmd, "func") entspricht:
+   - AddExit(keys, #'func)
+
+
+BEMERKUNGEN
+===========
+
+   In func muss man den Spieler selbst in den Zielraum bewegen. Im
+   Erfolgsfall sollte man einen Wert >0 zurueckgeben, im Fehlerfall einen
+   Wert <=0.
+
+   func bekommt als Parameter einen String mit der gewaehlten
+   Bewegungsrichtung uebergeben.
+
+
+BEISPIELE
+=========
+
+   // ein Ausgang soll nur von Froeschen benutzbar sein:
+
+   AddSpecialExit("loch", "lochfkt");
+   // der gleiche Aufruf, nur anders:
+   // static int lochfkt(string dir);         // Prototyp
+   // ...
+   // AddSpecialExit("loch", #'lochfkt);
+   // auch identisch zu:
+   // AddExit("loch", #'lochfkt);
+
+   static int lochfkt(string dir) {
+     if (!(this_player()->QueryProp(P_FROG))) {
+       // Kein Frosch => passt nicht!
+       notify_fail("Du bist zu gross!\n");
+       return 0;
      }
+     // Meldungen werden im move() gleich mitgegeben
+     return this_player()->move("/room/loch", M_GO, 0,
+                  "huepft ins Loch", "huepft herein");
+   }
 
-SIEHE AUCH:
-     AddExit(), GetExits(),
-     RemoveExit(), RemoveSpecialExit(),
-     GuardExit(),
-     H_HOOK_EXIT_USE, P_EXITS, P_HIDE_EXITS, /std/room/exits.c
-     ausgaenge
+
+SIEHE AUCH
+==========
+
+   AddExit(), GetExits(),
+   RemoveExit(), RemoveSpecialExit(),
+   GuardExit(),
+   H_HOOK_EXIT_USE, P_EXITS, P_HIDE_EXITS, /std/room/exits.c
+   ausgaenge
 
 Letzte Aenderung: 22.12.2016, Bugfix
