diff --git a/doc/efun/clone_object b/doc/efun/clone_object
index f622bef..3b6734f 100644
--- a/doc/efun/clone_object
+++ b/doc/efun/clone_object
@@ -1,23 +1,71 @@
-SYNOPSIS:
+SYNOPSIS
         object clone_object(string name)
+        object clone_object(object template)
 
-DESCRIPTION:
-        Clone a new object from definition name, and give it a new unique
-	name. Return the new object.
-        
-        The original, called blue print, used for cloning, should not be
-	used in the game, only be used for cloning. The cloned objects
-	contain only the data but the blue print also the function code.
-	The blue print is the one without a unique number at the end of
-	the object's object_name(). The clone_object() function never
-	returns a blue print.
-        
-        Note that the pathname must be complete, which means there are no
-        relative paths allowed.
+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.
 
-EXAMPLE:
-        object torch;
-        torch = clone_object("/obj/torch");
+        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.
 
-SEE ALSO:
-        destruct(E), move_object(E), uids(C)
+        Den Blueprint erkennt man daran, dass er keine Nummer im Objektnamen
+        traegt. clone_object() liefert niemals einen Blueprint zurueck.
+
+        Wenn der Blueprint existiert und einen heart_beat() aufweist, schaltet
+        clone_object() diesen aus.
+
+        Die Pfadangabe muss komplett sein. Relative Pfade sind nicht gestattet.
+        Wenn strikte EUIDs gefordert werden, muss das clonende Objekt eine
+        EUID != 0 haben.
+
+
+        -- Variablen Initialisierung --
+
+        Allgemein werden die Variablen in Blueprints und Clones gleichermassen
+        durch Aufruf der internen lfun __INIT() initialisiert.
+
+        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.
+
+
+BEISPIELE
+        // Clone eine Fackel (Name des Files nicht im Compat Format)
+        object fackel;
+        fackel = clone_object("/obj/fackel");
+
+        // Clone zwei Schluessel (Name des Files im Compat Format)
+        object key1, key2;
+        key1 = clone_object(load_object("obj/key"));
+        key2 = clone_object(key1);
+
+        // Create a specialized weapons blueprint.
+        --- std/weapon.c: --- 
+        #pragma share_variables
+        int weapon_class = 1;
+
+        --- broadsword.c: ---
+        inherit "/std/weapon";
+
+        int create() {
+            weapon_class = 2;
+            replace_program("/std/weapon");
+        }
+
+
+GESCHICHTE
+        Modifiziert in LDMud 3.2.6: es werden auch Objekte als Argument
+            akzeptiert.
+        LDMud 3.3.378 fuehrte das pragma share_variables ein.
+
+SIEHE AUCH
+        blueprint(E), clonep(E), destruct(E), clones(E), load_name(E),
+        load_object(E), move_object(E), uids(C), program_name(E), pragma(LPC)
