diff --git a/doc/efun/environment b/doc/efun/environment
index ea10b3d..38ca58e 100644
--- a/doc/efun/environment
+++ b/doc/efun/environment
@@ -1,69 +1,22 @@
 SYNOPSIS
-        object environment();
-        object environment(object obj);
-        object environment(string obj);
+        object environment()
+        object environment(object obj)
+        object environment(string obj)
 
-ARGUMENTE:
-     obj
-          Objekt oder Pfad-String eines Objektes dessen Umgebungsobjekt
-          gesucht ist
+BESCHREIBUNG
+        Gibt das umgebende Objekt von <obj> wider. Das Objekt <obj> kann
+        direkt angegeben werden oder ueber seinen Namen als String. Wenn
+        kein Argument angegeben wird, wird die Umgebung des aktuellen
+        Objekts zurueck gegeben.
 
-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.
 
-     Zerstoerte Objekte haben kein Environment.
+BEISPIELE
+        object room;
+        room = environment(this_player());
 
-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.
+        Dies liefert den Raum, in dem sich der Spieler im Moment aufhaelt.
 
-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)
+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
