diff --git a/doc/efun-mg/environment b/doc/efun-mg/environment
new file mode 100644
index 0000000..be6b524
--- /dev/null
+++ b/doc/efun-mg/environment
@@ -0,0 +1,61 @@
+
+environment
+***********
+
+
+BEMERKUNGEN
+===========
+
+   Blueprints, wie zum Beispiel Raeume haben oft kein environment().
+   Man sollte daher ueberpruefen, ob ein environment() existiert, wenn
+   man darin oder darauf eine Funktion aufrufen will.
+
+
+BEISPIELE
+=========
+
+      // In der Variable "raum" steht der Raum, in dem sich der Spieler
+      // derzeit aufhaelt - das kann auch 0 sein!
+
+      raum = environment(this_player());
+
+      // Dieses Objekt hat noch kein environment, da es eben erst geclont
+      // wurde. Ergo steht in env eine 0.
+      obj = clone_object("/std/thing");
+      env = environment(obj);
+
+      // alle Methoden die auf Environment arbeiten, sollten das vorher
+      // pruefen - insbesondere tell_room()
+      if(this_player() && environment(this_player()) &&
+         objectp(o=present("schild",environment(this_player()))) {
+
+       write("Du klebst Deine Plakette auf "+o->name(WEN)+".\n");
+       tell_room(environment(this_player()), break_string(
+             this_player()->Name(WER)+" pappt einen Aufkleber auf "
+             +o->name(WEN)+".",78), ({this_player()}));
+      }
+
+      // wenn Dinge sehr offensichtlich in Leuten kaputtgehen wird es
+      // komplexer (man kann das natuerlich noch weiter schachteln oder
+      // ueber all_environment() versuchen zu loesen
+      if(environment()) {
+       object ee;
+       ee=environment(environment());
+       if(living(environment()))
+       {
+         tell_object(environment(),Name(WER)+" zerfaellt.\n");
+         if(ee)
+           tell_room(ee, environment()->Name(WESSEN)
+                +" "+name(RAW)+" zerfaellt.\n", ({environment()}));
+       }
+       else if(ee && living(ee))
+       {
+         if(environment()->QueryProp(P_TRANSPARENT))
+           tell_object(ee, Name(WER)+" zerfaellt in Deine"
+               + (environment()->QueryProp(P_PLURAL) ? "n" :
+                   (environment()->QueryProp(P_GENDER)==FEMALE?"r":"m"))
+               + environment()->name(RAW)+".\n");
+       }
+       else
+         tell_room(environment(),Name(WER)+" zerfaellt.\n");
+      }
