diff --git a/doc/lfun/DefendFunc b/doc/lfun/DefendFunc
index 1683b3f..a544cc2 100644
--- a/doc/lfun/DefendFunc
+++ b/doc/lfun/DefendFunc
@@ -3,43 +3,39 @@
 ************
 
 
-DefendFunc(L)
-=============
-
-
 FUNKTION
 ========
 
-   int DefendFunc(string|string *dtyp, int|mappingspell, object enemy);
+   public int DefendFunc(string* dtyp, mapping spell, object enemy);
 
 
 DEFINIERT IN
 ============
 
-   eigenen Objekten; fuer /std/armour/combat.c
+   Eigenen Objekten; fuer /std/armour/combat.c
 
 
 ARGUMENTE
 =========
 
    dtyp
-        Schadenstypen der Angriffsart.
-        Sollte heute ein string* sein.
+      Schadenstypen der Angriffsart.
+
    spell
-        0 bei veralteten konventionellen Angriffen im Regelfall jedoch
-        ein Mapping mit weiteren Infos.
-        Bei einem konventionellen Angriff ist spell[SP_PHYSICAL_ATTACK] gleich
-        1.
+      Ein Mapping mit weiteren Infos. Bei einem konventionellen
+      Angriff ist spell[SP_PHYSICAL_ATTACK] gleich 1.
+
    enemy
-        Der angreifende Gegner
+      Der angreifende Gegner
 
 
 BESCHREIBUNG
 ============
 
-   Anhand der uebergebenen Parameter kann hier ein Ruestungsbonus (oder
-   auch ein Ruestungsmalus) errechnet werden, der zu dem normalen
-   Ruestungswert (abhaengig von der Angriffsart) hinzuaddiert wird.
+   Anhand der uebergebenen Parameter kann hier ein Ruestungsbonus
+   (oder auch ein Ruestungsmalus) errechnet werden, der zu dem
+   normalen Ruestungswert (abhaengig von der Angriffsart) hinzuaddiert
+   wird.
 
 
 RUeCKGABEWERT
@@ -54,8 +50,9 @@
    Auch wenn man eine DefendFunc() benutzt, darf der Rueckgabewert
    zusammen mit der P_AC insgesamt nur in sehr seltenen, wohldurch-
    dachten Ausnahmefaellen die maximal zulaessige P_AC fuer diesen
-   Ruestungstyp ueberschreiten. In solchen Ausnahmefaellen duerfen
-   die DefendFuncs nicht konstant wirken.
+   Ruestungstyp ueberschreiten. In solchen Ausnahmefaellen duerfen die
+   DefendFuncs nicht konstant wirken. Ausserdem sind solche Ruestungen
+   immer genehmigungspflichtig.
 
    Bei aktivem Zurueckschlagen IMMER auf Flags wie SP_RECURSIVE und
    SP_NO_ACTIVE_DEFENSE pruefen und ggf. abbrechen.
@@ -64,44 +61,46 @@
 BEISPIELE
 =========
 
-   Eine Ruestung, die bei Angriffen mit Feuer ihre volle Staerke entfaltet
-   und bei Angriffen durch Geister geschwaecht wird:
+   Eine Ruestung, die bei Angriffen mit Feuer ihre volle Staerke
+   entfaltet und bei Angriffen durch Geister geschwaecht wird:
 
-   void create()
-   {
-     ::create();
+   protected void create() {
 
-     SetProp(P_ARMOUR_TYPE, AT_ARMOUR);
-     SetProp(P_AC, 20);
-     ...
-     // Die DefendFunc() ist in der Ruestung selbst definiert
-     SetProp(P_DEFEND_FUNC, this_object());
+      ::create();
+
+      SetProp(P_ARMOUR_TYPE, AT_ARMOUR); SetProp(P_AC, 20); ... // Die
+      DefendFunc() ist in der Ruestung selbst definiert
+      SetProp(P_DEFEND_FUNC, this_object());
+
    }
 
-   int DefendFunc(string *dtyp, mixed spell, object enemy)
-   {
-     int prot;
+   public int DefendFunc(string* dtyp, mapping spell, object enemy) {
 
-     // Zuerst fragen wir den Angriff durch Feuer ab:
-     if (member(dtyp, DT_FIRE) >= 0)  // Feuer gehoert zu den Schadenstypen
-       prot = 5 + random(10); // Das ergibt maximal 14. Zusammen mit P_AC
-                              // kommt man also maximal auf 14+20 = 34,
-                              // liegt also unter der fuer AT_ARMOUR
-                              // geltenden Obergrenze
+      int prot;
 
-     // Und jetzt der Geistertest
-     if (enemy->QueryProp(P_RACE) == "Geist" ||
-         enemy->is_class_member(CL_GHOST))
-       prot -= random(10);
+      // Zuerst fragen wir den Angriff durch Feuer ab: if
+      (member(dtyp, DT_FIRE) >= 0)  // Feuer gehoert zu den
+      Schadenstypen
 
-     // Der Rueckgabewert wird auf den aus P_AC errechneten Wert draufgeschlagen
-     return prot;
+         prot = 5 + random(10); // Das ergibt maximal 14. Zusammen mit
+         P_AC
+            // kommt man also maximal auf 14+20 = 34, // liegt also
+            unter der fuer AT_ARMOUR // geltenden Obergrenze
+
+      // Und jetzt der Geistertest if (enemy->QueryProp(P_RACE) ==
+      "Geist" ||
+
+            enemy->is_class_member(CL_GHOST))
+
+         prot -= random(10);
+
+      // Der Rueckgabewert wird auf den aus P_AC errechneten Wert
+      draufgeschlagen return prot;
+
    }
 
 
 SIEHE AUCH
 ==========
 
-   P_DEFEND_FUNC, QueryDefend(), /std/armour/combat.c
-
-Last modified: 18.Jul 2006 Muadib
+   *P_DEFEND_FUNC*, "QueryDefendd" /std/armour/combat.c
