diff --git a/doc/lfun/AddReadDetail b/doc/lfun/AddReadDetail
index c8de775..7f36aa4 100644
--- a/doc/lfun/AddReadDetail
+++ b/doc/lfun/AddReadDetail
@@ -1,80 +1,102 @@
+
 AddReadDetail()
+***************
 
-FUNKTION:
-    void AddReadDetail(string|string*keys,
-                       string|string*|mapping|closure desc);
 
-DEFINIERT IN:
-    /std/thing/description.c
+FUNKTION
+========
 
-ARGUMENTE:
-    keys
-      String oder Array von Strings mit den Namen der Details.
-    desc
-      String, Mapping, String-Array oder Closure mit/zur Beschreibung.
+   void AddReadDetail(string|string*keys,
+                      string|string*|mapping|closure desc);
 
-BESCHREIBUNG:
-    Die Beschreibung der Details <keys> wird gesetzt. Wie die Details
-    beim Lesen ausgegeben werden, haengt im wesentlichen vom Typ der
-    Beschreibung <desc> ab:
-      <desc> ist ein String.
-       Beim Lesen wird dieser String zurueckgegeben.
-      <desc> ist ein String-Array.
-       Beim Lesen wird zufaellig einer der Strings zurueckgegeben.
-      <desc> ist ein Mapping.
-        Das Mapping muss folgenden Aufbau haben:
-          ([0:        "Defaulttext",
-            "rasse1": "r1text", ...]).
 
-        Falls fuer die Rasse des das Detail untersuchenden Spielers ein
-        Eintrag im Mapping existiert, wird der entsprechende Text
-        zurueckgegeben, ansonsten der Defaulttext. Auf diese Weise sind
-        rassenabhaengige Texte moeglich.
-      <desc> ist eine Closure.
-        In diesem Fall wird die Closure ausgefuehrt und das Ergebnis
-        zurueckgegeben. Die Closure bekommt dabei den Namen des Details
-        als Parameter uebergeben.
+DEFINIERT IN
+============
 
-    Fuer lesbare Details koennen Forscherpunkte eingetragen werden.
+   /std/thing/description.c
 
-    Will man ein lesbares Detail an einem Objekt haben, welches der Spieler
-    mit "lies <id>" (<id> ist eine ID des Objekts) bekommt, muss man ein
-    Detail SENSE_DEFAULT hinzufuegen.
-    (Ein Detail "<id>" hinzuzufuegen, hat einen ganz anderes Effekt! Dieses
-     wuerde vom Spieler mit "lies <id> an <id>" gelesen werden und ist
-     meistens nicht das, was gewuenscht wird.)
 
-BEMERKUNGEN:
-    (1) Auf die 'desc' wird kein process_string() mehr angewendet.
-        Bitte stattdessen lfun closures bzw. 'inline closures'
-        verwenden.
+ARGUMENTE
+=========
 
-    (2) Im Gegensatz zum Verhalten von AddTouchDetail(), AddSmells() und
-        AddSounds() wirkt ein SENSE_DEFAULT-Detail in einem Raum nicht.
-        Ein einfaches "lies" bleibt dann ohne Rueckgabewert.
+   keys
+     String oder Array von Strings mit den Namen der Details.
+   desc
+     String, Mapping, String-Array oder Closure mit/zur Beschreibung.
 
-BEISPIELE:
-    AddReadDetail( ({ "schild" }),
-      "BETRETEN STRENGSTENS VERBOTEN!\n" );
 
-    AddReadDetail("inschrift",
-                  ([0: "Dort steht: Ein Ring sie zu binden. ....\n",
-                    "elf": "Alles in dir straeubt sich, DAS DA zu lesen.\n"]));
+BESCHREIBUNG
+============
 
-    AddReadDetail("regeln",
-      function string() {
-        this_player()->More("/etc/WIZRULES", 1);
-        return "";
-      });
+   Die Beschreibung der Details <keys> wird gesetzt. Wie die Details
+   beim Lesen ausgegeben werden, haengt im wesentlichen vom Typ der
+   Beschreibung <desc> ab:
+     <desc> ist ein String.
+      Beim Lesen wird dieser String zurueckgegeben.
+     <desc> ist ein String-Array.
+      Beim Lesen wird zufaellig einer der Strings zurueckgegeben.
+     <desc> ist ein Mapping.
+       Das Mapping muss folgenden Aufbau haben:
+         ([0:        "Defaulttext",
+           "rasse1": "r1text", ...]).
 
-SIEHE AUCH:
-    Setzen:    AddDetail(), AddSmells(), AddSounds(),
-               AddTouchDetail()
-    Loeschen:  RemoveDetail(), RemoveReadDetail(), RemoveSmells(),
-               RemoveSounds(), RemoveTouchDetail()
-    Daten:     P_DETAILS, P_READ_DETAILS, P_SMELLS, P_SOUNDS, P_TOUCH_DETAILS
-    Veraltet:  AddSpecialDetail(), RemoveSpecialDetail(), P_READ_MSG
-    Sonstiges: GetDetail(), break_string()
+       Falls fuer die Rasse des das Detail untersuchenden Spielers ein
+       Eintrag im Mapping existiert, wird der entsprechende Text
+       zurueckgegeben, ansonsten der Defaulttext. Auf diese Weise sind
+       rassenabhaengige Texte moeglich.
+     <desc> ist eine Closure.
+       In diesem Fall wird die Closure ausgefuehrt und das Ergebnis
+       zurueckgegeben. Die Closure bekommt dabei den Namen des Details
+       als Parameter uebergeben.
+
+   Fuer lesbare Details koennen Forscherpunkte eingetragen werden.
+
+   Will man ein lesbares Detail an einem Objekt haben, welches der Spieler
+   mit "lies <id>" (<id> ist eine ID des Objekts) bekommt, muss man ein
+   Detail SENSE_DEFAULT hinzufuegen.
+   (Ein Detail "<id>" hinzuzufuegen, hat einen ganz anderes Effekt! Dieses
+    wuerde vom Spieler mit "lies <id> an <id>" gelesen werden und ist
+    meistens nicht das, was gewuenscht wird.)
+
+
+BEMERKUNGEN
+===========
+
+   (1) Auf die 'desc' wird kein process_string() mehr angewendet.
+       Bitte stattdessen lfun closures bzw. 'inline closures'
+       verwenden.
+
+   (2) Im Gegensatz zum Verhalten von AddTouchDetail(), AddSmells() und
+       AddSounds() wirkt ein SENSE_DEFAULT-Detail in einem Raum nicht.
+       Ein einfaches "lies" bleibt dann ohne Rueckgabewert.
+
+
+BEISPIELE
+=========
+
+   AddReadDetail( ({ "schild" }),
+     "BETRETEN STRENGSTENS VERBOTEN!\n" );
+
+   AddReadDetail("inschrift",
+                 ([0: "Dort steht: Ein Ring sie zu binden. ....\n",
+                   "elf": "Alles in dir straeubt sich, DAS DA zu lesen.\n"]));
+
+   AddReadDetail("regeln",
+     function string() {
+       this_player()->More("/etc/WIZRULES", 1);
+       return "";
+     });
+
+
+SIEHE AUCH
+==========
+
+   Setzen:    AddDetail(), AddSmells(), AddSounds(),
+              AddTouchDetail()
+   Loeschen:  RemoveDetail(), RemoveReadDetail(), RemoveSmells(),
+              RemoveSounds(), RemoveTouchDetail()
+   Daten:     P_DETAILS, P_READ_DETAILS, P_SMELLS, P_SOUNDS, P_TOUCH_DETAILS
+   Veraltet:  AddSpecialDetail(), RemoveSpecialDetail(), P_READ_MSG
+   Sonstiges: GetDetail(), break_string()
 
 20.01.2015, Zesstra
-
