diff --git a/doc/efun/include_list b/doc/efun/include_list
index 2c14554..d251be9 100644
--- a/doc/efun/include_list
+++ b/doc/efun/include_list
@@ -5,77 +5,79 @@
         string * include_list(object|lwobject ob)
         string * include_list(object|lwobject ob, int flags)
 
-BESCHREIBUNG
-        Diese Funktion liefert Informationen ueber alle Dateien, die bei der
-        Kompilierung von <ob> in dieses Objekt eingebunden wurden, inklusive
-        den Programmnamen von <ob>. Wird <ob> nicht angegeben, wird
-        standardmaessig das aktuelle Objekt verwendet.
 
-        Im resultierenden Array besteht die Information zu einem Includefile
-        aus drei Elementen:
-          - string [i+0]: der Name des Includefiles, wie er im Programm
-                          auftaucht, inklusive den Trennzeichen wie " " oder
-                          < >.
-          - string [i+1]: der absolute Dateipfad des Includefiles.
-          - int    [i+2]: die Tiefe der Inklusion (gewoehnlich 1, fuer
-                          verschachtelte Includes auch groesser als 1)
+DESCRIPTION
+        Return information about all files included into the compilation
+        of <ob>, including <ob> program's own filename.
+        If <ob> is omitted, it defaults to the current object.
 
-        Der erste Eintrag im Resultat ist der Name des Programmes selbst in
-        [i+0], die anderen beiden Elemente [i+1] und [i+2] sind 0.
+        In the resulting array(s), the information for one include file takes
+        up three elements:
 
-        <flag> bezeichnet die Struktur des Ergebnisses:
-          - <flag> = INCLIST_FLAT (0, Standard):
-            Das Resultat ist ein flaches Array. Der erste Eintrag bezeichnet
-            <ob> selbst, die restlichen Eintraege bezeichnen alle Includefiles
-            in der Reihenfolge, in der sie auftreten.
-          - <flag> = INCLIST_TREE (1):
-            Das Resultat ist ein Array, dessen erster Eintrag das Objekt <ob>
-            selbst bezeichnet. Alle folgenden Eintraege bezeichnen die
-            Includefiles von <ob>. Wenn ein Includefile von <ob> selbst keine
-            Includefiles hat, wird seine Information direkt im Array
-            gespeichert. Fuer verschachtelte Includefiles wird ein Untervektor
-            erzeugt und dann in diesem Untervektor abgespeichert (wiederum
-            in [i+0], [i+1] und [i+2] sind 0). Diese Untervektoren haben
-            die gleiche Struktur wie das Resultatarray.
+          string [i+0]: the name as it appeared in the program, including the
+                        delimiters ("" or <>, resp.).
+          string [i+1]: the absolute filename of the include file.
+          int    [i+2]: the inclusion depth (usually 1, more for nested
+                        includes).
 
-        Wenn ein Objekt inklusive <ob> einem replace_program() unterworfen
-        war, spiegeln die gelieferten Dateinamen das effektiv aktive Programm
-        wider.
+        The first entry in the result is the program's own name in [i+0],
+        the other two elements [i+1] and [i+2] are 0.
 
-        Die Includepfade, die geliefert werden, beginnen immer mit '/'
-        (absolute Pfade), auch wenn der Treiber im COMPAT Modus laeuft.
-        Trotzdem beginnt der tatsaechliche Dateiname nicht mit einem '/',
-        wenn der Treiber im COMPAT Modus laeuft.
+        The <flag> determines the exact structure of the result:
+
+        <flag> = INCLIST_FLAT (0, default):
+          The result is a flat array of the entries, starting the with
+          the entry for <ob> itself, followed by the entries for all
+          included files in the order they were encountered.
+
+        <flag> = INCLIST_TREE (1):
+          The result is an array starting the with the entry
+          of <ob> itself, followed by the entries for all directly included
+          files. If one of the included files has no nested includes by itself,
+          then its information will be stored directly in the array.
+          If one included file has includes by itself, a subvector will
+          be created and stored in the result vector (again in [i+0], with
+          [i+1] and [i+2] being 0). These subvectors have the same
+          structure as the main result vector.
+
+        If objects, including <ob>, had been undergone a replace_program(),
+        the returned filenames will reflect the actual active program.
+
+        The returned proper include filenames always begin with '/' (absolute
+        path), even when the parser runs in COMPAT mode. The filename of
+        the object itself however does not begin with a '/' in COMPAT
+        mode.
 
 
-BEISPIELE
-        Dieser Code erzeugt (mit /sys als Includeverzeichnis des Systems):
+EXAMPLES
+        Given this source code (and /sys as system include directory):
 
-            a.c:  #include "b.h"
-                  #include <c.h>
-            b.h:  #include "d.h"
-            c.h:  #define BAR
-            d.h:  #define FOO
+          a.c:  #include "b.h"
+                #include <c.h>
+          b.h:  #include "d.h"
+          c.h:  #define BAR
+          d.h:  #define FOO
 
-        Die Efun liefert drei Resultate:
+        the efun will give these results:
 
-            include_list(a, INCLIST_FLAT)
+          include_list(a, INCLIST_FLAT)
             -> ({ "a.c", 0, 0
                 , "\"b.h\"", "/.../b.h", 1
                 , "\"d.h\"", "/.../d.h", 2
                 , "<c.h>",   "/sys/c.h", 1
                })
 
-             include_list(a, INCLIST_TREE)
-             -> ({ "a.c", 0, 0
-                 , ({ "\"b.h\"", "/.../b.h", 1
-                    , "\"d.h\"", "/.../d.h", 2
-                   }), 0, 0
-                 , "<c.h>",   "/sys/c.h", 1
-                 })
+          include_list(a, INCLIST_TREE)
+            -> ({ "a.c", 0, 0
+                , ({ "\"b.h\"", "/.../b.h", 1
+                   , "\"d.h\"", "/.../d.h", 2
+                  }), 0, 0
+                , "<c.h>",   "/sys/c.h", 1
+               })
 
-GESCHICHTE
-        Eingefuehrt in LDMud 3.2.9, 3.3.128.
 
-SIEHE AUCH
+HISTORY
+        Implemented in LDMud 3.2.9/3.3.128.
+
+SEE ALSO
         debug_info(E), inherit_list(E)
