diff --git a/doc/lfun/AddSpecialDetail b/doc/lfun/AddSpecialDetail
index 90c5543..3405eec 100644
--- a/doc/lfun/AddSpecialDetail
+++ b/doc/lfun/AddSpecialDetail
@@ -1,61 +1,87 @@
-VERALTET: AddSpecialDetail()
 
-FUNKTION:
-    void AddSpecialDetail(string|string* keys, string func);
+AddSpecialDetail()
+******************
 
-DEFINIERT IN:
-    /std/thing/description.c
 
-ARGUMENTE:
-    keys
-      String oder Array von Strings mit den Namen der Details.
-    func
-      String mit dem Namen der Funktion, die zur Auswertung aufgerufen
-      wird.
+VERALTET AddSpecialDetail()
+===========================
 
-BESCHREIBUNG:
-    Es wird ein Detail hinzugefuegt, dessen Inhalt nicht von vornherein
-    feststeht, sondern von aeusseren Bedingungen abhaengt. Zu diesem
-    Zweck wird immer, wenn dieses Detail untersucht wird, die Funktion
-    func aufgerufen, um den aktuellen Zustand des Details zu bestimmen.
-    Der Funktion wird als Parameter das Schluesselwort uebergeben, mit
-    dem das Detail untersucht wurde.
 
-    VERALTET: Bitte AddDetail mit Closure benutzen.
+FUNKTION
+========
 
-BEISPIELE:
-    Ein zustandsabhaengiges Detail:
+   void AddSpecialDetail(string|string* keys, string func);
 
-      int hebel_betaetigt;
-      string hebel(string key);
-      ...
-      // ALT: AddSpecialDetail( ({ "hebel", "schalter" }), "hebel" );
-      AddDetail(({ "hebel", "schalter" }), #'hebel );
-      ...
-      string hebel(string key)
-      { if(hebel_betaetigt)
-          return "Der "+capitalize(key)+" steht auf EIN.\n";
-        else
-          return "Der "+capitalize(key)+" steht auf AUS.\n";
-      }
 
-    Man erhaelt verschiedene Ergebnisse beim Untersuchen, je nachdem
-    ob das Flag hebel_betaetigt gesetzt ist oder nicht.
+DEFINIERT IN
+============
 
-BEMERKUNG:
-    Intern werden Details und SpecialDetails im selben Mapping
-    verwaltet.
-    Man kann statt dieser Funktion deshalb auch AddDetail mit Closures
-    nutzen.
+   /std/thing/description.c
 
-SIEHE AUCH:
-    Setzen :   AddDetail(), AddReadDetail(), AddSmells(), AddSounds(),
-               AddTouchDetail()
-    Loeschen:  RemoveDetail(), RemoveReadDetail(), RemoveSmells(),
-               RemoveSounds(), RemoveTouchDetail()
-    Daten:     P_DETAILS, P_READ_DETAILS, P_SMELLS, P_SOUNDS, P_TOUCH_DETAILS
-    Veraltet:  RemoveSpecialDetail(), P_READ_MSG
-    Sonstiges: GetDetail(), break_string()
+
+ARGUMENTE
+=========
+
+   keys
+     String oder Array von Strings mit den Namen der Details.
+   func
+     String mit dem Namen der Funktion, die zur Auswertung aufgerufen
+     wird.
+
+
+BESCHREIBUNG
+============
+
+   Es wird ein Detail hinzugefuegt, dessen Inhalt nicht von vornherein
+   feststeht, sondern von aeusseren Bedingungen abhaengt. Zu diesem
+   Zweck wird immer, wenn dieses Detail untersucht wird, die Funktion
+   func aufgerufen, um den aktuellen Zustand des Details zu bestimmen.
+   Der Funktion wird als Parameter das Schluesselwort uebergeben, mit
+   dem das Detail untersucht wurde.
+
+   VERALTET: Bitte AddDetail mit Closure benutzen.
+
+
+BEISPIELE
+=========
+
+   Ein zustandsabhaengiges Detail:
+
+     int hebel_betaetigt;
+     string hebel(string key);
+     ...
+     // ALT: AddSpecialDetail( ({ "hebel", "schalter" }), "hebel" );
+     AddDetail(({ "hebel", "schalter" }), #'hebel );
+     ...
+     string hebel(string key)
+     { if(hebel_betaetigt)
+         return "Der "+capitalize(key)+" steht auf EIN.\n";
+       else
+         return "Der "+capitalize(key)+" steht auf AUS.\n";
+     }
+
+   Man erhaelt verschiedene Ergebnisse beim Untersuchen, je nachdem
+   ob das Flag hebel_betaetigt gesetzt ist oder nicht.
+
+
+BEMERKUNG
+=========
+
+   Intern werden Details und SpecialDetails im selben Mapping
+   verwaltet.
+   Man kann statt dieser Funktion deshalb auch AddDetail mit Closures
+   nutzen.
+
+
+SIEHE AUCH
+==========
+
+   Setzen :   AddDetail(), AddReadDetail(), AddSmells(), AddSounds(),
+              AddTouchDetail()
+   Loeschen:  RemoveDetail(), RemoveReadDetail(), RemoveSmells(),
+              RemoveSounds(), RemoveTouchDetail()
+   Daten:     P_DETAILS, P_READ_DETAILS, P_SMELLS, P_SOUNDS, P_TOUCH_DETAILS
+   Veraltet:  RemoveSpecialDetail(), P_READ_MSG
+   Sonstiges: GetDetail(), break_string()
 
 20.01.2015, Zesstra
-
