diff --git a/doc/props/P_ATTRIBUTES_MODIFIER b/doc/props/P_ATTRIBUTES_MODIFIER
index f5ba513..ab9f24d 100644
--- a/doc/props/P_ATTRIBUTES_MODIFIER
+++ b/doc/props/P_ATTRIBUTES_MODIFIER
@@ -1,56 +1,78 @@
-NAME:
-    P_ATTRIBUTES_MODIFIER         "attributes_modifier"
 
-DEFINIERT IN:
-    /sys/living/attributes.h
+P_ATTRIBUTES_MODIFIER
+*********************
 
-BESCHREIBUNG:
-    In dieser Property werden Attribut-Modifikatoren gespeichert, die
-    laengere Zeit wirksam sein sollen, tlw. auch ueber einen Reboot
-    hinweg.
-    Intern werden die Modifikatoren in einem Mapping der Form
 
-        ([ Setzer-Key : ([ A_xy : Wert, ... ]) , ... ])
+NAME
+====
 
-    gespeichert. Das Setzen folg hingegen in der Form
+   P_ATTRIBUTES_MODIFIER         "attributes_modifier"
 
-        spieler->SetProp(P_ATTRIBUTES_MODIFIER, ([ A_xy : Wert, ... ]));
-    oder
-        spieler->SetProp(P_ATTRIBUTES_MODIFIER, ({ Setzer-Key, ([ ... ]) }));
 
-    Bei der ersten Variante wird hierbei der Filename des setzenden Objektes
-    als Setzer-Key genommen.
-    Es koennen also durchaus von mehreren Objekten Modifier gesetzt werden.
-    Bekannte Modifier sind:
+DEFINIERT IN
+============
 
-        #death      Attribut-Abzug durch Todesfolgen      (Mudlib)
-        #drain      Statabzug durch NPCs                  (Paracelsus)
-        #frosch     Staerken-Abzug bei Froeschen          (Mudlib)
+   /sys/living/attributes.h
 
-BEMERKUNGEN:
-    Keine echte Property, _query_attributes_modifier() und
-    _set_attributes_modifier() sind in /std/living/attributes.c
-    implementiert
-    - SetProp/QueryProp nutzen!
-    - Wenn ein Modifier nicht mehr gebracht wird, nicht die Attributswerte auf
-      0 setzen, sondern den ganzen Eintrag! also:
-      SetProp(P_ATTRIBUTES_MODIFIER, ([]) );
-      oder: SetProp(P_ATTRIBUTES_MODIFIER, 0 ); 
-      aber nicht: SetProp(P_ATTRIBUTES_MODIFIER, ([A_STR:0]));
 
-BEISPIELE:
-    // ein Bonus ... 'ende'-fest (muss also per uid gesichert werden)
-    player->SetProp(P_ATTRIBUTES_MODIFIER,
-                    ({"g_klerus_segen", ([A_CON:5, A_INT:5])}));
-    ...
-    player->SetProp(P_ATTRIBUTES_MODIFIER, ({"g_klerus_segen", 0}));
+BESCHREIBUNG
+============
 
-SIEHE AUCH:
-	QueryAttribute(), QueryRealAttribute(), QueryAttributeOffset(),
-	SetAttribute(), SetRealAttribute(), UpdateAttributes(),
-	SetTimedAttrModifier(), QueryTimedAttrModifier(),
-	DeleteTimedAttrModifier(),
-	P_ATTRIBUTES, P_ATTRIBUTES_OFFSETS, P_TIMED_ATTR_MOD,
-	P_X_ATTR_MOD, P_M_ATTR_MOD, /std/living/attributes.c
-----------------------------------------------------------------------------
+   In dieser Property werden Attribut-Modifikatoren gespeichert, die
+   laengere Zeit wirksam sein sollen, tlw. auch ueber einen Reboot
+   hinweg.
+   Intern werden die Modifikatoren in einem Mapping der Form
+
+       ([ Setzer-Key : ([ A_xy : Wert, ... ]) , ... ])
+
+   gespeichert. Das Setzen folg hingegen in der Form
+
+       spieler->SetProp(P_ATTRIBUTES_MODIFIER, ([ A_xy : Wert, ... ]));
+   oder
+       spieler->SetProp(P_ATTRIBUTES_MODIFIER, ({ Setzer-Key, ([ ... ]) }));
+
+   Bei der ersten Variante wird hierbei der Filename des setzenden Objektes
+   als Setzer-Key genommen.
+   Es koennen also durchaus von mehreren Objekten Modifier gesetzt werden.
+   Bekannte Modifier sind:
+
+       #death      Attribut-Abzug durch Todesfolgen      (Mudlib)
+       #drain      Statabzug durch NPCs                  (Paracelsus)
+       #frosch     Staerken-Abzug bei Froeschen          (Mudlib)
+
+
+BEMERKUNGEN
+===========
+
+   Keine echte Property, _query_attributes_modifier() und
+   _set_attributes_modifier() sind in /std/living/attributes.c
+   implementiert
+   - SetProp/QueryProp nutzen!
+   - Wenn ein Modifier nicht mehr gebracht wird, nicht die Attributswerte auf
+     0 setzen, sondern den ganzen Eintrag! also:
+     SetProp(P_ATTRIBUTES_MODIFIER, ([]) );
+     oder: SetProp(P_ATTRIBUTES_MODIFIER, 0 );
+     aber nicht: SetProp(P_ATTRIBUTES_MODIFIER, ([A_STR:0]));
+
+
+BEISPIELE
+=========
+
+   // ein Bonus ... 'ende'-fest (muss also per uid gesichert werden)
+   player->SetProp(P_ATTRIBUTES_MODIFIER,
+                   ({"g_klerus_segen", ([A_CON:5, A_INT:5])}));
+   ...
+   player->SetProp(P_ATTRIBUTES_MODIFIER, ({"g_klerus_segen", 0}));
+
+
+SIEHE AUCH
+==========
+
+   QueryAttribute(), QueryRealAttribute(), QueryAttributeOffset(),
+   SetAttribute(), SetRealAttribute(), UpdateAttributes(),
+   SetTimedAttrModifier(), QueryTimedAttrModifier(),
+   DeleteTimedAttrModifier(),
+   P_ATTRIBUTES, P_ATTRIBUTES_OFFSETS, P_TIMED_ATTR_MOD,
+   P_X_ATTR_MOD, P_M_ATTR_MOD, /std/living/attributes.c
+
 Last modified: Tue Jul 27 20:00:20 2004 by Muadib
