diff --git a/doc/efun/present b/doc/efun/present
index 2a9d0be..7c9592a 100644
--- a/doc/efun/present
+++ b/doc/efun/present
@@ -7,71 +7,64 @@
         object present(object ob)
         object present(object ob, object env)
 
-BESCHREIBUNG
-        Wenn ein Objekt mit der Id <str> sich im Inventar oder in der Umgebung
-        von this_object() befindet, wird es zurueck geliefert.
+DESCRIPTION
+        This efun checks if an object is present in a given environment.
+        The object is identified by id <str> or by an object <ob>. This
+        latter form of the efun can be used as a fast way to test for the
+        presence of a known object.
+
+        When searching objects by id, the efun by default returns the first
+        object found matching the id. In order to search for other than the
+        first object, a number can be specified either directly as the
+        argument <n>, or implicetely inside the <str> in the form "<id>
+        <n>".
         
-        Ist das Argument <n> gegeben, wird das n-te Objekt mit Namen <id>
-        zurueck geliefert. Das heisst, der Driver fuehrt fuer alle Objekte
-        im Inventar und in der Umgebung von this_object() die Funktion
-        id(str) aus, bis ein Treffer erzielt wird (wenn ueberhaupt).
+        By default, the efun searches first in the inventory of
+        this_object(), then in its environment. However, if <env> is given,
+        the efun searches just inside <env>.
 
-        Ist <n> nicht gegeben, aber <str> hat die Form "<id> <n>" , wird
-        ebenfalls das n-te Objekt mit Namen <id> zurueckgeliefert.
+        When searching both inventory and environment of this_object(),
+        the numbering is applied linear over both spaces (see examples).
 
-        <str> kann auch ein Objekt (anstatt einer Id) sein, was den Test
-        schneller und einfacher macht.
+        The driver identifies objects by calling the lfun id() in each
+        object.
 
-        Das Argument <env> ist optional. <env> gibt das Objekt an, in welchem
-        nach <str> gesucht wird. Nur das Inventory von <env> wird durchsucht,
-        nicht jedoch dessen Umgebung.
-
-ANMERKUNGEN
-        Wenn die efun sowohl in this_object() als auch dessen Umgebung
-        sucht, werden, soweit es die Numerierung betrifft, die beiden
-        Umgebungen zusammenhaengend betrachtet.
-
-BEISPIELE
+EXAMPLES
         present("chest");
-          --> findet das erste 'chest' Objekt
+          --> returns the first 'chest' object in this object.
 
-        present("chest 2");
-          --> findet das zweite 'chest' Objekt
+        present("chest 2")
+          --> returns the second 'chest' object in this object.
 
-        present("chest 2", 1);
-          --> findet das erste 'chest 2' Objekt
+        present("chest 2", 1)
+          --> returns the first 'chest 2' object in this object.
 
-        Wenn sich eine "chest" im this_object() befindet, und zwei
-        ausserhalb:
-          present("chest", 1) -> findet die chest im Objekt
-          present("chest", 2) -> findet die erste chest ausserhalb
-          present("chest", 3) -> findet die zweite chest ausserhalb
+        Assume there is one "chest" inside the current object, and
+        two in its environment:
+          present("chest", 1) -> returns the chest inside
+          present("chest", 2) -> returns the first chest outside
+          present("chest", 3) -> returns the second chest outside
         
-        Wenn ein Objekt die Forum "<id> <n>" in Verbindung mit einem selbst
-        ueber add_action() gesetzten Verb unterstuetzen soll (damit z. B.
-        "oeffne Kiste 3" funktioniert), kann das folgendermassen geloest
-        werden:
+        A typical 2.4.5-implementation of the "do <id> <n>" command style
+        is:
 
-            void init() { add_action("oeffne_kiste", "oeffne"); }
+            void init() { add_action("open_chest", "open"); }
 
-            int oeffne_kiste(string str)
-            {
-                if(present(str) != this_object() )
-                {
-                    return 0; /* nicht diese Kiste */
-                    ...
-                }
+            int open_chest (string str) {
+              if (present (str) != this_object ())
+                  return 0; /* Not this chest */
+              ...
             }
 
-GESCHICHTE
-        LDMud 3.2.11/3.3.610 fuehrte die (str, n)-Form ein.
-        LDMud 3.3.713 aenderte die Numerierung wenn sowohl Inventory
-          als auch Umgebung durchsucht werden. In der vorherigen
-          Implementierung wurde eine Numerierung auf beiden Umgebungen
-          einzeln angewandt, was zur Folge hatte, dass niedere Objekte
-          in der aeusseren Umgebung nicht gefunden werden koennten, da
-          sie von den Objekten in Inneren verdeckt wurden.
 
-SIEHE AUCH
-        move_object(E), environment(E), this_object(E), present_clone(E),
+HISTORY
+        LDMud 3.2.11/3.3.610 introduced the (str, n) argument form.
+        LDMud 3.3.713 modified the <n> search behaviour so that the
+          numbering is applied over both inventory and environment
+          together. Before, the numbering was individual in each
+          space, leading to situations where low-numbered objects in the
+          environment were hidden by those in the inventory.
+
+SEE ALSO
+        move_object(E), environment(E), this_object(E), present_clone(E)
         id(A), init(A)
