diff --git a/doc/lfun/QuerySkillBonus b/doc/lfun/QuerySkillBonus
index 1a4ef47..1cb82e8 100644
--- a/doc/lfun/QuerySkillBonus
+++ b/doc/lfun/QuerySkillBonus
@@ -1,65 +1,91 @@
+
 QuerySkillBonus()
+*****************
 
-FUNKTION:
-     int QuerySkillBonus(object caster, object target, mapping sinfo)
 
-DEFINIERT IN:
-     beliebigen Objekten
+FUNKTION
+========
 
-ARGUMENTE:
-     object caster
-          der Benutzer eines Skills/Spells (Lebewesen)
-     object target
-          das Ziel eines Skills/Spells (beliebiges Objekt oder 0)
-     mapping sinfo
-          das Skillinfomapping
+   int QuerySkillBonus(object caster, object target, mapping sinfo)
 
-BESCHREIBUNG:
-     Diese Funktion wird von der Gilde des Casters im Environment und ggf.
-     auch im Ziel eines Skills/Spells gerufen.
-     Die Gilde uebergibt neben Caster und Ziel ein Mapping mit Skillinfos (s.
-     SI Konstanten aus new_skills.h fuer Details), welches alle wesentlichen
-     Informationen ueber den benutzten Skill/Spell enthaelt.
 
-     QuerySkillBonus() liefert einen Bonus (oder Malus) zurueck, den der
-     Aufrufer als Faktor in der Berechnung des Effekts des Skills
-     beruecksichtigen kann (aber nicht muss).
-     Der Bonus/Malus wird hierbei als ganzzahliger 0.01-Prozentwert aufgefasst
-     (10000 == 100% == keine Veraenderung, 1 == 0.01%).
+DEFINIERT IN
+============
 
-     Diese Funktion kann in beliebigen Objekten (re-)definiert werden. Im
-     Falle mobiler Objekte oder anhaltender Effekte ist jedoch eine
-     Balancegenehmigung erforderlich, sofern kampfrelevante Skills beeinflusst
-     werden.
-     Eine flaechendeckende Reduzierung von Skills/Gildenfaehigkeiten ist
-     explizit _nicht_ erwuenscht und soll auf einzelne Raeume und Objekte
-     beschraenkt sein.
+   beliebigen Objekten
 
-BEMERKUNGEN:
-     Das Mapping <sinfo> kann in dieser Funktion geaendert werden. Dieses kann
-     allerdings sehr weitreichende Folgen haben, speziell bei mangelnden
-     Kenntnissen ueber Interna des Skillsystems. Daher bitte von Aenderungen
-     absehen bzw. vorher mit dem jeweiligen Gildenmagier und/oder der
-     Gildenbalance abklaeren.
-     Die Bedeutung der Werte in <sinfo> kann je nach Gilde variieren. Im
-     Zweifelsfall bitte bei den jeweiligen Gildenmagiern nachfragen. 
-     Die Gilde kann diese Funktion rufen, muss aber nicht. Ebenso kann sie das
-     Ergebnis beruecksichtigen, muss aber nicht.
 
-BEISPIELE:
-     In einem Raum sollen Heilzauber besonders effizient sein:
-     int QuerySkillBonus(object caster, object target, mapping sinfo) {
-        if (pointerp(sinfo[SI_MAGIC_TYPE])
-            && member(sinfo[SI_MAGIC_TYPE], MT_HEILUNG) > -1)
-        {
-            return 12000 + random(3000); // bonus von 120-150%
-        }
-        return 10000;
-     }
+ARGUMENTE
+=========
 
-SIEHE AUCH:
-     gilden-doku
-     <new_skills.h>
+   object caster
+        der Benutzer eines Skills/Spells (Lebewesen)
+   object target
+        das Ziel eines Skills/Spells (beliebiges Objekt oder 0)
+   mapping sinfo
+        das Skillinfomapping
 
-LETZTE AeNDERUNG:
+
+BESCHREIBUNG
+============
+
+   Diese Funktion wird von der Gilde des Casters im Environment und ggf.
+   auch im Ziel eines Skills/Spells gerufen.
+   Die Gilde uebergibt neben Caster und Ziel ein Mapping mit Skillinfos (s.
+   SI Konstanten aus new_skills.h fuer Details), welches alle wesentlichen
+   Informationen ueber den benutzten Skill/Spell enthaelt.
+
+   QuerySkillBonus() liefert einen Bonus (oder Malus) zurueck, den der
+   Aufrufer als Faktor in der Berechnung des Effekts des Skills
+   beruecksichtigen kann (aber nicht muss).
+   Der Bonus/Malus wird hierbei als ganzzahliger 0.01-Prozentwert aufgefasst
+   (10000 == 100% == keine Veraenderung, 1 == 0.01%).
+
+   Diese Funktion kann in beliebigen Objekten (re-)definiert werden. Im
+   Falle mobiler Objekte oder anhaltender Effekte ist jedoch eine
+   Balancegenehmigung erforderlich, sofern kampfrelevante Skills beeinflusst
+   werden.
+   Eine flaechendeckende Reduzierung von Skills/Gildenfaehigkeiten ist
+   explizit _nicht_ erwuenscht und soll auf einzelne Raeume und Objekte
+   beschraenkt sein.
+
+
+BEMERKUNGEN
+===========
+
+   Das Mapping <sinfo> kann in dieser Funktion geaendert werden. Dieses kann
+   allerdings sehr weitreichende Folgen haben, speziell bei mangelnden
+   Kenntnissen ueber Interna des Skillsystems. Daher bitte von Aenderungen
+   absehen bzw. vorher mit dem jeweiligen Gildenmagier und/oder der
+   Gildenbalance abklaeren.
+   Die Bedeutung der Werte in <sinfo> kann je nach Gilde variieren. Im
+   Zweifelsfall bitte bei den jeweiligen Gildenmagiern nachfragen.
+   Die Gilde kann diese Funktion rufen, muss aber nicht. Ebenso kann sie das
+   Ergebnis beruecksichtigen, muss aber nicht.
+
+
+BEISPIELE
+=========
+
+   In einem Raum sollen Heilzauber besonders effizient sein:
+   int QuerySkillBonus(object caster, object target, mapping sinfo) {
+      if (pointerp(sinfo[SI_MAGIC_TYPE])
+          && member(sinfo[SI_MAGIC_TYPE], MT_HEILUNG) > -1)
+      {
+          return 12000 + random(3000); // bonus von 120-150%
+      }
+      return 10000;
+   }
+
+
+SIEHE AUCH
+==========
+
+   gilden-doku
+   <new_skills.h>
+
+
+LETZTE AeNDERUNG
+================
+
 19.08.2013, Zesstra
