Merge remote-tracking branch 'origin/master'

Change-Id: I770184b51fe2feb4271eacbca43fef7e898685d5
diff --git a/std/transport.c b/std/transport.c
index a1c7d22..70e02ab 100644
--- a/std/transport.c
+++ b/std/transport.c
@@ -712,30 +712,24 @@
 public void ReceiveMsg(string msg, int msg_type, string msg_action,
                                string msg_prefix, object origin)
 {
-  // Wenn die Meldung aus einem der Environments kommt und der Transporter
-  // gerade nicht transparent ist (entweder generell oder weil er gerade
+  // Wenn die Meldung aus einem Objekt in uns kommt oder der Transporter
+  // transparent ist (grundsaetzlich und weil er gerade nicht
   // unterwegs/unsichtbar ist), wird die Meldung nicht ans Inventar
   // weitergeleitet.
-  // Bemerkung: origin in all_environment() klingt zwar gut, aber dann werden
-  // Nachrichten von anderen Objekte im Raum *ueber* den raum nicht erfasst.
-  // D.h. in diesem Fall wird wirklich previous_object() geprueft.
-  if (previous_object() == environment() && !QueryProp(P_TRANSPARENT))
-    return;
-  ::ReceiveMsg(msg, msg_type, msg_action, msg_prefix, origin);
+  if ((origin && (this_object() in all_environment(origin)))
+      || QueryProp(P_TRANSPARENT))
+    ::ReceiveMsg(msg, msg_type, msg_action, msg_prefix, origin);
 }
 
 // Wrapper fuer ReceiveMsg()
 public void ReceiveMultiSense(struct wave_s *msgs, string action=0,
     int commontypes=0)
 {
-  // Wenn die Meldung aus einem der Environments kommt und der Transporter
-  // gerade nicht transparent ist (entweder generell oder weil er gerade
+  // Wenn die Meldung aus einem Objekt in uns kommt oder der Transporter
+  // transparent ist (grundsaetzlich und weil er gerade nicht
   // unterwegs/unsichtbar ist), wird die Meldung nicht ans Inventar
   // weitergeleitet.
-  // Bemerkung: origin in all_environment() klingt zwar gut, aber dann werden
-  // Nachrichten von anderen Objekte im Raum *ueber* den raum nicht erfasst.
-  // D.h. in diesem Fall wird wirklich previous_object() geprueft.
-  if (previous_object() == environment() && !QueryProp(P_TRANSPARENT))
-    return;
-  ::ReceiveMultiSense(msgs, action, commontypes);
+  if ((origin &&  (this_object() in all_environment(origin)))
+      || QueryProp(P_TRANSPARENT))
+    ::ReceiveMultiSense(msgs, action, commontypes);
 }