diff --git a/doc/efun/environment b/doc/efun/environment
new file mode 100644
index 0000000..ea10b3d
--- /dev/null
+++ b/doc/efun/environment
@@ -0,0 +1,69 @@
+SYNOPSIS
+        object environment();
+        object environment(object obj);
+        object environment(string obj);
+
+ARGUMENTE:
+     obj
+          Objekt oder Pfad-String eines Objektes dessen Umgebungsobjekt
+          gesucht ist
+
+BESCHREIBUNG:
+     Es wird das Objekt bestimmt, in dem sich obj aufhaelt.
+     Wird obj nicht angegeben, so wird this_object() als Objekt angenommen.
+
+     Zerstoerte Objekte haben kein 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");
+     }
+
+SIEHE AUCH:
+        first_inventory(E), next_inventory(E), all_inventory(E)
+        all_environment(E)
+
+20. Sep. 2002 Gloinson@MG
\ No newline at end of file
