diff --git a/doc/wiz/gift b/doc/wiz/gift
index a2c4d9e..095d691 100644
--- a/doc/wiz/gift
+++ b/doc/wiz/gift
@@ -1,132 +1,142 @@
 Krankheiten, Gifte und Flueche
 ==============================
 
-     Einmal abgesehen vom einfachen Setzen von P_POISON im Spieler lassen 
-     sich Gifte und Krankheiten auch als Objekte ausprogrammieren, die dem 
-     Spieler in mehr oder weniger regelmaessigen Abstaenden Lebenspunkte 
-     abziehen. Auch Flueche koennen nicht nur als P_CURSED in Waffen und 
-     Ruestungen, sondern auch als Objekte vorliegen, und dem Spieler das 
-     Leben schwermachen
+     Einmal abgesehen vom einfachen Setzen von P_POISON im Spieler lassen 
+     sich Gifte und Krankheiten auch als Objekte ausprogrammieren, die dem 
+     Spieler in mehr oder weniger regelmaessigen Abstaenden Lebenspunkte 
+     abziehen. Auch Flueche koennen nicht nur als P_CURSED in Waffen und 
+     Ruestungen, sondern auch als Objekte vorliegen und dem Spieler das 
+     Leben schwermachen.
 
-     Um ein Objekt als Gift zu kennzeichnen, wird die Klasse CL_POISON 
-     gesetzt, fuer eine Krankheit ist CL_DISEASE und fuer einen Fluch 
-     CL_CURSE zu setzen (mit AddClass, siehe dort). Zusaetzlich wird die 
-     Schwere der Erkrankung bzw. Vergiftung in der Property P_LEVEL 
-     abgelegt, wobei P_LEVEL einen Wert zwischen 1 und 100 haben sollte. 
-     Mitglieder der Klerikergilde und andere Heiler koennen dann je nach 
-     P_LEVEL den betroffenen Spieler mehr oder weniger gut heilen. (Kleriker 
+     Um ein Objekt als Gift zu kennzeichnen, wird die Klasse CL_POISON 
+     gesetzt, fuer eine Krankheit ist CL_DISEASE und fuer einen Fluch 
+     CL_CURSE zu setzen (mit AddClass, siehe dort). Zusaetzlich wird die 
+     Schwere der Erkrankung bzw. Vergiftung in der Property P_LEVEL 
+     abgelegt, wobei P_LEVEL einen Wert zwischen 1 und 100 haben sollte. 
+     Mitglieder der Klerikergilde und andere Heiler koennen dann je nach 
+     P_LEVEL den betroffenen Spieler mehr oder weniger gut heilen. (Kleriker 
      koennen CL_POISON-Vergiftungen heilen, einige Heiler jedoch nicht.)
 
-     Eine eindeutige Unterscheidung zwischen Giften, Krankheiten und 
-     Fluechen zu treffen, ist schwer, denn die Grenzen verschwimmen. 
+     Eine eindeutige Unterscheidung zwischen Giften, Krankheiten und 
+     Fluechen zu treffen, ist schwer, denn die Grenzen verschwimmen. 
      Trotzdem hier eine grobe Klassifizierung:
 
-     Gifte : bringt der Spieler sich meist selbst bei (in dem er z.B.
-             einen giftigen Pilz isst). Oft auch sind die Stellen, wo
-             ein Spieler sich vergiften kann, irgendwie gekennzeichnet,
-             so dass eine Vergiftung umgangen werden kann.
+     Gifte: 
+        bringt der Spieler sich meist selbst bei (in dem er z.B. einen 
+        giftigen Pilz isst). Oft auch sind die Stellen, wo ein Spieler 
+        sich vergiften kann, beim Forschen erkennbar, so dass eine 
+        Vergiftung umgangen werden kann.
 
-             Bei Giften wird durch das Heilen der Level des Giftobjekts
-             abhaengig vom Erfolg gesenkt. Ist der Level <= 0, wird das
-             Objekt vom Kleriker-Spellbook entfernt. Heiler sollten das
-             aehnlich machen. Logisch waere es daher, den Schaden, den das
-             Objekt macht, vom momentanen Level abhaengig zu machen.
+        Bei Giften wird durch das Heilen der Klerikergilde der Level des 
+        Giftobjekts abhaengig vom Erfolg gesenkt. Ist der Level <= 0, wird 
+        das Objekt vom Kleriker-Spellbook entfernt. Heiler-NPCs sollten das
+        aehnlich machen. Logisch waere es daher, den Schaden, den das
+        Objekt macht, vom momentanen Level abhaengig zu machen.
 
-     Krankheit: werden dem Spieler durch Fremdeinwirkung beigebracht, auch
-             durch Ansteckung bei einem anderen Spieler oder NPC.
-             Bei ansteckenden Krankheiten ist auf die Ansteckrate zu achten
-             und darauf, dass die Krankheit mit der Zeit auch wieder
-             ausstirbt. Also entweder bei jeder Generation der Krankheit
-             das Ansteckungsrisiko senken oder einmal infizierte Spieler
-             immunisieren. Es sollten sich 2 idelnde Spieler nicht immer
-             wieder gegenseitig bis in alle ewig anstecken koennen. Auch
-             ist darauf zu achten, dass Netztote nicht angesteckt werden
-             koennen bzw. Netztote niemanden anstecken, da sich sonst die
-             Krankheit im Netztotenraum verbreiten kann.
+     Krankheiten:
+        werden dem Spieler durch Fremdeinwirkung beigebracht, auch durch
+        Ansteckung bei einem anderen Spieler oder NPC.
+        
+        Bei ansteckenden Krankheiten ist auf die Ansteckrate zu achten
+        und darauf, dass die Krankheit mit der Zeit auch wieder ausstirbt.
+        Also entweder bei jeder Generation der Krankheit das 
+        Ansteckungsrisiko senken oder einmal infizierte Spieler 
+        immunisieren. Es sollten sich 2 idelnde Spieler nicht immer wieder
+        gegenseitig bis in alle Ewigkeit anstecken koennen. Auch ist darauf 
+        zu achten, dass Netztote nicht angesteckt werden koennen bzw.
+        Netztote niemanden anstecken, da sich sonst die Krankheit im 
+        Netztotenraum verbreiten kann.
 
-             Das Heilen geschieht im Kleriker-Spellbook wie bei Gift.
+        Das Heilen geschieht im Kleriker-Spellbook wie bei Gift, oder
+        bei Heiler-NPCs.
 
-     Flueche: werden wie Krankheiten durch Fremdeinwirkung beigebracht
-             (der Spieler wird halt verflucht). Ausserdem ist die Wirkung 
-             von Fluechen oft nicht auf einfaches Abziehen von Lebenspunkten 
-             beschraenkt, sondern der Spieler kann z.B. nicht mehr richtig 
-             sprechen (Sprachfluch ueber P_PERM_STRING), ist in der Bewegung 
-             eingeschraenkt oder greift wahllos NPCs an.
+     Flueche: 
+        werden wie Krankheiten durch Fremdeinwirkung beigebracht (der 
+        Spieler wird halt verflucht). Vorsicht: Nicht P_CURSED im 
+        Spielerobjekt setzen! 
+        
+        Die Wirkung von Fluechen ist oft nicht auf einfaches Abziehen von 
+        Lebenspunkten beschraenkt, sondern der Spieler kann z.B. 
+        nicht mehr richtig sprechen (Sprachfluch ueber P_PERM_STRING), 
+        ist in der Bewegung eingeschraenkt oder greift wahllos NPCs an.
 
-             Hier ist das Entfluchen durch einen Kleriker anders. Findet
-             das Spellbook ein CL_CURSE-Objekt im Inv des Spielers, wird
-             gegen das Level des Objekt gewuerfelt. Bei Erfolg wird das
-             Objekt entfernt, bei Misserfolg passiert nichts!
+        Hier ist das Entfluchen durch einen Kleriker anders. Findet das 
+        Spellbook ein CL_CURSE-Objekt im Inv des Spielers, wird gegen 
+        das Level des Objekt gewuerfelt. Bei Erfolg wird das Objekt 
+        entfernt, bei Misserfolg passiert nichts! Es wird also nicht die
+        Fluchstufe reduziert.
 
-             Als Anhaltspunkte fuer den Level:
-             - < Level 10 sind einfach zu entfluche
-             - 10 - 20 sind fuer kleine Kleriker schon enorm schwierig
-               fuer max. Kleriker gut zu entfluchen.
-             - ueber 20 gelingt es auch einem max. Kleriker nicht immer
-               beim ersten mal.
-             - ab 30 muss der max. Kleriker schon mal tanken gehen
-             - Ueber Level 40 liegt die Chance schon im Promillebereich!!!
-             - Level 100 laesst sich ueberhaupt nicht mehr entfluchen.
+        Als Anhaltspunkte fuer den Level:
+        - < Level 10 sind einfach zu entfluchen
+        - 10-20 sind fuer kleine Kleriker schon enorm schwierig
+          fuer max. Kleriker gut zu entfluchen.
+        - ueber 20 gelingt es auch einem max. Kleriker nicht immer
+          beim ersten Mal.
+        - ab 30 muss der max. Kleriker schon mal tanken gehen
+        - Ueber Level 40 liegt die Chance schon im Promillebereich!!!
+        - Level 100 laesst sich ueberhaupt nicht mehr entfluchen.
+        Will man dem Spieler also eine reelle (und nicht nur 
+        mathematische) Chance lassen, sollte der Fluchlevel unter 40 
+        bleiben.
 
-             Will man dem Spieler also eine reelle (und nicht nur 
-             mathematische) Chance lassen, sollte der Fluchlevel unter 40 
-             bleiben.
+    Das Schadensobjekt selbst ist unsichtbar, meist autoload und loest die 
+    Schadensfunktion z.B. ueber Callouts oder den Reset aus.
 
-     Das Schadensobjekt selbst ist unsichtbar, meist autoload und loest die 
-     Schadensfunktion ueber Callouts aus.
 
- BEISPIEL:
-     Hier ein Beispiel fuer einen Giftpilz (gefunden bei Silvana, in
-     /d/dschungel/silvana/weg/obj/pilz.c):
-     ----------------------------------------------------------------------
+BEISPIEL:
+
+     Hier ein Beispiel fuer einen Giftpilz 
+     -------------------------------------
+     
      #pragma strong_types
-     #include "../pfad.h"
 
      inherit "/std/thing";
 
-     void create() {
-       if(!clonep(TO)) {
-           set_next_reset(-1);
-           return;
+     #include "../pfad.h"
+
+     protected void create() {
+       if ( !clonep(this_object()) ) {
+         set_next_reset(-1);
+         return;
        }
        ::create();
 
-       SetProp(P_SHORT,0);
-       SetProp(P_INVIS,1);
-       SetProp(P_LONG,0);
-       SetProp(P_NODROP,1);
-       SetProp(P_NEVERDROP,1);
-       SetProp(P_AUTOLOADOBJ,1);
-       SetProp(P_WEIGHT,0);
-       SetProp(P_NAME,"Pilzvergiftung");
-       SetProp(P_KILL_NAME,"Eine Pilzvergiftung");
-       SetProp(P_GENDER,FEMALE);
-       SetProp(P_ARTICLE,1);
-       SetProp(P_LEVEL,10);
-       call_out("next_step",2);
+       SetProp(P_SHORT, 0);
+       SetProp(P_INVIS, 1);
+       SetProp(P_LONG, 0);
+       SetProp(P_NODROP, 1);
+       SetProp(P_NEVERDROP, 1);
+       SetProp(P_AUTOLOADOBJ, 1);
+       SetProp(P_WEIGHT, 0);
+       SetProp(P_NAME, "Pilzvergiftung");
+       SetProp(P_KILL_NAME, "Eine Pilzvergiftung");
+       SetProp(P_GENDER, FEMALE);
+       SetProp(P_LEVEL, 10);
+       call_out("next_step", 2);
        AddClass(CL_POISON);
      }
 
-     void next_step();
-
      void next_step() {
-       object pl;
-       if(!(pl=TOE) || !query_once_interactive(pl) ||
-          pl->QueryProp(P_GHOST)){
-         remove();
+       object pl = environment(this_object());
+       if ( !objectp(pl) || !query_once_interactive(pl) ||
+            pl->QueryProp(P_GHOST) ) {
+         remove(1);
          return ;
        }
-       call_out(#'next_step ,5);
-       if(!interactive(pl)) return;
-       tell_object(pl,
-       		   "Dein Bauch schmerzt. Du windest Dich in Kraempfen.\n");
-       if(ENV(pl)) tell_room(ENV(pl),
-        pl->Name()+" windet sich vor Schmerzen am Boden.\n",({ pl }));
-       pl->do_damage(QueryProp(P_LEVEL)*2 + random(10),TO);
+       call_out("next_step", 5);
+       if ( interactive(pl) ) {
+         tell_object(pl,
+           "Dein Bauch schmerzt. Du windest Dich in Kraempfen.\n");
+         if ( environment(pl) )
+           tell_room(environment(pl), pl->Name(WER)+" windet sich vor "
+             "Schmerzen am Boden.\n", ({ pl }));
+         pl->do_damage(QueryProp(P_LEVEL)*2 + random(10), this_object());
+       }
      }
 
  SIEHE AUCH:
-    P_POISON, P_CURSED, P_PERM_STRING
+    P_POISON, P_MAX_POISON, P_POISON_DELAY
+    P_CURSED, P_PERM_STRING
 
  LETZTE AeNDERUNG:
-   11.08.2007, Zesstra
+   18.08.2019, Arathorn
