diff --git a/doc/efun/clones b/doc/efun/clones
index f302287..c402c0b 100644
--- a/doc/efun/clones
+++ b/doc/efun/clones
@@ -3,36 +3,40 @@
         object * clones(int what)
         object * clones(string|object obj [, int what])
 
-BESCHREIBUNG
-        Diese Efun liefert ein Array mit allen Clones eines bestimmten
-        Blueprints. Dabei unterliegt das Array den normalen Systemlimiten.
+DESCRIPTION
+        The efuns returns an array with all clones of a certain blueprint.
+        The array is subject to the usual runtime limits.
 
-        Wenn <obj> angegeben ist, werden alle Clones des Blueprints von <obj>
-        (oder von <obj> selbst, falls <obj> ein Blueprint ist) ausgegeben,
-        sonst die Clone des aktuellen Objekts bzw. die Clone des Blueprints
-        des aktuellen Objekts. Wenn <obj> als String angegeben ist, muss es
-        der Name eines existierenden Objekts sein.
+        If <obj> is given, all clones of the blueprint of <obj> (which
+        may be <obj> itself) are returned, otherwise all clones of the
+        current object resp. of the current object's blueprint. If <obj>
+        is given as string, it must name an existing object.
 
-        <what> waehlt aus, wie Clone von aelteren Versionen des Blueprints
-        zu behandeln sind:
-            == 0: liefert nur die Clone des aktuellen Blueprints (Standard)
-            == 1: liefert nur die Clone der alten Blueprint-Version
-            == 2: liefert alle Clones aller Blueprint-Versionen
+        <what> selects how to treat clones made from earlier versions
+        of the blueprint:
+          == 0: (default) return the clones of the current blueprint only.
+          == 1: return the clones of the previous blueprints only.
+          == 2: return all clones of the blueprint.
 
-        Wenn der Treiber mit DYNAMIC_COSTS kompiliert wurde, sind die Kosten
-        fuer diese Funktion proportional zur Anzahl Objekte im Spiel.
+        Note: this efun is computationally expensive.
 
-BEISPIELE
+        If the driver is compiled with DYNAMIC_COSTS, the cost of this
+        efun is proportional to the number of objects in the game.
+
+EXAMPLES
         object o, p;
-        o = clone_object("/std/thing"); /* oder "std/thing" im COMPAT-Modus */
+        o = clone_object("/std/thing"); /* or "std/thing" in COMPAT mode */
         destruct(find_object("/std/thing"));
         p = clone_object("/std/thing");
 
-        clones("/std/thing")    --> ergibt ({ p })
-        clones("/std/thing", 0) --> ergibt ({ p })
-        clones("/std/thing", 1) --> ergibt ({ o })
-        clones("/std/thing", 2) --> ergibt ({ o, p })
+        clones("/std/thing")    --> returns ({ p })
+        clones("/std/thing", 0) --> returns ({ p })
+        clones("/std/thing", 1) --> returns ({ o })
+        clones("/std/thing", 2) --> returns ({ o, p })
 
-GESCHICHTE
-        Eingefuehrt in LDMud 3.2.8.
-        LDMud 3.2.9 fuehrte die dynamischen Kosten ein.
+HISTORY
+        Introduced in LDMud 3.2.8.
+        LDMud 3.2.9 added the dynamic cost.
+
+SEE ALSO
+        blueprint(E), clone_object(E), clonep(E)
