--- ldmud-3.3.714.orig/src/object.c	2006-07-10 04:43:01.000000000 +0200
+++ ldmud-3.3.714/src/object.c	2007-06-27 22:37:36.000000000 +0200
@@ -4895,12 +4895,15 @@
 {
     object_t *ob;
     object_t *save_command_giver;
-    int num_recipients = 0;
+    // start with num_recipients==1 because the room/container itself is 1 
+    // recipient, which is not counted in the for-loop (see below)
+    int num_recipients = 1;
     object_t *some_recipients[20];
     object_t **recipients;
     object_t **curr_recipient;
     char *message;
     static svalue_t stmp = { T_OBJECT, } ;
+    interactive_t *ip;        
 
     /* Like in say(), collect the possible recipients.
      * First count how many there are.
@@ -4908,8 +4911,6 @@
 
     for (ob = room->contains; ob; ob = ob->next_inv)
     {
-        interactive_t *ip;
-
         if ( ob->flags & O_ENABLE_COMMANDS
          ||  O_SET_INTERACTIVE(ip, ob))
         {
@@ -4926,10 +4927,14 @@
 
     /* Now fill the table */
     curr_recipient = recipients;
+    /* The environment itself? */
+    if (room->flags & O_ENABLE_COMMANDS
+        || O_SET_INTERACTIVE(ip, room)) {
+            *curr_recipient++ = room;
+    }
+    // now the objects in the room/container
     for (ob = room->contains; ob; ob = ob->next_inv)
     {
-        interactive_t *ip;
-
         if ( ob->flags & O_ENABLE_COMMANDS
          ||  O_SET_INTERACTIVE(ip, ob))
         {
@@ -4996,8 +5001,6 @@
 
     for (curr_recipient = recipients; NULL != (ob = *curr_recipient++); )
     {
-        interactive_t *ip;
-
         if (ob->flags & O_DESTRUCTED) continue;
         stmp.u.ob = ob;
         if (lookup_key(&stmp, avoid) >= 0) continue;
