diff --git a/doc/efun/load_name b/doc/efun/load_name
index 2afbb61..365fca2 100644
--- a/doc/efun/load_name
+++ b/doc/efun/load_name
@@ -1,48 +1,50 @@
 SYNOPSIS
         string load_name()
-        string load_name(object|lwobject|string obj)
+        string load_name(object obj)
+        string load_name(lwobject obj)
+        string load_name(string obj)
 
-BESCHREIBUNG
-        Die Funktion liefert den Namen, mit dem <obj> geladen wurde. <obj>
-        kann direkt als normales oder leichtgewichtiges Objekt oder als String
-        mit dem Namen des Objektes angegeben werden.
+DESCRIPTION
+        Return the load name for the object <obj> which may be a regular
+        or lightweight object or the name of an object.
 
-        Wenn <obj> ein Clon oder ein leichtgewichtiges Objekt ist, liefert die
-        Funktion den Namen des Blueprints.
-        Wenn <obj> ein Blueprint ist, liefert die Funktion den Namen des Files,
-        aus dem der Blueprint kompiliert wurde.
+        If <obj> is a clone or a lightweight object, return the
+        load_name() of <obj>'s blueprint.
+        If <obj> is a blueprint, return the filename from which the
+        blueprint was compiled.
 
-        Wenn <obj> ueber seinen Namen angegeben wurde, aber nicht / nicht mehr
-        existiert, generiert die Funktion den Namen, wie er sein muesste und
-        gibt diesen zurueck. Wenn der angegebene Name ungueltig ist, liefert
-        die Funktion 0.
+        If <obj> is given by name but not/no longer existing, the
+        function synthesizes the load name as it should be and returns
+        that. If the given name is illegal, the function returns 0.
 
-        Als Spezialfall liefert die Funktion 0, wenn <ob> 0 ist.
+        As a special case, if <ob> is 0, the function returns 0.
 
-        Fuer virtuelle Objekte liefert load_name() den originalen Ladenamen
-        des Objekts, welches der virtuelle Compiler erzeugte.
+        For virtual objects this efun returns the original load_name of the
+        object created by the virtual compiler.
 
-        Wird <obj> nicht angegeben, wird der Name fuer das momentan gueltige
-        Objekt angegeben.
+        If <obj> is omitted, the name for the current object is returned.
 
-        Im Gegensatz zum object_name() kann der load_name() nicht durch
-        rename_object() oder einen VC veraendert werden. Ist ein <obj> jedoch
-        einem replace_program() unterworfen, spiegelt der load_name() nicht
-        mehr das effektive Verhalten des Objekts wider.
+        In contrast to the object_name(), the load name can not be changed
+        by with rename_object() or a VC. However, if an object uses 
+        replace_program() the load name no longer reflects the actual 
+        behaviour of an object.
 
-BEISPIELE
+        The returned name starts with a '/', unless the driver is running
+        in COMPAT mode.
+
+EXAMPLES
         object o;
         o = clone_object("/std/thing");
-        write(load_name(o));  --> liefert "/std/thing" in !Compat Modus
-                                  und "std/thing"  im Compat Modus
-        write(load_name("/std/thing"));  --> gleich wie oben
-        write(load_name("/std/thing#4n5")); --> liefert 0
+        write(load_name(o));  --> writes "/std/thing" in !compat mode
+                                     and "std/thing"  in compat mode
+        write(load_name("/std/thing"));  --> same as above
+        write(load_name("/std/thing#4n5")); --> writes 0
 
-GESCHICHTE
-        Eingefuehrt in LDMud 3.2.6.
-        Strings als Argumente sind moeglich seit 3.2.8.
-        0 ist zulaessig seit 3.2.9.
+HISTORY
+        Introduced in LDMud 3.2.6.
+        Strings are accepted as arguments since 3.2.8.
+        0 is accepted as argument since 3.2.9.
 
-SIEHE AUCH
+SEE ALSO
         clone_object(E), clonep(E), object_name(E), load_object(E),
         replace_program(E), program_name(E), present_clone(E)
