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;
-}
-
