diff --git a/doc/sphinx/lfun/InFight.rst b/doc/sphinx/lfun/InFight.rst
index e8020fa..734e9c3 100644
--- a/doc/sphinx/lfun/InFight.rst
+++ b/doc/sphinx/lfun/InFight.rst
@@ -5,7 +5,7 @@
 --------
 ::
 
-        mixed InFight()
+        object InFight()
 
 ARGUMENTE
 ---------
@@ -23,7 +23,10 @@
         Funktion environment gefiltert und so festgestellt, ob
         die Umgebung der beiden Feinde gleich ist.
 
-RUECKGABEWERT: 
+RUECKGABEWERT
+-------------
+::
+
         Als Rueckgabewert enthaelt man entweder 0, wenn das Objekt
         im Moment keine Feinde hat bzw. die nicht im selben Raum
         sind, oder aber das Feindobjekt, das als erstes im Array
diff --git a/doc/sphinx/lfun/NewDoor.rst b/doc/sphinx/lfun/NewDoor.rst
index 22cc177..c13e3f8 100644
--- a/doc/sphinx/lfun/NewDoor.rst
+++ b/doc/sphinx/lfun/NewDoor.rst
@@ -71,8 +71,6 @@
           ([ D_STATUS_CLOSED : "Die Tuer ist geschlossen.\n",
              D_STATUS_OPEN   : "Die Tuer ist offen.\n" ])
 
-          
-
           Default: "Eine Tuer.\n"
 
      D_SHORT
@@ -192,12 +190,15 @@
   ** Tueren mit Bewegungsmeldung:
 
      NewDoor("norden","/room/see2",
+             ({"gitter","eisengitter"}),
              ({ D_MSGS,  ({"nach Norden","schwimmt",
-                           "kommt hereingeschwommen"}) }) );
+                           "schwimmt von Sueden herein"}),
+                D_GENDER, NEUTER}) );
 
   ** Eine Tuer mit Testfunktion:
 
      NewDoor("osten","/mein/zielraum",
+             ({"tuer"}),
              ({ D_TESTFUNC, "blocker_da" }) );
 
      Die Funktion blocker_da:
@@ -205,11 +206,12 @@
      int blocker_da()      // KEINE protected-Funktion! Sie wird sonst NICHT
      {                     // aufgerufen und ausgewertet!
        if ( present("mein_fieses_mo\nster",this_object()) )
-        {
-         write("Ein fieses Monster stellt sich Dir in den Weg.\n");
+       {
+         tell_object(this_player(),
+             "Ein fieses Monster stellt sich Dir in den Weg.\n");
          return 1;
-        }
-       return 0;           // optional
+       }
+       return 0;
      }
 
   ** Nun noch eine Tuer mit einigen Extras:
@@ -217,30 +219,30 @@
      NewDoor("nordwesten","/rooms/kammer",
              ({"tuer","holztuer"}),
              ({
-               D_FLAGS,  (DOOR_CLOSED|DOOR_RESET_CL),
-               D_MSGS,   ({"nach Nordwesten","geht",
-                         "kommt durch eine Tuer herein"}),
-               D_SHORT,  "Im Nordwesten siehst Du eine %se Holztuer.",
-               D_LONG,   "Sie trennt den Laden vom dahinterliegenden Raum.\n",
-               D_NAME,   "Holztuer",
-               D_FUNC,   "view",
-               D_FUNC2,  "look_up"
+               D_FLAGS, (DOOR_CLOSED|DOOR_RESET_CL),
+               D_MSGS,  ({"nach Nordwesten","geht",
+                        "kommt durch eine Tuer herein"}),
+               D_SHORT, "Im Nordwesten siehst Du eine %se Holztuer.",
+               D_LONG,  "Sie trennt den Laden vom dahinterliegenden Raum.\n",
+               D_NAME,  "Holztuer",
+               D_FUNC,  "view",
+               D_FUNC2, "look_up"
              }) );
 
      Im Startraum:
 
      void view()
      {
-       write("Der Angestellte wirft Dir einen missbilligenden Blick zu, "
-             "laesst Dich aber passieren.\n");
+       tell_object(this_player(), break_string("Der Angestellte wirft Dir "
+         "einen missbilligenden Blick zu, laesst Dich aber passieren.",78));
      }
 
      Im Zielraum:
 
      void look_up()
      {
-       write("Ein alter Mann schaut kurz zu Dir auf und vertieft sich dann "
-             "wieder in seine Akten.\n");
+       tell_object(this_player(), break_string("Ein alter Mann schaut kurz "
+         "zu Dir auf und vertieft sich dann wieder in seine Akten.",78));
      }
 
 SIEHE AUCH
diff --git a/doc/sphinx/lfun/move.rst b/doc/sphinx/lfun/move.rst
index d8f6aa9..bf29137 100644
--- a/doc/sphinx/lfun/move.rst
+++ b/doc/sphinx/lfun/move.rst
@@ -81,6 +81,8 @@
      M_SILENT
           Es werden beim Bewegen keine Meldungen ausgegeben. Dieser
           Parameter wirkt sich nur auf das Bewegen von Lebenwesen aus.
+          (Magier mit 'mschau an' sehen die Bewegungen dennoch, es wird
+           eine Standardmeldung ausgegeben.)
 
      M_GET
           Das Objekt wird von einem unbelebten Objekt (zB. einem Raum, einer
diff --git a/doc/sphinx/props/P_PRE_INFO.rst b/doc/sphinx/props/P_PRE_INFO.rst
index 9efed27..703d397 100644
--- a/doc/sphinx/props/P_PRE_INFO.rst
+++ b/doc/sphinx/props/P_PRE_INFO.rst
@@ -20,11 +20,9 @@
         Ist die Property in einem NPC definiert, so wird ihr Ergebnis
         ausgewertet, bevor eine Frage an das Infosystem uebergeben wird.
 
-        
-
         Moegliche Werte:
-        - numerischer Wert ungleich 0
-          => der NPC gibt _keinerlei_ Antwort, die Frage fuehrt sozusagen
+        - numerischer Wert > 0
+          => der NPC gibt keinerlei Antwort, die Frage fuehrt sozusagen
              ins Leere
 
         - Stringwert
@@ -34,10 +32,11 @@
             Der Fragende selbst bekommt bei angegebenem Stringwert:
             "XY " + Stringwert.
 
-        - Closure
-          => die Antwort bzw. Reaktion des NPCs obliegt ganz der 
-             angegebenen Closure. Diese muss dabei einen String oder 
-             Ganzzahlen-Wert zurueckgeben
+        - Wenn eine als Querymethode gesetzte Closure einen String oder
+          einen Integer > 0 zurueckgibt, sind die  Auswirkungen identisch
+          zu den beiden oben beschriebenen Faellen. Siehe auch Beispiel
+          unten.
+
 
 BEISPIEL
 --------
@@ -48,22 +47,14 @@
 
           SetProp(P_CHAT_CHANCE,0); // NPC latscht los
 
-        
-
         Und eine Weile spaeter:
 
-        
-
           SetProp(P_CHAT_CHANCE,5); // NPC ruht wieder, quasselt rum
 
-        
-
         Waehrend des Herumlaufens, also wenn er nicht automatisch schwatzt,
         soll er auch keinerlei Fragen beantworten:
 
-          
-
-          Set(P_PRE_INFO, function mixed () {
+          Set(P_PRE_INFO, function string () {
             return (QueryProp(P_CHAT_CHANCE) ? 0 : 
               "hat gerade keine Zeit fuer Dich."); 
             }, F_QUERY_METHOD);
@@ -83,5 +74,5 @@
         AddInfo(), /std/npc/info.c
 
 
-Last modified: 01.03.2016 by Arathorn
+Last modified: 2019-Okt-16 by Arathorn
 
