diff --git a/doc/lfun/TakeFlaw b/doc/lfun/TakeFlaw
index 7bfd03a..40d99a2 100644
--- a/doc/lfun/TakeFlaw
+++ b/doc/lfun/TakeFlaw
@@ -1,75 +1,100 @@
+
 TakeFlaw()
+**********
 
-FUNKTION:
-     varargs void TakeFlaw(object enemy); (Waffen)
-     varargs void TakeFlaw(mixed dam_types,mapping einfos) (Ruestungen)
 
-DEFINIERT IN:
-     /std/armour/combat.c,
-     /std/weapon/combat.c
+FUNKTION
+========
 
-ARGUMENTE:
-     keine
+   varargs void TakeFlaw(object enemy); (Waffen)
+   varargs void TakeFlaw(mixed dam_types,mapping einfos) (Ruestungen)
 
-BESCHREIBUNG:
-     Diese Funktion wird in Waffen und Ruestungen waehrend des Kampfes
-     aufgerufen. In einer Waffe erfolgt der Aufruf bei jedem Schlag mit
-     dieser Waffe, bei Ruestungen wird TakeFlaw() in einer zufaellig
-     ausgewaehlten getragenen Ruestung aufgerufen.
-     Waffen bekommen das Gegnerobjekt uebergeben, Ruestungen die erweiterten
-     DefendInfos (s. dort fuer Details). Aufgrund dieser Informationen kann
-     man den Schaden, den ein Gegenstand nimmt, flexibler gestalten (z.B. bei
-     einer Waffe in Abhaengigkeit von P_BODY des Gegners.)
 
-     Soweit man die Funktion nicht ueberlaedt, bewirkt sie nichts weiter als
-     das Erhoehen eines Zaehlers, der mit QueryFlaw() abgefragt werden kann.
+DEFINIERT IN
+============
 
-RUeCKGABEWERT:
-     keiner
+   /std/armour/combat.c,
+   /std/weapon/combat.c
 
-BEMERKUNGEN:
-     Die Waffen-/ Ruestungsklasse wird nicht automatisch reduziert! Wenn
-     eine Waffe oder Ruestung sich abnutzen soll, muss man TakeFlaw()
-     ueberladen und dort entsprechend handeln, oder (fuer einfache
-     Faelle) die Property P_QUALITY setzen.
 
-BEISPIELE:
-     Eine Waffe, deren Waffenklasse alle 20 Schlaege um 1 abnimmt:
+ARGUMENTE
+=========
 
-     inherit "std/weapon";
+   keine
 
-     #include <properties.h>
-     #include <combat.h>
 
-     create()
-     {
-       /* Das Uebliche... */
+BESCHREIBUNG
+============
+
+   Diese Funktion wird in Waffen und Ruestungen waehrend des Kampfes
+   aufgerufen. In einer Waffe erfolgt der Aufruf bei jedem Schlag mit
+   dieser Waffe, bei Ruestungen wird TakeFlaw() in einer zufaellig
+   ausgewaehlten getragenen Ruestung aufgerufen.
+   Waffen bekommen das Gegnerobjekt uebergeben, Ruestungen die erweiterten
+   DefendInfos (s. dort fuer Details). Aufgrund dieser Informationen kann
+   man den Schaden, den ein Gegenstand nimmt, flexibler gestalten (z.B. bei
+   einer Waffe in Abhaengigkeit von P_BODY des Gegners.)
+
+   Soweit man die Funktion nicht ueberlaedt, bewirkt sie nichts weiter als
+   das Erhoehen eines Zaehlers, der mit QueryFlaw() abgefragt werden kann.
+
+
+RUeCKGABEWERT
+=============
+
+   keiner
+
+
+BEMERKUNGEN
+===========
+
+   Die Waffen-/ Ruestungsklasse wird nicht automatisch reduziert! Wenn
+   eine Waffe oder Ruestung sich abnutzen soll, muss man TakeFlaw()
+   ueberladen und dort entsprechend handeln, oder (fuer einfache
+   Faelle) die Property P_QUALITY setzen.
+
+
+BEISPIELE
+=========
+
+   Eine Waffe, deren Waffenklasse alle 20 Schlaege um 1 abnimmt:
+
+   inherit "std/weapon";
+
+   #include <properties.h>
+   #include <combat.h>
+
+   create()
+   {
+     /* Das Uebliche... */
+   }
+
+   TakeFlaw()
+   {
+     int flaw;
+
+     /* erst mal den Zaehler erhoehen... */
+     ::TakeFlaw();
+
+     /* jetzt den aktuellen Zaehlerstand abfragen */
+     flaw = QueryFlaw()[0];
+
+     /* Abzug nur jeden 20. Schlag */
+     if (!(flaw % 20)) {
+       /* So, jetzt fuer den Schaden sorgen. Hierfuer benutzt */
+       /* man am sichersten die eingebaute Funktion Damage() */
+       Damage(1);
      }
+   }
 
-     TakeFlaw()
-     {
-       int flaw;
+   Dieses einfache Beispiel haette natuerlich auch ueber ein
+   SetProp(P_QUALITY,20); im create() realisiert werden koennen.
 
-       /* erst mal den Zaehler erhoehen... */
-       ::TakeFlaw();
 
-       /* jetzt den aktuellen Zaehlerstand abfragen */
-       flaw = QueryFlaw()[0];
+SIEHE AUCH
+==========
 
-       /* Abzug nur jeden 20. Schlag */
-       if (!(flaw % 20)) {
-         /* So, jetzt fuer den Schaden sorgen. Hierfuer benutzt */
-         /* man am sichersten die eingebaute Funktion Damage() */
-         Damage(1);
-       }
-     }
+   QueryFlaw(), Damage(), DefendInfo, P_QUIALITY, /std/armour/combat.c,
+   /std/weapon/combat.c
 
-     Dieses einfache Beispiel haette natuerlich auch ueber ein
-     SetProp(P_QUALITY,20); im create() realisiert werden koennen.
-
-SIEHE AUCH:
-     QueryFlaw(), Damage(), DefendInfo, P_QUIALITY, /std/armour/combat.c,
-     /std/weapon/combat.c
-
-----------------------------------------------------------------------------
 Last modified: Thu May 22 10:30:10 1997 by Paracelsus
