diff --git a/doc/props/P_EFFECTIVE_AC b/doc/props/P_EFFECTIVE_AC
index ff7dd53..5473d5d 100644
--- a/doc/props/P_EFFECTIVE_AC
+++ b/doc/props/P_EFFECTIVE_AC
@@ -1,87 +1,107 @@
+
 P_EFFECTIVE_AC
+**************
 
-NAME:
-     P_EFFECTIVE_AC      "effective_ac"
 
-DEFINIERT IN:
-     <combat.h>
+NAME
+====
 
-BESCHREIBUNG:
-     Diese Property kommt sowohl in Ruestungen als auch in Waffen, die
-     schuetzen sollen, zum Einsatz.
+   P_EFFECTIVE_AC      "effective_ac"
 
-     In Ruestungen kann hier der Effektivwert der Ruestungsklasse vermerkt
-     werden, wenn diese noch durch eine DefendFunc() modifiziert wird
-     (soweit sich ein solcher Effektivwert angeben laesst).
 
-     In einigen Gilden koennen Waffen auch als Ruestung eingesetzt werden
-     (z.B. beim Parieren eines Angriffs). In dieser Property kann man die
-     Ruestungsklasse eintragen, die die Waffe bei solchen Aktionen aufweisen
-     soll. Dabei ist man an die ueblichen Beschraenkungen der
-     Ruestungsklasse gebunden! (s. /sys/combat.h)
+DEFINIERT IN
+============
 
-BERMERKUNGEN:
-     Das Kaempferspellbook verwendet fuer Paraden etc. P_EFFECTIVE_AC anstatt
-     P_AC, wenn verfuegbar.
+   <combat.h>
 
-BEISPIELE:
-     * DefendFuncs: 
-       Der doppelte Mittelwert der DefendFunc wird zur Basis-AC dazuaddiert,
-       da sich der 'Schutzwert = random(Basis-AC) + absolut(DefendFunc-Wert)'
-       berechnet.
 
-     // #1 Eine Ruestung mit P_AC von 35 und randomisierter DefendFunc
-        SetProp(P_AC, 35);
-        SetProp(P_DEFEND_FUNC, this_object());
+BESCHREIBUNG
+============
 
-        int DefendFunc(...) {
-          return random(20);                       // Mittelwert: 10
-        }
-        -> SetProp(P_EFFECTIVE_AC, 55);            // 35 + 2*10 = 55
+   Diese Property kommt sowohl in Ruestungen als auch in Waffen, die
+   schuetzen sollen, zum Einsatz.
 
-     // #2 Eine Ruestung mit P_AC von 35 und teilrandomisierter DefendFunc
-        SetProp(P_AC, 35);
-        SetProp(P_DEFEND_FUNC, this_object());
+   In Ruestungen kann hier der Effektivwert der Ruestungsklasse vermerkt
+   werden, wenn diese noch durch eine DefendFunc() modifiziert wird
+   (soweit sich ein solcher Effektivwert angeben laesst).
 
-        int DefendFunc(...) {
-          return 20 + random(10);                  // Mittelwert: 20 + 5
-        }
-        -> SetProp(P_EFFECTIVE_AC, 85);            // 35 + 2*(20+5) = 85
+   In einigen Gilden koennen Waffen auch als Ruestung eingesetzt werden
+   (z.B. beim Parieren eines Angriffs). In dieser Property kann man die
+   Ruestungsklasse eintragen, die die Waffe bei solchen Aktionen aufweisen
+   soll. Dabei ist man an die ueblichen Beschraenkungen der
+   Ruestungsklasse gebunden! (s. /sys/combat.h)
 
-     * Sonderfunktion im Kontext der Kaempfergilde:
-       Auch wenn der eigentliche AC-Wert durch keine DefendFunc oAe
-       modifiziert wird, sind abweichende Werte in P_EFFECTIVE_AC zB in der
-       Kaempfergilde fuer Paraden oder aehnliches sinnvoll. Maximalwert ist
-       dafuer der doppelte Wert des Basis-AC-Wertes.
 
-     // #3 Ein schon sehr gutes Schild, welches bei der Schildparade aber
-     //    noch besser schuetzen soll.
-        SetProp(P_ARMOUR_TYPE, AT_SHIELD);
-        SetProp(P_AC, 38);
-        SetProp(P_EFFECTIVE_AC, 55);
+BERMERKUNGEN
+============
 
-     // #4 Ein sehr labbriges Schild schuetzt zwar gegen normale Schlaege,
-     //    ist zum Parieren aber irgendwie ungeeignet weil unkontrollierbar.
-        SetProp(P_ARMOUR_TYPE, AT_SHIELD);
-        SetProp(P_AC, 38);
-        SetProp(P_EFFECTIVE_AC, 20);
+   Das Kaempferspellbook verwendet fuer Paraden etc. P_EFFECTIVE_AC anstatt
+   P_AC, wenn verfuegbar.
 
-     * Waffen:
-       P_EFFECTIVE_AC wird im Kaempferspellbook als Bonus dazugezaehlt! Daher
-       sollten gute Parierwaffen auch einen niedrigeren P_WC-Wert haben.
-       Reine Parierwaffen duerfen den maximalen AC-Wert von Schilden als
-       Maximum gesetzt haben - die Balance klaert ggf, ob das auch auf den
-       Gildenparierwert anwendbar ist.
 
-     // #5 Eine maessige Hellebarde/Axtwaffe mit Parierhaken.
-        SetProp(P_WEAPON_TYPE, WT_AXE);
-        SetProp(P_WC, 100);
-        SetProp(P_EFFECTIVE_AC, 25);
+BEISPIELE
+=========
 
-SIEHE AUCH:
-     Waffen:     P_WC, P_TOTAL_WC, P_EFFECTIVE_WC, HitFunc()
-     Ruestungen: P_AC, P_TOTAL_AC, DefendFunc()
-     Files:      /std/weapon.c, /std/weapon/combat.c
-     Balance:    waffen, ruestungen, properties, kaempferboni
+   * DefendFuncs:
+     Der doppelte Mittelwert der DefendFunc wird zur Basis-AC dazuaddiert,
+     da sich der 'Schutzwert = random(Basis-AC) + absolut(DefendFunc-Wert)'
+     berechnet.
+
+   // #1 Eine Ruestung mit P_AC von 35 und randomisierter DefendFunc
+      SetProp(P_AC, 35);
+      SetProp(P_DEFEND_FUNC, this_object());
+
+      int DefendFunc(...) {
+        return random(20);                       // Mittelwert: 10
+      }
+      -> SetProp(P_EFFECTIVE_AC, 55);            // 35 + 2*10 = 55
+
+   // #2 Eine Ruestung mit P_AC von 35 und teilrandomisierter DefendFunc
+      SetProp(P_AC, 35);
+      SetProp(P_DEFEND_FUNC, this_object());
+
+      int DefendFunc(...) {
+        return 20 + random(10);                  // Mittelwert: 20 + 5
+      }
+      -> SetProp(P_EFFECTIVE_AC, 85);            // 35 + 2*(20+5) = 85
+
+   * Sonderfunktion im Kontext der Kaempfergilde:
+     Auch wenn der eigentliche AC-Wert durch keine DefendFunc oAe
+     modifiziert wird, sind abweichende Werte in P_EFFECTIVE_AC zB in der
+     Kaempfergilde fuer Paraden oder aehnliches sinnvoll. Maximalwert ist
+     dafuer der doppelte Wert des Basis-AC-Wertes.
+
+   // #3 Ein schon sehr gutes Schild, welches bei der Schildparade aber
+   //    noch besser schuetzen soll.
+      SetProp(P_ARMOUR_TYPE, AT_SHIELD);
+      SetProp(P_AC, 38);
+      SetProp(P_EFFECTIVE_AC, 55);
+
+   // #4 Ein sehr labbriges Schild schuetzt zwar gegen normale Schlaege,
+   //    ist zum Parieren aber irgendwie ungeeignet weil unkontrollierbar.
+      SetProp(P_ARMOUR_TYPE, AT_SHIELD);
+      SetProp(P_AC, 38);
+      SetProp(P_EFFECTIVE_AC, 20);
+
+   * Waffen:
+     P_EFFECTIVE_AC wird im Kaempferspellbook als Bonus dazugezaehlt! Daher
+     sollten gute Parierwaffen auch einen niedrigeren P_WC-Wert haben.
+     Reine Parierwaffen duerfen den maximalen AC-Wert von Schilden als
+     Maximum gesetzt haben - die Balance klaert ggf, ob das auch auf den
+     Gildenparierwert anwendbar ist.
+
+   // #5 Eine maessige Hellebarde/Axtwaffe mit Parierhaken.
+      SetProp(P_WEAPON_TYPE, WT_AXE);
+      SetProp(P_WC, 100);
+      SetProp(P_EFFECTIVE_AC, 25);
+
+
+SIEHE AUCH
+==========
+
+   Waffen:     P_WC, P_TOTAL_WC, P_EFFECTIVE_WC, HitFunc()
+   Ruestungen: P_AC, P_TOTAL_AC, DefendFunc()
+   Files:      /std/weapon.c, /std/weapon/combat.c
+   Balance:    waffen, ruestungen, properties, kaempferboni
 
 6. Nov 2011 Gloinson
