diff --git a/doc/lfun/ReceiveMultisense b/doc/lfun/ReceiveMultisense
new file mode 100644
index 0000000..db97f64
--- /dev/null
+++ b/doc/lfun/ReceiveMultisense
@@ -0,0 +1,109 @@
+ReceiveMultisense()
+*******************
+
+
+FUNKTION
+========
+
+   public void ReceiveMultisense(struct wave_s* msgs, string action =
+   0, int commontypes = 0)
+
+
+DEFINIERT IN
+============
+
+   /std/living/comm.c /std/room/comm.c
+
+
+ARGUMENTE
+=========
+
+   struct wave_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 ReceiveMsg()
+      enthalten. Diese werden bei jedem Aufruf von ReceiveMsg() mit
+      dem jeweiligen Messagetyp aus <msgs> verodert.
+
+
+BESCHREIBUNG
+============
+
+   Versucht, eine der in <msgs> angegebenen Nachrichten an den
+   Empfaenger zuzustellen.
+
+   Das Array <msgs> wird der Reihe nach abgearbeitet, bis eine
+   Nachricht zugestellt werden konnte, das Ende von <msgs> erreicht
+   wurde oder eine Nachricht *aus anderen Gruenden* als einem
+   blockierten Sinn abgelehnt wurde. Der Grund fuer letzteres ist,
+   dass andere Fehler von ReceiveMsg() (fast) immer auch bei allen
+   (weiteren) Alternativen auftreten werden.
+
+   <msgs> ist ein Array von struct wave_s. Diese ist in
+   /secure/simul_efun/comm.c definiert (und steht allen Programmen
+   automatisch zur Verfuegung). Sie hat die Eintraege string msg, int
+   type, string prefix. wave_s.msg wird vor der Ausgabe von
+   replace_personal() verarbeitet. Als erstes Objekt wird das
+   aufrufende Objekt uebergeben, als zweites this_player(), sofern
+   vorhanden. wave_s.msg wird automatisch auf 78 Zeichen umgebrochen,
+   vorhandene Zeilenumbrueche werden dabei beibehalten. Fuer
+   wave_s.prefix findet keine Ersetzung statt.
+
+
+RUECKGABEWERT
+=============
+
+
+in Lebewesen
+------------
+
+   Der Rueckgabe ist der Rueckgabewert von ReceiveMsg() fuer die
+   zuletzt versuchte Meldung.
+
+   Wenn dies einen Erfolg (MSG_DELIVERED, MSG_BUFFERED) darstellt,
+   wurde irgendeine Meldung erfolgreich zugestellt. Falls es
+   MSG_SENSE_BLOCK ist, sind alle versuchten Sinne blockiert und keine
+   Nachricht wurde zugestellt. Ist es ein anderer Fehler ist, wurde
+   keine Nachricht zugestellt (und ggf. nicht alle versucht).
+
+
+in Containern/Raeumen
+---------------------
+
+   Die Funktion hat keinen Rueckgabewert. Der Grund hierfuer ist, dass
+   dieser ein ggf. tief verschachteltes Mapping waere, was keiner mehr
+   prueft.
+
+
+BEISPIEL
+========
+
+   this_player().ReceiveMultisense(
+      ({
+         (<wave_s>
+            msg: "Ein Drache landet neben Dir.", type: MT_LOOK),
+
+         (<wave_s>
+            message: "Du hoerst ein Rumpeln, als waere gerade etwas
+            Grosses "
+               "neben Dir eingeschlagen.",
+
+            type: MT_LISTEN),
+
+         (<wave_s>
+            msg: "Du spuerst einen heftigen Luftzug.", type:
+            MT_FEEL)})
+
+      MA_MOVE_IN);
+
+
+SIEHE AUCH
+==========
+
+   ReceiveMsg(), replace_personal()
+
+Letzte Aenderung: 21.09.2022, Zesstra
