diff --git a/doc/lfun/ModifySkill b/doc/lfun/ModifySkill
index 8dd622f..70c33ba 100644
--- a/doc/lfun/ModifySkill
+++ b/doc/lfun/ModifySkill
@@ -1,73 +1,98 @@
+
 ModifySkill()
-FUNKTION:
-    public varargs void ModifySkill(string sname, mixed val,
-                                    int diff, string gilde)
+*************
 
-DEFINIERT IN:
-    /std/living/skills.c
 
-ARGUMENTE:
-    string sname     der zu aendernde Skill
-    mixed val        Aenderungswert: int fuer SI_SKILLABILITY, sonst mapping
-    int diff         Schwierigkeit (optional: default ist existierendes diff)
-    string gilde     Gilde (optional: default ist eigene Gilde)
+FUNKTION
+========
 
-BESCHREIBUNG:
-    Mit der Methode kann man die Werte eines Skills/Spells veraendern. Dabei
-    wird ein Skill immer in ein Mapping umgewandelt (Skills/Spells koennen
-    auch einfach nur ihren Skillwert enthalten, diese ist aequivalent zu
-    einem Mapping mit ([SI_SKILLABILITY:<Skillwert>]).
+   public varargs void ModifySkill(string sname, mixed val,
+                                   int diff, string gilde)
 
-    Ist 'val' ein int, wird dieses als SI_SKILLABILITY gesetzt. Falls der
-    Skill nur ein int war, wird ein 'diff'!=0 als SI_DIFFICULTY gesetzt.
 
-    Ist 'val' ein Mapping, wird dieses zum Skillmapping addiert.
-    
-    Etwaige SI_SKILLABILITY-Aenderungen laufen danach noch durch LimitAbility.
+DEFINIERT IN
+============
 
-BEISPIELE:
-    // #1a: Lerne einen Spell/Skill (einer Gilde)
-    caster->ModifySkill("feuerball", MAX_ABILITY, 100, "abenteurer")
-    // #1b: ... oder ...
-    caster->ModifySkill("feuerball", ([SI_SKILLABILITY: MAX_ABILITY]), 100,
-                        "abenteurer")
-    // #1c: ... oder fuer einen Abenteurer ...
-    caster->ModifySkill("feuerball", ([SI_SKILLABILITY: MAX_ABILITY]), 100);
-    
-    // #2: Setze eine Skill-Funktion fuer einen Kampfskill des Klerus
-    this_player()->ModifySkill(FIGHT(WT_CLUB),
-                               ([SI_SKILLFUNC: "Keulenkampf",
-                                 SI_DIFFICULTY: 100]),
-                               100, "klerus");
+   /std/living/skills.c
 
-    // #3: Speichere im Skill (also Spieler) eine Option fuer diesen Skill
-    // Vorteil: dieser Eintrag wird dem Spell immer uebergeben
-    caster->ModifySkill("blitz", (["klerus_spell_option": 2]));
 
-    (Code in /doc/beispiele/testobjekte/modifyskillspell_test)
-    // #4: Lerne einen unabhaengigen Spell: ACHTUNG
-    // dieser Spell funktioniert nur solange, wie die Closure existiert,
-    // SI_SKILLABILITY und Spell bleiben jedoch im Spieler gespeichert (!)
-    this_player()->ModifySkill("fnrx",
-      ([SI_CLOSURE:
-          function int (object caster, string skill, mapping sinf) {
-            caster->LearnSkill("fnrx", 1);
-            tell_object(caster, "Peng! Dein Skillwert steigt auf "+
-                                caster->QuerySkillAbility("fnrx")+".\n");
-            return ERFOLG;
-          },
-        SI_SKILLABILITY: 8432]),
-      100,
-      "ANY");
+ARGUMENTE
+=========
 
-SIEHE AUCH:
-    Skills Lernen:  LearnSkill, LimitAbility
-    * Nutzung:      UseSpell, UseSkill
-    * Abfragen:     QuerySkill, QuerySkillAbility
-    * Modifikation: ModifySkillAttribute, QuerySkillAttribute,
-                    QuerySkillAttributeModifier, RemoveSkillAttributeModifier
-      * Properties: P_SKILL_ATTRIBUTES, P_SKILL_ATTRIBUTE_OFFSETS
-    * sonstig:      spruchermuedung
-    * Properties:   P_NEWSKILLS
+   string sname     der zu aendernde Skill
+   mixed val        Aenderungswert: int fuer SI_SKILLABILITY, sonst mapping
+   int diff         Schwierigkeit (optional: default ist existierendes diff)
+   string gilde     Gilde (optional: default ist eigene Gilde)
 
-3. Okt 2011 Gloinson
\ No newline at end of file
+
+BESCHREIBUNG
+============
+
+   Mit der Methode kann man die Werte eines Skills/Spells veraendern. Dabei
+   wird ein Skill immer in ein Mapping umgewandelt (Skills/Spells koennen
+   auch einfach nur ihren Skillwert enthalten, diese ist aequivalent zu
+   einem Mapping mit ([SI_SKILLABILITY:<Skillwert>]).
+
+   Ist 'val' ein int, wird dieses als SI_SKILLABILITY gesetzt. Falls der
+   Skill nur ein int war, wird ein 'diff'!=0 als SI_DIFFICULTY gesetzt.
+
+   Ist 'val' ein Mapping, wird dieses zum Skillmapping addiert.
+
+
+
+   Etwaige SI_SKILLABILITY-Aenderungen laufen danach noch durch LimitAbility.
+
+
+BEISPIELE
+=========
+
+   // #1a: Lerne einen Spell/Skill (einer Gilde)
+   caster->ModifySkill("feuerball", MAX_ABILITY, 100, "abenteurer")
+   // #1b: ... oder ...
+   caster->ModifySkill("feuerball", ([SI_SKILLABILITY: MAX_ABILITY]), 100,
+                       "abenteurer")
+   // #1c: ... oder fuer einen Abenteurer ...
+   caster->ModifySkill("feuerball", ([SI_SKILLABILITY: MAX_ABILITY]), 100);
+
+
+
+   // #2: Setze eine Skill-Funktion fuer einen Kampfskill des Klerus
+   this_player()->ModifySkill(FIGHT(WT_CLUB),
+                              ([SI_SKILLFUNC: "Keulenkampf",
+                                SI_DIFFICULTY: 100]),
+                              100, "klerus");
+
+   // #3: Speichere im Skill (also Spieler) eine Option fuer diesen Skill
+   // Vorteil: dieser Eintrag wird dem Spell immer uebergeben
+   caster->ModifySkill("blitz", (["klerus_spell_option": 2]));
+
+   (Code in /doc/beispiele/testobjekte/modifyskillspell_test)
+   // #4: Lerne einen unabhaengigen Spell: ACHTUNG
+   // dieser Spell funktioniert nur solange, wie die Closure existiert,
+   // SI_SKILLABILITY und Spell bleiben jedoch im Spieler gespeichert (!)
+   this_player()->ModifySkill("fnrx",
+     ([SI_CLOSURE:
+         function int (object caster, string skill, mapping sinf) {
+           caster->LearnSkill("fnrx", 1);
+           tell_object(caster, "Peng! Dein Skillwert steigt auf "+
+                               caster->QuerySkillAbility("fnrx")+".\n");
+           return ERFOLG;
+         },
+       SI_SKILLABILITY: 8432]),
+     100,
+     "ANY");
+
+
+SIEHE AUCH
+==========
+
+   Skills Lernen:  LearnSkill, LimitAbility
+   * Nutzung:      UseSpell, UseSkill
+   * Abfragen:     QuerySkill, QuerySkillAbility
+   * Modifikation: ModifySkillAttribute, QuerySkillAttribute,
+                   QuerySkillAttributeModifier, RemoveSkillAttributeModifier
+     * Properties: P_SKILL_ATTRIBUTES, P_SKILL_ATTRIBUTE_OFFSETS
+   * sonstig:      spruchermuedung
+   * Properties:   P_NEWSKILLS
+
+3. Okt 2011 Gloinson
