diff --git a/doc/efun/variable_list b/doc/efun/variable_list
index c57822f..0991f9c 100644
--- a/doc/efun/variable_list
+++ b/doc/efun/variable_list
@@ -1,59 +1,57 @@
-GESCHUETZT
-SYNOPSIS
+NAME
         #include <functionlist.h>
         #include <lpctypes.h>
 
-        mixed *variable_list(object|lwobject obj,
-                             int flags = RETURN_FUNCTION_NAME)
+        mixed * variable_list(object ob|lwobject, int flags)
 
-BESCHREIBUNG
-        Liefert ein Array mit Informationen ueber die Variablen von <obj>.
-        Fuer jede Variable werden 1 bis 4 Werte in diesem Array gespeichert,
-        abhaengig von <flags>. Die Resultate werden in dieser Reihenfolge
-        im Array abgespeichert:
-          - der Name der Variablen
-          - die Flags der Variablen (siehe weiter unten)
-          - der Rueckgabetyp (gemaess <lpctypes.h>)
-          - der Wert der Variablen
+DESCRIPTION
+        Return an array with information about <ob>s variables. For
+        every variable, 1 to 3 values (depending on <flags>) are
+        stored in the result array conveying in this order:
+          - the name of the variable
+          - the variable flags (see below)
+          - the return type (listed in <lpctypes.h>)
+          - the value of the variable
 
-        <obj> kann als Objekt oder als Dateinamen uebergeben werden. Im
-        zweiten Fall versucht variable_list() nicht, das Objekt vor der
-        Verarbeitung zu laden.
+        <ob> may be given as true object or as a filename. In the latter
+        case, the efun does not try to load the object before proceeding.
 
-        Wenn <obj> nicht das aufrufende Objekt ist und der Wert der Variablen
-        abgefragt wird, erzeugt dies eine Schutzverletzung ("variable_list",
-        <obj>).
+        If <ob> is not the current object and the value of the variable is
+        requested, a privilege_violation ("variable_list", <ob>) occurs.
 
-        Mit <flags> wird festgelegt, welche Informationen ueber welche
-        Variablen abgefragt werden. Folgende Flags aus <functionlist.h>
-        koennen mit binaerem Oder kombiniert werden:
+        <flags> determines both which information is returned for every
+        variable, and which variables should be considered at all.
+        Its value is created by bin-or'ing together following flags from
+        <functionlist.h>:
 
-        Auswahl der gesammelten Information:
-            RETURN_FUNCTION_NAME    liefert den Namen der Variablen
-            RETURN_FUNCTION_FLAGS   liefert die Flags der Variablen (s. unten)
-            RETURN_FUNCTION_TYPE    liefert den Rueckgabetyp
-            RETURN_VARIABLE_VALUE   liefert den Wert der Variablen
+          Control of returned information:
+            RETURN_FUNCTION_NAME    include the variable name
+            RETURN_FUNCTION_FLAGS   include the variable flags
+            RETURN_FUNCTION_TYPE    include the variable type as an integer
+            RETURN_FUNCTION_LPCTYPE include the variable type as an lpctype
+            RETURN_VARIABLE_VALUE   include the variable value
 
-        Auswahl der Variablen, die ausgewertet werden:
-            NAME_INHERITED        schliesst geerbte Variablen aus
-            TYPE_MOD_STATIC       schliesst "static" deklarierte Variablen aus
-            TYPE_MOD_NOSAVE       schliesst "nosave" deklarierte Variablen aus
-            TYPE_MOD_PRIVATE      schliesst "private" deklarierte Variablen aus
-            TYPE_MOD_PROTECTED    schliesst "protected" deklarierte Variablen
-                                  aus
-            NAME_HIDDEN           enthaelt Variablen, die geerbt wurden.
+          Control of listed variables:
+            NAME_INHERITED      don't list if defined by inheritance
+            TYPE_MOD_STATIC ==
+            TYPE_MOD_NOSAVE     don't list if nosave ('static') variable
+            TYPE_MOD_PRIVATE    don't list if private
+            TYPE_MOD_PROTECTED  don't list if protected
+            NAME_HIDDEN         don't list if not visible through inheritance
 
-        Die Flags der Variablen koennen die Auswahl-Flags enthalten und
-        zusaeztlich folgende Werte:
-            TYPE_MOD_VIRTUAL      die Variable wurde virtuell geerbt
-            TYPE_MOD_NO_MASGK     die Variable ist "nomask" deklariert
-            TYPE_MOD_PUBLIC       die Variable ist "public" deklariert
+        The 'flags' information consists of the bin-or of the list control
+        flags given above, plus the following:
 
-        All diese Flags sind in <functionlist.h>, die Rueckgabewerte in
-        <lpctypes.h> definiert.
+            TYPE_MOD_VIRTUAL    variable is inherited virtually
+            TYPE_MOD_NO_MASK    variable is nomask
+            TYPE_MOD_PUBLIC     variable is public
 
-GESCHICHTE
-        Eingefuehrt in LDMud 3.2.10.
+        All these flags are defined in <functionlist.h>, the 
+        return types are defined in <lpctypes.h>.
 
-SIEHE AUCH
+HISTORY
+        Introduced in LDMud 3.2.10.
+        LDMud 3.6.7 introduced RETURN_FUNCTION_LPCTYPE.
+
+SEE ALSO
         inherit_list(E), functionlist(E), variable_exists(E)
