diff --git a/doc/efun/clone_object b/doc/efun/clone_object
index 3b6734f..dd48ec2 100644
--- a/doc/efun/clone_object
+++ b/doc/efun/clone_object
@@ -1,48 +1,55 @@
 SYNOPSIS
-        object clone_object(string name)
-        object clone_object(object template)
+        object clone_object(string name, ...)
+        object clone_object(object template, ...)
 
-BESCHREIBUNG
-        Clont ein neues Objekt aus der Definiton <name> oder alternativ aus
-        dem Objekt <template>. In beiden Faellen wird dem Clon ein
-        individueller Name zugeordnet, dann wird der Clon zurueck gegeben.
+DESCRIPTION
+        Clone a new object from definition <name>, or alternatively from
+        the object <template>. In both cases, the new object is given
+        an unique name and returned.
 
-        Das Original, Blueprint genannt, wird nur fuer das Clonen verwendet
-        und sollte deshalb nicht im Spiel genutzt werden. Die geclonten
-        Objekte enthalten nur Daten, der Blueprint hingegen auch den
-        Funktionscode.
+        The original used for cloning, called blueprint, should not be
+        used in the system, just for cloning. The cloned objects
+        contain only the data but the blueprint also the function code.
+        The blueprint is the one without a unique number at the end of
+        the object's name. The clone_object() function never
+        returns a blue print.
 
-        Den Blueprint erkennt man daran, dass er keine Nummer im Objektnamen
-        traegt. clone_object() liefert niemals einen Blueprint zurueck.
+        If the <name> or <template> designates a cloned object itself,
+        the system looks up the blueprint object _by name_.
 
-        Wenn der Blueprint existiert und einen heart_beat() aufweist, schaltet
-        clone_object() diesen aus.
+        Any further arguments will be passed to the H_CREATE_CLONE
+        hook to initialize the cloned object.
 
-        Die Pfadangabe muss komplett sein. Relative Pfade sind nicht gestattet.
-        Wenn strikte EUIDs gefordert werden, muss das clonende Objekt eine
-        EUID != 0 haben.
+        If the blueprint exists and has a heart_beat(), clone_object()
+        turns it off.
+
+        Note that the pathname must be complete, which means there are no
+        relative paths allowed.
+
+        If strict euids are enforced, the cloning object must have
+        a non-zero euid.
 
 
-        -- Variablen Initialisierung --
+        -- Variable Initialization --
 
-        Allgemein werden die Variablen in Blueprints und Clones gleichermassen
-        durch Aufruf der internen lfun __INIT() initialisiert.
+        In general, variables are initialized for blueprints and clones alike
+        with a call to the internal lfun __INIT().
+        
+        However, if #pragma share_variables is in effect (either explicitely
+        given in the source or implicitly as runtime option), the values for
+        a clone's uninitialized variables are taken from the _current_
+        variables of the object's blueprint.
 
-        Ist allerdings das #pragma share_variables in Effekt (entweder
-        explizit im Objekt angegeben, oder als allgemeine Laufzeitoption),
-        werden die Werte fuer die Klonvariable aus den _aktuellen_ Variablen
-        der Blueprint kopiert.
-
-        Variablen ohne explizite Initialisierung sind hiervon unbetroffen und
-        werden stets auf 0 gesetzt.
+        In the absence of share_variables, variables without explicit
+        initializers are initialized to 0.
 
 
-BEISPIELE
-        // Clone eine Fackel (Name des Files nicht im Compat Format)
-        object fackel;
-        fackel = clone_object("/obj/fackel");
+EXAMPLES
+        // Clone a torch (filename in non-compat format)
+        object torch;
+        torch = clone_object("/obj/torch");
 
-        // Clone zwei Schluessel (Name des Files im Compat Format)
+        // Clone two keys (filename in compat format)
         object key1, key2;
         key1 = clone_object(load_object("obj/key"));
         key2 = clone_object(key1);
@@ -61,11 +68,11 @@
         }
 
 
-GESCHICHTE
-        Modifiziert in LDMud 3.2.6: es werden auch Objekte als Argument
-            akzeptiert.
-        LDMud 3.3.378 fuehrte das pragma share_variables ein.
+HISTORY
+        Modified in LDMud 3.2.6 to take an object as argument.
+        LDMud 3.3.378 consolidated the variable initialization with the
+        share_variables pragma.
 
-SIEHE AUCH
+SEE ALSO
         blueprint(E), clonep(E), destruct(E), clones(E), load_name(E),
         load_object(E), move_object(E), uids(C), program_name(E), pragma(LPC)
