diff --git a/doc/props/P_NO_ATTACK b/doc/props/P_NO_ATTACK
index 0f39180..9ca4c95 100644
--- a/doc/props/P_NO_ATTACK
+++ b/doc/props/P_NO_ATTACK
@@ -1,82 +1,99 @@
+
 P_NO_ATTACK
-
-NAME:
-     P_NO_ATTACK "no_attack"
-
-DEFINIERT IN:
-     <living/combat.h>
-
-BESCHREIBUNG:
-     Wenn ein NPC nicht angreifbar sein soll (weil er zum Beispiel in einer
-     Gilde oder einer Quest Informationen vermittelt oder aehnlichen), sollte
-     man diese Property auf einen Wert ungleich Null setzen. Sie wird immer
-     abgefragt, wenn ermittelt wird, ob ein Lebewesen prinzipiell angreifbar
-     ist. D.h. auch, dass nach Abfragen von P_NO_ATTACK _nicht_ immer ein
-     Kampf gestartet wird und dass man dabei _nicht_ im Kampf sein muss!
-
-     Gibt man hier einen String an (mit einem Satzzeichen und "\n" abge-
-     schlossen), wird dieser bei direkten Angriffen ausgegeben. Bei anderen
-     Datentypen wird eine Defaultmeldung ausgegeben. Die Defaultmeldung
-     lautet: "<Name> laesst sich nicht angreifen!\n"
-
-     Mit direkten Angriffen sind 'toete <name>' und Angriffszauber gemeint
-     (bzw. alles, was living/life::Kill(), spellbook::TryAttackSpell(),
-     spellbook::TryDefaultAttackSpell() und spellbook::FindEnemyVictim()
-     aufruft).
-
-ACHTUNG:
-
-  1) Zum Thema QueryMethoden auf P_NO_ATTACK
-     Grundsaetzlich legt man entweder eine Query-Methode auf P_NO_ATTACK:
-        Set(P_NO_ATTACK, #'my_no_attack, F_QUERY_METHOD);
-     oder definiert eine Funktion _query_no_attack() im NPC.
-
-     Wie muss nun eine solche Funktion aussehen? Z.B.:
-     
-     int|string my_no_attack() {
-       if (!objectp(this_player())) return 0;
-       if (opfer==getuid(this_player()) || this_player()==this_object())
-         return(0);
-       return(1); //nicht angreifbar
-     }
-
-     Diese Funktion macht den NPC nun nur fuer den Spieler 'opfer' angreifbar.
-     Stattdessen kann natuerlich auch jede andere Bedingung genutzt werden.
-
-     Aber warum die zweite Bedingung, this_player()==this_object()?
-     Warum sollte der NPC sich selber angreifen duerfen?
-
-     Das liegt an folgenden 2 Dingen:
-
-     1. Kaempfer kriegen bei eingeschaltetem Fokus Probleme, wenn man das 
-     nicht macht. Das liegt an folgendem: Wenn der NPC angreift, ruft er 
-     natuerlich Defend() im Spieler auf. Dieses schaut nach, ob der Spieler 
-     den Skill SK_MAGICAL_DEFENSE hat. Dieser ist bei Kaempfern das Parieren.
-     Dieses schaut nach, ob der Fokus aktiv ist, wenn ja, wird dem 
-     ge'fokus'te Gegner besonders gut ausgewichen. Zu diesem Zweck wird die 
-     Liste der Feind im Raum erstellt mit PresentEnemies() abgerufen. Dieses 
-     fragt aber in allen (potentiellen) Gegnern P_NO_ATTACK ab und beendet 
-     den Kampf mit allen Gegnern, die nicht angreifbar sind. Bei dieser 
-     Abfrage ist jedoch TP==NPC, weil der ja angreift. Wenn er nun 1 
-     zurueckgibt, wird der Kampf an der Stelle beendet. 
-
-     2. Wenn der NPC den Spieler angreift, wird im Spieler InsertEnemy(NPC)
-     aufgerufen. Auch diesem Fall findet die Abfrage von P_NO_ATTACK statt, 
-     da InsertEnemy() ja erstmal rausfinden muss, ob der Gegner angreifbar 
-     ist, bevor er in die Feindliste eingetragen wird. Da der NPC den 
-     Angriff beginnt, ist TP der NPC. Wenn die Query-Methode auf P_NO_ATTACK
-     hier abbricht, wird der NPC nicht in die Feindliste des Spielers 
-     eingetragen. Dann bekaempft der NPC den Spieler, aber der Spieler nicht
-     den NPC.
+***********
 
 
-  2) P_NO_ATTACK des NPC wird z.B. beim Kampf eines Kaempfers mit dem NPC 
-     pro Kampfrunde um die 10mal abgerufen. Wenn der Kaempfer nur eine 
-     Attacke macht. Wenn er noch Sonderattacken machen, Spells ausfuehrt, 
-     etc. wird das noch mehr. D.h. was auch immer ihr in der Query-Methode 
-     im NPC macht: 
-     Es sollte schnell sein, jeder Tick an Rechenzeit zaehlt hier xfach!
+NAME
+====
+
+   P_NO_ATTACK "no_attack"
 
 
-LETZTE AENDERUNG:
+DEFINIERT IN
+============
+
+   <living/combat.h>
+
+
+BESCHREIBUNG
+============
+
+   Wenn ein NPC nicht angreifbar sein soll (weil er zum Beispiel in einer
+   Gilde oder einer Quest Informationen vermittelt oder aehnlichen), sollte
+   man diese Property auf einen Wert ungleich Null setzen. Sie wird immer
+   abgefragt, wenn ermittelt wird, ob ein Lebewesen prinzipiell angreifbar
+   ist. D.h. auch, dass nach Abfragen von P_NO_ATTACK _nicht_ immer ein
+   Kampf gestartet wird und dass man dabei _nicht_ im Kampf sein muss!
+
+   Gibt man hier einen String an (mit einem Satzzeichen und "\n" abge-
+   schlossen), wird dieser bei direkten Angriffen ausgegeben. Bei anderen
+   Datentypen wird eine Defaultmeldung ausgegeben. Die Defaultmeldung
+   lautet: "<Name> laesst sich nicht angreifen!\n"
+
+   Mit direkten Angriffen sind 'toete <name>' und Angriffszauber gemeint
+   (bzw. alles, was living/life::Kill(), spellbook::TryAttackSpell(),
+   spellbook::TryDefaultAttackSpell() und spellbook::FindEnemyVictim()
+   aufruft).
+
+
+ACHTUNG
+=======
+
+   1) Zum Thema QueryMethoden auf P_NO_ATTACK
+      Grundsaetzlich legt man entweder eine Query-Methode auf P_NO_ATTACK:
+         Set(P_NO_ATTACK, #'my_no_attack, F_QUERY_METHOD);
+      oder definiert eine Funktion _query_no_attack() im NPC.
+
+      Wie muss nun eine solche Funktion aussehen? Z.B.:
+
+
+
+      int|string my_no_attack() {
+        if (!objectp(this_player())) return 0;
+        if (opfer==getuid(this_player()) || this_player()==this_object())
+          return(0);
+        return(1); //nicht angreifbar
+      }
+
+      Diese Funktion macht den NPC nun nur fuer den Spieler 'opfer' angreifbar.
+      Stattdessen kann natuerlich auch jede andere Bedingung genutzt werden.
+
+      Aber warum die zweite Bedingung, this_player()==this_object()?
+      Warum sollte der NPC sich selber angreifen duerfen?
+
+      Das liegt an folgenden 2 Dingen:
+
+      1. Kaempfer kriegen bei eingeschaltetem Fokus Probleme, wenn man das
+      nicht macht. Das liegt an folgendem: Wenn der NPC angreift, ruft er
+      natuerlich Defend() im Spieler auf. Dieses schaut nach, ob der Spieler
+      den Skill SK_MAGICAL_DEFENSE hat. Dieser ist bei Kaempfern das Parieren.
+      Dieses schaut nach, ob der Fokus aktiv ist, wenn ja, wird dem
+      ge'fokus'te Gegner besonders gut ausgewichen. Zu diesem Zweck wird die
+      Liste der Feind im Raum erstellt mit PresentEnemies() abgerufen. Dieses
+      fragt aber in allen (potentiellen) Gegnern P_NO_ATTACK ab und beendet
+      den Kampf mit allen Gegnern, die nicht angreifbar sind. Bei dieser
+      Abfrage ist jedoch TP==NPC, weil der ja angreift. Wenn er nun 1
+      zurueckgibt, wird der Kampf an der Stelle beendet.
+
+      2. Wenn der NPC den Spieler angreift, wird im Spieler InsertEnemy(NPC)
+      aufgerufen. Auch diesem Fall findet die Abfrage von P_NO_ATTACK statt,
+      da InsertEnemy() ja erstmal rausfinden muss, ob der Gegner angreifbar
+      ist, bevor er in die Feindliste eingetragen wird. Da der NPC den
+      Angriff beginnt, ist TP der NPC. Wenn die Query-Methode auf P_NO_ATTACK
+      hier abbricht, wird der NPC nicht in die Feindliste des Spielers
+      eingetragen. Dann bekaempft der NPC den Spieler, aber der Spieler nicht
+      den NPC.
+
+
+   2) P_NO_ATTACK des NPC wird z.B. beim Kampf eines Kaempfers mit dem NPC
+      pro Kampfrunde um die 10mal abgerufen. Wenn der Kaempfer nur eine
+      Attacke macht. Wenn er noch Sonderattacken machen, Spells ausfuehrt,
+      etc. wird das noch mehr. D.h. was auch immer ihr in der Query-Methode
+      im NPC macht:
+      Es sollte schnell sein, jeder Tick an Rechenzeit zaehlt hier xfach!
+
+
+LETZTE AENDERUNG
+================
+
 09.11.2015, Arathorn
