diff --git a/doc/sphinx/lfun/ReceiveMsg.rst b/doc/sphinx/lfun/ReceiveMsg.rst
index 457235b..1734eb0 100644
--- a/doc/sphinx/lfun/ReceiveMsg.rst
+++ b/doc/sphinx/lfun/ReceiveMsg.rst
@@ -66,7 +66,9 @@
     In diesem Fall ist der Rueckgabe der kleinste von allen gerufenen
     ReceiveMsg() zurueckgelieferte Wert.
 
-    
+  Zur einfacheren Verwendung gibt es einige Wrapper-Funktionen, siehe
+  :doc:`ReceiveMultisense`, :doc:`ReceiveNotify`, :doc:`ReceiveSay` und
+  :doc:`ReceiveTeilemit`.
 
 RUeCKGABEWERT
 -------------
@@ -274,10 +276,10 @@
 ----------
 ::
 
+    Wrapper-Funktionen: :doc:`ReceiveMultisense`, :doc:`ReceiveNotify`, :doc:`ReceiveSay`, :doc:`ReceiveTeilemit`
     Verwandt: send_room(SE)
     Lfuns:    TestIgnore(L)
     Efuns:    tell_object(E), catch_tell(L), catch_msg(L)
               query_verb(E), query_once_interactive(E), break_string(SE)
 
-13.03.2016, Zesstra
-
+Letzte Aenderung: 07.01.2022
diff --git a/doc/sphinx/lfun/ReceiveMultisense.rst b/doc/sphinx/lfun/ReceiveMultisense.rst
new file mode 100644
index 0000000..cafa5bc
--- /dev/null
+++ b/doc/sphinx/lfun/ReceiveMultisense.rst
@@ -0,0 +1,86 @@
+ReceiveMultisense()
+===================
+
+FUNKTION
+--------
+
+  public int* ReceiveMultisense(struct msg_s* msgs,
+    string action = 0, int commontypes = 0)
+  
+DEFINIERT IN
+------------
+
+  /std/living/comm.c
+  /std/room/comm.c
+  /sys/living/comm.h
+
+ARGUMENTE
+---------
+
+  struct msg_s* msgs
+    Die Auszugebenden Nachrichten mit Zusatzinformationen. (S.u.)
+  string action
+    action wird als action an ReceiveMsg() weitergegeben.
+  int commontypes
+    Muss einen oder mehrere Veroderte messagetypes aus
+    :doc:`ReceiveMsg` enthalten. Diese werden bei jedem Aufruf von
+    :doc:`ReceiveMsg` mit dem jeweiligen Messagetyp aus msgs verodert.
+
+BESCHREIBUNG
+------------
+
+  sendet die in msgs angegebenen Nachrichten an den Empfaenger, bis eine
+  zugestellt werden konnte oder das ende von msgs erreicht wurde.
+
+  msgs ist aufgebaut wie folt:
+  Der struct msg_s ist in /std/living/comm_structs.c definiert. Er hat
+  die Eintraege string msg, int type, string prefix.
+  Das Array wird abgearbeitet, bis eine Nachricht zugestellt werden konnte
+  oder das Ende erreicht ist. msg wird vor der Ausgabe an
+  :doc:`../sefun/replace_personal` uebergeben, als erstes Objekt wird das aufrufende
+  Objekt uebergeben, als zweites this_player(), sofern vorhanden. msg wird
+  automatisch auf 78 Zeichen umgebrochen, vorhandene Zeilenumbrueche werden
+  dabei beibehalten. Fuer prefix findet keine Ersetzung statt.
+
+RUECKGABEWERT
+-------------
+
+  Ein Integer-Array mit folgenden Werten:
+
+  0
+    Der Rueckgabewert von :doc:`../lfun/ReceiveMsg`.
+  1
+    Information, welche Meldung zugestellt wurde. -1 steht fuer keine
+    Meldung, ein wert >= 0 fuer die jeweilige Position in msgs.
+
+  Raeume definieren standardmaessig ebenfalls ein ReceiveMultisense(), welches in
+  jedem Objekt im Raum ReceiveMultisense() mit den uebergebenen Argumenten aufruft.
+  In diesem Fall ist der Rueckgabe der kleinste von allen gerufenen
+  ReceiveMultisense() zurueckgelieferte Wert.
+
+BEISPIEL
+--------
+
+  .. code-block:: pike
+
+  inherit "/std/living/comm_structs";
+  this_player().ReceiveMultisense(
+    ({
+      (<msg_s>
+        msg: "Ein Drache landet neben Dir.",
+        type: MT_LOOK),
+      (<msg_s>
+        message: "Du hoerst ein rumpeln, als waere gerade etwas grosses "
+          "neben Dir eingeschlagen.",
+        type: MT_LISTEN),
+      (<msg_s>
+        msg: "Du spuerst einen heftigen Luftzug.",
+        type: MT_FEEL)})
+    MA_MOVE_IN);
+      
+SIEHE AUCH
+----------
+
+  :doc:`ReceiveMsg`, :doc:`../sefun/replace_personal`
+
+Letzte Aenderung: 07.10.2021, Bugfix
diff --git a/doc/sphinx/lfun/ReceiveNotify.rst b/doc/sphinx/lfun/ReceiveNotify.rst
new file mode 100644
index 0000000..d4171f4
--- /dev/null
+++ b/doc/sphinx/lfun/ReceiveNotify.rst
@@ -0,0 +1,56 @@
+ReceiveNotify()
+===============
+
+FUNKTION
+--------
+
+  public int ReceiveNotify(string msg, string action = 0)
+
+DEFINIERT IN
+------------
+
+  /std/living/comm.c
+  /sys/living/comm.h
+
+ARGUMENTE
+---------
+
+  string msg
+    Die auszugebende Meldung. Sie wird automatisch auf 78 Zeichen umgebrochen,
+    vorhandene Zeilenumbrueche werden dabei beibehalten.
+  string action
+    action wird als action an :doc:`ReceiveMsg` weitergegeben.
+
+BESCHREIBUNG
+------------
+
+  Sendet msg via ReceiveMsg() mit MT_NOTIFICATION | MSG_BS_LEAVE_LFS und den
+  uebergebenen bzw. voreingestellten Werten fuer prefix und action an den
+  Empfaenger.
+
+BEMERKUNGEN
+-----------
+
+  Bitte beachten: MT_NOTIFICATION ist fuer Kommandobestaetigungen,
+  Statusmeldungen o.ae., d.h. out-of-character Meldungen vorgesehen. Es soll
+  nicht als Sammeltyp fuer nicht-ignorierbare Meldungen verwendet werden,
+  dafuer gibt es MSG_DONT_IGNORE in Kombination mit den anderen Typen.
+
+RUECKGABEWERT
+-------------
+
+  Der Rueckgabewert von :doc:`../lfun/ReceiveMsg`.
+
+BEISPIEL
+--------
+
+  .. code-block:: pike
+
+  this_player().ReceiveNotify("Dazu reicht dein Level nicht aus.");
+
+SIEHE AUCH
+----------
+
+  :doc:`ReceiveMsg`
+
+Letzte Aenderung: 07.10.2021, Bugfix
diff --git a/doc/sphinx/lfun/ReceiveSay.rst b/doc/sphinx/lfun/ReceiveSay.rst
new file mode 100644
index 0000000..33ceee1
--- /dev/null
+++ b/doc/sphinx/lfun/ReceiveSay.rst
@@ -0,0 +1,92 @@
+ReceiveSay()
+============
+
+FUNKTION
+--------
+
+  public int* ReceiveSay(string msg, string prefix = 0,
+    struct msg_s sense_blocked =
+      ({(<msg_s>
+        msg: "@WER1 bewegt die Lippen, Du hoerst jedoch nichts.",
+        type: MT_LOOK)}))
+
+DEFINIERT IN
+------------
+
+  /std/living/comm.c
+  /std/room/comm.c
+  /sys/living/comm.h
+  
+ARGUMENTE
+---------
+
+  string msg
+    Die auszugebende Meldung. Sie wird vor der Ausgabe an
+    :doc:`../sefun/replace_personal` uebergeben, als erstes Objekt wird das aufrufende
+    Objekt uebergeben, als zweites this_player(), sofern vorhanden. msg wird
+    automatisch auf 78 Zeichen umgebrochen, vorhandene Zeilenumbrueche werden
+    dabei beibehalten.
+  string prefix
+    prefix wird als prefix an :doc:`ReceiveMsg` weitergegeben. Eine
+    Ersetzung mittels :doc:`replace_personal` findet nicht statt.
+    Wird kein Wert uebergeben, wird
+    previous_object().Name(WER, 1) + " sagt: " verwendet. Hierzu muss Name()
+    am aufrufenden Objekt definiert sein und etwas sinnvolles zurueckgeben.
+  struct msg_s sense_blocked
+    Ersatzmeldungen fuer taube Spieler. enthaelt Structs vom Typ msg_s.
+    Dieser ist in /std/living/comm_structs.c definiert und enthaelt die
+    Eintraege string msg, int type, string prefix.
+    Das Array wird von vorne nach hinten
+    abgearbeitet, bis eine Nachricht zugestellt werden konnte oder das Ende
+    erreicht ist. Auch hier findet fuer msg eine Ersetzung mittels
+    :doc:`../sefun/replace_personal` statt, fuer prefix nicht.
+
+BESCHREIBUNG
+------------
+
+  Sendet msg per :doc:`ReceiveMsg` mit den ueblichen Argumenten von
+  "sage" an den Empfaenger. D.h.: MT_LISTEN, MA_SAY, Name(WER, 1) + " sagt: ". Hierzu
+  muss das aufrufende Objekt :doc:`name` definiert haben und dort
+  etwas sinnvolles zurueckgeben. Falls ein anderer prefix gewaehlt wurde,
+  wird dieser statt Name(WER, 1)  " sagt: " verwendet. 
+
+RUECKGABEWERT
+-------------
+
+  Ein Integer-Array mit folgenden Werten:
+
+  0
+    Der Rueckgabewert von :doc:`../lfun/ReceiveMsg`.
+  1
+    Information, welche Meldung zugestellt wurde. -1 steht fuer msg, ein wert
+    >= 0 fuer die jeweilige Position in sense_blocked.
+
+  Raeume definieren standardmaessig ebenfalls ein ReceiveSay(), welches in
+  jedem Objekt im Raum ReceiveSay() mit den uebergebenen Argumenten aufruft.
+  In diesem Fall ist der Rueckgabe der kleinste von allen gerufenen
+  ReceiveSay() zurueckgelieferte Wert.
+
+BEISPIEL
+--------
+
+  .. code-block:: pike
+
+  SetProp(P_NAME, "Questgeber");
+  SetProp(P_GENDER, MALE);
+  this_player().ReceiveSay(
+    "Das hast Du prima gemacht, @WER2!",
+    Name(WER, 1) + " lobt Dich: ",
+    ({
+      (<message_> 
+        msg: "@WER1 nickt Dir laechelnd zu.",
+        type: MT_LOOK),
+      (<msg_s> 
+        msg: "Jemand klopft Dir lobend auf die Schulter.",
+        type: MT_FEEL)}));
+
+SIEHE AUCH
+----------
+
+  :doc:`ReceiveMsg`, :doc:`../sefun/replace_personal`, :doc:`name`
+
+Letzte Aenderung: 07.10.2021, Bugfix
diff --git a/doc/sphinx/lfun/ReceiveTeilemit.rst b/doc/sphinx/lfun/ReceiveTeilemit.rst
new file mode 100644
index 0000000..46648f3
--- /dev/null
+++ b/doc/sphinx/lfun/ReceiveTeilemit.rst
@@ -0,0 +1,54 @@
+ReceiveTeilemit()
+=================
+
+FUNKTION
+--------
+
+  public int ReceiveTeilemit(string msg)
+  
+DEFINIERT IN
+------------
+
+  /std/living/comm.c
+
+ARGUMENTE
+---------
+
+  string msg
+    Die auszugebende Meldung. Sie wird vor der Ausgabe an
+    :doc:`../sefun/replace_personal` uebergeben, als erstes Objekt wird das aufrufende
+    Objekt uebergeben, als zweites this_player(), sofern vorhanden. msg wird
+    automatisch auf 78 Zeichen umgebrochen, vorhandene Zeilenumbrueche werden
+    dabei beibehalten.
+
+BESCHREIBUNG
+------------
+
+  Sendet msg per :doc:`../lfun/ReceiveMsg` mit den ueblichen Argumenten von
+  "teile mit" an pl. D.h.: MT_COMM | MT_FAR, MA_TELL, Name(WER, 1) + " teilt
+  Dir mit: ". Hierzu muss das aufrufende Objekt :doc:`name` definiert
+  haben und dort etwas sinnvolles zurueckgeben. Der einzige Unterschied zum
+  normalen "teile mit" ist, dass zusaetzlich MSG_DONT_STORE uebergeben wird.
+  Da es sich hier ueblicherweise nicht um Kommunikation zwischen Spielern
+  handelt, muss die Nachricht nicht in die tmhist.
+
+RUECKGABEWERT
+-------------
+
+  Der Rueckgabewert von :doc:`../lfun/ReceiveMsg`.
+
+BEISPIEL
+--------
+
+  .. code-block:: pike
+
+  SetProp(P_NAME, "Questgeber");
+  SetProp(P_GENDER, MALE);
+  this_player().ReceiveTeilemit("Das hast Du prima gemacht, @WER2!");
+
+SIEHE AUCH
+----------
+
+  :doc:`ReceiveMsg`, :doc:`../sefun/replace_personal`, :doc:`name`
+
+Letzte Aenderung: 07.10.2021, Bugfix
diff --git a/std/living/comm.c b/std/living/comm.c
index a2ef665..ccfe92b 100644
--- a/std/living/comm.c
+++ b/std/living/comm.c
@@ -8,8 +8,13 @@
 #pragma no_clone
 #pragma range_check
 
+inherit "/std/living/comm_structs";
+
 #include <defines.h>
+#include <thing/language.h>
+#define NEED_PROTOTYPES
 #include <living/comm.h>
+#undef NEED_PROTOTYPES
 
 void create_super()
 {
@@ -135,3 +140,87 @@
   return MT_LOOK;
 }
 
+// Wrapper fuer ReceiveMsg()
+public int* ReceiveSay(string msg, string prefix = 0,
+  struct msg_s* sense_blocked =
+    ({(<msg_s> 
+      msg: "@WER1 bewegt die Lippen, Du hoerst jedoch nichts.",
+      type: MT_LOOK)}))
+{
+  int* res = ({0, -1});
+
+  if(!prefix)
+  {
+    prefix = previous_object().Name(WER, 1) + " sagt: ";
+  }
+
+  res[0] = ReceiveMsg(
+    replace_personal(msg, ({previous_object(), this_player()}) - ({0}), 1),
+    MT_LISTEN | MSG_BS_LEAVE_LFS,
+    MA_SAY,
+    prefix);
+
+  if(res[0] == MSG_SENSE_BLOCK)
+  {
+    // Um eine Nummer zurueckzugeben, ist hier leider eine for-Schleife noetig.
+    for(int i = 0; i < sizeof(sense_blocked); ++i)
+    {
+      res[0] = ReceiveMsg(
+        replace_personal(sense_blocked[i].msg, ({previous_object(),
+                         this_player()}) - ({0}), 1),
+        sense_blocked[i].type | MSG_BS_LEAVE_LFS,
+        MA_SAY,
+        sense_blocked[i].prefix);
+      if(res[0] != MSG_SENSE_BLOCK)
+      {
+        res[1] = i;
+        break;
+      }
+    }
+  }
+  return res;
+}
+
+public int ReceiveNotify(string msg, string action)
+{
+  // Da MT_NOTIFICATION immer zugestellt wird, ist keine Fehlerbehandlung
+  // notwendig.
+  return ReceiveMsg(
+    msg,
+    // MSG_DONT_IGNORE waere wegen MT_NOTIFICATION inhaltlich nicht noetig,
+    // spart aber ein paar Ticks.
+    MT_NOTIFICATION | MSG_BS_LEAVE_LFS | MSG_DONT_IGNORE,
+    action);
+}
+
+public int ReceiveTeilemit(string msg)
+{
+  // Blockierte Sinne sind hier kein Problem, ergo keine Fehlerbehandlung.
+  return ReceiveMsg(
+    replace_personal(msg, ({previous_object(), this_player()}) - ({0}), 1),
+    MT_COMM | MT_FAR | MSG_BS_LEAVE_LFS | MSG_DONT_STORE,
+    MA_TELL,
+    previous_object().Name(WER, 1) + "teilt Dir mit: ");
+}
+
+public int* ReceiveMultisense(struct msg_s* msgs,
+    string action = 0, int commontypes = 0)
+{
+  int* res = ({0, -1});
+
+  // Um eine Nummer zurueckzugeben, ist hier leider eine for-Schleife noetig.
+  for(int i = 0; i < sizeof(msgs); ++i)
+  {
+    res[0] = ReceiveMsg(
+      replace_personal(msgs[i].msg, ({previous_object(), this_player()}), 1),
+      msgs[i].type | MSG_BS_LEAVE_LFS | commontypes,
+      action,
+      msgs[i].prefix);
+    if(res[0] == MSG_DELIVERED)
+    {
+      res[1] = i;
+      break;
+    }
+  }
+  return res;
+}
diff --git a/std/living/comm_structs.c b/std/living/comm_structs.c
new file mode 100644
index 0000000..5105dbd
--- /dev/null
+++ b/std/living/comm_structs.c
@@ -0,0 +1,9 @@
+#pragma strict_types, save_types, pedantic, range_check
+#pragma no_clone
+
+protected struct msg_s
+{
+  string msg;
+  int type;
+  string prefix;
+};
diff --git a/std/player/base.c b/std/player/base.c
index 2b7d6fb..7f616d0 100644
--- a/std/player/base.c
+++ b/std/player/base.c
@@ -1338,7 +1338,7 @@
       if ( input_segments[1] == "" &&
            implode(input_segments[1..],"") == "" )
       {
-        _notify("Du hast hinter dem : nix eingegeben, bitte nochmal "
+        ReceiveNotify("Du hast hinter dem : nix eingegeben, bitte nochmal "
           "versuchen.\n", MA_UNKNOWN);
         // Eine neue Eingabe wird aber nur angefordert, wenn der aktuelle
         // Input ohnehin schon aus einem input_to()-Durchlauf stammte.
@@ -1384,7 +1384,7 @@
     smart_log(error_type, player_input, obj);
   }
   else
-    _notify("Eingabe abgebrochen.\n", MA_UNKNOWN);
+    ReceiveNotify("Eingabe abgebrochen.\n", MA_UNKNOWN);
   return 1;
 }
 
@@ -1438,12 +1438,12 @@
 {
   if (answer != "j" && answer != "ja")
   {
-    _notify("Eingabe abgebrochen.\n", MA_UNKNOWN);
+    ReceiveNotify("Eingabe abgebrochen.\n", MA_UNKNOWN);
     return;
   }
   if (!obj)
   {
-    _notify(sprintf("Leider existiert das Objekt nicht mehr, an dem Du "
+    ReceiveNotify(sprintf("Leider existiert das Objekt nicht mehr, an dem Du "
             "D%s melden wolltest.", desc), MA_UNKNOWN);
     return;
   }
@@ -1451,7 +1451,7 @@
   // ggf. will das Objekte selber loggen, dann wird nicht zentral geloggt.
   if (obj->SmartLog(0, myname, str, strftime("%d. %b %Y")))
   {
-    _notify(sprintf(
+    ReceiveNotify(sprintf(
        "Du hast an %s erfolgreich %s abgesetzt.\n"
        "Hinweis: Das Objekt selber hat die Meldung protokolliert.",
        (obj->IsRoom() ? "diesem Raum" : obj->name(WEM,1)),desc),
@@ -1461,14 +1461,14 @@
   {
     // Eintragung in die Fehler-DB
     string hashkey = ({string})ERRORD->LogReportedError(err);
-    _notify(sprintf(
+    ReceiveNotify(sprintf(
           "Ein kleiner Fehlerteufel hat D%s an %s unter der ID %s "
           "notiert.", desc,
           (obj->IsRoom() ? "diesem Raum" : obj->name(WEM,1)),
           hashkey || "N/A"),
         MA_UNKNOWN);
   }
-  _notify("Vielen Dank fuer die Hilfe.\n", MA_UNKNOWN);
+  ReceiveNotify("Vielen Dank fuer die Hilfe.\n", MA_UNKNOWN);
 }
 
 /** Loggt eine Spielermeldung an Magier.
@@ -1507,7 +1507,7 @@
       err[F_TYPE]=T_REPORTED_SYNTAX;
       break;
   }
-  _notify(sprintf(
+  ReceiveNotify(sprintf(
           "Du hast %s an %s mit der Beschreibung \"%s\" eingegeben. "
           "Wurde das richtige Zielobjekt ausgewaehlt und moechtest Du "
           "speichern?", desc,
diff --git a/std/player/comm.c b/std/player/comm.c
index 135d10e..a04200c 100644
--- a/std/player/comm.c
+++ b/std/player/comm.c
@@ -107,21 +107,13 @@
   report_cache = 0;
 }
 
-// uebermittelt eine MT_NOTIFICATION an this_object(), welche nicht ignoriert
-// werden kann und auch nicht gespeichert wird.
-protected void _notify(string msg, string action) {
-  ReceiveMsg(msg,
-             MT_NOTIFICATION|MSG_DONT_BUFFER|MSG_DONT_IGNORE|MSG_DONT_STORE,
-             action, 0, this_object());
-}
-
 protected void updates_after_restore(int newflag) {
   // Altes Ignoriere loeschen...
   mixed ign = Query(P_IGNORE,F_VALUE);
   if (!mappingp(ign))
   {
     if (pointerp(ign))
-      _notify(break_string(
+      ReceiveNotify(break_string(
         "Deine Ignoriere-Einstellungen wurden soeben geloescht, "
         "weil es eine Aktualisierung der Ignorierefunktion gab, "
         "bei der eine Konversion der Daten leider nicht "
@@ -980,7 +972,7 @@
   }
 
   beep_interval=({int})QueryProp(P_MESSAGE_BEEP);
-  _notify("Ton bei Mitteilungen: "+
+  ReceiveNotify("Ton bei Mitteilungen: "+
         (beep_interval ? "aller "+beep_interval+" Sekunden." : "aus."),
         query_verb());
   return 1;
@@ -996,7 +988,7 @@
     else return 0;
   }
 
-  _notify("Senderwiederholung bei Mitteilungen: "+ 
+  ReceiveNotify("Senderwiederholung bei Mitteilungen: "+ 
           (({int})QueryProp(P_MESSAGE_PREPEND) ?  "aus" : "ein")+".",
           query_verb());
 
@@ -1015,7 +1007,7 @@
   if(stringp(verb) && verb[0] == '\'') str = verb[1..] + " " + str;
   if (str==""||str==" "||!str)
   {
-    _notify("Was willst Du sagen?",MA_SAY);
+    ReceiveNotify("Was willst Du sagen?",MA_SAY);
     return 1;
   }
   msg=permutate(str);
@@ -1045,7 +1037,7 @@
 
   if (!(str=_unparsed_args()))
   {
-    _notify("Was willst Du rufen?",MA_SHOUT);
+    ReceiveNotify("Was willst Du rufen?",MA_SHOUT);
     return 1;
   }
   chars=sizeof(str)/2;
@@ -1073,15 +1065,15 @@
   if(!IS_LEARNER(this_player()))
   {
     if(QueryProp(P_GHOST)) {
-        _notify("So ganz ohne Koerper bekommst Du keinen Ton heraus.",
+        ReceiveNotify("So ganz ohne Koerper bekommst Du keinen Ton heraus.",
                 MA_SHOUT);
         return 1;
     }
     if (QueryProp(P_SP) <(chars+20))
     {
-      _notify("Du musst erst wieder magische Kraefte sammeln.",
+      ReceiveNotify("Du musst erst wieder magische Kraefte sammeln.",
               MA_SHOUT);
-      _notify("Tip: Benutz doch mal die Ebenen (Hilfe dazu mit 'hilfe "
+      ReceiveNotify("Tip: Benutz doch mal die Ebenen (Hilfe dazu mit 'hilfe "
               "Ebenen').", MA_SHOUT);
       return 1;
     }
@@ -1112,7 +1104,7 @@
 
   if (extern_call() && this_interactive()!=ME) return 1;
   if (!who || !msg) {
-    _notify("Was willst Du mitteilen?",MA_TELL);
+    ReceiveNotify("Was willst Du mitteilen?",MA_TELL);
     return 1;
   }
 
@@ -1152,7 +1144,7 @@
                                        SENDER:    getuid(ME),
                                        DATA:     msg ]), 1))
       {
-        _notify(ret, MA_TELL);
+        ReceiveNotify(ret, MA_TELL);
       }
       else
       {
@@ -1173,15 +1165,15 @@
     if (!stringp(it))
       switch(it) {
       case -1:
-        _notify("Das war nicht eindeutig!",MA_TELL);
+        ReceiveNotify("Das war nicht eindeutig!",MA_TELL);
         return 1;
       case -2:
-        _notify("Kein solcher Spieler!",MA_TELL);
+        ReceiveNotify("Kein solcher Spieler!",MA_TELL);
         return 1;
       }
     ob = find_player(it) || find_living(it);
     if(!ob) {
-      _notify("Kein solcher Spieler!",MA_TELL);
+      ReceiveNotify("Kein solcher Spieler!",MA_TELL);
       return 1;
     }
   }
@@ -1207,7 +1199,7 @@
     _recv(ob, msg, MSGFLAG_TELL, "Du teilst " + capitalize(it) + " mit: ");
   // oder irgendwas anderes an den Absender ausgeben...
   if (!visflag && interactive(ob))
-      _notify("Kein solcher Spieler!",MA_TELL);
+      ReceiveNotify("Kein solcher Spieler!",MA_TELL);
   else if (away = ({string})ob->QueryProp(P_AWAY))
       ReceiveMsg( break_string( away, 78, capitalize(it)
                            + " ist gerade nicht da: ", BS_INDENT_ONCE ),
@@ -1220,7 +1212,7 @@
       else
         away=time2string("%h %H und %m %M",i);
 
-      _notify(sprintf("%s ist seit %s voellig untaetig.",
+      ReceiveNotify(sprintf("%s ist seit %s voellig untaetig.",
               capitalize(it),away),
               MA_TELL);
     }
@@ -1269,12 +1261,12 @@
   if (!(str=_unparsed_args()) ||
        (sscanf(str, "%s zu %s", who, msg) != 2 &&
         sscanf(str, "%s %s", who, msg) !=2 )) {
-    _notify("Was willst Du wem zufluestern?",MA_SAY);
+    ReceiveNotify("Was willst Du wem zufluestern?",MA_SAY);
     return 1;
   }
   who = lower_case(who);
   if (!(ob = present(who, environment(this_player()))) || !living(ob)) {
-    _notify(capitalize(who)+" ist nicht in diesem Raum.",MA_SAY);
+    ReceiveNotify(capitalize(who)+" ist nicht in diesem Raum.",MA_SAY);
     return 1;
   }
 
@@ -1308,7 +1300,7 @@
   if (!(str=_unparsed_args()) ||
        (sscanf(str, "%s zu %s", who, msg) != 2 &&
         sscanf(str, "%s %s", who, msg) !=2 )) {
-    _notify("Was willst Du wem aus der Ferne zufluestern?",MA_EMOTE);
+    ReceiveNotify("Was willst Du wem aus der Ferne zufluestern?",MA_EMOTE);
     return 1;
   }
 
@@ -1318,21 +1310,21 @@
     if (!stringp(it))
       switch(it){
       case -1:
-        _notify("Das war nicht eindeutig!",MA_EMOTE);
+        ReceiveNotify("Das war nicht eindeutig!",MA_EMOTE);
         return 1;
       case -2:
-        _notify("Kein solcher Spieler!",MA_EMOTE);
+        ReceiveNotify("Kein solcher Spieler!",MA_EMOTE);
         return 1;
       }
     ob = find_player(it);
     if(!ob) ob = find_living(it);
     if(!ob){
-      _notify("Kein solcher Spieler!",MA_EMOTE);
+      ReceiveNotify("Kein solcher Spieler!",MA_EMOTE);
       return 1;
     }
   }
   if (environment(ob) == environment()) {
-    _notify("Wenn jemand neben Dir steht, nimm fluester.",MA_EMOTE);
+    ReceiveNotify("Wenn jemand neben Dir steht, nimm fluester.",MA_EMOTE);
     return 1;
   }
 
@@ -1347,7 +1339,7 @@
 
   // wenn Empfaenger invis und wir kein Magier , ggf. fakefehler ausgeben.
   if (ob->QueryProp(P_INVIS) && !IS_LEARNER(this_player())) {
-    _notify("Kein solcher Spieler!",MA_EMOTE);
+    ReceiveNotify("Kein solcher Spieler!",MA_EMOTE);
     return 1;
   }
   // sonst eigene Meldung via _recv() ausgeben.
@@ -1360,7 +1352,7 @@
 
 static int _converse(string arg)
 {
-  _notify("Mit '**' wird das Gespraech beendet.",MA_SAY);
+  ReceiveNotify("Mit '**' wird das Gespraech beendet.",MA_SAY);
   if (stringp(arg) && strstr(arg, "-s") == 0)
     input_to("_converse_more", INPUT_PROMPT, "]", 1);
   else
@@ -1371,7 +1363,7 @@
 static int _converse_more(mixed str, int silent)
 {
   if (str == "**") {
-    _notify("Ok.",MA_SAY);
+    ReceiveNotify("Ok.",MA_SAY);
     return 0;
   }
 
@@ -1390,7 +1382,7 @@
 
   str = _unparsed_args();
   if (!str||!sizeof(str)) {
-    _notify("Was willst Du den Magiern zurufen?",MA_SHOUT);
+    ReceiveNotify("Was willst Du den Magiern zurufen?",MA_SHOUT);
     return 1;
   }
   // Kontrollzeichen rausfiltern.
@@ -1413,7 +1405,7 @@
     return 0;
 
   if (!(str=_unparsed_args())) {
-    _notify("Was moechtest Du 'echoen'?", 0);
+    ReceiveNotify("Was moechtest Du 'echoen'?", 0);
     return 1;
   }
 
diff --git a/std/player/command.c b/std/player/command.c
index d342e90..30d1bf0 100644
--- a/std/player/command.c
+++ b/std/player/command.c
@@ -1101,27 +1101,27 @@
 {
   if (!stringp(cmd))
   {
-    _notify("Mit diesem Befehl kannst Du mithelfen, Syntaxen im MG zu "
+    ReceiveNotify("Mit diesem Befehl kannst Du mithelfen, Syntaxen im MG zu "
             "verbessern. Wenn Du einverstanden bist, speichern wir "
             "anonym (d.h. ohne Deinen Charnamen), welche Deiner Befehle "
             "erfolgreich und nicht erfolgreich waren. Uebliche "
             "Kommunikationsbefehle werden dabei nicht gespeichert.",
             0);
-    _notify("Mit 'syntaxsammlung ja' kannst Du die Speicherung einschalten, "
+    ReceiveNotify("Mit 'syntaxsammlung ja' kannst Du die Speicherung einschalten, "
             "mit 'syntaxsammlung nein' kannst Du sie ausschalten.",0);
-    _notify("Deine Befehle werden zur Zeit"
+    ReceiveNotify("Deine Befehle werden zur Zeit"
             + (QueryProp("_syntaxdb") ? " " : " NICHT ")
             + "gespeichert.", 0);
   }
   else if (cmd == "ja")
   {
     SetProp("_syntaxdb", 1);
-    _notify("Ab jetzt werden Deine Befehle gespeichert. Vielen Dank!", 0);
+    ReceiveNotify("Ab jetzt werden Deine Befehle gespeichert. Vielen Dank!", 0);
   }
   else
   {
     SetProp("_syntaxdb", 0);
-    _notify("Ab jetzt werden Deine Befehle NICHT gespeichert.", 0);
+    ReceiveNotify("Ab jetzt werden Deine Befehle NICHT gespeichert.", 0);
   }
   return 1;
 }
diff --git a/std/room.c b/std/room.c
index 65332ce..93845ba 100644
--- a/std/room.c
+++ b/std/room.c
@@ -21,6 +21,7 @@
 inherit "/std/room/items";
 inherit "/std/container/vitems";
 inherit "/std/room/doors";
+inherit "/std/room/comm";
 
 #include <thing/properties.h>
 #include <config.h>
diff --git a/std/room/comm.c b/std/room/comm.c
new file mode 100644
index 0000000..3f2516b
--- /dev/null
+++ b/std/room/comm.c
@@ -0,0 +1,52 @@
+#pragma strict_types, save_types, pedantic, range_check
+#pragma no_clone
+
+inherit "/std/living/comm_structs";
+
+#include <thing/language.h>
+
+// Per Default nur an alle Items im Inventar weiterleiten.
+public varargs int ReceiveMsg(string msg, int msg_type, string msg_action,
+                              string msg_prefix, object origin)
+{
+  int *res = ({int*})all_inventory()->ReceiveMsg(msg, msg_type, msg_action,
+                                         msg_prefix,
+                                         origin || previous_object());
+  if (sizeof(res))
+    return min(res);
+  return 0;
+}
+
+// Sortierfunktion um das Array mit dem kleinsten Wert auszugeben
+
+private int* _minarr(int** arr)
+{
+  if(!sizeof(arr)) return 0;
+  return sort_array(&arr,
+    function int(int* a, int* b)
+    {
+      return a[0] > b[0];
+    })[0];
+}
+
+// Wrapper fuer ReceiveMsg()
+
+public varargs int* ReceiveSay(string msg, string prefix,
+  struct msg_s sense_blocked)
+{
+  // Das muss schon hier passieren, damit previous_object() stimmt
+  if(!prefix)
+  {
+    prefix = ({string})previous_object().Name(WER, 1) + " sagt: ";
+  }
+
+  int** res = ({int**})all_inventory()->ReceiveSay(msg, prefix, sense_blocked);
+  return _minarr(res);
+}
+
+public varargs int* ReceiveMultisense(struct msg_s msgs,
+  string action, int commontypes)
+{
+  int** res = ({int**})all_inventory()->ReceiveMultisense(msgs, action, commontypes);
+  return _minarr(res);
+}
diff --git a/std/room/items.c b/std/room/items.c
index f799570..734ec9c 100644
--- a/std/room/items.c
+++ b/std/room/items.c
@@ -26,16 +26,3 @@
   if ( !sizeof(inh & users()) )
     remove_multiple(3);
 }
-
-// Per Default nur an alle Items im Inventar weiterleiten.
-public varargs int ReceiveMsg(string msg, int msg_type, string msg_action,
-                              string msg_prefix, object origin)
-{
-  int *res = all_inventory()->ReceiveMsg(msg, msg_type, msg_action,
-                                         msg_prefix,
-                                         origin || previous_object());
-  if (sizeof(res))
-    return min(res);
-  return 0;
-}
-
diff --git a/sys/living/comm.h b/sys/living/comm.h
index 83811bb..7cb7388 100644
--- a/sys/living/comm.h
+++ b/sys/living/comm.h
@@ -97,6 +97,7 @@
 
 public varargs int ReceiveMsg(string msg, int msg_type, string msg_action,
                               string msg_prefix, object origin);
+public int ReceiveNotify(string msg, string action = 0);
 
 #endif // __LIVING_COMM_H_PROTO__
 
