diff --git a/std/room/comm.c b/std/room/comm.c
index ae57bbe..664fb9b 100644
--- a/std/room/comm.c
+++ b/std/room/comm.c
@@ -2,49 +2,35 @@
 #pragma no_clone
 
 #include <thing/language.h>
+#include <living/comm.h>
 
 // Per Default nur an alle Items im Inventar weiterleiten.
-public varargs int ReceiveMsg(string msg, int msg_type, string msg_action,
+public varargs void 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];
+  all_inventory()->ReceiveMsg(msg, msg_type, msg_action,
+                              msg_prefix, origin || previous_object());
 }
 
 // Wrapper fuer ReceiveMsg()
 
-public varargs int* ReceiveSay(string msg, string prefix,
-  struct wave_s sense_blocked)
+public void ReceiveMultiSense(struct wave_s *msgs, string action=0,
+    int commontypes=0)
 {
-  // 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);
+  all_inventory()->ReceiveMultisense(msgs, action, commontypes);
 }
 
-public varargs int* ReceiveMultisense(struct wave_s msgs,
-  string action, int commontypes)
+public void ReceiveSay(string msg,
+    string prefix = ({string})previous_object().Name(WER, 1) + " sagt: ",
+    struct wave_s *alt =
+        ({(<wave_s>
+            msg: "@WER1 bewegt die Lippen, Du hoerst jedoch nichts.",
+            type: MT_LOOK)})
+    )
 {
-  int** res = ({int**})all_inventory()->ReceiveMultisense(msgs, action, commontypes);
-  return _minarr(res);
+  // Nachricht in struct konvertieren, ans Anfang vom Array stellen
+  alt = ({(<wave_s> msg: msg, prefix: prefix, type: MT_LISTEN)}) + alt;
+  // Rest macht ReceiveMultiSense()
+  ReceiveMultiSense(alt, MA_SAY, MSG_BS_LEAVE_LFS);
 }
+
