diff --git a/doc/lfun/SetSpellFatigue b/doc/lfun/SetSpellFatigue
index c34627b..f2c5861 100644
--- a/doc/lfun/SetSpellFatigue
+++ b/doc/lfun/SetSpellFatigue
@@ -1,75 +1,99 @@
-SetSpellFatigue
 
-FUNKTION:
-    public varargs int SetSpellFatigue(int duration, string key)
+SetSpellFatigue()
+*****************
 
-DEFINIERT IN:
-    /std/living/skills.c
-    /std/player/skills.c
-    /sys/living/skills.h
 
-ARGUMENTE:
-    int duration: Wie lang soll die Spruchermuedung andauern?
-    string key  : Eindeutiger Name des Spruches, einer Gruppe von Spruechen
-                  oder 0 fuer die globale Spruchermuedung.
+FUNKTION
+========
 
-BESCHREIBUNG:
-    Diese Funktion dient zum Verwalten von individuellen Spruchermuedungen
-    (Spellfatigue, Spruchsperren).
-    Hiermit lassen sich unabhaengige Ermuedungen/Sperren fuer einzelne
-    Sprueche oder Gruppen von Spruechen gestalten.
+   public varargs int SetSpellFatigue(int duration, string key)
 
-    <duration> ist die Zeit (in Sekunden), welche die Spruchermuedung
-    anhalten soll (nicht die Endzeit).
 
-    Wird <key> nicht angegeben oder ist 0, wird die globale Spruchsperre
-    gesetzt (identisch zu der Property P_NEXT_SPELL_TIME), anderenfalls die
-    unter <key> gespeicherte Spruchermuedung.
-    Setzt man einen Eintrag ohne Angabe von <key> bedeutet dies damit auch,
-    dass der Wert von P_NEXT_SPELL_TIME geaendert wird.
+DEFINIERT IN
+============
 
-RUeCKGABEWERT:
-    -1    Der Eintrag <key> ist noch nicht abgelaufen, es wurde _keine_
-          neue Spruchermuedung/-Sperre gespeichert.
+   /std/living/skills.c
+   /std/player/skills.c
+   /sys/living/skills.h
 
-    >0    Eintrag wurde gespeichert, Rueckgabewert ist die Zeit, zu der die
-          Sperre ablaeuft.
 
-BEISPIELE:
-    Ein Spell gehoert zu einer Gruppe von Spells mit dem Namen 'extrasuess'.
-    Er darf nur ausgefuehrt werden, wenn seit 5s kein anderer Spruch aus der
-    Gruppe ausgefuehrt wurde.
-    if (CalculateSpellSuccess(...) > x) {
-      // Spellfatigue setzen (und Erfolg pruefen!)
-      if (ob->SetSpellFatigue(5, "extrasuess") > -1) {
-        tell_object(ob, "Du fuetterst " + enemy->Name(WEN) + " mit einem "
-          "Stueck suesser Schokotorte.\n");
-        ...
-      }
-      else {
-        // Sauerei! Zu ermuedet fuer diesen Spruch. Fehlermdeldung ...
-      }
-    }
-    Dieses setzt natuerlich voraus, dass alle anderen Sprueche der Gruppe
-    "extrasuess" den gleichen <key> pruefen und setzen.
-    (Will man vor CalculateSpellSuccess() wissen, ob der Spruch ueberhaupt
-     gewirkt werden duerfte, sollte man hierzu dann CheckSpellFatigue()
-     verwenden.)
+ARGUMENTE
+=========
 
-BEMERKUNGEN:
-    Die genauen Zeitdauern koennen von Spielern beeinflusst werden, sie
-    unterliegen der jeweiligen Einstellung von 'spruchermuedung', d.h. koennen
-    auf volle 2s aufgerundet werden. (Dies ist nicht der Fall bei NPC.)
-    Auch wenn diese Funktion zum Verwalten von beliebigen Zeitsperren genutzt
-    werden koennen, beschraenkt euch bitte auf Spruchermuedungen und benutzt
-    ansonsten check_and_update_timed_key(). Falls ihr diesbzgl. weitere/andere
-    Wuensche habt, sprecht den/die Mudlib-EM an.
+   int duration: Wie lang soll die Spruchermuedung andauern?
+   string key  : Eindeutiger Name des Spruches, einer Gruppe von Spruechen
+                 oder 0 fuer die globale Spruchermuedung.
 
-SIEHE AUCH:
-    CheckSpellFatigue(L), DeleteSpellFatigue(L)
-    P_NEXT_SPELL_TIME
-    spruchermuedung
 
-----------------------------------------------------------------------------
+BESCHREIBUNG
+============
+
+   Diese Funktion dient zum Verwalten von individuellen Spruchermuedungen
+   (Spellfatigue, Spruchsperren).
+   Hiermit lassen sich unabhaengige Ermuedungen/Sperren fuer einzelne
+   Sprueche oder Gruppen von Spruechen gestalten.
+
+   <duration> ist die Zeit (in Sekunden), welche die Spruchermuedung
+   anhalten soll (nicht die Endzeit).
+
+   Wird <key> nicht angegeben oder ist 0, wird die globale Spruchsperre
+   gesetzt (identisch zu der Property P_NEXT_SPELL_TIME), anderenfalls die
+   unter <key> gespeicherte Spruchermuedung.
+   Setzt man einen Eintrag ohne Angabe von <key> bedeutet dies damit auch,
+   dass der Wert von P_NEXT_SPELL_TIME geaendert wird.
+
+
+RUeCKGABEWERT
+=============
+
+   -1    Der Eintrag <key> ist noch nicht abgelaufen, es wurde _keine_
+         neue Spruchermuedung/-Sperre gespeichert.
+
+   >0    Eintrag wurde gespeichert, Rueckgabewert ist die Zeit, zu der die
+         Sperre ablaeuft.
+
+
+BEISPIELE
+=========
+
+   Ein Spell gehoert zu einer Gruppe von Spells mit dem Namen 'extrasuess'.
+   Er darf nur ausgefuehrt werden, wenn seit 5s kein anderer Spruch aus der
+   Gruppe ausgefuehrt wurde.
+   if (CalculateSpellSuccess(...) > x) {
+     // Spellfatigue setzen (und Erfolg pruefen!)
+     if (ob->SetSpellFatigue(5, "extrasuess") > -1) {
+       tell_object(ob, "Du fuetterst " + enemy->Name(WEN) + " mit einem "
+         "Stueck suesser Schokotorte.\n");
+       ...
+     }
+     else {
+       // Sauerei! Zu ermuedet fuer diesen Spruch. Fehlermdeldung ...
+     }
+   }
+   Dieses setzt natuerlich voraus, dass alle anderen Sprueche der Gruppe
+   "extrasuess" den gleichen <key> pruefen und setzen.
+   (Will man vor CalculateSpellSuccess() wissen, ob der Spruch ueberhaupt
+    gewirkt werden duerfte, sollte man hierzu dann CheckSpellFatigue()
+    verwenden.)
+
+
+BEMERKUNGEN
+===========
+
+   Die genauen Zeitdauern koennen von Spielern beeinflusst werden, sie
+   unterliegen der jeweiligen Einstellung von 'spruchermuedung', d.h. koennen
+   auf volle 2s aufgerundet werden. (Dies ist nicht der Fall bei NPC.)
+   Auch wenn diese Funktion zum Verwalten von beliebigen Zeitsperren genutzt
+   werden koennen, beschraenkt euch bitte auf Spruchermuedungen und benutzt
+   ansonsten check_and_update_timed_key(). Falls ihr diesbzgl. weitere/andere
+   Wuensche habt, sprecht den/die Mudlib-EM an.
+
+
+SIEHE AUCH
+==========
+
+   CheckSpellFatigue(L), DeleteSpellFatigue(L)
+   P_NEXT_SPELL_TIME
+   spruchermuedung
+
 27.03.2010, Zesstra
-
