diff --git a/doc/lfun/RemoveSkillAttributeModifier b/doc/lfun/RemoveSkillAttributeModifier
index 71dfd10..5fa69b2 100644
--- a/doc/lfun/RemoveSkillAttributeModifier
+++ b/doc/lfun/RemoveSkillAttributeModifier
@@ -1,59 +1,83 @@
+
 RemoveSkillAttributeModifier()
-FUNKTION:
-    public int RemoveSkillAttributeModifier(object caster, string atrname)
+******************************
 
-DEFINIERT IN:
-    /std/living/skill_attributes.c
 
-ARGUMENTE:
-    <atrname>   string
-                Name des Skill-Attributes, von dem der Modifikator geloescht
-                werden soll.
-                (Definiert in /sys/living/skill_attributes.h)
+FUNKTION
+========
 
-    <caster>    object
-                Objekt, dessen Modifikator wieder entfernt werden soll.
+   public int RemoveSkillAttributeModifier(object caster, string atrname)
 
-BESCHREIBUNG:
-    Entfernt den Modifikator, den Object <caster> gesetzt hat, wieder. Dies
-    ist nur notwendig, wenn der Effekt vor Ablauf der Gueltigkeit des
-    Modifikators aufgehoben werden soll.
 
-RUECKGABEWERT:
-    SA_MOD_REMOVED         wenn der Modifikator geloescht wurde
-    SA_MOD_NOT_FOUND       wenn der Modifikator nicht gefunden wurde
-    Wenn man nur wissen will, ob die Operation erfolgreich war, empfiehlt es
-    sich, auf == SA_MOD_REMOVED zu pruefen.
+DEFINIERT IN
+============
 
-BEISPIELE:
-    // eine Waffe setzt im InformWield() einen Bonus auf SA_DAMAGE fuer 10min
-    protected void InformWield(object pl, int silent) {
-      if (objectp(pl)) {
-        if (pl->ModifySkillAttribute(SA_DAMAGE, 20, 600) == SA_MOD_OK)
-          // Erfolgsmeldung an Spieler
-        else
-          // Misserfolgsmeldung an Spieler.
-      }
-    }
+   /std/living/skill_attributes.c
 
-    // wenn der Spieler die Waffe vor Ablauf der 600s wegstecken will, muss
-    // der Bonus natuerlich auch wieder raus
-    protected void InformUnwield(object pl, int silent) {
-      if (objectp(pl))
-        pl->RemoveSkillAttributeModifier(this_object(), SA_DAMAGE);
-        // falls kein solcher Mod mehr gesetzt war, liefert RSAM()
-        // SA_MOD_NOT_FOUND zurueck. Auswertung des Rueckgabewertes ist
-        // vernachlaessigt.
-    }
-    
-SIEHE AUCH:
-    Skills Lernen:  LearnSkill, ModifySkill, LimitAbility
-    * Nutzung:      UseSpell, UseSkill
-    * Abfragen:     QuerySkill, QuerySkillAbility
-    * Modifikation: ModifySkillAttribute, QuerySkillAttribute,
-                    QuerySkillAttributeModifier
-      * Properties: P_SKILL_ATTRIBUTES, P_SKILL_ATTRIBUTE_OFFSETS
-    * sonstig:      spruchermuedung, skill_info_liste
-    * Properties:   P_NEWSKILLS
+
+ARGUMENTE
+=========
+
+   <atrname>   string
+               Name des Skill-Attributes, von dem der Modifikator geloescht
+               werden soll.
+               (Definiert in /sys/living/skill_attributes.h)
+
+   <caster>    object
+               Objekt, dessen Modifikator wieder entfernt werden soll.
+
+
+BESCHREIBUNG
+============
+
+   Entfernt den Modifikator, den Object <caster> gesetzt hat, wieder. Dies
+   ist nur notwendig, wenn der Effekt vor Ablauf der Gueltigkeit des
+   Modifikators aufgehoben werden soll.
+
+
+RUECKGABEWERT
+=============
+
+   SA_MOD_REMOVED         wenn der Modifikator geloescht wurde
+   SA_MOD_NOT_FOUND       wenn der Modifikator nicht gefunden wurde
+   Wenn man nur wissen will, ob die Operation erfolgreich war, empfiehlt es
+   sich, auf == SA_MOD_REMOVED zu pruefen.
+
+
+BEISPIELE
+=========
+
+   // eine Waffe setzt im InformWield() einen Bonus auf SA_DAMAGE fuer 10min
+   protected void InformWield(object pl, int silent) {
+     if (objectp(pl)) {
+       if (pl->ModifySkillAttribute(SA_DAMAGE, 20, 600) == SA_MOD_OK)
+         // Erfolgsmeldung an Spieler
+       else
+         // Misserfolgsmeldung an Spieler.
+     }
+   }
+
+   // wenn der Spieler die Waffe vor Ablauf der 600s wegstecken will, muss
+   // der Bonus natuerlich auch wieder raus
+   protected void InformUnwield(object pl, int silent) {
+     if (objectp(pl))
+       pl->RemoveSkillAttributeModifier(this_object(), SA_DAMAGE);
+       // falls kein solcher Mod mehr gesetzt war, liefert RSAM()
+       // SA_MOD_NOT_FOUND zurueck. Auswertung des Rueckgabewertes ist
+       // vernachlaessigt.
+   }
+
+
+SIEHE AUCH
+==========
+
+   Skills Lernen:  LearnSkill, ModifySkill, LimitAbility
+   * Nutzung:      UseSpell, UseSkill
+   * Abfragen:     QuerySkill, QuerySkillAbility
+   * Modifikation: ModifySkillAttribute, QuerySkillAttribute,
+                   QuerySkillAttributeModifier
+     * Properties: P_SKILL_ATTRIBUTES, P_SKILL_ATTRIBUTE_OFFSETS
+   * sonstig:      spruchermuedung, skill_info_liste
+   * Properties:   P_NEWSKILLS
 
 13.08.2008, Zesstra
