diff --git a/doc/sphinx/lfun/AddRoomMessage.rst b/doc/sphinx/lfun/AddRoomMessage.rst
index 150a9cd..53c7b4d 100644
--- a/doc/sphinx/lfun/AddRoomMessage.rst
+++ b/doc/sphinx/lfun/AddRoomMessage.rst
@@ -3,81 +3,84 @@
 
 FUNKTION
 --------
-::
 
      void AddRoomMessage(string *msg, int time, mixed *func);
 
 DEFINIERT IN
 ------------
-::
 
      /std/room/description.c
 
 ARGUMENTE
 ---------
-::
 
-     msg
+     string* msg
           Array von Strings mit den Meldungen.
-     time
+     int time
           Der Abstand zwischen zwei Meldungen in Sekunden.
-     func (optional)
+     string|string* func (optional)
           String oder Array von Strings mit Funktionsnamen
 
 BESCHREIBUNG
 ------------
-::
 
      Mit dieser Funktion legt man fest, dass in bestimmten Zeitabstaenden
      Meldungen an den Raum geschickt werden sollen.
 
-     Es wird alle time Sekunden zufaellig eine der in msg angegebenen
-     Meldungen ausgegeben. Hat man auch noch func angegeben, so wird
-     zusaetzlich diese Funktion (bei einem Array: eine zufaellig ausgesuchte
-     Funktion) im Raum aufgerufen. Als Parameter bekommt die Funktion die
-     Nummer der ausgegebenen Meldung.
+     Es wird alle 'time' Sekunden (beim ersten Betreten durch einen Spieler
+     ein random() des Wertes) zufaellig eine der in msg angegebenen
+     Meldungen ausgegeben.
+     Hat man func angegeben, so wird diese Funktion (bei einem Array:
+     eine zufaellig ausgesuchte Funktion) im Raum aufgerufen. Als
+     Parameter bekommt die Funktion die Nummer der ggf zuvor ausgegebenen
+     Meldung (Default also 0).
 
      Bevor man allerdings jeden Raum mit AddRoomMessage() pflastert, sollte
-     man folgendes bedenken:
-        o Viele Meldungen in vielen Raeumen tendieren dazu, den Spielern auf
-          die Nerven zu gehen!
-        o Da das Timing ueber einen call_out() gesteuert wird, ist das Ganze
-          aus Sicht des GameDrivers auch noch relativ teuer!
-     Fazit: weniger ist mehr!
+     man folgendes bedenken (Fazit: weniger ist mehr):
+
+     * Viele Meldungen in vielen Raeumen tendieren dazu, den Spielern auf
+       die Nerven zu gehen.
+     * Die das Timing steuernden call_out() sind nicht umsonst.
 
 BEMERKUNGEN
 -----------
-::
 
-     * Falls time < 15 Sekunden ist, wird auf 15 Sekunden aufgerundet.
+     * falls time < 15 Sekunden ist, wird auf 15 Sekunden aufgerundet
      * der Praefix Add... taeuscht hier. Ein Aufruf von AddRoomMessage()
        ueberschreibt alle vorherigen Werte
-     * THIS_PLAYER() NICHT VERWENDEN!
+     * this_player() NICHT VERWENDEN!
+     * Abschalten der Raumnachrichten:
+
+       * passiert automatisch nur, wenn alle Spieler den Raum verlassen haben
+       * ist manuell nur ueber Loeschen der Nachrichten umsetzbar, also mit
+         ``AddRoomMessage((string)0, 0, (string)0);``
+
      In Funktionen, die durch AddRoomMessage() ausgeloest werden, darf
-     this_player() nicht verwendet werden. AddRoomMessage ist call_out-
-     gesteuert und speichert somit das this_player(). Damit ist this_player()
-     immer der Spieler, der den Raum geladen, also den Raum als erster
-     betreten hat. 
-     Spieler also bitte selbst ueber filter(all_inventory(this_object()),
-                                            #'interactive) suchen.
+     this_player() nicht verwendet werden, da die call_out()-Kette den
+     ersten ausloesenden Spieler speichert. Anwesende Spieler also bitte
+     ggf mit
+     ``filter(all_inventory(this_object()), #'interactive)``
+     suchen.
 
 BEISPIELE
 ---------
-::
 
-     Es soll alle halbe Minute eine Meldung ausgegeben werden. Falls es
-     unter den Fuessen knackt, soll man zudem mit 30%-iger
-     Wahrscheinlichkeit zusammenzucken:
+  .. code-block:: pike
+
+     // Beispiel 1:
+     // Es soll alle halbe Minute eine Meldung ausgegeben werden. Falls es
+     // unter den Fuessen knackt, soll man zudem mit 30%-iger
+     // Wahrscheinlichkeit zusammenzucken:
 
      inherit "/std/room";
 
      void create() {
        ::create();
-       AddRoomMessage( ({ "In der Ferne schreit ein Kaeuzchen.\n",
-                          "Es raschelt im Gebuesch.\n",
-                          "Etwas knackt unter Deinen Fuessen.\n" }),
-                        30, ({"sound", "sound_more_rnd"}) );
-       ...
+       AddRoomMessage(({"In der Ferne schreit ein Kaeuzchen.\n",
+                         "Es raschelt im Gebuesch.\n",
+                         "Etwas knackt unter Deinen Fuessen.\n"}),
+                      30,
+                      ({"sound", "sound_more_rnd"}) );
      }
 
      void sound(int msg) {
@@ -87,17 +90,62 @@
      }
 
      // Extra-Beispiel: wir setzen die Wartedauer (Parameter tim) neu
-     void sound_more_rnd() {
-       sound(0);   // die Message-Nummer ist hier unwichtig
+     void sound_more_rnd(int msg) {
+       sound(msg);
        SetProp(P_MSG_PROB, 25+random(20));  // neue Wartedauer
      }
 
+
+  .. code-block:: pike
+
+     // Beispiel 2: Abschalten der Raumnachrichten
+     public int action_laerm(string str);
+     protected void reset_room_messages();
+
+     void create() {
+       ::create();
+       reset_room_messages();
+
+       AddCmd("mach|mache&laerm|krach",
+              "action_laerm",
+              "Was willst du machen?");
+       AddCmd("schlag|schlage&laerm|krach",
+              "action_laerm",
+              "Was willst du schlagen?");
+     }
+
+     protected void reset_room_messages() {
+       AddRoomMessage(({"Das Reh quakt leise.\n",
+                        "Der Frosch grunzt.\n",
+                        "Gelbe Schnorpfel pupsen im Takt.\n"}),
+                      45);
+     }
+
+     public int action_laerm(string str) {
+       AddRoomMessage((string)0, 0, (string)0);
+
+       this_player()->ReceiveMsg(
+         "Du schreist dir kurz die Seele aus dem Leib. Alle Tiere "
+         "verstummen sofort.", MT_NOTIFICATION);
+       send_room(this_object(),
+         this_player()->Name()+" schreit laut. Alle Tiere verstimmen "
+         "sofort.", MT_LISTEN, 0, 0, ({this_player()}));
+       return 1;
+     }
+
+     void reset() {
+       :reset();
+       if(!QueryProp(P_ROOM_MSG))
+         reset_room_messages();
+     }
+
 SIEHE AUCH
 ----------
-::
 
-     Verwandt: tell_room(), ReceiveMsg()
-     Props:    P_ROOM_MSG, P_FUNC_MSG, P_MSG_PROB
+     Verwandt:
+       tell_room(), :doc:`../sefun/send_room`, :doc:`../lfun/ReceiveMsg`
+     Props:
+       :doc:`../props/P_MSG_PROB`, :doc:`../props/P_FUNC_MSG`, :doc:`../props/P_ROOM_MSG`
 
-2.Feb 2016 Gloinson
+28. Mar 2016 Gloinson
 
diff --git a/doc/sphinx/props/P_FUNC_MSG.rst b/doc/sphinx/props/P_FUNC_MSG.rst
index 2acab57..a18d767 100644
--- a/doc/sphinx/props/P_FUNC_MSG.rst
+++ b/doc/sphinx/props/P_FUNC_MSG.rst
@@ -3,19 +3,16 @@
 
 NAME
 ----
-::
 
     P_FUNC_MSG                    "func_msg"                    
 
 DEFINIERT IN
 ------------
-::
 
     /sys/room/description.h
 
 BESCHREIBUNG
 ------------
-::
 
      Liste mit Funktionen, die zufaellig im Raum aufgerufen werden.
 
@@ -24,17 +21,18 @@
 
 ANMERKUNGEN
 -----------
-::
 
      Bitte AddRoomMessage() zum Hinzufuegen/Ueberschreiben benutzen!
 
 SIEHE AUCH
 ----------
-::
 
-     LFuns:    AddRoomMessage()
-     Verwandt: tell_room(), ReceiveMsg()
-     Props:    P_ROOM_MSG, P_MSG_PROB
+     LFuns:
+       :doc:`../lfun/AddRoomMessage`
+     Verwandt:
+       tell_room(), :doc:`../sefun/send_room`, :doc:`../lfun/ReceiveMsg`
+     Props:
+       :doc:`P_MSG_PROB`, :doc:`P_ROOM_MSG`
 
 2.Feb 2016 Gloinson
 
diff --git a/doc/sphinx/props/P_MSG_PROB.rst b/doc/sphinx/props/P_MSG_PROB.rst
index 1f0e9ea..739aadb 100644
--- a/doc/sphinx/props/P_MSG_PROB.rst
+++ b/doc/sphinx/props/P_MSG_PROB.rst
@@ -3,33 +3,71 @@
 
 NAME
 ----
-::
-
     P_MSG_PROB                    "msg_prob"                    
 
 DEFINIERT IN
 ------------
-::
 
     /sys/room/description.h
 
 BESCHREIBUNG
 ------------
-::
+     Der Name ist irrefuehrend: es ist ein Parameter fuer die Wartezeit
+     in Sekunden bis zur naechsten Ausgabe einer Raumnachricht.
+     Nur direkt nach dem Betreten des Raums wird ein Zufallswert dieser
+     Zahl erstellt.
 
-     Parameter fuer die Wartezeit in Sekunden bis zur naechsten Ausgabe
-     einer Raumnachricht.
-     Wird in AddRoomMessage() explizit mitgesetzt. Koennte natuerlich von
-     einer Nachrichtenmethode auch regelmaessig geaendert werden, um
-     mehr Zufall in die Intervalle zu bringen.
+     Wird in AddRoomMessage() explizit mitgesetzt und gilt fuer den Raum.
+
+     Kann von einer Nachrichtenmethode geaendert werden, um mehr Zufall
+     in die Intervalle zu bringen.
+
+     Werte kleiner als 15 werden bei der Auswertung auf 15 gesetzt. Setzen
+     auf 0 schaltet die Nachrichten nicht ab!
+
+BEISPIELE
+---------
+
+.. code-block:: pike
+
+     // Beispiel:
+     // Je laenger Spieler im Raum sind, desto langsamer tropft das
+     // Wasser. Wenn der letzte den Raum verlaesst, wird die Zeit
+     // fuer den naechsten Spieler wieder auf den Initialwert gesetzt.
+
+     inherit "/std/room";
+
+     #define START_SPEED 30
+
+     void create() {
+       ::create();
+       AddRoomMessage(({"Das Wasser tropft.\n",
+                        "Ein Tropfen plitscht.\n",
+                        "Tripf tropf macht das Wasser.\n"}),
+                      START_SPEED,
+                      ({"slowdown_speed"}));
+     }
+
+     void slowdown_speed(int msg) {
+       SetProp(P_MSG_PROB, QueryProp(P_MSG_PROB)+10);
+     }
+
+     void exit() {
+       ::exit();
+       
+       if(!sizeof(filter(all_inventory(this_object())-({this_player()}),
+                         #'interactive)))
+         SetProp(P_MSG_PROB, START_SPEED);
+     }
 
 SIEHE AUCH
 ----------
-::
 
-     LFuns:    AddRoomMessage()
-     Props:    P_ROOM_MSG, P_MSG_PROB
-     Verwandt: call_out()
+     LFuns:
+       :doc:`../lfun/AddRoomMessage`
+     Props:
+       :doc:`P_ROOM_MSG`, :doc:`P_FUNC_MSG`
+     Verwandt:
+       call_out()
 
-2.Feb 2016 Gloinson
-
+28. Mar 2017 Gloinson
diff --git a/doc/sphinx/props/P_ROOM_MSG.rst b/doc/sphinx/props/P_ROOM_MSG.rst
index 087f9c2..620af5c 100644
--- a/doc/sphinx/props/P_ROOM_MSG.rst
+++ b/doc/sphinx/props/P_ROOM_MSG.rst
@@ -3,19 +3,16 @@
 
 NAME
 ----
-::
 
     P_ROOM_MSG                    "room_msg"                    
 
 DEFINIERT IN
 ------------
-::
 
     /sys/room/description.h
 
 BESCHREIBUNG
 ------------
-::
 
      Liste mit Meldungen, die zufaellig im Raum ausgegeben werden.
 
@@ -23,17 +20,17 @@
 
 ANMERKUNGEN
 -----------
-::
 
      Bitte AddRoomMessage() zum Hinzufuegen/Ueberschreiben benutzen!
 
 SIEHE AUCH
 ----------
-::
 
-     LFuns:    AddRoomMessage()
-     Verwandt: tell_room(), ReceiveMsg()
-     Props:    P_FUNC_MSG, P_MSG_PROB
+     LFuns:
+       :doc:`../lfun/AddRoomMessage`
+     Verwandt:
+       tell_room(), :doc:`../sefun/send_room`, :doc:`../lfun/ReceiveMsg`
+     Props:
+       :doc:`P_MSG_PROB`, :doc:`P_FUNC_MSG`
 
-2.Feb 2016 Gloinson
-
+2.Feb 2016 Gloinson
\ No newline at end of file
